[{"data":1,"prerenderedAt":3094},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-logging":91,"-quayel-gateway-logging-surround":3093},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":90},"Quayel Gateway","i-lucide-network","\u002Fquayel-gateway","quayel-gateway",[10,29,68],{"title":11,"icon":12,"path":13,"stem":14,"children":15},"Getting Started","i-lucide-rocket","\u002Fquayel-gateway\u002Fgetting-started","quayel-gateway\u002F01.getting-started\u002Findex",[16,19,24],{"title":17,"path":13,"stem":14,"icon":18},"Introduction","i-lucide-book-open",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fquayel-gateway\u002Fgetting-started\u002Finstallation","quayel-gateway\u002F01.getting-started\u002F1.installation","i-lucide-container",{"title":25,"path":26,"stem":27,"icon":28},"Project Structure","\u002Fquayel-gateway\u002Fgetting-started\u002Fproject-structure","quayel-gateway\u002F01.getting-started\u002F2.project-structure","i-lucide-folder-tree",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Plugins","i-lucide-puzzle","\u002Fquayel-gateway\u002Fplugins","quayel-gateway\u002F02.plugins\u002Findex",[35,38,43,48,53,58,63],{"title":36,"path":32,"stem":33,"icon":37},"Overview","i-lucide-workflow",{"title":39,"path":40,"stem":41,"icon":42},"IP Intelligence","\u002Fquayel-gateway\u002Fplugins\u002Fip-intel","quayel-gateway\u002F02.plugins\u002F1.ip-intel","i-lucide-radar",{"title":44,"path":45,"stem":46,"icon":47},"Firewall","\u002Fquayel-gateway\u002Fplugins\u002Ffirewall","quayel-gateway\u002F02.plugins\u002F2.firewall","i-lucide-shield",{"title":49,"path":50,"stem":51,"icon":52},"Rate Limiting","\u002Fquayel-gateway\u002Fplugins\u002Frate-limiting","quayel-gateway\u002F02.plugins\u002F3.rate-limiting","i-lucide-gauge",{"title":54,"path":55,"stem":56,"icon":57},"Cache","\u002Fquayel-gateway\u002Fplugins\u002Fcache","quayel-gateway\u002F02.plugins\u002F4.cache","i-lucide-database",{"title":59,"path":60,"stem":61,"icon":62},"Load Balancer","\u002Fquayel-gateway\u002Fplugins\u002Fload-balancer","quayel-gateway\u002F02.plugins\u002F5.load-balancer","i-lucide-scale",{"title":64,"path":65,"stem":66,"icon":67},"Auto-SSL","\u002Fquayel-gateway\u002Fplugins\u002Fauto-ssl","quayel-gateway\u002F02.plugins\u002F6.auto-ssl","i-lucide-lock",{"title":69,"icon":70,"path":71,"stem":72,"children":73},"AI","i-lucide-bot","\u002Fquayel-gateway\u002Fai","quayel-gateway\u002F03.ai\u002Findex",[74,75,80,85],{"title":36,"path":71,"stem":72,"icon":70},{"title":76,"path":77,"stem":78,"icon":79},"The Quayel Gateway Skill","\u002Fquayel-gateway\u002Fai\u002Fskill","quayel-gateway\u002F03.ai\u002F1.skill","i-lucide-wand-sparkles",{"title":81,"path":82,"stem":83,"icon":84},"Installing the Skill","\u002Fquayel-gateway\u002Fai\u002Finstallation","quayel-gateway\u002F03.ai\u002F2.installation","i-lucide-download",{"title":86,"path":87,"stem":88,"icon":89},"AI Agent Guide","\u002Fquayel-gateway\u002Fai\u002Fagent-guide","quayel-gateway\u002F03.ai\u002F3.agent-guide","i-lucide-braces",false,{"id":92,"title":93,"body":94,"description":3085,"extension":3086,"links":3087,"meta":3088,"navigation":90,"path":3089,"seo":3090,"stem":3091,"__hash__":3092},"docs\u002Fquayel-gateway\u002F07.logging.md","Logging",{"type":95,"value":96,"toc":3052},"minimark",[97,101,105,110,296,406,410,413,832,836,841,921,925,972,976,1034,1038,1064,1067,1188,1254,1258,1463,1470,1472,1553,1602,1606,1693,1740,1742,1828,1867,1872,1963,1967,2074,2122,2126,2155,2226,2230,2376,2379,2463,2467,2471,2532,2536,2566,2570,2593,2597,2631,2635,2684,2688,2734,2738,2760,2764,2786,2790,2904,2908,2976,2980,3002,3006,3013,3021,3025,3048],[98,99,93],"h1",{"id":100},"logging",[102,103,104],"p",{},"The gateway produces structured JSONL (JSON Lines) access logs — one JSON object per request.",[106,107,109],"h2",{"id":108},"configuration","Configuration",[111,112,117],"pre",{"className":113,"code":114,"language":115,"meta":116,"style":116},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"plugins\": {\n    \"logging\": {\n      \"enabled\": true,\n      \"mode\": \"file\",\n      \"file\": {\n        \"path\": \"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl\",\n        \"buffer_size\": 8192,\n        \"flush_interval_ms\": 1000\n      }\n    }\n  }\n}\n","json","",[118,119,120,129,148,163,180,204,217,240,257,272,278,284,290],"code",{"__ignoreMap":116},[121,122,125],"span",{"class":123,"line":124},"line",1,[121,126,128],{"class":127},"sMK4o","{\n",[121,130,132,135,139,142,145],{"class":123,"line":131},2,[121,133,134],{"class":127},"  \"",[121,136,138],{"class":137},"spNyl","plugins",[121,140,141],{"class":127},"\"",[121,143,144],{"class":127},":",[121,146,147],{"class":127}," {\n",[121,149,151,154,157,159,161],{"class":123,"line":150},3,[121,152,153],{"class":127},"    \"",[121,155,100],{"class":156},"sBMFI",[121,158,141],{"class":127},[121,160,144],{"class":127},[121,162,147],{"class":127},[121,164,166,169,173,175,177],{"class":123,"line":165},4,[121,167,168],{"class":127},"      \"",[121,170,172],{"class":171},"sbssI","enabled",[121,174,141],{"class":127},[121,176,144],{"class":127},[121,178,179],{"class":127}," true,\n",[121,181,183,185,188,190,192,195,199,201],{"class":123,"line":182},5,[121,184,168],{"class":127},[121,186,187],{"class":171},"mode",[121,189,141],{"class":127},[121,191,144],{"class":127},[121,193,194],{"class":127}," \"",[121,196,198],{"class":197},"sfazB","file",[121,200,141],{"class":127},[121,202,203],{"class":127},",\n",[121,205,207,209,211,213,215],{"class":123,"line":206},6,[121,208,168],{"class":127},[121,210,198],{"class":171},[121,212,141],{"class":127},[121,214,144],{"class":127},[121,216,147],{"class":127},[121,218,220,223,227,229,231,233,236,238],{"class":123,"line":219},7,[121,221,222],{"class":127},"        \"",[121,224,226],{"class":225},"swJcz","path",[121,228,141],{"class":127},[121,230,144],{"class":127},[121,232,194],{"class":127},[121,234,235],{"class":197},"\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl",[121,237,141],{"class":127},[121,239,203],{"class":127},[121,241,243,245,248,250,252,255],{"class":123,"line":242},8,[121,244,222],{"class":127},[121,246,247],{"class":225},"buffer_size",[121,249,141],{"class":127},[121,251,144],{"class":127},[121,253,254],{"class":171}," 8192",[121,256,203],{"class":127},[121,258,260,262,265,267,269],{"class":123,"line":259},9,[121,261,222],{"class":127},[121,263,264],{"class":225},"flush_interval_ms",[121,266,141],{"class":127},[121,268,144],{"class":127},[121,270,271],{"class":171}," 1000\n",[121,273,275],{"class":123,"line":274},10,[121,276,277],{"class":127},"      }\n",[121,279,281],{"class":123,"line":280},11,[121,282,283],{"class":127},"    }\n",[121,285,287],{"class":123,"line":286},12,[121,288,289],{"class":127},"  }\n",[121,291,293],{"class":123,"line":292},13,[121,294,295],{"class":127},"}\n",[297,298,299,318],"table",{},[300,301,302],"thead",{},[303,304,305,309,312,315],"tr",{},[306,307,308],"th",{},"Field",[306,310,311],{},"Type",[306,313,314],{},"Default",[306,316,317],{},"Description",[319,320,321,339,356,371,389],"tbody",{},[303,322,323,328,331,336],{},[324,325,326],"td",{},[118,327,172],{},[324,329,330],{},"bool",[324,332,333],{},[118,334,335],{},"true",[324,337,338],{},"Enable\u002Fdisable logging",[303,340,341,345,348,353],{},[324,342,343],{},[118,344,187],{},[324,346,347],{},"string",[324,349,350],{},[118,351,352],{},"\"file\"",[324,354,355],{},"Log mode",[303,357,358,363,365,368],{},[324,359,360],{},[118,361,362],{},"file.path",[324,364,347],{},[324,366,367],{},"—",[324,369,370],{},"Path to JSONL log file",[303,372,373,378,381,386],{},[324,374,375],{},[118,376,377],{},"file.buffer_size",[324,379,380],{},"int",[324,382,383],{},[118,384,385],{},"8192",[324,387,388],{},"Write buffer size",[303,390,391,396,398,403],{},[324,392,393],{},[118,394,395],{},"file.flush_interval_ms",[324,397,380],{},[324,399,400],{},[118,401,402],{},"1000",[324,404,405],{},"Flush interval",[106,407,409],{"id":408},"log-format","Log format",[102,411,412],{},"Each line is a complete JSON object:",[111,414,416],{"className":113,"code":415,"language":115,"meta":116,"style":116},"{\n  \"timestamp\": \"2026-01-15T10:30:45.123456789+00:00\",\n  \"gateway_id\": \"gw-prod-01\",\n  \"gateway_name\": \"production\",\n  \"server_name\": \"api.example.com\",\n  \"config_version\": \"2026-01-15-001\",\n  \"request_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n  \"client_ip\": \"203.0.113.50\",\n  \"peer_ip\": \"203.0.113.50\",\n  \"client_ip_source\": \"X-Forwarded-For\",\n  \"method\": \"GET\",\n  \"scheme\": \"https\",\n  \"host\": \"api.example.com\",\n  \"path\": \"\u002Fapi\u002Fv1\u002Fusers\",\n  \"response_status\": 200,\n  \"bandwidth\": { },\n  \"ip_intel\": { },\n  \"firewall\": { },\n  \"rate_limit\": { },\n  \"cache\": { },\n  \"load_balancer\": { },\n  \"termination_phase\": null,\n  \"timings_us\": { }\n}\n",[118,417,418,422,442,462,482,502,522,542,562,581,601,621,641,660,680,697,715,731,747,763,779,795,810,827],{"__ignoreMap":116},[121,419,420],{"class":123,"line":124},[121,421,128],{"class":127},[121,423,424,426,429,431,433,435,438,440],{"class":123,"line":131},[121,425,134],{"class":127},[121,427,428],{"class":137},"timestamp",[121,430,141],{"class":127},[121,432,144],{"class":127},[121,434,194],{"class":127},[121,436,437],{"class":197},"2026-01-15T10:30:45.123456789+00:00",[121,439,141],{"class":127},[121,441,203],{"class":127},[121,443,444,446,449,451,453,455,458,460],{"class":123,"line":150},[121,445,134],{"class":127},[121,447,448],{"class":137},"gateway_id",[121,450,141],{"class":127},[121,452,144],{"class":127},[121,454,194],{"class":127},[121,456,457],{"class":197},"gw-prod-01",[121,459,141],{"class":127},[121,461,203],{"class":127},[121,463,464,466,469,471,473,475,478,480],{"class":123,"line":165},[121,465,134],{"class":127},[121,467,468],{"class":137},"gateway_name",[121,470,141],{"class":127},[121,472,144],{"class":127},[121,474,194],{"class":127},[121,476,477],{"class":197},"production",[121,479,141],{"class":127},[121,481,203],{"class":127},[121,483,484,486,489,491,493,495,498,500],{"class":123,"line":182},[121,485,134],{"class":127},[121,487,488],{"class":137},"server_name",[121,490,141],{"class":127},[121,492,144],{"class":127},[121,494,194],{"class":127},[121,496,497],{"class":197},"api.example.com",[121,499,141],{"class":127},[121,501,203],{"class":127},[121,503,504,506,509,511,513,515,518,520],{"class":123,"line":206},[121,505,134],{"class":127},[121,507,508],{"class":137},"config_version",[121,510,141],{"class":127},[121,512,144],{"class":127},[121,514,194],{"class":127},[121,516,517],{"class":197},"2026-01-15-001",[121,519,141],{"class":127},[121,521,203],{"class":127},[121,523,524,526,529,531,533,535,538,540],{"class":123,"line":219},[121,525,134],{"class":127},[121,527,528],{"class":137},"request_id",[121,530,141],{"class":127},[121,532,144],{"class":127},[121,534,194],{"class":127},[121,536,537],{"class":197},"a1b2c3d4-e5f6-7890-abcd-ef1234567890",[121,539,141],{"class":127},[121,541,203],{"class":127},[121,543,544,546,549,551,553,555,558,560],{"class":123,"line":242},[121,545,134],{"class":127},[121,547,548],{"class":137},"client_ip",[121,550,141],{"class":127},[121,552,144],{"class":127},[121,554,194],{"class":127},[121,556,557],{"class":197},"203.0.113.50",[121,559,141],{"class":127},[121,561,203],{"class":127},[121,563,564,566,569,571,573,575,577,579],{"class":123,"line":259},[121,565,134],{"class":127},[121,567,568],{"class":137},"peer_ip",[121,570,141],{"class":127},[121,572,144],{"class":127},[121,574,194],{"class":127},[121,576,557],{"class":197},[121,578,141],{"class":127},[121,580,203],{"class":127},[121,582,583,585,588,590,592,594,597,599],{"class":123,"line":274},[121,584,134],{"class":127},[121,586,587],{"class":137},"client_ip_source",[121,589,141],{"class":127},[121,591,144],{"class":127},[121,593,194],{"class":127},[121,595,596],{"class":197},"X-Forwarded-For",[121,598,141],{"class":127},[121,600,203],{"class":127},[121,602,603,605,608,610,612,614,617,619],{"class":123,"line":280},[121,604,134],{"class":127},[121,606,607],{"class":137},"method",[121,609,141],{"class":127},[121,611,144],{"class":127},[121,613,194],{"class":127},[121,615,616],{"class":197},"GET",[121,618,141],{"class":127},[121,620,203],{"class":127},[121,622,623,625,628,630,632,634,637,639],{"class":123,"line":286},[121,624,134],{"class":127},[121,626,627],{"class":137},"scheme",[121,629,141],{"class":127},[121,631,144],{"class":127},[121,633,194],{"class":127},[121,635,636],{"class":197},"https",[121,638,141],{"class":127},[121,640,203],{"class":127},[121,642,643,645,648,650,652,654,656,658],{"class":123,"line":292},[121,644,134],{"class":127},[121,646,647],{"class":137},"host",[121,649,141],{"class":127},[121,651,144],{"class":127},[121,653,194],{"class":127},[121,655,497],{"class":197},[121,657,141],{"class":127},[121,659,203],{"class":127},[121,661,663,665,667,669,671,673,676,678],{"class":123,"line":662},14,[121,664,134],{"class":127},[121,666,226],{"class":137},[121,668,141],{"class":127},[121,670,144],{"class":127},[121,672,194],{"class":127},[121,674,675],{"class":197},"\u002Fapi\u002Fv1\u002Fusers",[121,677,141],{"class":127},[121,679,203],{"class":127},[121,681,683,685,688,690,692,695],{"class":123,"line":682},15,[121,684,134],{"class":127},[121,686,687],{"class":137},"response_status",[121,689,141],{"class":127},[121,691,144],{"class":127},[121,693,694],{"class":171}," 200",[121,696,203],{"class":127},[121,698,700,702,705,707,709,712],{"class":123,"line":699},16,[121,701,134],{"class":127},[121,703,704],{"class":137},"bandwidth",[121,706,141],{"class":127},[121,708,144],{"class":127},[121,710,711],{"class":127}," {",[121,713,714],{"class":127}," },\n",[121,716,718,720,723,725,727,729],{"class":123,"line":717},17,[121,719,134],{"class":127},[121,721,722],{"class":137},"ip_intel",[121,724,141],{"class":127},[121,726,144],{"class":127},[121,728,711],{"class":127},[121,730,714],{"class":127},[121,732,734,736,739,741,743,745],{"class":123,"line":733},18,[121,735,134],{"class":127},[121,737,738],{"class":137},"firewall",[121,740,141],{"class":127},[121,742,144],{"class":127},[121,744,711],{"class":127},[121,746,714],{"class":127},[121,748,750,752,755,757,759,761],{"class":123,"line":749},19,[121,751,134],{"class":127},[121,753,754],{"class":137},"rate_limit",[121,756,141],{"class":127},[121,758,144],{"class":127},[121,760,711],{"class":127},[121,762,714],{"class":127},[121,764,766,768,771,773,775,777],{"class":123,"line":765},20,[121,767,134],{"class":127},[121,769,770],{"class":137},"cache",[121,772,141],{"class":127},[121,774,144],{"class":127},[121,776,711],{"class":127},[121,778,714],{"class":127},[121,780,782,784,787,789,791,793],{"class":123,"line":781},21,[121,783,134],{"class":127},[121,785,786],{"class":137},"load_balancer",[121,788,141],{"class":127},[121,790,144],{"class":127},[121,792,711],{"class":127},[121,794,714],{"class":127},[121,796,798,800,803,805,807],{"class":123,"line":797},22,[121,799,134],{"class":127},[121,801,802],{"class":137},"termination_phase",[121,804,141],{"class":127},[121,806,144],{"class":127},[121,808,809],{"class":127}," null,\n",[121,811,813,815,818,820,822,824],{"class":123,"line":812},23,[121,814,134],{"class":127},[121,816,817],{"class":137},"timings_us",[121,819,141],{"class":127},[121,821,144],{"class":127},[121,823,711],{"class":127},[121,825,826],{"class":127}," }\n",[121,828,830],{"class":123,"line":829},24,[121,831,295],{"class":127},[106,833,835],{"id":834},"fields-reference","Fields reference",[837,838,840],"h3",{"id":839},"identity","Identity",[297,842,843,853],{},[300,844,845],{},[303,846,847,849,851],{},[306,848,308],{},[306,850,311],{},[306,852,317],{},[319,854,855,866,877,888,899,910],{},[303,856,857,861,863],{},[324,858,859],{},[118,860,428],{},[324,862,347],{},[324,864,865],{},"ISO 8601 timestamp with nanoseconds",[303,867,868,872,874],{},[324,869,870],{},[118,871,448],{},[324,873,347],{},[324,875,876],{},"Gateway instance ID",[303,878,879,883,885],{},[324,880,881],{},[118,882,468],{},[324,884,347],{},[324,886,887],{},"Gateway name",[303,889,890,894,896],{},[324,891,892],{},[118,893,488],{},[324,895,347],{},[324,897,898],{},"Server name",[303,900,901,905,907],{},[324,902,903],{},[118,904,508],{},[324,906,347],{},[324,908,909],{},"Config version string",[303,911,912,916,918],{},[324,913,914],{},[118,915,528],{},[324,917,347],{},[324,919,920],{},"UUID v4 unique request ID",[837,922,924],{"id":923},"client","Client",[297,926,927,937],{},[300,928,929],{},[303,930,931,933,935],{},[306,932,308],{},[306,934,311],{},[306,936,317],{},[319,938,939,950,961],{},[303,940,941,945,947],{},[324,942,943],{},[118,944,548],{},[324,946,347],{},[324,948,949],{},"Resolved real client IP",[303,951,952,956,958],{},[324,953,954],{},[118,955,568],{},[324,957,347],{},[324,959,960],{},"Direct TCP connection IP",[303,962,963,967,969],{},[324,964,965],{},[118,966,587],{},[324,968,347],{},[324,970,971],{},"How client_ip was determined",[837,973,975],{"id":974},"http","HTTP",[297,977,978,988],{},[300,979,980],{},[303,981,982,984,986],{},[306,983,308],{},[306,985,311],{},[306,987,317],{},[319,989,990,1001,1012,1023],{},[303,991,992,996,998],{},[324,993,994],{},[118,995,607],{},[324,997,347],{},[324,999,1000],{},"HTTP method",[303,1002,1003,1007,1009],{},[324,1004,1005],{},[118,1006,627],{},[324,1008,347],{},[324,1010,1011],{},"Request scheme (http\u002Fhttps)",[303,1013,1014,1018,1020],{},[324,1015,1016],{},[118,1017,647],{},[324,1019,347],{},[324,1021,1022],{},"Request host",[303,1024,1025,1029,1031],{},[324,1026,1027],{},[118,1028,226],{},[324,1030,347],{},[324,1032,1033],{},"Request path (including query string)",[837,1035,1037],{"id":1036},"response","Response",[297,1039,1040,1050],{},[300,1041,1042],{},[303,1043,1044,1046,1048],{},[306,1045,308],{},[306,1047,311],{},[306,1049,317],{},[319,1051,1052],{},[303,1053,1054,1058,1061],{},[324,1055,1056],{},[118,1057,687],{},[324,1059,1060],{},"number",[324,1062,1063],{},"HTTP response status code",[837,1065,1066],{"id":704},"Bandwidth",[111,1068,1070],{"className":113,"code":1069,"language":115,"meta":116,"style":116},"{\n  \"bandwidth\": {\n    \"client_bytes_in\": 1234,\n    \"client_bytes_out\": 5678,\n    \"total_client_bytes\": 6912,\n    \"upstream_bytes_out\": 1234,\n    \"upstream_bytes_in\": 5678,\n    \"total_origin_bytes\": 6912\n  }\n}\n",[118,1071,1072,1076,1088,1104,1120,1136,1151,1166,1180,1184],{"__ignoreMap":116},[121,1073,1074],{"class":123,"line":124},[121,1075,128],{"class":127},[121,1077,1078,1080,1082,1084,1086],{"class":123,"line":131},[121,1079,134],{"class":127},[121,1081,704],{"class":137},[121,1083,141],{"class":127},[121,1085,144],{"class":127},[121,1087,147],{"class":127},[121,1089,1090,1092,1095,1097,1099,1102],{"class":123,"line":150},[121,1091,153],{"class":127},[121,1093,1094],{"class":156},"client_bytes_in",[121,1096,141],{"class":127},[121,1098,144],{"class":127},[121,1100,1101],{"class":171}," 1234",[121,1103,203],{"class":127},[121,1105,1106,1108,1111,1113,1115,1118],{"class":123,"line":165},[121,1107,153],{"class":127},[121,1109,1110],{"class":156},"client_bytes_out",[121,1112,141],{"class":127},[121,1114,144],{"class":127},[121,1116,1117],{"class":171}," 5678",[121,1119,203],{"class":127},[121,1121,1122,1124,1127,1129,1131,1134],{"class":123,"line":182},[121,1123,153],{"class":127},[121,1125,1126],{"class":156},"total_client_bytes",[121,1128,141],{"class":127},[121,1130,144],{"class":127},[121,1132,1133],{"class":171}," 6912",[121,1135,203],{"class":127},[121,1137,1138,1140,1143,1145,1147,1149],{"class":123,"line":206},[121,1139,153],{"class":127},[121,1141,1142],{"class":156},"upstream_bytes_out",[121,1144,141],{"class":127},[121,1146,144],{"class":127},[121,1148,1101],{"class":171},[121,1150,203],{"class":127},[121,1152,1153,1155,1158,1160,1162,1164],{"class":123,"line":219},[121,1154,153],{"class":127},[121,1156,1157],{"class":156},"upstream_bytes_in",[121,1159,141],{"class":127},[121,1161,144],{"class":127},[121,1163,1117],{"class":171},[121,1165,203],{"class":127},[121,1167,1168,1170,1173,1175,1177],{"class":123,"line":242},[121,1169,153],{"class":127},[121,1171,1172],{"class":156},"total_origin_bytes",[121,1174,141],{"class":127},[121,1176,144],{"class":127},[121,1178,1179],{"class":171}," 6912\n",[121,1181,1182],{"class":123,"line":259},[121,1183,289],{"class":127},[121,1185,1186],{"class":123,"line":274},[121,1187,295],{"class":127},[297,1189,1190,1198],{},[300,1191,1192],{},[303,1193,1194,1196],{},[306,1195,308],{},[306,1197,317],{},[319,1199,1200,1209,1218,1227,1236,1245],{},[303,1201,1202,1206],{},[324,1203,1204],{},[118,1205,1094],{},[324,1207,1208],{},"Bytes received from client",[303,1210,1211,1215],{},[324,1212,1213],{},[118,1214,1110],{},[324,1216,1217],{},"Bytes sent to client",[303,1219,1220,1224],{},[324,1221,1222],{},[118,1223,1126],{},[324,1225,1226],{},"client_bytes_in + client_bytes_out",[303,1228,1229,1233],{},[324,1230,1231],{},[118,1232,1142],{},[324,1234,1235],{},"Bytes sent to upstream",[303,1237,1238,1242],{},[324,1239,1240],{},[118,1241,1157],{},[324,1243,1244],{},"Bytes received from upstream",[303,1246,1247,1251],{},[324,1248,1249],{},[118,1250,1172],{},[324,1252,1253],{},"upstream_bytes_out + upstream_bytes_in",[837,1255,1257],{"id":1256},"ip-intelligence","IP intelligence",[111,1259,1261],{"className":113,"code":1260,"language":115,"meta":116,"style":116},"{\n  \"ip_intel\": {\n    \"country\": \"US\",\n    \"region\": \"CA\",\n    \"asn\": 16509,\n    \"provider\": \"Amazon AWS\",\n    \"network_type\": \"datacenter\",\n    \"is_vpn\": false,\n    \"is_proxy\": false,\n    \"is_datacenter\": true,\n    \"is_mobile\": null,\n    \"is_tor\": false,\n    \"risk_score\": 10\n  }\n}\n",[118,1262,1263,1267,1279,1299,1319,1335,1355,1375,1389,1402,1415,1428,1441,1455,1459],{"__ignoreMap":116},[121,1264,1265],{"class":123,"line":124},[121,1266,128],{"class":127},[121,1268,1269,1271,1273,1275,1277],{"class":123,"line":131},[121,1270,134],{"class":127},[121,1272,722],{"class":137},[121,1274,141],{"class":127},[121,1276,144],{"class":127},[121,1278,147],{"class":127},[121,1280,1281,1283,1286,1288,1290,1292,1295,1297],{"class":123,"line":150},[121,1282,153],{"class":127},[121,1284,1285],{"class":156},"country",[121,1287,141],{"class":127},[121,1289,144],{"class":127},[121,1291,194],{"class":127},[121,1293,1294],{"class":197},"US",[121,1296,141],{"class":127},[121,1298,203],{"class":127},[121,1300,1301,1303,1306,1308,1310,1312,1315,1317],{"class":123,"line":165},[121,1302,153],{"class":127},[121,1304,1305],{"class":156},"region",[121,1307,141],{"class":127},[121,1309,144],{"class":127},[121,1311,194],{"class":127},[121,1313,1314],{"class":197},"CA",[121,1316,141],{"class":127},[121,1318,203],{"class":127},[121,1320,1321,1323,1326,1328,1330,1333],{"class":123,"line":182},[121,1322,153],{"class":127},[121,1324,1325],{"class":156},"asn",[121,1327,141],{"class":127},[121,1329,144],{"class":127},[121,1331,1332],{"class":171}," 16509",[121,1334,203],{"class":127},[121,1336,1337,1339,1342,1344,1346,1348,1351,1353],{"class":123,"line":206},[121,1338,153],{"class":127},[121,1340,1341],{"class":156},"provider",[121,1343,141],{"class":127},[121,1345,144],{"class":127},[121,1347,194],{"class":127},[121,1349,1350],{"class":197},"Amazon AWS",[121,1352,141],{"class":127},[121,1354,203],{"class":127},[121,1356,1357,1359,1362,1364,1366,1368,1371,1373],{"class":123,"line":219},[121,1358,153],{"class":127},[121,1360,1361],{"class":156},"network_type",[121,1363,141],{"class":127},[121,1365,144],{"class":127},[121,1367,194],{"class":127},[121,1369,1370],{"class":197},"datacenter",[121,1372,141],{"class":127},[121,1374,203],{"class":127},[121,1376,1377,1379,1382,1384,1386],{"class":123,"line":242},[121,1378,153],{"class":127},[121,1380,1381],{"class":156},"is_vpn",[121,1383,141],{"class":127},[121,1385,144],{"class":127},[121,1387,1388],{"class":127}," false,\n",[121,1390,1391,1393,1396,1398,1400],{"class":123,"line":259},[121,1392,153],{"class":127},[121,1394,1395],{"class":156},"is_proxy",[121,1397,141],{"class":127},[121,1399,144],{"class":127},[121,1401,1388],{"class":127},[121,1403,1404,1406,1409,1411,1413],{"class":123,"line":274},[121,1405,153],{"class":127},[121,1407,1408],{"class":156},"is_datacenter",[121,1410,141],{"class":127},[121,1412,144],{"class":127},[121,1414,179],{"class":127},[121,1416,1417,1419,1422,1424,1426],{"class":123,"line":280},[121,1418,153],{"class":127},[121,1420,1421],{"class":156},"is_mobile",[121,1423,141],{"class":127},[121,1425,144],{"class":127},[121,1427,809],{"class":127},[121,1429,1430,1432,1435,1437,1439],{"class":123,"line":286},[121,1431,153],{"class":127},[121,1433,1434],{"class":156},"is_tor",[121,1436,141],{"class":127},[121,1438,144],{"class":127},[121,1440,1388],{"class":127},[121,1442,1443,1445,1448,1450,1452],{"class":123,"line":292},[121,1444,153],{"class":127},[121,1446,1447],{"class":156},"risk_score",[121,1449,141],{"class":127},[121,1451,144],{"class":127},[121,1453,1454],{"class":171}," 10\n",[121,1456,1457],{"class":123,"line":662},[121,1458,289],{"class":127},[121,1460,1461],{"class":123,"line":682},[121,1462,295],{"class":127},[102,1464,1465,1466,1469],{},"See ",[1467,1468,39],"a",{"href":40}," for field details.",[837,1471,44],{"id":738},[111,1473,1475],{"className":113,"code":1474,"language":115,"meta":116,"style":116},"{\n  \"firewall\": {\n    \"matched\": true,\n    \"rule_id\": \"block-tor\",\n    \"action\": \"Block\"\n  }\n}\n",[118,1476,1477,1481,1493,1506,1526,1545,1549],{"__ignoreMap":116},[121,1478,1479],{"class":123,"line":124},[121,1480,128],{"class":127},[121,1482,1483,1485,1487,1489,1491],{"class":123,"line":131},[121,1484,134],{"class":127},[121,1486,738],{"class":137},[121,1488,141],{"class":127},[121,1490,144],{"class":127},[121,1492,147],{"class":127},[121,1494,1495,1497,1500,1502,1504],{"class":123,"line":150},[121,1496,153],{"class":127},[121,1498,1499],{"class":156},"matched",[121,1501,141],{"class":127},[121,1503,144],{"class":127},[121,1505,179],{"class":127},[121,1507,1508,1510,1513,1515,1517,1519,1522,1524],{"class":123,"line":165},[121,1509,153],{"class":127},[121,1511,1512],{"class":156},"rule_id",[121,1514,141],{"class":127},[121,1516,144],{"class":127},[121,1518,194],{"class":127},[121,1520,1521],{"class":197},"block-tor",[121,1523,141],{"class":127},[121,1525,203],{"class":127},[121,1527,1528,1530,1533,1535,1537,1539,1542],{"class":123,"line":182},[121,1529,153],{"class":127},[121,1531,1532],{"class":156},"action",[121,1534,141],{"class":127},[121,1536,144],{"class":127},[121,1538,194],{"class":127},[121,1540,1541],{"class":197},"Block",[121,1543,1544],{"class":127},"\"\n",[121,1546,1547],{"class":123,"line":206},[121,1548,289],{"class":127},[121,1550,1551],{"class":123,"line":219},[121,1552,295],{"class":127},[297,1554,1555,1563],{},[300,1556,1557],{},[303,1558,1559,1561],{},[306,1560,308],{},[306,1562,317],{},[319,1564,1565,1574,1583],{},[303,1566,1567,1571],{},[324,1568,1569],{},[118,1570,1499],{},[324,1572,1573],{},"Whether any firewall rule matched",[303,1575,1576,1580],{},[324,1577,1578],{},[118,1579,1512],{},[324,1581,1582],{},"ID of the matched rule",[303,1584,1585,1589],{},[324,1586,1587],{},[118,1588,1532],{},[324,1590,1591,1592,1595,1596,1595,1598,1601],{},"Action taken (",[118,1593,1594],{},"Allow",", ",[118,1597,1541],{},[118,1599,1600],{},"Redirect",", etc.)",[837,1603,1605],{"id":1604},"rate-limiting","Rate limiting",[111,1607,1609],{"className":113,"code":1608,"language":115,"meta":116,"style":116},"{\n  \"rate_limit\": {\n    \"matched\": true,\n    \"rule_id\": \"api-limit\",\n    \"blocked\": false,\n    \"remaining\": 87\n  }\n}\n",[118,1610,1611,1615,1627,1639,1658,1671,1685,1689],{"__ignoreMap":116},[121,1612,1613],{"class":123,"line":124},[121,1614,128],{"class":127},[121,1616,1617,1619,1621,1623,1625],{"class":123,"line":131},[121,1618,134],{"class":127},[121,1620,754],{"class":137},[121,1622,141],{"class":127},[121,1624,144],{"class":127},[121,1626,147],{"class":127},[121,1628,1629,1631,1633,1635,1637],{"class":123,"line":150},[121,1630,153],{"class":127},[121,1632,1499],{"class":156},[121,1634,141],{"class":127},[121,1636,144],{"class":127},[121,1638,179],{"class":127},[121,1640,1641,1643,1645,1647,1649,1651,1654,1656],{"class":123,"line":165},[121,1642,153],{"class":127},[121,1644,1512],{"class":156},[121,1646,141],{"class":127},[121,1648,144],{"class":127},[121,1650,194],{"class":127},[121,1652,1653],{"class":197},"api-limit",[121,1655,141],{"class":127},[121,1657,203],{"class":127},[121,1659,1660,1662,1665,1667,1669],{"class":123,"line":182},[121,1661,153],{"class":127},[121,1663,1664],{"class":156},"blocked",[121,1666,141],{"class":127},[121,1668,144],{"class":127},[121,1670,1388],{"class":127},[121,1672,1673,1675,1678,1680,1682],{"class":123,"line":206},[121,1674,153],{"class":127},[121,1676,1677],{"class":156},"remaining",[121,1679,141],{"class":127},[121,1681,144],{"class":127},[121,1683,1684],{"class":171}," 87\n",[121,1686,1687],{"class":123,"line":219},[121,1688,289],{"class":127},[121,1690,1691],{"class":123,"line":242},[121,1692,295],{"class":127},[297,1694,1695,1703],{},[300,1696,1697],{},[303,1698,1699,1701],{},[306,1700,308],{},[306,1702,317],{},[319,1704,1705,1714,1722,1731],{},[303,1706,1707,1711],{},[324,1708,1709],{},[118,1710,1499],{},[324,1712,1713],{},"Whether any rate limit rule matched",[303,1715,1716,1720],{},[324,1717,1718],{},[118,1719,1512],{},[324,1721,1582],{},[303,1723,1724,1728],{},[324,1725,1726],{},[118,1727,1664],{},[324,1729,1730],{},"Whether the request was blocked",[303,1732,1733,1737],{},[324,1734,1735],{},[118,1736,1677],{},[324,1738,1739],{},"Remaining requests in current window",[837,1741,54],{"id":770},[111,1743,1745],{"className":113,"code":1744,"language":115,"meta":116,"style":116},"{\n  \"cache\": {\n    \"rule_id\": \"cache-static\",\n    \"status\": \"HIT\",\n    \"key_hash\": \"a1b2c3d4...\"\n  }\n}\n",[118,1746,1747,1751,1763,1782,1802,1820,1824],{"__ignoreMap":116},[121,1748,1749],{"class":123,"line":124},[121,1750,128],{"class":127},[121,1752,1753,1755,1757,1759,1761],{"class":123,"line":131},[121,1754,134],{"class":127},[121,1756,770],{"class":137},[121,1758,141],{"class":127},[121,1760,144],{"class":127},[121,1762,147],{"class":127},[121,1764,1765,1767,1769,1771,1773,1775,1778,1780],{"class":123,"line":150},[121,1766,153],{"class":127},[121,1768,1512],{"class":156},[121,1770,141],{"class":127},[121,1772,144],{"class":127},[121,1774,194],{"class":127},[121,1776,1777],{"class":197},"cache-static",[121,1779,141],{"class":127},[121,1781,203],{"class":127},[121,1783,1784,1786,1789,1791,1793,1795,1798,1800],{"class":123,"line":165},[121,1785,153],{"class":127},[121,1787,1788],{"class":156},"status",[121,1790,141],{"class":127},[121,1792,144],{"class":127},[121,1794,194],{"class":127},[121,1796,1797],{"class":197},"HIT",[121,1799,141],{"class":127},[121,1801,203],{"class":127},[121,1803,1804,1806,1809,1811,1813,1815,1818],{"class":123,"line":182},[121,1805,153],{"class":127},[121,1807,1808],{"class":156},"key_hash",[121,1810,141],{"class":127},[121,1812,144],{"class":127},[121,1814,194],{"class":127},[121,1816,1817],{"class":197},"a1b2c3d4...",[121,1819,1544],{"class":127},[121,1821,1822],{"class":123,"line":206},[121,1823,289],{"class":127},[121,1825,1826],{"class":123,"line":219},[121,1827,295],{"class":127},[297,1829,1830,1838],{},[300,1831,1832],{},[303,1833,1834,1836],{},[306,1835,308],{},[306,1837,317],{},[319,1839,1840,1849,1858],{},[303,1841,1842,1846],{},[324,1843,1844],{},[118,1845,1512],{},[324,1847,1848],{},"ID of the matched cache rule",[303,1850,1851,1855],{},[324,1852,1853],{},[118,1854,1788],{},[324,1856,1857],{},"Cache status (see below)",[303,1859,1860,1864],{},[324,1861,1862],{},[118,1863,1808],{},[324,1865,1866],{},"Hash of the cache key",[1868,1869,1871],"h4",{"id":1870},"cache-status-values","Cache status values",[297,1873,1874,1883],{},[300,1875,1876],{},[303,1877,1878,1881],{},[306,1879,1880],{},"Status",[306,1882,317],{},[319,1884,1885,1895,1904,1914,1924,1934,1943,1953],{},[303,1886,1887,1892],{},[324,1888,1889],{},[118,1890,1891],{},"NONE",[324,1893,1894],{},"No cache rule matched",[303,1896,1897,1901],{},[324,1898,1899],{},[118,1900,1797],{},[324,1902,1903],{},"Fresh cache hit — served from cache",[303,1905,1906,1911],{},[324,1907,1908],{},[118,1909,1910],{},"MISS",[324,1912,1913],{},"Cache miss — fetched from upstream",[303,1915,1916,1921],{},[324,1917,1918],{},[118,1919,1920],{},"EXPIRED",[324,1922,1923],{},"(Reserved for future use)",[303,1925,1926,1931],{},[324,1927,1928],{},[118,1929,1930],{},"BYPASS",[324,1932,1933],{},"Cache bypassed by rule",[303,1935,1936,1941],{},[324,1937,1938],{},[118,1939,1940],{},"DYNAMIC",[324,1942,1923],{},[303,1944,1945,1950],{},[324,1946,1947],{},[118,1948,1949],{},"STALE",[324,1951,1952],{},"Served stale data (lock race fallback)",[303,1954,1955,1960],{},[324,1956,1957],{},[118,1958,1959],{},"REVALIDATING",[324,1961,1962],{},"Served stale data while another request refreshes cache",[837,1964,1966],{"id":1965},"load-balancer","Load balancer",[111,1968,1970],{"className":113,"code":1969,"language":115,"meta":116,"style":116},"{\n  \"load_balancer\": {\n    \"lb_id\": \"default\",\n    \"algorithm\": \"RoundRobin\",\n    \"target_id\": \"backend-1\",\n    \"target\": \"10.0.0.1\"\n  }\n}\n",[118,1971,1972,1976,1988,2008,2028,2048,2066,2070],{"__ignoreMap":116},[121,1973,1974],{"class":123,"line":124},[121,1975,128],{"class":127},[121,1977,1978,1980,1982,1984,1986],{"class":123,"line":131},[121,1979,134],{"class":127},[121,1981,786],{"class":137},[121,1983,141],{"class":127},[121,1985,144],{"class":127},[121,1987,147],{"class":127},[121,1989,1990,1992,1995,1997,1999,2001,2004,2006],{"class":123,"line":150},[121,1991,153],{"class":127},[121,1993,1994],{"class":156},"lb_id",[121,1996,141],{"class":127},[121,1998,144],{"class":127},[121,2000,194],{"class":127},[121,2002,2003],{"class":197},"default",[121,2005,141],{"class":127},[121,2007,203],{"class":127},[121,2009,2010,2012,2015,2017,2019,2021,2024,2026],{"class":123,"line":165},[121,2011,153],{"class":127},[121,2013,2014],{"class":156},"algorithm",[121,2016,141],{"class":127},[121,2018,144],{"class":127},[121,2020,194],{"class":127},[121,2022,2023],{"class":197},"RoundRobin",[121,2025,141],{"class":127},[121,2027,203],{"class":127},[121,2029,2030,2032,2035,2037,2039,2041,2044,2046],{"class":123,"line":182},[121,2031,153],{"class":127},[121,2033,2034],{"class":156},"target_id",[121,2036,141],{"class":127},[121,2038,144],{"class":127},[121,2040,194],{"class":127},[121,2042,2043],{"class":197},"backend-1",[121,2045,141],{"class":127},[121,2047,203],{"class":127},[121,2049,2050,2052,2055,2057,2059,2061,2064],{"class":123,"line":206},[121,2051,153],{"class":127},[121,2053,2054],{"class":156},"target",[121,2056,141],{"class":127},[121,2058,144],{"class":127},[121,2060,194],{"class":127},[121,2062,2063],{"class":197},"10.0.0.1",[121,2065,1544],{"class":127},[121,2067,2068],{"class":123,"line":219},[121,2069,289],{"class":127},[121,2071,2072],{"class":123,"line":242},[121,2073,295],{"class":127},[297,2075,2076,2084],{},[300,2077,2078],{},[303,2079,2080,2082],{},[306,2081,308],{},[306,2083,317],{},[319,2085,2086,2095,2104,2113],{},[303,2087,2088,2092],{},[324,2089,2090],{},[118,2091,1994],{},[324,2093,2094],{},"Load balancer pool ID",[303,2096,2097,2101],{},[324,2098,2099],{},[118,2100,2014],{},[324,2102,2103],{},"Algorithm used",[303,2105,2106,2110],{},[324,2107,2108],{},[118,2109,2034],{},[324,2111,2112],{},"Selected target ID",[303,2114,2115,2119],{},[324,2116,2117],{},[118,2118,2054],{},[324,2120,2121],{},"Selected target host",[837,2123,2125],{"id":2124},"termination-phase","Termination phase",[111,2127,2129],{"className":113,"code":2128,"language":115,"meta":116,"style":116},"{\n  \"termination_phase\": \"Firewall\"\n}\n",[118,2130,2131,2135,2151],{"__ignoreMap":116},[121,2132,2133],{"class":123,"line":124},[121,2134,128],{"class":127},[121,2136,2137,2139,2141,2143,2145,2147,2149],{"class":123,"line":131},[121,2138,134],{"class":127},[121,2140,802],{"class":137},[121,2142,141],{"class":127},[121,2144,144],{"class":127},[121,2146,194],{"class":127},[121,2148,44],{"class":197},[121,2150,1544],{"class":127},[121,2152,2153],{"class":123,"line":150},[121,2154,295],{"class":127},[297,2156,2157,2166],{},[300,2158,2159],{},[303,2160,2161,2164],{},[306,2162,2163],{},"Value",[306,2165,317],{},[319,2167,2168,2178,2188,2197,2207,2216],{},[303,2169,2170,2175],{},[324,2171,2172],{},[118,2173,2174],{},"null",[324,2176,2177],{},"Request completed normally",[303,2179,2180,2185],{},[324,2181,2182],{},[118,2183,2184],{},"IpIntel",[324,2186,2187],{},"Terminated by IP Intel plugin",[303,2189,2190,2194],{},[324,2191,2192],{},[118,2193,44],{},[324,2195,2196],{},"Terminated by Firewall (blocked\u002Fredirected)",[303,2198,2199,2204],{},[324,2200,2201],{},[118,2202,2203],{},"RateLimit",[324,2205,2206],{},"Terminated by Rate Limiting (429)",[303,2208,2209,2213],{},[324,2210,2211],{},[118,2212,54],{},[324,2214,2215],{},"Terminated by Cache (HIT served)",[303,2217,2218,2223],{},[324,2219,2220],{},[118,2221,2222],{},"LoadBalancer",[324,2224,2225],{},"Terminated by Load Balancer (no upstream)",[837,2227,2229],{"id":2228},"timings","Timings",[111,2231,2233],{"className":113,"code":2232,"language":115,"meta":116,"style":116},"{\n  \"timings_us\": {\n    \"ip_intel_us\": 42,\n    \"firewall_us\": 3,\n    \"rate_limit_us\": 0,\n    \"cache_lookup_us\": null,\n    \"load_balancer_us\": 7,\n    \"upstream_connect_us\": null,\n    \"upstream_ttfb_us\": null,\n    \"total_us\": 1091\n  }\n}\n",[118,2234,2235,2239,2251,2267,2283,2299,2312,2328,2341,2354,2368,2372],{"__ignoreMap":116},[121,2236,2237],{"class":123,"line":124},[121,2238,128],{"class":127},[121,2240,2241,2243,2245,2247,2249],{"class":123,"line":131},[121,2242,134],{"class":127},[121,2244,817],{"class":137},[121,2246,141],{"class":127},[121,2248,144],{"class":127},[121,2250,147],{"class":127},[121,2252,2253,2255,2258,2260,2262,2265],{"class":123,"line":150},[121,2254,153],{"class":127},[121,2256,2257],{"class":156},"ip_intel_us",[121,2259,141],{"class":127},[121,2261,144],{"class":127},[121,2263,2264],{"class":171}," 42",[121,2266,203],{"class":127},[121,2268,2269,2271,2274,2276,2278,2281],{"class":123,"line":165},[121,2270,153],{"class":127},[121,2272,2273],{"class":156},"firewall_us",[121,2275,141],{"class":127},[121,2277,144],{"class":127},[121,2279,2280],{"class":171}," 3",[121,2282,203],{"class":127},[121,2284,2285,2287,2290,2292,2294,2297],{"class":123,"line":182},[121,2286,153],{"class":127},[121,2288,2289],{"class":156},"rate_limit_us",[121,2291,141],{"class":127},[121,2293,144],{"class":127},[121,2295,2296],{"class":171}," 0",[121,2298,203],{"class":127},[121,2300,2301,2303,2306,2308,2310],{"class":123,"line":206},[121,2302,153],{"class":127},[121,2304,2305],{"class":156},"cache_lookup_us",[121,2307,141],{"class":127},[121,2309,144],{"class":127},[121,2311,809],{"class":127},[121,2313,2314,2316,2319,2321,2323,2326],{"class":123,"line":219},[121,2315,153],{"class":127},[121,2317,2318],{"class":156},"load_balancer_us",[121,2320,141],{"class":127},[121,2322,144],{"class":127},[121,2324,2325],{"class":171}," 7",[121,2327,203],{"class":127},[121,2329,2330,2332,2335,2337,2339],{"class":123,"line":242},[121,2331,153],{"class":127},[121,2333,2334],{"class":156},"upstream_connect_us",[121,2336,141],{"class":127},[121,2338,144],{"class":127},[121,2340,809],{"class":127},[121,2342,2343,2345,2348,2350,2352],{"class":123,"line":259},[121,2344,153],{"class":127},[121,2346,2347],{"class":156},"upstream_ttfb_us",[121,2349,141],{"class":127},[121,2351,144],{"class":127},[121,2353,809],{"class":127},[121,2355,2356,2358,2361,2363,2365],{"class":123,"line":274},[121,2357,153],{"class":127},[121,2359,2360],{"class":156},"total_us",[121,2362,141],{"class":127},[121,2364,144],{"class":127},[121,2366,2367],{"class":171}," 1091\n",[121,2369,2370],{"class":123,"line":280},[121,2371,289],{"class":127},[121,2373,2374],{"class":123,"line":286},[121,2375,295],{"class":127},[102,2377,2378],{},"All timings are in microseconds (μs).",[297,2380,2381,2389],{},[300,2382,2383],{},[303,2384,2385,2387],{},[306,2386,308],{},[306,2388,317],{},[319,2390,2391,2400,2409,2418,2427,2436,2445,2454],{},[303,2392,2393,2397],{},[324,2394,2395],{},[118,2396,2257],{},[324,2398,2399],{},"Time spent in IP intelligence lookup",[303,2401,2402,2406],{},[324,2403,2404],{},[118,2405,2273],{},[324,2407,2408],{},"Time spent evaluating firewall rules",[303,2410,2411,2415],{},[324,2412,2413],{},[118,2414,2289],{},[324,2416,2417],{},"Time spent in rate limit checking",[303,2419,2420,2424],{},[324,2421,2422],{},[118,2423,2305],{},[324,2425,2426],{},"Time spent in cache lookup",[303,2428,2429,2433],{},[324,2430,2431],{},[118,2432,2318],{},[324,2434,2435],{},"Time spent selecting upstream target",[303,2437,2438,2442],{},[324,2439,2440],{},[118,2441,2334],{},[324,2443,2444],{},"Time to connect to upstream",[303,2446,2447,2451],{},[324,2448,2449],{},[118,2450,2347],{},[324,2452,2453],{},"Upstream time to first byte",[303,2455,2456,2460],{},[324,2457,2458],{},[118,2459,2360],{},[324,2461,2462],{},"Total request processing time",[106,2464,2466],{"id":2465},"log-analysis-examples","Log analysis examples",[837,2468,2470],{"id":2469},"count-requests-by-country","Count requests by country",[111,2472,2476],{"className":2473,"code":2474,"language":2475,"meta":116,"style":116},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cat access.jsonl | jq -r '.ip_intel.country' | sort | uniq -c | sort -rn | head -20\n","bash",[118,2477,2478],{"__ignoreMap":116},[121,2479,2480,2483,2486,2489,2492,2495,2498,2501,2504,2506,2509,2511,2514,2517,2519,2521,2524,2526,2529],{"class":123,"line":124},[121,2481,2482],{"class":156},"cat",[121,2484,2485],{"class":197}," access.jsonl",[121,2487,2488],{"class":127}," |",[121,2490,2491],{"class":156}," jq",[121,2493,2494],{"class":197}," -r",[121,2496,2497],{"class":127}," '",[121,2499,2500],{"class":197},".ip_intel.country",[121,2502,2503],{"class":127},"'",[121,2505,2488],{"class":127},[121,2507,2508],{"class":156}," sort",[121,2510,2488],{"class":127},[121,2512,2513],{"class":156}," uniq",[121,2515,2516],{"class":197}," -c",[121,2518,2488],{"class":127},[121,2520,2508],{"class":156},[121,2522,2523],{"class":197}," -rn",[121,2525,2488],{"class":127},[121,2527,2528],{"class":156}," head",[121,2530,2531],{"class":197}," -20\n",[837,2533,2535],{"id":2534},"find-blocked-requests","Find blocked requests",[111,2537,2539],{"className":2473,"code":2538,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq 'select(.firewall.matched == true)' | wc -l\n",[118,2540,2541],{"__ignoreMap":116},[121,2542,2543,2545,2547,2549,2551,2553,2556,2558,2560,2563],{"class":123,"line":124},[121,2544,2482],{"class":156},[121,2546,2485],{"class":197},[121,2548,2488],{"class":127},[121,2550,2491],{"class":156},[121,2552,2497],{"class":127},[121,2554,2555],{"class":197},"select(.firewall.matched == true)",[121,2557,2503],{"class":127},[121,2559,2488],{"class":127},[121,2561,2562],{"class":156}," wc",[121,2564,2565],{"class":197}," -l\n",[837,2567,2569],{"id":2568},"find-rate-limited-requests","Find rate-limited requests",[111,2571,2573],{"className":2473,"code":2572,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq 'select(.rate_limit.blocked == true)'\n",[118,2574,2575],{"__ignoreMap":116},[121,2576,2577,2579,2581,2583,2585,2587,2590],{"class":123,"line":124},[121,2578,2482],{"class":156},[121,2580,2485],{"class":197},[121,2582,2488],{"class":127},[121,2584,2491],{"class":156},[121,2586,2497],{"class":127},[121,2588,2589],{"class":197},"select(.rate_limit.blocked == true)",[121,2591,2592],{"class":127},"'\n",[837,2594,2596],{"id":2595},"average-response-time","Average response time",[111,2598,2600],{"className":2473,"code":2599,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq '.timings_us.total_us' | awk '{sum+=$1; n++} END {print sum\u002Fn \" μs\"}'\n",[118,2601,2602],{"__ignoreMap":116},[121,2603,2604,2606,2608,2610,2612,2614,2617,2619,2621,2624,2626,2629],{"class":123,"line":124},[121,2605,2482],{"class":156},[121,2607,2485],{"class":197},[121,2609,2488],{"class":127},[121,2611,2491],{"class":156},[121,2613,2497],{"class":127},[121,2615,2616],{"class":197},".timings_us.total_us",[121,2618,2503],{"class":127},[121,2620,2488],{"class":127},[121,2622,2623],{"class":156}," awk",[121,2625,2497],{"class":127},[121,2627,2628],{"class":197},"{sum+=$1; n++} END {print sum\u002Fn \" μs\"}",[121,2630,2592],{"class":127},[837,2632,2634],{"id":2633},"requests-per-second","Requests per second",[111,2636,2638],{"className":2473,"code":2637,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq -r '.timestamp' | cut -c1-19 | uniq -c | sort -rn | head\n",[118,2639,2640],{"__ignoreMap":116},[121,2641,2642,2644,2646,2648,2650,2652,2654,2657,2659,2661,2664,2667,2669,2671,2673,2675,2677,2679,2681],{"class":123,"line":124},[121,2643,2482],{"class":156},[121,2645,2485],{"class":197},[121,2647,2488],{"class":127},[121,2649,2491],{"class":156},[121,2651,2494],{"class":197},[121,2653,2497],{"class":127},[121,2655,2656],{"class":197},".timestamp",[121,2658,2503],{"class":127},[121,2660,2488],{"class":127},[121,2662,2663],{"class":156}," cut",[121,2665,2666],{"class":197}," -c1-19",[121,2668,2488],{"class":127},[121,2670,2513],{"class":156},[121,2672,2516],{"class":197},[121,2674,2488],{"class":127},[121,2676,2508],{"class":156},[121,2678,2523],{"class":197},[121,2680,2488],{"class":127},[121,2682,2683],{"class":156}," head\n",[837,2685,2687],{"id":2686},"top-ips-by-request-count","Top IPs by request count",[111,2689,2691],{"className":2473,"code":2690,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq -r '.client_ip' | sort | uniq -c | sort -rn | head -20\n",[118,2692,2693],{"__ignoreMap":116},[121,2694,2695,2697,2699,2701,2703,2705,2707,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732],{"class":123,"line":124},[121,2696,2482],{"class":156},[121,2698,2485],{"class":197},[121,2700,2488],{"class":127},[121,2702,2491],{"class":156},[121,2704,2494],{"class":197},[121,2706,2497],{"class":127},[121,2708,2709],{"class":197},".client_ip",[121,2711,2503],{"class":127},[121,2713,2488],{"class":127},[121,2715,2508],{"class":156},[121,2717,2488],{"class":127},[121,2719,2513],{"class":156},[121,2721,2516],{"class":197},[121,2723,2488],{"class":127},[121,2725,2508],{"class":156},[121,2727,2523],{"class":197},[121,2729,2488],{"class":127},[121,2731,2528],{"class":156},[121,2733,2531],{"class":197},[837,2735,2737],{"id":2736},"vpntor-traffic","VPN\u002FTor traffic",[111,2739,2741],{"className":2473,"code":2740,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq 'select(.ip_intel.is_vpn == true or .ip_intel.is_tor == true)'\n",[118,2742,2743],{"__ignoreMap":116},[121,2744,2745,2747,2749,2751,2753,2755,2758],{"class":123,"line":124},[121,2746,2482],{"class":156},[121,2748,2485],{"class":197},[121,2750,2488],{"class":127},[121,2752,2491],{"class":156},[121,2754,2497],{"class":127},[121,2756,2757],{"class":197},"select(.ip_intel.is_vpn == true or .ip_intel.is_tor == true)",[121,2759,2592],{"class":127},[837,2761,2763],{"id":2762},"high-risk-requests","High-risk requests",[111,2765,2767],{"className":2473,"code":2766,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq 'select(.ip_intel.risk_score > 30)'\n",[118,2768,2769],{"__ignoreMap":116},[121,2770,2771,2773,2775,2777,2779,2781,2784],{"class":123,"line":124},[121,2772,2482],{"class":156},[121,2774,2485],{"class":197},[121,2776,2488],{"class":127},[121,2778,2491],{"class":156},[121,2780,2497],{"class":127},[121,2782,2783],{"class":197},"select(.ip_intel.risk_score > 30)",[121,2785,2592],{"class":127},[837,2787,2789],{"id":2788},"cache-hit-rate","Cache hit rate",[111,2791,2793],{"className":2473,"code":2792,"language":2475,"meta":116,"style":116},"total=$(cat access.jsonl | jq 'select(.cache.status != \"NONE\")' | wc -l)\nhits=$(cat access.jsonl | jq 'select(.cache.status == \"HIT\")' | wc -l)\necho \"Cache hit rate: $(echo \"scale=2; $hits * 100 \u002F $total\" | bc)%\"\n",[118,2794,2795,2829,2859],{"__ignoreMap":116},[121,2796,2797,2801,2804,2806,2808,2810,2812,2814,2817,2819,2821,2823,2826],{"class":123,"line":124},[121,2798,2800],{"class":2799},"sTEyZ","total",[121,2802,2803],{"class":127},"=$(",[121,2805,2482],{"class":156},[121,2807,2485],{"class":197},[121,2809,2488],{"class":127},[121,2811,2491],{"class":156},[121,2813,2497],{"class":127},[121,2815,2816],{"class":197},"select(.cache.status != \"NONE\")",[121,2818,2503],{"class":127},[121,2820,2488],{"class":127},[121,2822,2562],{"class":156},[121,2824,2825],{"class":197}," -l",[121,2827,2828],{"class":127},")\n",[121,2830,2831,2834,2836,2838,2840,2842,2844,2846,2849,2851,2853,2855,2857],{"class":123,"line":131},[121,2832,2833],{"class":2799},"hits",[121,2835,2803],{"class":127},[121,2837,2482],{"class":156},[121,2839,2485],{"class":197},[121,2841,2488],{"class":127},[121,2843,2491],{"class":156},[121,2845,2497],{"class":127},[121,2847,2848],{"class":197},"select(.cache.status == \"HIT\")",[121,2850,2503],{"class":127},[121,2852,2488],{"class":127},[121,2854,2562],{"class":156},[121,2856,2825],{"class":197},[121,2858,2828],{"class":127},[121,2860,2861,2865,2867,2870,2873,2875,2877,2880,2883,2886,2889,2891,2893,2896,2899,2902],{"class":123,"line":150},[121,2862,2864],{"class":2863},"s2Zo4","echo",[121,2866,194],{"class":127},[121,2868,2869],{"class":197},"Cache hit rate: ",[121,2871,2872],{"class":127},"$(",[121,2874,2864],{"class":2863},[121,2876,194],{"class":127},[121,2878,2879],{"class":197},"scale=2; ",[121,2881,2882],{"class":2799},"$hits",[121,2884,2885],{"class":197}," * 100 \u002F ",[121,2887,2888],{"class":2799},"$total",[121,2890,141],{"class":127},[121,2892,2488],{"class":127},[121,2894,2895],{"class":156}," bc",[121,2897,2898],{"class":127},")",[121,2900,2901],{"class":197},"%",[121,2903,1544],{"class":127},[837,2905,2907],{"id":2906},"cache-revalidation-events","Cache revalidation events",[111,2909,2911],{"className":2473,"code":2910,"language":2475,"meta":116,"style":116},"# Count concurrent stale serving events\ncat access.jsonl | jq 'select(.cache.status == \"REVALIDATING\")' | wc -l\n\n# Count stale fallbacks (lock race condition)\ncat access.jsonl | jq 'select(.cache.status == \"STALE\")' | wc -l\n",[118,2912,2913,2919,2942,2948,2953],{"__ignoreMap":116},[121,2914,2915],{"class":123,"line":124},[121,2916,2918],{"class":2917},"sHwdD","# Count concurrent stale serving events\n",[121,2920,2921,2923,2925,2927,2929,2931,2934,2936,2938,2940],{"class":123,"line":131},[121,2922,2482],{"class":156},[121,2924,2485],{"class":197},[121,2926,2488],{"class":127},[121,2928,2491],{"class":156},[121,2930,2497],{"class":127},[121,2932,2933],{"class":197},"select(.cache.status == \"REVALIDATING\")",[121,2935,2503],{"class":127},[121,2937,2488],{"class":127},[121,2939,2562],{"class":156},[121,2941,2565],{"class":197},[121,2943,2944],{"class":123,"line":150},[121,2945,2947],{"emptyLinePlaceholder":2946},true,"\n",[121,2949,2950],{"class":123,"line":165},[121,2951,2952],{"class":2917},"# Count stale fallbacks (lock race condition)\n",[121,2954,2955,2957,2959,2961,2963,2965,2968,2970,2972,2974],{"class":123,"line":182},[121,2956,2482],{"class":156},[121,2958,2485],{"class":197},[121,2960,2488],{"class":127},[121,2962,2491],{"class":156},[121,2964,2497],{"class":127},[121,2966,2967],{"class":197},"select(.cache.status == \"STALE\")",[121,2969,2503],{"class":127},[121,2971,2488],{"class":127},[121,2973,2562],{"class":156},[121,2975,2565],{"class":197},[837,2977,2979],{"id":2978},"slow-requests-100ms","Slow requests (>100ms)",[111,2981,2983],{"className":2473,"code":2982,"language":2475,"meta":116,"style":116},"cat access.jsonl | jq 'select(.timings_us.total_us > 100000)'\n",[118,2984,2985],{"__ignoreMap":116},[121,2986,2987,2989,2991,2993,2995,2997,3000],{"class":123,"line":124},[121,2988,2482],{"class":156},[121,2990,2485],{"class":197},[121,2992,2488],{"class":127},[121,2994,2491],{"class":156},[121,2996,2497],{"class":127},[121,2998,2999],{"class":197},"select(.timings_us.total_us > 100000)",[121,3001,2592],{"class":127},[106,3003,3005],{"id":3004},"log-rotation","Log rotation",[102,3007,3008,3009,3012],{},"Use ",[118,3010,3011],{},"logrotate"," or similar:",[111,3014,3019],{"className":3015,"code":3017,"language":3018},[3016],"language-text","\u002Fvar\u002Flog\u002Fquayel\u002Faccess.jsonl {\n    daily\n    rotate 30\n    compress\n    missingok\n    notifempty\n    copytruncate\n}\n","text",[118,3020,3017],{"__ignoreMap":116},[106,3022,3024],{"id":3023},"notes","Notes",[3026,3027,3028,3036,3039,3042,3045],"ul",{},[3029,3030,3031,3032,3035],"li",{},"Logs are written synchronously (one ",[118,3033,3034],{},"write()"," per line)",[3029,3037,3038],{},"The log file is created automatically if it doesn't exist",[3029,3040,3041],{},"Parent directories are created automatically",[3029,3043,3044],{},"Logs are appended (no rotation built-in — use external tools)",[3029,3046,3047],{},"Each gateway instance writes to its own log file",[3049,3050,3051],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":116,"searchDepth":131,"depth":131,"links":3053},[3054,3055,3056,3070,3083,3084],{"id":108,"depth":131,"text":109},{"id":408,"depth":131,"text":409},{"id":834,"depth":131,"text":835,"children":3057},[3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069],{"id":839,"depth":150,"text":840},{"id":923,"depth":150,"text":924},{"id":974,"depth":150,"text":975},{"id":1036,"depth":150,"text":1037},{"id":704,"depth":150,"text":1066},{"id":1256,"depth":150,"text":1257},{"id":738,"depth":150,"text":44},{"id":1604,"depth":150,"text":1605},{"id":770,"depth":150,"text":54},{"id":1965,"depth":150,"text":1966},{"id":2124,"depth":150,"text":2125},{"id":2228,"depth":150,"text":2229},{"id":2465,"depth":131,"text":2466,"children":3071},[3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082],{"id":2469,"depth":150,"text":2470},{"id":2534,"depth":150,"text":2535},{"id":2568,"depth":150,"text":2569},{"id":2595,"depth":150,"text":2596},{"id":2633,"depth":150,"text":2634},{"id":2686,"depth":150,"text":2687},{"id":2736,"depth":150,"text":2737},{"id":2762,"depth":150,"text":2763},{"id":2788,"depth":150,"text":2789},{"id":2906,"depth":150,"text":2907},{"id":2978,"depth":150,"text":2979},{"id":3004,"depth":131,"text":3005},{"id":3023,"depth":131,"text":3024},"JSONL access log format, every field explained, and jq recipes for analysis.","md",null,{},"\u002Fquayel-gateway\u002Flogging",{"title":93,"description":3085},"quayel-gateway\u002F07.logging","Dodw1Dlsss1jvitNZiunXrlp6ayebcD0LaMsdh4Vqs8",[3087,3087],1791649769212]