TR7 JSON Format (HTTP)
Format Hakkında
TR7 JSON Format, HTTP isteklerinin tüm detaylarını yapılandırılmış JSON formatında sunan en kapsamlı log formatıdır. Profil formundaki Line Format listesinde TR7 JSON Format seçeneğiyle yer alır.
Bu format; ağ bilgileri, zamanlama metrikleri, SSL/TLS detayları, HTTP istek/yanıt bilgileri ve WAF olaylarını tek bir JSON objesi içinde toplar. Modern log analiz sistemleri ve veri işleme pipeline'ları için idealdir.
Kullanım senaryoları
- Detaylı performans analizi.
- Elasticsearch/Kibana entegrasyonu.
- Özel log analiz uygulamaları.
- Tam görünürlük gerektiren ortamlar.
- WAF olay analizi.
Desteklenen Özellikler
INFO
Aynı TR7 JSON Format seçeneği bir L7 TCP vService'e atandığında daha dar bir alan kümesiyle üretilir: username, request, response, resFrom, isWafAttack ve wafInfo alanları bulunmaz, time yalnızca tw/tc/tt taşır ve tstate dört yerine iki karakterdir. Ayrıntısı TR7 JSON (L7 TCP) sayfasında yer alır.
Örnek Log (WAF Devre Dışı)
{
"pool": "LOGTEST-H",
"ident": "tr7",
"ts": "09/Sep/2026:20:44:48 +0300",
"username": "-",
"time": {
"tq": "442",
"tw": "0",
"tc": "0",
"tr": "0",
"tt": "442"
},
"conn": {
"act": "1",
"f": "1",
"b": "0",
"s": "0"
},
"queue": {
"b": "0",
"s": "0"
},
"tstate": "----",
"retries": "0",
"network": {
"ci": "172.16.101.42",
"cp": "55610",
"fi": "172.16.102.85",
"fp": "443",
"si": "172.16.102.168",
"sp": "80"
},
"ssl": {
"fAlgKeysize": "128",
"fCipher": "TLS_AES_128_GCM_SHA256",
"fProtocol": "TLSv1.3",
"fNpn": "-",
"fAlpn": "http/1.1",
"fKeyAlg": "rsaEncryption",
"fSigAlg": "RSA-SHA256",
"fVersion": "3",
"fNotAfter": "240507115021Z",
"fNotBefore": "230508115021Z",
"fClientDn": "/C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com",
"fIssuerDn": "/C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com",
"sAlgKeysize": "-",
"sCipher": "-",
"sProtocol": "-",
"sNpn": "-",
"sAlpn": "-",
"sKeyAlg": "-",
"sSigAlg": "-",
"sVersion": "-",
"sNotAfter": "-",
"sNotBefore": "-",
"sClientDn": "-",
"sIssuerDn": "-"
},
"request": {
"method": "GET",
"uri": "/login.php",
"protocol": "HTTP/1.1",
"headers": "host: test.tr7.com\r\ncache-control: max-age=0\r\nsec-ch-ua: \"Chromium\";v=\"152\", \"Not?A_Brand\";v=\"24\", \"Google Chrome\";v=\"152\"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: \"Windows\"\r\nupgrade-insecure-requests: 1\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36\r\naccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\nsec-fetch-site: none\r\nsec-fetch-mode: navigate\r\nsec-fetch-user: ?1\r\nsec-fetch-dest: document\r\naccept-encoding: gzip, deflate, br, zstd\r\naccept-language: en-US,en;q=0.9\r\n\r\n"
},
"response": {
"status_code": "200",
"headers": "date: Wed, 09 Sep 2026 17:44:48 GMT\r\nserver: Apache/2.4.59 (Debian)\r\nvary: Accept-Encoding\r\ncontent-encoding: gzip\r\ncontent-length: 824\r\ncontent-type: text/html; charset=UTF-8\r\n\r\n"
},
"ids": {
"p": "lbPools-mtudin0c__lb",
"b": "DBE",
"f": "DFE~",
"s": "lbBackends-mrdk4wpm"
},
"bytes": {
"uploaded": "632",
"read": "1011"
},
"resFrom": "-",
"isWafAttack": "-",
"wafInfo": {}
}Örnek Log (WAF Bloku)
{
"pool": "LOGTEST-H",
"ident": "tr7",
"ts": "09/Sep/2026:20:44:03 +0300",
"username": "-",
"time": {
"tq": "499",
"tw": "-1",
"tc": "-1",
"tr": "-1",
"tt": "499"
},
"conn": {
"act": "1",
"f": "1",
"b": "0",
"s": "0"
},
"queue": {
"b": "0",
"s": "0"
},
"tstate": "LR--",
"retries": "0",
"network": {
"ci": "172.16.101.42",
"cp": "64136",
"fi": "172.16.102.85",
"fp": "443",
"si": "-",
"sp": "-"
},
"ssl": {
"fAlgKeysize": "128",
"fCipher": "TLS_AES_128_GCM_SHA256",
"fProtocol": "TLSv1.3",
"fNpn": "-",
"fAlpn": "http/1.1",
"fKeyAlg": "rsaEncryption",
"fSigAlg": "RSA-SHA256",
"fVersion": "3",
"fNotAfter": "240507115021Z",
"fNotBefore": "230508115021Z",
"fClientDn": "/C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com",
"fIssuerDn": "/C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com",
"sAlgKeysize": "-",
"sCipher": "-",
"sProtocol": "-",
"sNpn": "-",
"sAlpn": "-",
"sKeyAlg": "-",
"sSigAlg": "-",
"sVersion": "-",
"sNotAfter": "-",
"sNotBefore": "-",
"sClientDn": "-",
"sIssuerDn": "-"
},
"request": {
"method": "GET",
"uri": "/cmd.exe",
"protocol": "HTTP/1.1",
"headers": "host: test.tr7.com\r\ncache-control: max-age=0\r\nsec-ch-ua: \"Chromium\";v=\"152\", \"Not?A_Brand\";v=\"24\", \"Google Chrome\";v=\"152\"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: \"Windows\"\r\nupgrade-insecure-requests: 1\r\nuser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36\r\naccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\nsec-fetch-site: none\r\nsec-fetch-mode: navigate\r\nsec-fetch-user: ?1\r\nsec-fetch-dest: document\r\naccept-encoding: gzip, deflate, br, zstd\r\naccept-language: en-US,en;q=0.9\r\n\r\n"
},
"response": {
"status_code": "418",
"headers": "-"
},
"ids": {
"p": "lbPools-mtudin0c__lb",
"b": "DFE",
"f": "DFE~",
"s": "<NOSRV>"
},
"bytes": {
"uploaded": "630",
"read": "0"
},
"resFrom": "-",
"isWafAttack": "1",
"wafInfo": {
"totalScore": 8,
"uid": "AC10652A:FA886AA19AE3:204001F",
"action": "block",
"wafTime": 1.343,
"attacks": [
{
"payload": "/cmd.exe",
"scope": "path",
"monitor": false,
"score": 8,
"id": 130005
}
]
}
}Alan Açıklamaları
Temel Alanlar
| Alan | Örnek | Açıklama |
|---|---|---|
pool | LOGTEST-H | vService adı; ad boşsa vService ID yazılır |
ident | tr7 | Log kaynağı tanımlayıcısı |
ts | 09/Sep/2026:20:44:48 +0300 | Zaman damgası (cihazın yerel saati) |
username | - | Kimliği doğrulanmış kullanıcı; kimlik doğrulama kullanılmıyorsa - |
time (Zamanlama Metrikleri)
| Alan | Birim | Açıklama |
|---|---|---|
tq | ms | Request Time: istek alım süresi |
tw | ms | Wait Time: kuyrukta bekleme süresi |
tc | ms | Connect Time: Kurum Servisine bağlanma süresi |
tr | ms | Response Time: Kurum Servisinin yanıt süresi |
tt | ms | Total Time: toplam işlem süresi |
INFO
-1 değeri ilgili aşamanın tamamlanmadığını gösterir (ör. WAF bloğu).
conn (Bağlantı Sayaçları)
| Alan | Açıklama |
|---|---|
act | Süreç genelindeki eşzamanlı bağlantı sayısı (vService'e özel değildir) |
f | Frontend bağlantı sayısı |
b | Backend bağlantı sayısı |
s | Server bağlantı sayısı |
queue (Kuyruk Durumu)
| Alan | Açıklama |
|---|---|
b | Oturum kuyruktan çıkarıldığı andaki backend kuyruk uzunluğu |
s | Oturum kuyruktan çıkarıldığı andaki Kurum Servisi kuyruk uzunluğu |
tstate (Bağlantı Sonlandırma Durumu)
4 karakterlik bir koddur:
| Pozisyon | Anlam |
|---|---|
| 1 | Sonlanma nedeni (C istemci kesti, S sunucu kesti, L TR7 yerel yanıtı, P TR7 sonlandırdı, c/s istemci/sunucu tarafı zaman aşımı, - normal) |
| 2 | Sonlanma anındaki aşama (R istek bekleniyordu, Q kuyruk, C sunucuya bağlanma, H yanıt başlıkları bekleniyordu, D veri aktarımı, L son veri, - normal) |
| 3 | İstekteki kalıcılık (persistence) çerezinin durumu (- çerez kullanılmıyor) |
| 4 | Yanıtta çereze uygulanan işlem (- çerez kullanılmıyor) |
Yaygın değerler:
| Değer | Anlam |
|---|---|
---- | Normal tamamlanma |
LR-- | İstek aşamasında TR7 yerel yanıtı (WAF blok, error page) |
CD-- | Veri aşamasında istemci bağlantıyı kesti |
sD-- | Veri aşamasında sunucu tarafı zaman aşımı |
retries
| Alan | Açıklama |
|---|---|
retries | Backend bağlantı yeniden deneme sayısı |
network (Ağ Bilgileri)
| Alan | Örnek | Açıklama |
|---|---|---|
ci | 172.16.101.42 | İstemci IP adresi |
cp | 55610 | İstemci kaynak portu |
fi | 172.16.102.85 | Frontend (vService) IP adresi |
fp | 443 | Frontend port |
si | 172.16.102.168 | Kurum Servisi IP adresi. İstek Kurum Servisine hiç ulaşmadıysa (WAF bloku gibi) - yazılır. |
sp | 80 | Kurum Servisi portu. İstek Kurum Servisine hiç ulaşmadıysa - yazılır. |
ssl Nesnesi: Frontend SSL/TLS Bilgileri
| Alan | Örnek | Açıklama |
|---|---|---|
fAlgKeysize | 128 | Anahtar boyutu (bit) |
fCipher | TLS_AES_128_GCM_SHA256 | Cipher suite |
fProtocol | TLSv1.3 | TLS protokol versiyonu |
fNpn | - | NPN protokolü |
fAlpn | http/1.1 | ALPN protokolü |
fKeyAlg | rsaEncryption | Anahtar algoritması |
fSigAlg | RSA-SHA256 | İmza algoritması |
fVersion | 3 | Sertifika versiyonu |
fNotAfter | 240507115021Z | Sertifika bitiş tarihi |
fNotBefore | 230508115021Z | Sertifika başlangıç tarihi |
fClientDn | /C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com | TR7'nin frontend'de sunduğu sertifikanın subject DN'i (istemci sertifikası değil) |
fIssuerDn | /C=TR/ST=ANK/L=ANK/O=TR7/OU=TR7/CN=new.tr7.com | Aynı sertifikanın issuer DN'i; örnekte subject ile aynı olması sertifikanın kendinden imzalı olduğunu gösterir |
ssl Nesnesi: Kurum Servisi SSL/TLS Bilgileri
Aynı ssl nesnesi, TR7 ile Kurum Servisi arasındaki bağlantının TLS bilgilerini s önekli alanlarda taşır. Kurum Servisine şifresiz bağlanıldığında bu alanların tamamı - olur. Her iki örnek logda da alanlar - gelir; ancak nedenleri farklıdır: birincisinde bağlantı şifresiz kurulmuştur, ikincisinde (WAF bloku) Kurum Servisine hiç bağlanılmamıştır.
| Alan | Açıklama |
|---|---|
sAlgKeysize | Anahtar boyutu (bit) |
sCipher | Cipher suite |
sProtocol | TLS protokol versiyonu |
sNpn | NPN protokolü |
sAlpn | ALPN protokolü |
sKeyAlg | Anahtar algoritması |
sSigAlg | İmza algoritması |
sVersion | Sertifika versiyonu |
sNotAfter | Sertifika bitiş tarihi |
sNotBefore | Sertifika başlangıç tarihi |
sClientDn | Sertifika subject DN |
sIssuerDn | Sertifika issuer DN |
request (HTTP İstek)
| Alan | Örnek | Açıklama |
|---|---|---|
method | GET | HTTP metodu |
uri | /login.php | İstek URI'si |
protocol | HTTP/1.1 | HTTP protokol versiyonu |
headers | host: test.tr7.com\r\n... | İstek başlıkları; satır sonları \r\n olarak kaçışlanır. En fazla 4096 bayt yakalanır, fazlası kesilir. |
response (HTTP Yanıt)
| Alan | Örnek | Açıklama |
|---|---|---|
status_code | 200 | HTTP yanıt durum kodu. WAF blokunda TR7'nin ürettiği kod yazılır (örnekte 418). |
headers | date: Wed, 09 Sep 2026 ... | Yanıt başlıkları; en fazla 4096 bayt yakalanır. TR7'nin kendi ürettiği yanıtlarda - yazılır. |
ids (Tanımlayıcılar)
| Alan | Örnek | Açıklama |
|---|---|---|
p | lbPools-mtudin0c__lb | Yük dengeleme konteynerinin adı: <vService ID>__lb. Ham vService ID bu değerin __lb soneki atılmış hâlidir. |
b | DBE | Backend tanımlayıcısı |
f | DFE~ | Frontend tanımlayıcısı. Sondaki ~ işareti bağlantının TLS ile sonlandırıldığını gösterir; şifresiz bir frontend'de DFE olarak yazılır. |
s | lbBackends-mrdk4wpm | Kurum Servisi ID |
INFO
İstek hiçbir Kurum Servisine gönderilmediğinde s alanı <NOSRV> olur; WAF blokunun örneğinde bu değer görülür. Aynı istekte b alanı da DBE yerine DFE yazılır.
bytes (Veri Transferi)
| Alan | Örnek | Açıklama |
|---|---|---|
uploaded | 632 | İstemciden alınan byte |
read | 1011 | İstemciye gönderilen byte. WAF blokunda istemciye gövde gönderilmediği için 0 olur. |
resFrom (Yanıt Kaynağı)
| Alan | Örnek | Açıklama |
|---|---|---|
resFrom | - | Yanıtın kaynağı; bu sürümde her zaman - gönderilir |
WAF Alanları
| Alan | Örnek | Açıklama |
|---|---|---|
isWafAttack | 1 ya da - | İsteğin WAF tarafından engellenip engellenmediği |
wafInfo | {...} | WAF olay detayları; saldırı yoksa {} |
isWafAttack "saldırı var mı" demek değildir
Alan yalnızca engelleme gerçekleştiğinde 1 olur. Monitor modunda ya da izleme modundaki bir kural eşleştiğinde wafInfo dolu gelir ("action":"monitor") ama isWafAttack 1 olmaz. Saldırı olup olmadığını anlamak için wafInfo alanının boş ({}) olup olmadığına bakılır.
wafInfo Yapısı
WAF hiçbir eşleşme bulmadığında wafInfo boş bir nesnedir ({}). Bir kural eşleştiğinde wafInfo dolar; isWafAttack ise yalnızca istek gerçekten engellendiğinde 1 olur. Dolu bir wafInfo ile isWafAttack alanının 1 olmaması, eşleşmenin yalnızca izlendiği anlamına gelir. Yapı şöyledir:
{
"isWafAttack": "1",
"wafInfo": {
"totalScore": 8,
"uid": "AC10652A:FA886AA19AE3:204001F",
"action": "block",
"wafTime": 1.343,
"attacks": [
{
"payload": "/cmd.exe",
"scope": "path",
"monitor": false,
"score": 8,
"id": 130005
}
]
}
}| Alan | Açıklama |
|---|---|
totalScore | Yalnızca monitor: false olan eşleşmelerin skor toplamı. İzleme modundaki kurallar listede gerçek skorlarıyla görünür ama toplama katılmaz; öğrenme modunda toplam 0 kalır. |
uid | Benzersiz olay tanımlayıcısı |
action | Uygulanan aksiyon: block (engellendi) · monitor (yalnızca kaydedildi) · fpc (yanlış-pozitif temizleyici kapsamı) |
wafTime | WAF'ın istekte harcadığı CPU süresi (ms) |
attacks | Tespit edilen eşleşmelerin listesi. Aynı istekte birden fazla kural eşleşebileceği gibi aynı kural birden çok kez de listeye girebilir. |
attacks[].payload | Tespit edilen zararlı içerik. Kural payload üretmiyorsa yerine kuralın açıklaması yazılır; WAF profilinden tamamen kapatılabilir. |
attacks[].scope | Tespit edilen bileşen: path · query · header · form · json · xml · raw |
attacks[].monitor | Kuralın kendi durumu: true ise bu kuralın skoru toplama katılmaz. Tek başına isteğin engellenip engellenmediğini göstermez. |
attacks[].score | Kural skoru |
attacks[].id | WAF kural ID'si. Koşulsuz basılan tek alandır. |
INFO
Alanların sırası sabit değildir; JSON ayrıştırılırken anahtar adına göre okunmalıdır. score, scope, monitor ve payload alanları WAF profilindeki log alanı seçimine bağlıdır ve kapatılabilir; ek olarak severity ve kural meta bilgileri (name, desc, category, cwe, mitre, capec, owaspWeb, owaspApi, target) eklenebilir.
WAF zaman aşımı kaydı bu şemayı taşımaz
WAF taraması zaman aşımına uğradığında üretilen sentetik kayıtta uid ve action alanları bulunmaz; attacks girdisi de payload ve monitor taşımaz. Kayıt totalScore 100, id 369999 ve wafTime 2000 değerleriyle gelir ve isWafAttack gerçek bir saldırı olmadan 1 olur.
