Apinizer Logları için Tablo Oluşturma Komutları
Bu sayfadaki DDL komutları, Apinizer'ın varsayılan tablo adlarını (log_ApiProxyTraffic, log_PolicyCapture, log_AuditEvent, log_Application, log_UnsentMessage, log_TokenTraffic, log_LoginLog) ve şemasız tanım kullanır.
Özel şema veya özel tablo adı tercih ediyorsanız bağlantı tanımındaki Log Hedefi Olarak Kullanım — Tablo Şeması bölümünden yapılandırabilirsiniz. DDL'deki tablo adını değiştirebilir veya şema ön eki ekleyebilirsiniz; ancak kolon adları ve veri tipleri birebir aynı kalmalıdır — aksi halde log kayıtları INSERT sırasında "kolon bulunamadı" hatasıyla başarısız olur.
Özellikle Oracle'da küçük/büyük harf duyarlı (case-sensitive) tablo adları kullanıyorsanız (örn. CREATE TABLE "HR"."logtablosu") bağlantı tanımında tablo adını çift tırnak içinde girmeniz gerekir.
Detay için Veritabanı Bağlantısı sayfasına bakın.
Apinizer, DB Connector ile trafik ve denetim kayıtlarını ilişkisel veritabanlarında saklayabilir. Aşağıdaki tablolar, desteklenen her veritabanı tipi için uygun veri tipleriyle hazırlanmıştır.
Kolon adları tüm veritabanı tiplerinde aynıdır (snake_case). Sadece veri tipleri veritabanına göre farklılık gösterir.
API Proxy Trafik Logu
API Proxy üzerinden geçen tüm HTTP trafiğinin kaydedildiği ana tablodur.
Aşağıdaki CREATE TABLE komutu yeni kurulumlar içindir ve AI Gateway, MCP Gateway, A2A Gateway, yönlendirme teşhisi, outbound MCP/A2A çağrı denetimi ile politika çalışma süreleri kolonları dahil tüm kolonları içerir — ayrıca bir ALTER çalıştırmanız gerekmez.
Mevcut bir kurulumu yükseltiyorsanız bu komutu çalıştırmayın; tablonuz zaten var. Geçtiğiniz her sürümün ALTER TABLE scriptini sırasıyla çalıştırın:
- 2026.04.x sürümünden geliyorsanız: önce 2026.09.0 — Log Tablosu ALTER Scriptleri, ardından 2026.09.1 — Log Tablosu ALTER Scriptleri. Kümülatif 2026.09.0 scripti dört outbound MCP/A2A denetim kolonunu zaten oluşturduğu için 2026.09.1 sayfasında yalnızca
policy_exec_timeskolonunu ekleyin. - 2026.09.0 sürümünden geliyorsanız: yalnızca 2026.09.1 — Log Tablosu ALTER Scriptleri. Tablonuzda dört outbound MCP/A2A denetim kolonu zaten varsa yalnızca
policy_exec_timeskolonunu ekleyin — var olan bir kolonu yeniden eklemek hata verir.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_ApiProxyTraffic (
id VARCHAR2(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR2(255),
environment_id VARCHAR2(255),
project_id VARCHAR2(255),
application_id VARCHAR2(255),
application_name VARCHAR2(255),
api_proxy_id VARCHAR2(255),
api_proxy_name VARCHAR2(255),
enum_api_type VARCHAR2(255),
proxy_relative_path VARCHAR2(255),
proxy_method_id VARCHAR2(255),
proxy_method_name VARCHAR2(255),
x_forwarded_for VARCHAR2(255),
username_or_key VARCHAR2(255),
req_context_path VARCHAR2(255),
req_remote_addr VARCHAR2(255),
req_http_method VARCHAR2(255),
req_content_type VARCHAR2(255),
req_path_info VARCHAR2(255),
req_query_string VARCHAR2(255),
req_remote_user VARCHAR2(255),
req_session_id VARCHAR2(255),
req_request_uri VARCHAR2(255),
req_char_encoding VARCHAR2(255),
req_content_length NUMBER(10),
req_protocol VARCHAR2(255),
req_scheme VARCHAR2(255),
req_server_name VARCHAR2(255),
req_server_port NUMBER(10),
req_remote_host VARCHAR2(255),
req_remote_port NUMBER(10),
req_local_name VARCHAR2(255),
req_local_addr VARCHAR2(255),
req_local_port NUMBER(10),
from_client_ro_param CLOB,
from_client_ro_header CLOB,
from_client_ro_body CLOB,
to_backend_param CLOB,
to_backend_header CLOB,
to_backend_body CLOB,
routing_address VARCHAR2(255),
routing_retry_count NUMBER(10),
routing_failover_cnt NUMBER(10),
from_backend_ro_header CLOB,
from_backend_ro_body CLOB,
to_client_header CLOB,
to_client_body CLOB,
time_req_pipeline NUMBER(10),
time_resp_pipeline NUMBER(10),
time_routing_total NUMBER(10),
time_api_proxy_total NUMBER(10),
size_request_total NUMBER(10),
size_response_total NUMBER(10),
cache_hit NUMBER(1),
status_code NUMBER(10),
error_type VARCHAR2(255),
parent_error_type VARCHAR2(255),
result_type VARCHAR2(255),
location_lat NUMBER,
location_lon NUMBER,
is_canary_request NUMBER(1),
canary_routing_status VARCHAR2(255),
mirror_count NUMBER(10),
mirror_success_count NUMBER(10),
mirror_failure_count NUMBER(10),
mirror_total_duration NUMBER(19),
mirror_addresses CLOB,
ai_provider VARCHAR2(64),
ai_model VARCHAR2(128),
ai_token_input NUMBER(19),
ai_token_output NUMBER(19),
ai_token_cached NUMBER(19),
ai_cost_micro NUMBER(19),
ai_first_token_ms NUMBER(19),
ai_tpot_ms NUMBER(19),
ai_total_latency_ms NUMBER(19),
ai_semantic_cache_hit NUMBER(1),
ai_guardrail_hit VARCHAR2(64),
ai_pii_detected NUMBER(1),
ai_finish_reason VARCHAR2(64),
ai_streaming NUMBER(1),
ai_tenant_credential_id VARCHAR2(64),
ai_trace_id VARCHAR2(64),
ai_failover_from VARCHAR2(64),
ai_cost_input_micro NUMBER(19),
ai_cost_output_micro NUMBER(19),
ai_cost_cached_micro NUMBER(19),
mcp_tool_name VARCHAR2(128),
mcp_jsonrpc_id VARCHAR2(64),
ai_deployment_type VARCHAR2(32),
ai_guardrail_total_ms NUMBER(19),
ai_inference_ms NUMBER(19),
ai_overhead_ms NUMBER(19),
routing_failure_reason VARCHAR2(64),
routing_confidence VARCHAR2(16),
routing_exception_class VARCHAR2(255),
routing_exception_detail VARCHAR2(256),
rd_selection_ns NUMBER(19),
rd_dns_ns NUMBER(19),
rd_tcp_connect_ns NUMBER(19),
rd_tls_handshake_ns NUMBER(19),
rd_ttfb_ns NUMBER(19),
rd_body_read_ns NUMBER(19),
rd_pool_wait_ns NUMBER(19),
upstream_status_code NUMBER(5),
upstream_ip_port VARCHAR2(64),
connection_reused NUMBER(1),
ttfb_reached NUMBER(1),
gateway_worker VARCHAR2(128),
pool_leased NUMBER(5),
pool_pending NUMBER(5),
pool_available NUMBER(5),
pool_max NUMBER(5),
cfg_connect_timeout NUMBER(10),
cfg_read_timeout NUMBER(10),
cfg_conn_req_timeout NUMBER(10),
client_write_ms NUMBER(10),
a2a_task_id VARCHAR2(64),
a2a_context_id VARCHAR2(128),
a2a_task_state VARCHAR2(32),
ai_quota_soft_cap_hit NUMBER(10),
ai_quota_alert_hit NUMBER(1),
ai_guardrail_category VARCHAR2(64),
ai_guardrail_verdict VARCHAR2(32),
mcp_tool_names_out VARCHAR2(256),
mcp_tool_call_count_out NUMBER(10),
a2a_skill_names_out VARCHAR2(256),
a2a_agent_call_count_out NUMBER(10),
policy_exec_times VARCHAR2(4000)
);
CREATE TABLE log_ApiProxyTraffic (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP NULL,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
project_id VARCHAR(255),
application_id VARCHAR(255),
application_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
enum_api_type VARCHAR(255),
proxy_relative_path VARCHAR(255),
proxy_method_id VARCHAR(255),
proxy_method_name VARCHAR(255),
x_forwarded_for VARCHAR(255),
username_or_key VARCHAR(255),
req_context_path VARCHAR(255),
req_remote_addr VARCHAR(255),
req_http_method VARCHAR(255),
req_content_type VARCHAR(255),
req_path_info VARCHAR(255),
req_query_string VARCHAR(255),
req_remote_user VARCHAR(255),
req_session_id VARCHAR(255),
req_request_uri VARCHAR(255),
req_char_encoding VARCHAR(255),
req_content_length INT,
req_protocol VARCHAR(255),
req_scheme VARCHAR(255),
req_server_name VARCHAR(255),
req_server_port INT,
req_remote_host VARCHAR(255),
req_remote_port INT,
req_local_name VARCHAR(255),
req_local_addr VARCHAR(255),
req_local_port INT,
from_client_ro_param TEXT,
from_client_ro_header TEXT,
from_client_ro_body LONGTEXT,
to_backend_param TEXT,
to_backend_header TEXT,
to_backend_body LONGTEXT,
routing_address VARCHAR(255),
routing_retry_count INT,
routing_failover_cnt INT,
from_backend_ro_header TEXT,
from_backend_ro_body LONGTEXT,
to_client_header TEXT,
to_client_body LONGTEXT,
time_req_pipeline INT,
time_resp_pipeline INT,
time_routing_total INT,
time_api_proxy_total INT,
size_request_total INT,
size_response_total INT,
cache_hit BOOLEAN,
status_code INT,
error_type VARCHAR(255),
parent_error_type VARCHAR(255),
result_type VARCHAR(255),
location_lat DOUBLE,
location_lon DOUBLE,
is_canary_request BOOLEAN,
canary_routing_status VARCHAR(255),
mirror_count INT,
mirror_success_count INT,
mirror_failure_count INT,
mirror_total_duration BIGINT,
mirror_addresses TEXT,
ai_provider VARCHAR(64),
ai_model VARCHAR(128),
ai_token_input BIGINT,
ai_token_output BIGINT,
ai_token_cached BIGINT,
ai_cost_micro BIGINT,
ai_first_token_ms BIGINT,
ai_tpot_ms BIGINT,
ai_total_latency_ms BIGINT,
ai_semantic_cache_hit BOOLEAN,
ai_guardrail_hit VARCHAR(64),
ai_pii_detected BOOLEAN,
ai_finish_reason VARCHAR(64),
ai_streaming BOOLEAN,
ai_tenant_credential_id VARCHAR(64),
ai_trace_id VARCHAR(64),
ai_failover_from VARCHAR(64),
ai_cost_input_micro BIGINT,
ai_cost_output_micro BIGINT,
ai_cost_cached_micro BIGINT,
mcp_tool_name VARCHAR(128),
mcp_jsonrpc_id VARCHAR(64),
ai_deployment_type VARCHAR(32),
ai_guardrail_total_ms BIGINT,
ai_inference_ms BIGINT,
ai_overhead_ms BIGINT,
routing_failure_reason VARCHAR(64),
routing_confidence VARCHAR(16),
routing_exception_class VARCHAR(255),
routing_exception_detail VARCHAR(256),
rd_selection_ns BIGINT,
rd_dns_ns BIGINT,
rd_tcp_connect_ns BIGINT,
rd_tls_handshake_ns BIGINT,
rd_ttfb_ns BIGINT,
rd_body_read_ns BIGINT,
rd_pool_wait_ns BIGINT,
upstream_status_code SMALLINT,
upstream_ip_port VARCHAR(64),
connection_reused BOOLEAN,
ttfb_reached BOOLEAN,
gateway_worker VARCHAR(128),
pool_leased SMALLINT,
pool_pending SMALLINT,
pool_available SMALLINT,
pool_max SMALLINT,
cfg_connect_timeout INT,
cfg_read_timeout INT,
cfg_conn_req_timeout INT,
client_write_ms INT,
a2a_task_id VARCHAR(64),
a2a_context_id VARCHAR(128),
a2a_task_state VARCHAR(32),
ai_quota_soft_cap_hit INT,
ai_quota_alert_hit BOOLEAN,
ai_guardrail_category VARCHAR(64),
ai_guardrail_verdict VARCHAR(32),
mcp_tool_names_out VARCHAR(256),
mcp_tool_call_count_out INT,
a2a_skill_names_out VARCHAR(256),
a2a_agent_call_count_out INT,
policy_exec_times VARCHAR(4000)
);
CREATE TABLE log_ApiProxyTraffic (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
project_id VARCHAR(255),
application_id VARCHAR(255),
application_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
enum_api_type VARCHAR(255),
proxy_relative_path VARCHAR(255),
proxy_method_id VARCHAR(255),
proxy_method_name VARCHAR(255),
x_forwarded_for VARCHAR(255),
username_or_key VARCHAR(255),
req_context_path VARCHAR(255),
req_remote_addr VARCHAR(255),
req_http_method VARCHAR(255),
req_content_type VARCHAR(255),
req_path_info VARCHAR(255),
req_query_string VARCHAR(255),
req_remote_user VARCHAR(255),
req_session_id VARCHAR(255),
req_request_uri VARCHAR(255),
req_char_encoding VARCHAR(255),
req_content_length INTEGER,
req_protocol VARCHAR(255),
req_scheme VARCHAR(255),
req_server_name VARCHAR(255),
req_server_port INTEGER,
req_remote_host VARCHAR(255),
req_remote_port INTEGER,
req_local_name VARCHAR(255),
req_local_addr VARCHAR(255),
req_local_port INTEGER,
from_client_ro_param TEXT,
from_client_ro_header TEXT,
from_client_ro_body TEXT,
to_backend_param TEXT,
to_backend_header TEXT,
to_backend_body TEXT,
routing_address VARCHAR(255),
routing_retry_count INTEGER,
routing_failover_cnt INTEGER,
from_backend_ro_header TEXT,
from_backend_ro_body TEXT,
to_client_header TEXT,
to_client_body TEXT,
time_req_pipeline INTEGER,
time_resp_pipeline INTEGER,
time_routing_total INTEGER,
time_api_proxy_total INTEGER,
size_request_total INTEGER,
size_response_total INTEGER,
cache_hit BOOLEAN,
status_code INTEGER,
error_type VARCHAR(255),
parent_error_type VARCHAR(255),
result_type VARCHAR(255),
location_lat DOUBLE PRECISION,
location_lon DOUBLE PRECISION,
is_canary_request BOOLEAN,
canary_routing_status VARCHAR(255),
mirror_count INTEGER,
mirror_success_count INTEGER,
mirror_failure_count INTEGER,
mirror_total_duration BIGINT,
mirror_addresses TEXT,
ai_provider VARCHAR(64),
ai_model VARCHAR(128),
ai_token_input BIGINT,
ai_token_output BIGINT,
ai_token_cached BIGINT,
ai_cost_micro BIGINT,
ai_first_token_ms BIGINT,
ai_tpot_ms BIGINT,
ai_total_latency_ms BIGINT,
ai_semantic_cache_hit BOOLEAN,
ai_guardrail_hit VARCHAR(64),
ai_pii_detected BOOLEAN,
ai_finish_reason VARCHAR(64),
ai_streaming BOOLEAN,
ai_tenant_credential_id VARCHAR(64),
ai_trace_id VARCHAR(64),
ai_failover_from VARCHAR(64),
ai_cost_input_micro BIGINT,
ai_cost_output_micro BIGINT,
ai_cost_cached_micro BIGINT,
mcp_tool_name VARCHAR(128),
mcp_jsonrpc_id VARCHAR(64),
ai_deployment_type VARCHAR(32),
ai_guardrail_total_ms BIGINT,
ai_inference_ms BIGINT,
ai_overhead_ms BIGINT,
routing_failure_reason VARCHAR(64),
routing_confidence VARCHAR(16),
routing_exception_class VARCHAR(255),
routing_exception_detail VARCHAR(256),
rd_selection_ns BIGINT,
rd_dns_ns BIGINT,
rd_tcp_connect_ns BIGINT,
rd_tls_handshake_ns BIGINT,
rd_ttfb_ns BIGINT,
rd_body_read_ns BIGINT,
rd_pool_wait_ns BIGINT,
upstream_status_code SMALLINT,
upstream_ip_port VARCHAR(64),
connection_reused BOOLEAN,
ttfb_reached BOOLEAN,
gateway_worker VARCHAR(128),
pool_leased SMALLINT,
pool_pending SMALLINT,
pool_available SMALLINT,
pool_max SMALLINT,
cfg_connect_timeout INTEGER,
cfg_read_timeout INTEGER,
cfg_conn_req_timeout INTEGER,
client_write_ms INTEGER,
a2a_task_id VARCHAR(64),
a2a_context_id VARCHAR(128),
a2a_task_state VARCHAR(32),
ai_quota_soft_cap_hit INTEGER,
ai_quota_alert_hit BOOLEAN,
ai_guardrail_category VARCHAR(64),
ai_guardrail_verdict VARCHAR(32),
mcp_tool_names_out VARCHAR(256),
mcp_tool_call_count_out INTEGER,
a2a_skill_names_out VARCHAR(256),
a2a_agent_call_count_out INTEGER,
policy_exec_times VARCHAR(4000)
);
CREATE TABLE log_ApiProxyTraffic (
id NVARCHAR(255) PRIMARY KEY,
log_timestamp DATETIME2,
correlation_id NVARCHAR(255),
environment_id NVARCHAR(255),
project_id NVARCHAR(255),
application_id NVARCHAR(255),
application_name NVARCHAR(255),
api_proxy_id NVARCHAR(255),
api_proxy_name NVARCHAR(255),
enum_api_type NVARCHAR(255),
proxy_relative_path NVARCHAR(255),
proxy_method_id NVARCHAR(255),
proxy_method_name NVARCHAR(255),
x_forwarded_for NVARCHAR(255),
username_or_key NVARCHAR(255),
req_context_path NVARCHAR(255),
req_remote_addr NVARCHAR(255),
req_http_method NVARCHAR(255),
req_content_type NVARCHAR(255),
req_path_info NVARCHAR(255),
req_query_string NVARCHAR(255),
req_remote_user NVARCHAR(255),
req_session_id NVARCHAR(255),
req_request_uri NVARCHAR(255),
req_char_encoding NVARCHAR(255),
req_content_length INT,
req_protocol NVARCHAR(255),
req_scheme NVARCHAR(255),
req_server_name NVARCHAR(255),
req_server_port INT,
req_remote_host NVARCHAR(255),
req_remote_port INT,
req_local_name NVARCHAR(255),
req_local_addr NVARCHAR(255),
req_local_port INT,
from_client_ro_param NVARCHAR(MAX),
from_client_ro_header NVARCHAR(MAX),
from_client_ro_body NVARCHAR(MAX),
to_backend_param NVARCHAR(MAX),
to_backend_header NVARCHAR(MAX),
to_backend_body NVARCHAR(MAX),
routing_address NVARCHAR(255),
routing_retry_count INT,
routing_failover_cnt INT,
from_backend_ro_header NVARCHAR(MAX),
from_backend_ro_body NVARCHAR(MAX),
to_client_header NVARCHAR(MAX),
to_client_body NVARCHAR(MAX),
time_req_pipeline INT,
time_resp_pipeline INT,
time_routing_total INT,
time_api_proxy_total INT,
size_request_total INT,
size_response_total INT,
cache_hit BIT,
status_code INT,
error_type NVARCHAR(255),
parent_error_type NVARCHAR(255),
result_type NVARCHAR(255),
location_lat FLOAT,
location_lon FLOAT,
is_canary_request BIT,
canary_routing_status NVARCHAR(255),
mirror_count INT,
mirror_success_count INT,
mirror_failure_count INT,
mirror_total_duration BIGINT,
mirror_addresses NVARCHAR(MAX),
ai_provider NVARCHAR(64),
ai_model NVARCHAR(128),
ai_token_input BIGINT,
ai_token_output BIGINT,
ai_token_cached BIGINT,
ai_cost_micro BIGINT,
ai_first_token_ms BIGINT,
ai_tpot_ms BIGINT,
ai_total_latency_ms BIGINT,
ai_semantic_cache_hit BIT,
ai_guardrail_hit NVARCHAR(64),
ai_pii_detected BIT,
ai_finish_reason NVARCHAR(64),
ai_streaming BIT,
ai_tenant_credential_id NVARCHAR(64),
ai_trace_id NVARCHAR(64),
ai_failover_from NVARCHAR(64),
ai_cost_input_micro BIGINT,
ai_cost_output_micro BIGINT,
ai_cost_cached_micro BIGINT,
mcp_tool_name NVARCHAR(128),
mcp_jsonrpc_id NVARCHAR(64),
ai_deployment_type NVARCHAR(32),
ai_guardrail_total_ms BIGINT,
ai_inference_ms BIGINT,
ai_overhead_ms BIGINT,
routing_failure_reason NVARCHAR(64),
routing_confidence NVARCHAR(16),
routing_exception_class NVARCHAR(255),
routing_exception_detail NVARCHAR(256),
rd_selection_ns BIGINT,
rd_dns_ns BIGINT,
rd_tcp_connect_ns BIGINT,
rd_tls_handshake_ns BIGINT,
rd_ttfb_ns BIGINT,
rd_body_read_ns BIGINT,
rd_pool_wait_ns BIGINT,
upstream_status_code SMALLINT,
upstream_ip_port NVARCHAR(64),
connection_reused BIT,
ttfb_reached BIT,
gateway_worker NVARCHAR(128),
pool_leased SMALLINT,
pool_pending SMALLINT,
pool_available SMALLINT,
pool_max SMALLINT,
cfg_connect_timeout INT,
cfg_read_timeout INT,
cfg_conn_req_timeout INT,
client_write_ms INT,
a2a_task_id NVARCHAR(64),
a2a_context_id NVARCHAR(128),
a2a_task_state NVARCHAR(32),
ai_quota_soft_cap_hit INT,
ai_quota_alert_hit BIT,
ai_guardrail_category NVARCHAR(64),
ai_guardrail_verdict NVARCHAR(32),
mcp_tool_names_out NVARCHAR(256),
mcp_tool_call_count_out INT,
a2a_skill_names_out NVARCHAR(256),
a2a_agent_call_count_out INT,
policy_exec_times NVARCHAR(4000)
);
SQL Server bu tabloyu oluştururken şu uyarıyı verir: "the table has been created, but its maximum row size exceeds the allowed maximum of 8060 bytes". Bu beklenen bir durumdur ve bir hata değildir.
Tablodaki değişken uzunluklu NVARCHAR kolonların toplam bildirilen genişliği satır başına 8060 byte'lık in-row sınırını aşar; SQL Server 2005'ten beri bu kolonlar gerektiğinde otomatik olarak ROW_OVERFLOW_DATA sayfalarına taşınır ve satırda 24 byte'lık bir işaretçi bırakılır. Sabit uzunluklu kolonların toplamı (~287 byte) sınırın çok altında olduğu için INSERT işlemleri başarısız olmaz. Tek etki, aynı anda çok sayıda uzun metin alanı dolu olan satırlarda ek sayfa okuma/yazma maliyetidir.
Kolon genişliklerini bu uyarıyı susturacak kadar (tüm metin kolonları 64 karaktere) daraltmak, req_request_uri, req_query_string ve application_name gibi alanlarda veri kaybına yol açacağı için tercih edilmemiştir.
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| log_timestamp | Log kaydının oluşturulma zamanı |
| correlation_id | İsteğe özgü korelasyon kimliği; aynı istek zincirindeki kayıtları ilişkilendirir |
| environment_id | İsteğin işlendiği ortam kimliği |
| project_id | API'nin ait olduğu proje kimliği |
| application_id | İsteği yapan uygulamanın kimliği |
| application_name | İsteği yapan uygulamanın adı |
| api_proxy_id | İstek için kullanılan API Proxy kimliği |
| api_proxy_name | İstek için kullanılan API Proxy adı |
| enum_api_type | API tipi (REST, SOAP vb.) |
| proxy_relative_path | API Proxy göreli yolu |
| proxy_method_id | Eşleşen metot kimliği |
| proxy_method_name | Eşleşen metot adı |
| x_forwarded_for | İstemcinin gerçek IP adresi (proxy/yük dengeleyici zinciri) |
| username_or_key | Kimlik doğrulamada kullanılan kullanıcı adı veya API anahtarı |
| req_context_path | İstek bağlam yolu |
| req_remote_addr | Uzak adres |
| req_http_method | HTTP metodu (GET, POST, PUT vb.) |
| req_content_type | İsteğin içerik tipi |
| req_path_info | İstek yol bilgisi |
| req_query_string | İstek sorgu dizisi |
| req_remote_user | Uzak kullanıcı |
| req_session_id | Oturum kimliği |
| req_request_uri | İstek URI'si |
| req_char_encoding | İstek karakter kodlaması |
| req_content_length | İstek içerik uzunluğu (byte) |
| req_protocol | Protokol |
| req_scheme | Şema (http/https) |
| req_server_name | Sunucu adı |
| req_server_port | Sunucu portu |
| req_remote_host | Uzak host |
| req_remote_port | Uzak port |
| req_local_name | Yerel ad |
| req_local_addr | Yerel adres |
| req_local_port | Yerel port |
| from_client_ro_param | İstemciden gelen sorgu parametreleri (JSON) |
| from_client_ro_header | İstemciden gelen başlıklar (JSON) |
| from_client_ro_body | İstemciden gelen istek gövdesi |
| to_backend_param | Arka uca gönderilen sorgu parametreleri (JSON) |
| to_backend_header | Arka uca gönderilen başlıklar (JSON) |
| to_backend_body | Arka uca gönderilen istek gövdesi |
| routing_address | Yönlendirme yapılan arka uç adresi |
| routing_retry_count | Yeniden deneme sayısı |
| routing_failover_cnt | Yük devretme sayısı |
| from_backend_ro_header | Arka uçtan gelen yanıt başlıkları (JSON) |
| from_backend_ro_body | Arka uçtan gelen yanıt gövdesi |
| to_client_header | İstemciye gönderilen yanıt başlıkları (JSON) |
| to_client_body | İstemciye gönderilen yanıt gövdesi |
| time_req_pipeline | İstek pipeline süresi (ms) |
| time_resp_pipeline | Yanıt pipeline süresi (ms) |
| time_routing_total | Toplam yönlendirme süresi (ms) |
| time_api_proxy_total | Toplam API Proxy işlem süresi (ms) |
| size_request_total | İstek boyutu (byte) |
| size_response_total | Yanıt boyutu (byte) |
| cache_hit | Yanıtın önbellekten alınıp alınmadığı |
| status_code | HTTP yanıt kodu |
| error_type | Hata tipi |
| parent_error_type | Üst hata tipi |
| result_type | İşlem sonucu |
| location_lat | Coğrafi konum — enlem |
| location_lon | Coğrafi konum — boylam |
| is_canary_request | Canary yönlendirme olup olmadığı |
| canary_routing_status | Canary yönlendirme durumu |
| mirror_count | Yansıtma sayısı |
| mirror_success_count | Başarılı yansıtma sayısı |
| mirror_failure_count | Başarısız yansıtma sayısı |
| mirror_total_duration | Toplam yansıtma süresi (ms) |
| mirror_addresses | Yansıtma adresleri (JSON) |
| mcp_tool_names_out | Outbound isteklerde çağrılan farklı MCP tool adları (CSV, 256 karakterle sınırlı) |
| mcp_tool_call_count_out | Outbound MCP tool çağrılarının toplam sayısı (ham, sınırsız) |
| a2a_skill_names_out | Outbound isteklerde çağrılan farklı A2A skill/agent adları (CSV, 256 karakterle sınırlı) |
| a2a_agent_call_count_out | Outbound A2A agent çağrılarının toplam sayısı (ham, sınırsız) |
| policy_exec_times | Politika çalışma süreleri — sıra:tip:süre CSV; yalnızca log hedefinde ayar açıkken yazılır |
Önerilen İndeksler
Bu tablo, en yüksek hacimli log tablosudur. Aşağıdaki indeksler en sık kullanılan sorgu kalıplarını karşılar (uçtan uca izleme, zaman aralığı taramaları, proxy/proje bazlı filtreleme, hata analizi).
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id);
CREATE INDEX idx_apitraffic_timestamp ON log_ApiProxyTraffic(log_timestamp);
CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id);
CREATE INDEX idx_apitraffic_project ON log_ApiProxyTraffic(project_id);
CREATE INDEX idx_apitraffic_status ON log_ApiProxyTraffic(status_code);
CREATE INDEX idx_apitraffic_result ON log_ApiProxyTraffic(result_type);
CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id);
CREATE INDEX idx_apitraffic_timestamp ON log_ApiProxyTraffic(log_timestamp);
CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id);
CREATE INDEX idx_apitraffic_project ON log_ApiProxyTraffic(project_id);
CREATE INDEX idx_apitraffic_status ON log_ApiProxyTraffic(status_code);
CREATE INDEX idx_apitraffic_result ON log_ApiProxyTraffic(result_type);
CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id);
CREATE INDEX idx_apitraffic_timestamp ON log_ApiProxyTraffic(log_timestamp);
CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id);
CREATE INDEX idx_apitraffic_project ON log_ApiProxyTraffic(project_id);
CREATE INDEX idx_apitraffic_status ON log_ApiProxyTraffic(status_code);
CREATE INDEX idx_apitraffic_result ON log_ApiProxyTraffic(result_type);
-- Partitioning olmadan:
CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id);
CREATE INDEX idx_apitraffic_timestamp ON log_ApiProxyTraffic(log_timestamp);
CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id);
CREATE INDEX idx_apitraffic_project ON log_ApiProxyTraffic(project_id);
CREATE INDEX idx_apitraffic_status ON log_ApiProxyTraffic(status_code);
CREATE INDEX idx_apitraffic_result ON log_ApiProxyTraffic(result_type);
-- Bir partition scheme kullanılıyorsa (örn. ps_logs_daily), idx_apitraffic_timestamp gereksizdir —
-- log_timestamp üzerindeki clustered index zaten bunu karşılar. Diğer indeksleri hizalayın:
-- CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id)
-- ON ps_logs_daily(log_timestamp);
-- CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id)
-- ON ps_logs_daily(log_timestamp);
-- ... (project, status, result için aynı desen)
Bölümleme (Partitioning)
Bu tablo, canlı trafik altında çok hızlı büyür. log_timestamp üzerinde günlük partition uygulanması güçlü bir şekilde önerilir. Bu sayede saklama politikası DROP PARTITION ile uygulanabilir ve zaman aralığı sorguları yalnızca ilgili partition'ları tarar. Veritabanına özel örnekler için Partition Söz Dizimi bölümüne bakabilirsiniz.
Token Trafik Logu
OAuth/JWT token işlemlerinin kaydedildiği tablodur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_TokenTraffic (
id VARCHAR2(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR2(255),
environment_id VARCHAR2(255),
project_id VARCHAR2(255),
application_id VARCHAR2(255),
application_name VARCHAR2(255),
api_proxy_id VARCHAR2(255),
api_proxy_name VARCHAR2(255),
x_forwarded_for VARCHAR2(255),
req_remote_addr VARCHAR2(255),
req_http_method VARCHAR2(255),
req_content_type VARCHAR2(255),
username_or_key VARCHAR2(255),
time_total NUMBER(10),
status_code NUMBER(10),
error_type VARCHAR2(255),
parent_error_type VARCHAR2(255),
result_type VARCHAR2(255),
to_client_header CLOB,
to_client_body CLOB,
auth_token_type VARCHAR2(255),
audience VARCHAR2(255),
client_info VARCHAR2(255),
token_never_expires NUMBER(1),
issued_at TIMESTAMP,
expires_at TIMESTAMP,
expires_in NUMBER(10),
scope VARCHAR2(255),
refresh_token_allowed NUMBER(1),
refresh_token_issued_at TIMESTAMP,
refresh_token_expires_at TIMESTAMP,
refresh_token_expires_in NUMBER(10),
refresh_count NUMBER(10),
max_refresh_count NUMBER(10)
);
CREATE TABLE log_TokenTraffic (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP NULL,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
project_id VARCHAR(255),
application_id VARCHAR(255),
application_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
x_forwarded_for VARCHAR(255),
req_remote_addr VARCHAR(255),
req_http_method VARCHAR(255),
req_content_type VARCHAR(255),
username_or_key VARCHAR(255),
time_total INT,
status_code INT,
error_type VARCHAR(255),
parent_error_type VARCHAR(255),
result_type VARCHAR(255),
to_client_header TEXT,
to_client_body TEXT,
auth_token_type VARCHAR(255),
audience VARCHAR(255),
client_info VARCHAR(255),
token_never_expires TINYINT(1),
issued_at TIMESTAMP NULL,
expires_at TIMESTAMP NULL,
expires_in INT,
scope VARCHAR(255),
refresh_token_allowed TINYINT(1),
refresh_token_issued_at TIMESTAMP NULL,
refresh_token_expires_at TIMESTAMP NULL,
refresh_token_expires_in INT,
refresh_count INT,
max_refresh_count INT
);
CREATE TABLE log_TokenTraffic (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
project_id VARCHAR(255),
application_id VARCHAR(255),
application_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
x_forwarded_for VARCHAR(255),
req_remote_addr VARCHAR(255),
req_http_method VARCHAR(255),
req_content_type VARCHAR(255),
username_or_key VARCHAR(255),
time_total INTEGER,
status_code INTEGER,
error_type VARCHAR(255),
parent_error_type VARCHAR(255),
result_type VARCHAR(255),
to_client_header TEXT,
to_client_body TEXT,
auth_token_type VARCHAR(255),
audience VARCHAR(255),
client_info VARCHAR(255),
token_never_expires BOOLEAN,
issued_at TIMESTAMP,
expires_at TIMESTAMP,
expires_in INTEGER,
scope VARCHAR(255),
refresh_token_allowed BOOLEAN,
refresh_token_issued_at TIMESTAMP,
refresh_token_expires_at TIMESTAMP,
refresh_token_expires_in INTEGER,
refresh_count INTEGER,
max_refresh_count INTEGER
);
CREATE TABLE log_TokenTraffic (
id NVARCHAR(255) PRIMARY KEY,
log_timestamp DATETIME2,
correlation_id NVARCHAR(255),
environment_id NVARCHAR(255),
project_id NVARCHAR(255),
application_id NVARCHAR(255),
application_name NVARCHAR(255),
api_proxy_id NVARCHAR(255),
api_proxy_name NVARCHAR(255),
x_forwarded_for NVARCHAR(255),
req_remote_addr NVARCHAR(255),
req_http_method NVARCHAR(255),
req_content_type NVARCHAR(255),
username_or_key NVARCHAR(255),
time_total INT,
status_code INT,
error_type NVARCHAR(255),
parent_error_type NVARCHAR(255),
result_type NVARCHAR(255),
to_client_header NVARCHAR(MAX),
to_client_body NVARCHAR(MAX),
auth_token_type NVARCHAR(255),
audience NVARCHAR(255),
client_info NVARCHAR(255),
token_never_expires BIT,
issued_at DATETIME2,
expires_at DATETIME2,
expires_in INT,
scope NVARCHAR(255),
refresh_token_allowed BIT,
refresh_token_issued_at DATETIME2,
refresh_token_expires_at DATETIME2,
refresh_token_expires_in INT,
refresh_count INT,
max_refresh_count INT
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| log_timestamp | Log kaydının oluşturulma zamanı |
| correlation_id | Korelasyon kimliği |
| environment_id | Ortam kimliği |
| project_id | Proje kimliği |
| application_id | Uygulama kimliği |
| application_name | Uygulama adı |
| api_proxy_id | API Proxy kimliği |
| api_proxy_name | API Proxy adı |
| x_forwarded_for | İstemcinin gerçek IP adresi |
| req_remote_addr | Uzak adres |
| req_http_method | HTTP metodu |
| req_content_type | İsteğin içerik tipi |
| username_or_key | Kullanıcı adı veya API anahtarı |
| time_total | Toplam işlem süresi (ms) |
| status_code | HTTP yanıt kodu |
| error_type | Hata tipi |
| parent_error_type | Üst hata tipi |
| result_type | İşlem sonucu |
| to_client_header | İstemciye gönderilen başlıklar (JSON) |
| to_client_body | İstemciye gönderilen yanıt gövdesi |
| auth_token_type | Token tipi (Bearer, Basic vb.) |
| audience | Token'ın hedef kitlesi |
| client_info | İstemci bilgisi |
| token_never_expires | Token'ın süresinin dolup dolmayacağı |
| issued_at | Token'ın oluşturulma zamanı |
| expires_at | Token'ın geçerlilik bitiş zamanı |
| expires_in | Token'ın geçerlilik süresi (saniye) |
| scope | Token'ın kapsam bilgisi |
| refresh_token_allowed | Yenileme token'ına izin verilip verilmediği |
| refresh_token_issued_at | Yenileme token'ı oluşturulma zamanı |
| refresh_token_expires_at | Yenileme token'ı bitiş zamanı |
| refresh_token_expires_in | Yenileme token'ı geçerlilik süresi (saniye) |
| refresh_count | Yenileme sayısı |
| max_refresh_count | İzin verilen maksimum yenileme sayısı |
Önerilen İndeksler
Token işlemleri sıklıkla kullanıcı/uygulama ve zaman aralığı bazında incelenir. Uçtan uca bir çağrıyı izlerken API trafik tablosu ile correlation_id üzerinden birleştirme de yaygındır.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_tokentraffic_correlation ON log_TokenTraffic(correlation_id);
CREATE INDEX idx_tokentraffic_timestamp ON log_TokenTraffic(log_timestamp);
CREATE INDEX idx_tokentraffic_proxy ON log_TokenTraffic(api_proxy_id);
CREATE INDEX idx_tokentraffic_user ON log_TokenTraffic(username_or_key);
CREATE INDEX idx_tokentraffic_result ON log_TokenTraffic(result_type);
CREATE INDEX idx_tokentraffic_correlation ON log_TokenTraffic(correlation_id);
CREATE INDEX idx_tokentraffic_timestamp ON log_TokenTraffic(log_timestamp);
CREATE INDEX idx_tokentraffic_proxy ON log_TokenTraffic(api_proxy_id);
CREATE INDEX idx_tokentraffic_user ON log_TokenTraffic(username_or_key);
CREATE INDEX idx_tokentraffic_result ON log_TokenTraffic(result_type);
CREATE INDEX idx_tokentraffic_correlation ON log_TokenTraffic(correlation_id);
CREATE INDEX idx_tokentraffic_timestamp ON log_TokenTraffic(log_timestamp);
CREATE INDEX idx_tokentraffic_proxy ON log_TokenTraffic(api_proxy_id);
CREATE INDEX idx_tokentraffic_user ON log_TokenTraffic(username_or_key);
CREATE INDEX idx_tokentraffic_result ON log_TokenTraffic(result_type);
CREATE INDEX idx_tokentraffic_correlation ON log_TokenTraffic(correlation_id);
CREATE INDEX idx_tokentraffic_timestamp ON log_TokenTraffic(log_timestamp);
CREATE INDEX idx_tokentraffic_proxy ON log_TokenTraffic(api_proxy_id);
CREATE INDEX idx_tokentraffic_user ON log_TokenTraffic(username_or_key);
CREATE INDEX idx_tokentraffic_result ON log_TokenTraffic(result_type);
Bölümleme (Partitioning)
Token hacmi genellikle API trafiği hacmiyle orantılı büyür. log_timestamp üzerinde günlük partition önerilir. Bkz. Partition Söz Dizimi.
Log Politikası
Log Politikası'nın her tetiklendiğinde yakaladığı anlık mesaj görüntüsünü (snapshot) saklayan tablodur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_PolicyCapture (
id VARCHAR2(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR2(255),
environment_id VARCHAR2(255),
api_proxy_id VARCHAR2(255),
api_proxy_name VARCHAR2(255),
proxy_method_id VARCHAR2(255),
proxy_method_name VARCHAR2(255),
username_or_key VARCHAR2(255),
status_code NUMBER(10),
result_type VARCHAR2(255),
error_type VARCHAR2(255),
from_client_ro_header CLOB,
from_client_ro_param CLOB,
from_client_ro_body CLOB,
capture_region VARCHAR2(50),
capture_location VARCHAR2(50)
);
CREATE TABLE log_PolicyCapture (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP NULL,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
proxy_method_id VARCHAR(255),
proxy_method_name VARCHAR(255),
username_or_key VARCHAR(255),
status_code INT,
result_type VARCHAR(255),
error_type VARCHAR(255),
from_client_ro_header TEXT,
from_client_ro_param TEXT,
from_client_ro_body LONGTEXT,
capture_region VARCHAR(50),
capture_location VARCHAR(50)
);
CREATE TABLE log_PolicyCapture (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
correlation_id VARCHAR(255),
environment_id VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
proxy_method_id VARCHAR(255),
proxy_method_name VARCHAR(255),
username_or_key VARCHAR(255),
status_code INTEGER,
result_type VARCHAR(255),
error_type VARCHAR(255),
from_client_ro_header TEXT,
from_client_ro_param TEXT,
from_client_ro_body TEXT,
capture_region VARCHAR(50),
capture_location VARCHAR(50)
);
CREATE TABLE log_PolicyCapture (
id NVARCHAR(255) PRIMARY KEY,
log_timestamp DATETIME2,
correlation_id NVARCHAR(255),
environment_id NVARCHAR(255),
api_proxy_id NVARCHAR(255),
api_proxy_name NVARCHAR(255),
proxy_method_id NVARCHAR(255),
proxy_method_name NVARCHAR(255),
username_or_key NVARCHAR(255),
status_code INT,
result_type NVARCHAR(255),
error_type NVARCHAR(255),
from_client_ro_header NVARCHAR(MAX),
from_client_ro_param NVARCHAR(MAX),
from_client_ro_body NVARCHAR(MAX),
capture_region NVARCHAR(50),
capture_location NVARCHAR(50)
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| log_timestamp | Log kaydının oluşturulma zamanı |
| correlation_id | Korelasyon kimliği |
| environment_id | Ortam kimliği |
| api_proxy_id | API Proxy kimliği |
| api_proxy_name | API Proxy adı |
| proxy_method_id | Metot kimliği |
| proxy_method_name | Metot adı |
| username_or_key | Kullanıcı adı veya API anahtarı |
| status_code | HTTP yanıt kodu |
| result_type | İşlem sonucu |
| error_type | Hata tipi |
| from_client_ro_header | İstemciden gelen başlıklar (JSON) |
| from_client_ro_param | İstemciden gelen sorgu parametreleri (JSON) |
| from_client_ro_body | İstemciden gelen istek gövdesi |
| capture_region | Politikanın çalıştığı pipeline aşaması: FROM_CLIENT (İstemciden Gelen), TO_BACKEND (Arka Uca Giden), FROM_BACKEND (Arka Uçtan Gelen), TO_CLIENT (İstemciye Giden) |
| capture_location | Politikanın tanımlandığı seviye: API_PROXY_GROUP (Grup), API_PROXY (Proxy), API_PROXY_METHOD (Metot) |
Önerilen İndeksler
Loglama politikası pipeline'ın birden fazla noktasına (örneğin FROM_CLIENT ve TO_CLIENT) yerleştirildiğinde, istek ve yanıt kayıtları aynı correlation_id değerini paylaşır. Bu nedenle correlation_id indeksi, istek ve yanıtın uçtan uca birleştirilmesi için kritik önemdedir.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_policycapture_correlation ON log_PolicyCapture(correlation_id);
CREATE INDEX idx_policycapture_timestamp ON log_PolicyCapture(log_timestamp);
CREATE INDEX idx_policycapture_proxy ON log_PolicyCapture(api_proxy_id);
CREATE INDEX idx_policycapture_region ON log_PolicyCapture(capture_region);
CREATE INDEX idx_policycapture_correlation ON log_PolicyCapture(correlation_id);
CREATE INDEX idx_policycapture_timestamp ON log_PolicyCapture(log_timestamp);
CREATE INDEX idx_policycapture_proxy ON log_PolicyCapture(api_proxy_id);
CREATE INDEX idx_policycapture_region ON log_PolicyCapture(capture_region);
CREATE INDEX idx_policycapture_correlation ON log_PolicyCapture(correlation_id);
CREATE INDEX idx_policycapture_timestamp ON log_PolicyCapture(log_timestamp);
CREATE INDEX idx_policycapture_proxy ON log_PolicyCapture(api_proxy_id);
CREATE INDEX idx_policycapture_region ON log_PolicyCapture(capture_region);
CREATE INDEX idx_policycapture_correlation ON log_PolicyCapture(correlation_id);
CREATE INDEX idx_policycapture_timestamp ON log_PolicyCapture(log_timestamp);
CREATE INDEX idx_policycapture_proxy ON log_PolicyCapture(api_proxy_id);
CREATE INDEX idx_policycapture_region ON log_PolicyCapture(capture_region);
Bölümleme (Partitioning)
Hacim, akışlara bağlanan loglama politikası sayısına ve bunların ne sıklıkla tetiklendiğine bağlıdır. Yüksek trafikli API'lerde proxy/metot seviyesinde bağlı politikalar için log_timestamp üzerinde günlük partition önerilir. Bkz. Partition Söz Dizimi.
Uygulama Logu
Apinizer platform seviyesindeki uygulama loglarını saklayan tablodur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_Application (
id VARCHAR2(255) PRIMARY KEY,
env_name VARCHAR2(255),
api_proxy_id VARCHAR2(255),
api_proxy_name VARCHAR2(255),
correlation_id VARCHAR2(255),
log_timestamp TIMESTAMP,
log_level VARCHAR2(255),
message CLOB,
stack_trace CLOB,
host_name VARCHAR2(255),
enum_application_log VARCHAR2(255),
total_duration NUMBER(10)
);
CREATE TABLE log_Application (
id VARCHAR(255) PRIMARY KEY,
env_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
correlation_id VARCHAR(255),
log_timestamp TIMESTAMP NULL,
log_level VARCHAR(255),
message TEXT,
stack_trace TEXT,
host_name VARCHAR(255),
enum_application_log VARCHAR(255),
total_duration INT
);
CREATE TABLE log_Application (
id VARCHAR(255) PRIMARY KEY,
env_name VARCHAR(255),
api_proxy_id VARCHAR(255),
api_proxy_name VARCHAR(255),
correlation_id VARCHAR(255),
log_timestamp TIMESTAMP,
log_level VARCHAR(255),
message TEXT,
stack_trace TEXT,
host_name VARCHAR(255),
enum_application_log VARCHAR(255),
total_duration INTEGER
);
CREATE TABLE log_Application (
id NVARCHAR(255) PRIMARY KEY,
env_name NVARCHAR(255),
api_proxy_id NVARCHAR(255),
api_proxy_name NVARCHAR(255),
correlation_id NVARCHAR(255),
log_timestamp DATETIME2,
log_level NVARCHAR(255),
message NVARCHAR(MAX),
stack_trace NVARCHAR(MAX),
host_name NVARCHAR(255),
enum_application_log NVARCHAR(255),
total_duration INT
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| env_name | Ortam adı |
| api_proxy_id | API Proxy kimliği |
| api_proxy_name | API Proxy adı |
| correlation_id | Korelasyon kimliği |
| log_timestamp | Log kaydının oluşturulma zamanı |
| log_level | Log seviyesi (INFO, WARN, ERROR vb.) |
| message | Log mesajı |
| stack_trace | Hata yığın izi |
| host_name | Logun oluştuğu sunucu adı |
| enum_application_log | Uygulama log kaynağı türü |
| total_duration | Toplam işlem süresi (ms) |
Önerilen İndeksler
Uygulama logları çoğunlukla zaman aralığı ve log seviyesine göre (sorun giderme amacıyla) filtrelenir; ayrıca correlation_id üzerinden trafik logları ile birleştirilerek tek bir isteğin platform seviyesindeki olayları geri oluşturulur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_application_correlation ON log_Application(correlation_id);
CREATE INDEX idx_application_timestamp ON log_Application(log_timestamp);
CREATE INDEX idx_application_level ON log_Application(log_level);
CREATE INDEX idx_application_proxy ON log_Application(api_proxy_id);
CREATE INDEX idx_application_correlation ON log_Application(correlation_id);
CREATE INDEX idx_application_timestamp ON log_Application(log_timestamp);
CREATE INDEX idx_application_level ON log_Application(log_level);
CREATE INDEX idx_application_proxy ON log_Application(api_proxy_id);
CREATE INDEX idx_application_correlation ON log_Application(correlation_id);
CREATE INDEX idx_application_timestamp ON log_Application(log_timestamp);
CREATE INDEX idx_application_level ON log_Application(log_level);
CREATE INDEX idx_application_proxy ON log_Application(api_proxy_id);
CREATE INDEX idx_application_correlation ON log_Application(correlation_id);
CREATE INDEX idx_application_timestamp ON log_Application(log_timestamp);
CREATE INDEX idx_application_level ON log_Application(log_level);
CREATE INDEX idx_application_proxy ON log_Application(api_proxy_id);
Bölümleme (Partitioning)
Uygulama logları istikrarlı bir şekilde birikir. Canlı sistemlerde log_timestamp üzerinde günlük partition önerilir. Bkz. Partition Söz Dizimi.
Denetim Olayı
Kullanıcı işlemlerinin denetim kaydını saklayan tablodur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_AuditEvent (
id VARCHAR2(255) PRIMARY KEY,
audit_event_date TIMESTAMP,
principal VARCHAR2(255),
state VARCHAR2(255),
object_id VARCHAR2(255),
object_name VARCHAR2(255),
ref_object_json CLOB,
project_id VARCHAR2(255),
class_name VARCHAR2(255)
);
CREATE TABLE log_AuditEvent (
id VARCHAR(255) PRIMARY KEY,
audit_event_date TIMESTAMP NULL,
principal VARCHAR(255),
state VARCHAR(255),
object_id VARCHAR(255),
object_name VARCHAR(255),
ref_object_json LONGTEXT,
project_id VARCHAR(255),
class_name VARCHAR(255)
);
CREATE TABLE log_AuditEvent (
id VARCHAR(255) PRIMARY KEY,
audit_event_date TIMESTAMP,
principal VARCHAR(255),
state VARCHAR(255),
object_id VARCHAR(255),
object_name VARCHAR(255),
ref_object_json TEXT,
project_id VARCHAR(255),
class_name VARCHAR(255)
);
CREATE TABLE log_AuditEvent (
id NVARCHAR(255) PRIMARY KEY,
audit_event_date DATETIME2,
principal NVARCHAR(255),
state NVARCHAR(255),
object_id NVARCHAR(255),
object_name NVARCHAR(255),
ref_object_json NVARCHAR(MAX),
project_id NVARCHAR(255),
class_name NVARCHAR(255)
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| audit_event_date | Denetim olayının gerçekleşme zamanı |
| principal | İşlemi gerçekleştiren kullanıcı |
| state | İşlemin durumu (CREATE, UPDATE, DELETE vb.) |
| object_id | İşlem yapılan nesnenin kimliği |
| object_name | İşlem yapılan nesnenin adı |
| ref_object_json | İşlem yapılan nesnenin JSON gösterimi |
| project_id | Proje kimliği |
| class_name | Nesnenin türü |
Önerilen İndeksler
Denetim sorguları en sık tarih aralığı, kullanıcı (principal), etkilenen nesne türü veya projeye göre filtrelenir. Burada partition anahtarı log_timestamp değil, audit_event_date kolonudur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_auditevent_date ON log_AuditEvent(audit_event_date);
CREATE INDEX idx_auditevent_principal ON log_AuditEvent(principal);
CREATE INDEX idx_auditevent_project ON log_AuditEvent(project_id);
CREATE INDEX idx_auditevent_class ON log_AuditEvent(class_name);
CREATE INDEX idx_auditevent_state ON log_AuditEvent(state);
CREATE INDEX idx_auditevent_date ON log_AuditEvent(audit_event_date);
CREATE INDEX idx_auditevent_principal ON log_AuditEvent(principal);
CREATE INDEX idx_auditevent_project ON log_AuditEvent(project_id);
CREATE INDEX idx_auditevent_class ON log_AuditEvent(class_name);
CREATE INDEX idx_auditevent_state ON log_AuditEvent(state);
CREATE INDEX idx_auditevent_date ON log_AuditEvent(audit_event_date);
CREATE INDEX idx_auditevent_principal ON log_AuditEvent(principal);
CREATE INDEX idx_auditevent_project ON log_AuditEvent(project_id);
CREATE INDEX idx_auditevent_class ON log_AuditEvent(class_name);
CREATE INDEX idx_auditevent_state ON log_AuditEvent(state);
CREATE INDEX idx_auditevent_date ON log_AuditEvent(audit_event_date);
CREATE INDEX idx_auditevent_principal ON log_AuditEvent(principal);
CREATE INDEX idx_auditevent_project ON log_AuditEvent(project_id);
CREATE INDEX idx_auditevent_class ON log_AuditEvent(class_name);
CREATE INDEX idx_auditevent_state ON log_AuditEvent(state);
Bölümleme (Partitioning)
Denetim olayları kullanıcı işlemlerinden üretilir (trafik kayıtlarından çok daha az) ve uyumluluk gereği genellikle daha uzun süre saklanır. Genellikle audit_event_date üzerinde aylık partition yeterlidir. Partition Söz Dizimi bölümünde DAY yerine MONTH kullanabilirsiniz.
Login Log
API Manager ve API Portal'a yapılan giriş denemelerini (başarı ve başarısızlık olaylarını) kaydeden tablo.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_LoginLog (
id VARCHAR2(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
source VARCHAR2(50),
principal VARCHAR2(255),
email VARCHAR2(255),
display_name VARCHAR2(255),
event_type VARCHAR2(50),
remote_address VARCHAR2(255),
message CLOB,
error_type VARCHAR2(255),
portal_id VARCHAR2(255),
account_id VARCHAR2(255)
);
CREATE TABLE log_LoginLog (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP NULL,
source VARCHAR(50),
principal VARCHAR(255),
email VARCHAR(255),
display_name VARCHAR(255),
event_type VARCHAR(50),
remote_address VARCHAR(255),
message TEXT,
error_type VARCHAR(255),
portal_id VARCHAR(255),
account_id VARCHAR(255)
);
CREATE TABLE log_LoginLog (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
source VARCHAR(50),
principal VARCHAR(255),
email VARCHAR(255),
display_name VARCHAR(255),
event_type VARCHAR(50),
remote_address VARCHAR(255),
message TEXT,
error_type VARCHAR(255),
portal_id VARCHAR(255),
account_id VARCHAR(255)
);
CREATE TABLE log_LoginLog (
id NVARCHAR(255) PRIMARY KEY,
log_timestamp DATETIME2,
source NVARCHAR(50),
principal NVARCHAR(255),
email NVARCHAR(255),
display_name NVARCHAR(255),
event_type NVARCHAR(50),
remote_address NVARCHAR(255),
message NVARCHAR(MAX),
error_type NVARCHAR(255),
portal_id NVARCHAR(255),
account_id NVARCHAR(255)
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt tanımlayıcısı |
| log_timestamp | Giriş olayının gerçekleştiği zaman |
| source | Giriş kaynağı (API_MANAGER, API_PORTAL) |
| principal | Kullanıcı principal'ı (API Manager girişi) |
| Kullanıcı e-postası (API Portal girişi) | |
| display_name | Kullanıcı görünen ismi |
| event_type | Olay tipi (LOGIN_SUCCESS, LOGIN_FAILURE) |
| remote_address | İstemci uzak IP adresi |
| message | Sonuç mesajı veya başarısızlık nedeni |
| error_type | Hata sınıfı (başarısız girişler için) |
| portal_id | Portal tanımlayıcısı (portal girişleri için) |
| account_id | Hesap tanımlayıcısı (portal girişleri için) |
Önerilen Index'ler
Login logları; zaman aralığı, kullanıcı (e-posta/principal), giriş kaynağı ve olay tipi (güvenlik denetimi ve kilitlenmiş hesap incelemesi) için sorgulanır.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_loginlog_timestamp ON log_LoginLog(log_timestamp);
CREATE INDEX idx_loginlog_email ON log_LoginLog(email);
CREATE INDEX idx_loginlog_principal ON log_LoginLog(principal);
CREATE INDEX idx_loginlog_source ON log_LoginLog(source);
CREATE INDEX idx_loginlog_event ON log_LoginLog(event_type);
CREATE INDEX idx_loginlog_timestamp ON log_LoginLog(log_timestamp);
CREATE INDEX idx_loginlog_email ON log_LoginLog(email);
CREATE INDEX idx_loginlog_principal ON log_LoginLog(principal);
CREATE INDEX idx_loginlog_source ON log_LoginLog(source);
CREATE INDEX idx_loginlog_event ON log_LoginLog(event_type);
CREATE INDEX idx_loginlog_timestamp ON log_LoginLog(log_timestamp);
CREATE INDEX idx_loginlog_email ON log_LoginLog(email);
CREATE INDEX idx_loginlog_principal ON log_LoginLog(principal);
CREATE INDEX idx_loginlog_source ON log_LoginLog(source);
CREATE INDEX idx_loginlog_event ON log_LoginLog(event_type);
CREATE INDEX idx_loginlog_timestamp ON log_LoginLog(log_timestamp);
CREATE INDEX idx_loginlog_email ON log_LoginLog(email);
CREATE INDEX idx_loginlog_principal ON log_LoginLog(principal);
CREATE INDEX idx_loginlog_source ON log_LoginLog(source);
CREATE INDEX idx_loginlog_event ON log_LoginLog(event_type);
Partitioning (Bölümleme)
Login log hacmi trafik loglarına göre tipik olarak düşüktür. Güvenlik denetimi için sıkça gerekli olan uzun saklama süreleri için log_timestamp üzerinde aylık bölümleme yeterlidir. Örnekler için Bölümleme Söz Dizimi bölümüne bakın ve aralık için DAY yerine MONTH kullanın.
Gönderilemeyen Mesaj
Bağlantı hatası nedeniyle iletilememiş log kayıtlarını geçici olarak saklayan tablodur.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE TABLE log_UnsentMessage (
id VARCHAR2(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
connector_id VARCHAR2(50),
content CLOB
);
CREATE TABLE log_UnsentMessage (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP NULL,
connector_id VARCHAR(50),
content LONGTEXT
);
CREATE TABLE log_UnsentMessage (
id VARCHAR(255) PRIMARY KEY,
log_timestamp TIMESTAMP,
connector_id VARCHAR(50),
content TEXT
);
CREATE TABLE log_UnsentMessage (
id NVARCHAR(255) PRIMARY KEY,
log_timestamp DATETIME2,
connector_id NVARCHAR(50),
content NVARCHAR(MAX)
);
| Kolon | Açıklama |
|---|---|
| id | Kayıt kimliği |
| log_timestamp | Kaydın oluşturulma zamanı |
| connector_id | Verinin gönderilmeye çalışıldığı konnektör kimliği |
| content | Gönderilemeyen log kaydının içeriği (JSON) |
Önerilen İndeksler
Bu tablodaki kayıtlar geçicidir: Bir konnektör erişilemediğinde eklenir, gönderim başarılı olunca silinir. Yeniden gönderim aramaları ve temizlik için az sayıda indeks yeterlidir.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
CREATE INDEX idx_unsent_timestamp ON log_UnsentMessage(log_timestamp);
CREATE INDEX idx_unsent_connector ON log_UnsentMessage(connector_id);
CREATE INDEX idx_unsent_timestamp ON log_UnsentMessage(log_timestamp);
CREATE INDEX idx_unsent_connector ON log_UnsentMessage(connector_id);
CREATE INDEX idx_unsent_timestamp ON log_UnsentMessage(log_timestamp);
CREATE INDEX idx_unsent_connector ON log_UnsentMessage(connector_id);
CREATE INDEX idx_unsent_timestamp ON log_UnsentMessage(log_timestamp);
CREATE INDEX idx_unsent_connector ON log_UnsentMessage(connector_id);
Bölümleme (Partitioning)
Bu tablo kısa bir zaman penceresi içinde tüketilen geçici kayıtları barındırır. Partition gerekli değildir. Tablo beklenmedik şekilde büyürse (uzun süreli kesintiler), partition yerine operasyonel temizlik daha uygun bir çözümdür. Partitioning mümkündür ve Apinizer INSERT davranışını etkilemez, ancak bu geçici kuyruk tablosu için genellikle operasyonel temizlik yeterlidir.
Partition Söz Dizimi
Aşağıdaki örnekler log_timestamp üzerinde günlük partition kullanır. Tablo adını ve başlangıç sınır tarihini ortamınıza göre değiştirin. log_AuditEvent tablosu için log_timestamp yerine audit_event_date kolonunu kullanın ve günlük aralık yerine aylık aralık tercih edin.
- Oracle
- MySQL/MariaDB
- PostgreSQL
- SQL Server
-- CREATE TABLE sırasında uygulayın (kolon listesinden sonra):
)
PARTITION BY RANGE (log_timestamp)
INTERVAL (NUMTODSINTERVAL(1, 'DAY'))
(
PARTITION p_initial VALUES LESS THAN (TIMESTAMP '2026-01-01 00:00:00')
);
-- Aylık varyant (örneğin log_AuditEvent için):
-- INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
-- Partition anahtarı PRIMARY KEY'in parçası olmalıdır.
-- Tablo tanımında birincil anahtarı şu şekilde düzenleyin:
-- PRIMARY KEY (id, log_timestamp)
ALTER TABLE log_ApiProxyTraffic
PARTITION BY RANGE (TO_DAYS(log_timestamp)) (
PARTITION p_initial VALUES LESS THAN (TO_DAYS('2026-01-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- Yeni günlük partition'ları zamanlanmış bir işle önceden ekleyin:
ALTER TABLE log_ApiProxyTraffic REORGANIZE PARTITION p_future INTO (
PARTITION p20260421 VALUES LESS THAN (TO_DAYS('2026-04-22')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- CREATE TABLE sırasında tablo tanımını şu şekilde güncelleyin:
CREATE TABLE log_ApiProxyTraffic (
/* ... kolonlar ... */
) PARTITION BY RANGE (log_timestamp);
-- Her gün için bir alt tablo oluşturun (zamanlanmış iş):
CREATE TABLE log_ApiProxyTraffic_p20260421
PARTITION OF log_ApiProxyTraffic
FOR VALUES FROM ('2026-04-21') TO ('2026-04-22');
-- Eski partition'ı hızlıca silin:
DROP TABLE log_ApiProxyTraffic_p20260101;
-- 0) Ön koşul: N sınır değeri N+1 partition üretir; scheme, her partition için tam olarak
-- bir filegroup listelemelidir. Enterprise dağıtımlar yıllık filegroup kullanabilir; minimal
-- örnekte tüm partition'lar [PRIMARY]'ye eşlenir.
-- 1) Partition fonksiyonu (günlük sınırlar):
CREATE PARTITION FUNCTION pf_logs_daily (DATETIME2)
AS RANGE RIGHT FOR VALUES ('2026-01-01', '2026-01-02', '2026-01-03');
-- 2) Partition scheme:
CREATE PARTITION SCHEME ps_logs_daily
AS PARTITION pf_logs_daily ALL TO ([PRIMARY]);
-- 3) Tabloyu inline PK OLMADAN oluşturun (yukarıdaki kolon listesiyle aynı):
CREATE TABLE log_ApiProxyTraffic (
id NVARCHAR(255) NOT NULL,
log_timestamp DATETIME2 NOT NULL,
/* ... diğer kolonlar ... */
) ON ps_logs_daily(log_timestamp);
GO
-- 4) Clustered bir PK partition sütununun dışında olamaz — NC PK + partition sütunu üzerinde CI:
ALTER TABLE log_ApiProxyTraffic
ADD CONSTRAINT PK_log_ApiProxyTraffic_id
PRIMARY KEY NONCLUSTERED (id)
ON [PRIMARY];
GO
CREATE CLUSTERED INDEX IX_log_ApiProxyTraffic_Partitioning
ON log_ApiProxyTraffic (log_timestamp)
ON ps_logs_daily(log_timestamp);
GO
-- 5) Önerilen nonclustered indeksler (partition scheme ile hizalı):
CREATE INDEX idx_apitraffic_correlation ON log_ApiProxyTraffic(correlation_id)
ON ps_logs_daily(log_timestamp);
CREATE INDEX idx_apitraffic_proxy ON log_ApiProxyTraffic(api_proxy_id)
ON ps_logs_daily(log_timestamp);
CREATE INDEX idx_apitraffic_project ON log_ApiProxyTraffic(project_id)
ON ps_logs_daily(log_timestamp);
CREATE INDEX idx_apitraffic_status ON log_ApiProxyTraffic(status_code)
ON ps_logs_daily(log_timestamp);
CREATE INDEX idx_apitraffic_result ON log_ApiProxyTraffic(result_type)
ON ps_logs_daily(log_timestamp);
-- 6) Sınırları zamanlanmış bir iş ile genişletme:
ALTER PARTITION SCHEME ps_logs_daily NEXT USED [PRIMARY];
ALTER PARTITION FUNCTION pf_logs_daily() SPLIT RANGE ('2026-04-22');
SQL Server'da, tablo log_timestamp veya audit_event_date ile anahtarlanmış bir partition scheme kullanıyorsa id üzerinde clustered PRIMARY KEY tanımlayamazsınız (Msg 1908). Clustered index partition sütunu üzerinde olmalıdır; id için NONCLUSTERED bir PK kullanın. Yıllık filegroup'lar veya üç aylık partition'lar geçerli operasyonel tercihlerdir ve Apinizer INSERT davranışını değiştirmez.
Yeni günlük partition'ların önceden oluşturulması gerekir (örneğin zamanlanmış bir iş ile). Kayıt geldiğinde hedef partition mevcut değilse SQL Server ve MySQL'de ekleme başarısız olur; Oracle'da yalnızca INTERVAL partition kullanıldığında otomatik oluşturulur.
Veri Tipi Karşılık Tablosu
Aşağıdaki tablo, farklı veritabanları arasındaki veri tipi eşleştirmelerini göstermektedir.
| Kullanım | Oracle | MySQL/MariaDB | PostgreSQL | SQL Server |
|---|---|---|---|---|
| Kısa metin | VARCHAR2(255) | VARCHAR(255) | VARCHAR(255) | NVARCHAR(255) |
| Uzun metin | CLOB | TEXT / LONGTEXT | TEXT | NVARCHAR(MAX) |
| Tam sayı | NUMBER(10) | INT | INTEGER | INT |
| Büyük tam sayı | NUMBER(19) | BIGINT | BIGINT | BIGINT |
| Ondalıklı sayı | NUMBER | DOUBLE | DOUBLE PRECISION | FLOAT |
| Mantıksal (boolean) | NUMBER(1) | TINYINT(1) | BOOLEAN | BIT |
| Tarih/Zaman | TIMESTAMP | TIMESTAMP NULL | TIMESTAMP | DATETIME2 |