[{"data":1,"prerenderedAt":1154},["ShallowReactive",2],{"doc:\u002Freverse-proxy\u002Foperations\u002Fobservability":3,"surround:\u002Freverse-proxy\u002Foperations\u002Fobservability":904,"navigation":915},{"id":4,"title":5,"body":6,"description":897,"extension":898,"meta":899,"navigation":754,"path":900,"seo":901,"stem":902,"__hash__":903},"docs\u002F02.reverse-proxy\u002F05.operations\u002F02.observability.md","Metryki i monitoring",{"type":7,"value":8,"toc":883},"minimark",[9,14,22,68,71,217,221,414,437,441,457,507,511,546,567,578,592,596,601,609,613,619,623,629,633,639,643,649,653,868,879],[10,11,13],"h2",{"id":12},"logi-strukturalne","Logi strukturalne",[15,16,17,21],"p",{},[18,19,20],"code",{},"log\u002Fslog"," w formacie JSON (domyślnie) lub text:",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-yaml shiki shiki-themes github-light github-dark","log:\n  level: info\n  format: json\n","yaml","",[18,30,31,44,57],{"__ignoreMap":28},[32,33,36,40],"span",{"class":34,"line":35},"line",1,[32,37,39],{"class":38},"s9eBZ","log",[32,41,43],{"class":42},"sVt8B",":\n",[32,45,47,50,53],{"class":34,"line":46},2,[32,48,49],{"class":38},"  level",[32,51,52],{"class":42},": ",[32,54,56],{"class":55},"sZZnC","info\n",[32,58,60,63,65],{"class":34,"line":59},3,[32,61,62],{"class":38},"  format",[32,64,52],{"class":42},[32,66,67],{"class":55},"json\n",[15,69,70],{},"Każdy request logowany jest z client IP i request ID:",[23,72,76],{"className":73,"code":74,"language":75,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"time\": \"2026-11-05T12:00:00Z\",\n  \"level\": \"INFO\",\n  \"msg\": \"request\",\n  \"request_id\": \"9f2c1a77b3e4d5a6\",\n  \"method\": \"GET\",\n  \"path\": \"\u002Fapi\u002Fusers\",\n  \"status\": 200,\n  \"backend\": \"http:\u002F\u002Flocalhost:8081\",\n  \"client_ip\": \"203.0.113.7\",\n  \"duration_ms\": 12\n}\n","json",[18,77,78,83,97,109,122,135,148,161,174,187,200,211],{"__ignoreMap":28},[32,79,80],{"class":34,"line":35},[32,81,82],{"class":42},"{\n",[32,84,85,89,91,94],{"class":34,"line":46},[32,86,88],{"class":87},"sj4cs","  \"time\"",[32,90,52],{"class":42},[32,92,93],{"class":55},"\"2026-11-05T12:00:00Z\"",[32,95,96],{"class":42},",\n",[32,98,99,102,104,107],{"class":34,"line":59},[32,100,101],{"class":87},"  \"level\"",[32,103,52],{"class":42},[32,105,106],{"class":55},"\"INFO\"",[32,108,96],{"class":42},[32,110,112,115,117,120],{"class":34,"line":111},4,[32,113,114],{"class":87},"  \"msg\"",[32,116,52],{"class":42},[32,118,119],{"class":55},"\"request\"",[32,121,96],{"class":42},[32,123,125,128,130,133],{"class":34,"line":124},5,[32,126,127],{"class":87},"  \"request_id\"",[32,129,52],{"class":42},[32,131,132],{"class":55},"\"9f2c1a77b3e4d5a6\"",[32,134,96],{"class":42},[32,136,138,141,143,146],{"class":34,"line":137},6,[32,139,140],{"class":87},"  \"method\"",[32,142,52],{"class":42},[32,144,145],{"class":55},"\"GET\"",[32,147,96],{"class":42},[32,149,151,154,156,159],{"class":34,"line":150},7,[32,152,153],{"class":87},"  \"path\"",[32,155,52],{"class":42},[32,157,158],{"class":55},"\"\u002Fapi\u002Fusers\"",[32,160,96],{"class":42},[32,162,164,167,169,172],{"class":34,"line":163},8,[32,165,166],{"class":87},"  \"status\"",[32,168,52],{"class":42},[32,170,171],{"class":87},"200",[32,173,96],{"class":42},[32,175,177,180,182,185],{"class":34,"line":176},9,[32,178,179],{"class":87},"  \"backend\"",[32,181,52],{"class":42},[32,183,184],{"class":55},"\"http:\u002F\u002Flocalhost:8081\"",[32,186,96],{"class":42},[32,188,190,193,195,198],{"class":34,"line":189},10,[32,191,192],{"class":87},"  \"client_ip\"",[32,194,52],{"class":42},[32,196,197],{"class":55},"\"203.0.113.7\"",[32,199,96],{"class":42},[32,201,203,206,208],{"class":34,"line":202},11,[32,204,205],{"class":87},"  \"duration_ms\"",[32,207,52],{"class":42},[32,209,210],{"class":87},"12\n",[32,212,214],{"class":34,"line":213},12,[32,215,216],{"class":42},"}\n",[10,218,220],{"id":219},"metryki-prometheus","Metryki Prometheus",[222,223,224,240],"table",{},[225,226,227],"thead",{},[228,229,230,234,237],"tr",{},[231,232,233],"th",{},"Metryka",[231,235,236],{},"Typ",[231,238,239],{},"Etykiety",[241,242,243,269,287,300,311,324,337,350,363,376,392,403],"tbody",{},[228,244,245,251,254],{},[246,247,248],"td",{},[18,249,250],{},"proxy_requests_total",[246,252,253],{},"counter",[246,255,256,259,260,259,263,259,266],{},[18,257,258],{},"method",", ",[18,261,262],{},"route",[18,264,265],{},"backend",[18,267,268],{},"status",[228,270,271,276,279],{},[246,272,273],{},[18,274,275],{},"proxy_request_duration_seconds",[246,277,278],{},"histogram",[246,280,281,259,283,259,285],{},[18,282,258],{},[18,284,262],{},[18,286,265],{},[228,288,289,294,297],{},[246,290,291],{},[18,292,293],{},"proxy_inflight_requests",[246,295,296],{},"gauge",[246,298,299],{},"—",[228,301,302,307,309],{},[246,303,304],{},[18,305,306],{},"proxy_retries_total",[246,308,253],{},[246,310,299],{},[228,312,313,318,320],{},[246,314,315],{},[18,316,317],{},"backend_requests_total",[246,319,253],{},[246,321,322],{},[18,323,265],{},[228,325,326,331,333],{},[246,327,328],{},[18,329,330],{},"backend_errors_total",[246,332,253],{},[246,334,335],{},[18,336,265],{},[228,338,339,344,346],{},[246,340,341],{},[18,342,343],{},"backend_timeouts_total",[246,345,253],{},[246,347,348],{},[18,349,265],{},[228,351,352,357,359],{},[246,353,354],{},[18,355,356],{},"backend_healthy",[246,358,296],{},[246,360,361],{},[18,362,265],{},[228,364,365,370,372],{},[246,366,367],{},[18,368,369],{},"backend_circuit_breaker_open",[246,371,296],{},[246,373,374],{},[18,375,265],{},[228,377,378,383,385],{},[246,379,380],{},[18,381,382],{},"backend_healthchecks_total",[246,384,253],{},[246,386,387,259,389],{},[18,388,265],{},[18,390,391],{},"result",[228,393,394,399,401],{},[246,395,396],{},[18,397,398],{},"rate_limit_rejected_total",[246,400,253],{},[246,402,299],{},[228,404,405,410,412],{},[246,406,407],{},[18,408,409],{},"rate_limit_errors_total",[246,411,253],{},[246,413,299],{},[415,416,419],"callout",{"title":417,"type":418},"Ograniczona kardynalność","info",[15,420,421,422,424,425,429,430,259,433,436],{},"Etykieta ",[18,423,262],{}," to ",[426,427,428],"strong",{},"pierwszy segment ścieżki",", nie pełny URL. Dzięki temu ",[18,431,432],{},"\u002Fusers\u002F1",[18,434,435],{},"\u002Fusers\u002F2","… nie tworzą tysięcy serii czasowych.",[10,438,440],{"id":439},"scraping","Scraping",[23,442,446],{"className":443,"code":444,"language":445,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","curl http:\u002F\u002Flocalhost:8080\u002Fmetrics\n","bash",[18,447,448],{"__ignoreMap":28},[32,449,450,454],{"class":34,"line":35},[32,451,453],{"class":452},"sScJk","curl",[32,455,456],{"class":55}," http:\u002F\u002Flocalhost:8080\u002Fmetrics\n",[23,458,461],{"className":25,"code":459,"filename":460,"language":27,"meta":28,"style":28},"scrape_configs:\n  - job_name: reverse-proxy\n    static_configs:\n      - targets: ['proxy:8080']\n","prometheus.yml",[18,462,463,470,483,490],{"__ignoreMap":28},[32,464,465,468],{"class":34,"line":35},[32,466,467],{"class":38},"scrape_configs",[32,469,43],{"class":42},[32,471,472,475,478,480],{"class":34,"line":46},[32,473,474],{"class":42},"  - ",[32,476,477],{"class":38},"job_name",[32,479,52],{"class":42},[32,481,482],{"class":55},"reverse-proxy\n",[32,484,485,488],{"class":34,"line":59},[32,486,487],{"class":38},"    static_configs",[32,489,43],{"class":42},[32,491,492,495,498,501,504],{"class":34,"line":111},[32,493,494],{"class":42},"      - ",[32,496,497],{"class":38},"targets",[32,499,500],{"class":42},": [",[32,502,503],{"class":55},"'proxy:8080'",[32,505,506],{"class":42},"]\n",[10,508,510],{"id":509},"stack-prometheus-grafana","Stack Prometheus + Grafana",[23,512,514],{"className":443,"code":513,"language":445,"meta":28,"style":28},"ADMIN_TOKEN=change-me docker compose --profile monitoring up -d\n",[18,515,516],{"__ignoreMap":28},[32,517,518,521,525,528,531,534,537,540,543],{"class":34,"line":35},[32,519,520],{"class":42},"ADMIN_TOKEN",[32,522,524],{"class":523},"szBVR","=",[32,526,527],{"class":55},"change-me",[32,529,530],{"class":452}," docker",[32,532,533],{"class":55}," compose",[32,535,536],{"class":87}," --profile",[32,538,539],{"class":55}," monitoring",[32,541,542],{"class":55}," up",[32,544,545],{"class":87}," -d\n",[547,548,549,556],"ul",{},[550,551,552,553],"li",{},"Prometheus: ",[18,554,555],{},"http:\u002F\u002Flocalhost:9090",[550,557,558,559,562,563,566],{},"Grafana: ",[18,560,561],{},"http:\u002F\u002Flocalhost:3000"," (admin \u002F ",[18,564,565],{},"GRAFANA_ADMIN_PASSWORD",")",[15,568,569,570,573,574,577],{},"Dashboard ",[426,571,572],{},"Reverse Proxy"," jest provisionowany automatycznie z ",[18,575,576],{},"deploy\u002Fmonitoring\u002Fgrafana\u002Fdashboards\u002F"," i pokrywa:",[547,579,580,583,586,589],{},[550,581,582],{},"request rate i latency percentyle,",[550,584,585],{},"error rate i upstream traffic split,",[550,587,588],{},"circuit breakery i in-flight requests,",[550,590,591],{},"wyniki health checków.",[10,593,595],{"id":594},"przykładowe-zapytania-promql","Przykładowe zapytania PromQL",[597,598,600],"h3",{"id":599},"request-rate-per-backend","Request rate per backend",[23,602,607],{"className":603,"code":605,"language":606,"meta":28},[604],"language-text","sum by (backend) (rate(proxy_requests_total[5m]))\n","text",[18,608,605],{"__ignoreMap":28},[597,610,612],{"id":611},"p95-latencji","p95 latencji",[23,614,617],{"className":615,"code":616,"language":606,"meta":28},[604],"histogram_quantile(0.95, sum by (le, route) (rate(proxy_request_duration_seconds_bucket[5m])))\n",[18,618,616],{"__ignoreMap":28},[597,620,622],{"id":621},"error-rate","Error rate",[23,624,627],{"className":625,"code":626,"language":606,"meta":28},[604],"sum(rate(backend_errors_total[5m])) \u002F sum(rate(backend_requests_total[5m]))\n",[18,628,626],{"__ignoreMap":28},[597,630,632],{"id":631},"otwarte-breakery","Otwarte breakery",[23,634,637],{"className":635,"code":636,"language":606,"meta":28},[604],"backend_circuit_breaker_open == 1\n",[18,638,636],{"__ignoreMap":28},[597,640,642],{"id":641},"odrzucone-przez-rate-limit","Odrzucone przez rate limit",[23,644,647],{"className":645,"code":646,"language":606,"meta":28},[604],"rate(rate_limit_rejected_total[5m])\n",[18,648,646],{"__ignoreMap":28},[10,650,652],{"id":651},"alerting-przykłady-reguł","Alerting — przykłady reguł",[23,654,657],{"className":25,"code":655,"filename":656,"language":27,"meta":28,"style":28},"groups:\n  - name: reverse-proxy\n    rules:\n      - alert: BackendDown\n        expr: backend_healthy == 0\n        for: 1m\n        labels:\n          severity: critical\n        annotations:\n          summary: \"Backend {{ $labels.backend }} jest unhealthy\"\n\n      - alert: CircuitBreakerOpen\n        expr: backend_circuit_breaker_open == 1\n        for: 30s\n        labels:\n          severity: warning\n\n      - alert: HighErrorRate\n        expr: |\n          sum(rate(backend_errors_total[5m]))\n          \u002F sum(rate(backend_requests_total[5m])) > 0.05\n        for: 5m\n        labels:\n          severity: critical\n","alerts.yml",[18,658,659,666,677,684,696,706,716,723,733,740,750,756,767,776,786,793,803,808,820,830,836,842,852,859],{"__ignoreMap":28},[32,660,661,664],{"class":34,"line":35},[32,662,663],{"class":38},"groups",[32,665,43],{"class":42},[32,667,668,670,673,675],{"class":34,"line":46},[32,669,474],{"class":42},[32,671,672],{"class":38},"name",[32,674,52],{"class":42},[32,676,482],{"class":55},[32,678,679,682],{"class":34,"line":59},[32,680,681],{"class":38},"    rules",[32,683,43],{"class":42},[32,685,686,688,691,693],{"class":34,"line":111},[32,687,494],{"class":42},[32,689,690],{"class":38},"alert",[32,692,52],{"class":42},[32,694,695],{"class":55},"BackendDown\n",[32,697,698,701,703],{"class":34,"line":124},[32,699,700],{"class":38},"        expr",[32,702,52],{"class":42},[32,704,705],{"class":55},"backend_healthy == 0\n",[32,707,708,711,713],{"class":34,"line":137},[32,709,710],{"class":38},"        for",[32,712,52],{"class":42},[32,714,715],{"class":55},"1m\n",[32,717,718,721],{"class":34,"line":150},[32,719,720],{"class":38},"        labels",[32,722,43],{"class":42},[32,724,725,728,730],{"class":34,"line":163},[32,726,727],{"class":38},"          severity",[32,729,52],{"class":42},[32,731,732],{"class":55},"critical\n",[32,734,735,738],{"class":34,"line":176},[32,736,737],{"class":38},"        annotations",[32,739,43],{"class":42},[32,741,742,745,747],{"class":34,"line":189},[32,743,744],{"class":38},"          summary",[32,746,52],{"class":42},[32,748,749],{"class":55},"\"Backend {{ $labels.backend }} jest unhealthy\"\n",[32,751,752],{"class":34,"line":202},[32,753,755],{"emptyLinePlaceholder":754},true,"\n",[32,757,758,760,762,764],{"class":34,"line":213},[32,759,494],{"class":42},[32,761,690],{"class":38},[32,763,52],{"class":42},[32,765,766],{"class":55},"CircuitBreakerOpen\n",[32,768,770,772,774],{"class":34,"line":769},13,[32,771,700],{"class":38},[32,773,52],{"class":42},[32,775,636],{"class":55},[32,777,779,781,783],{"class":34,"line":778},14,[32,780,710],{"class":38},[32,782,52],{"class":42},[32,784,785],{"class":55},"30s\n",[32,787,789,791],{"class":34,"line":788},15,[32,790,720],{"class":38},[32,792,43],{"class":42},[32,794,796,798,800],{"class":34,"line":795},16,[32,797,727],{"class":38},[32,799,52],{"class":42},[32,801,802],{"class":55},"warning\n",[32,804,806],{"class":34,"line":805},17,[32,807,755],{"emptyLinePlaceholder":754},[32,809,811,813,815,817],{"class":34,"line":810},18,[32,812,494],{"class":42},[32,814,690],{"class":38},[32,816,52],{"class":42},[32,818,819],{"class":55},"HighErrorRate\n",[32,821,823,825,827],{"class":34,"line":822},19,[32,824,700],{"class":38},[32,826,52],{"class":42},[32,828,829],{"class":523},"|\n",[32,831,833],{"class":34,"line":832},20,[32,834,835],{"class":55},"          sum(rate(backend_errors_total[5m]))\n",[32,837,839],{"class":34,"line":838},21,[32,840,841],{"class":55},"          \u002F sum(rate(backend_requests_total[5m])) > 0.05\n",[32,843,845,847,849],{"class":34,"line":844},22,[32,846,710],{"class":38},[32,848,52],{"class":42},[32,850,851],{"class":55},"5m\n",[32,853,855,857],{"class":34,"line":854},23,[32,856,720],{"class":38},[32,858,43],{"class":42},[32,860,862,864,866],{"class":34,"line":861},24,[32,863,727],{"class":38},[32,865,52],{"class":42},[32,867,732],{"class":55},[415,869,872],{"title":870,"type":871},"\u002Fmetrics jest niechronione","warning",[15,873,874,875,878],{},"Endpoint metryk jest celowo nieuwierzytelniony (prostota scrapowania). Jeśli proxy jest wystawione do internetu, ogranicz ",[18,876,877],{},"\u002Fmetrics"," na warstwie sieciowej (firewall, sieć wewnętrzna).",[880,881,882],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":28,"searchDepth":59,"depth":59,"links":884},[885,886,887,888,889,896],{"id":12,"depth":46,"text":13},{"id":219,"depth":46,"text":220},{"id":439,"depth":46,"text":440},{"id":509,"depth":46,"text":510},{"id":594,"depth":46,"text":595,"children":890},[891,892,893,894,895],{"id":599,"depth":59,"text":600},{"id":611,"depth":59,"text":612},{"id":621,"depth":59,"text":622},{"id":631,"depth":59,"text":632},{"id":641,"depth":59,"text":642},{"id":651,"depth":46,"text":652},"Strukturalne logi slog, pełna lista metryk Prometheus i gotowy stack Prometheus + Grafana z dashboardem.","md",{},"\u002Freverse-proxy\u002Foperations\u002Fobservability",{"title":5,"description":897},"02.reverse-proxy\u002F05.operations\u002F02.observability","fAnftQ0cS6z7Ou364aFpUnoBl4sMPfZjPmJ6fAyvwI0",[905,910],{"title":906,"path":907,"stem":908,"description":909,"children":-1},"Admin API","\u002Freverse-proxy\u002Foperations\u002Fadmin-api","02.reverse-proxy\u002F05.operations\u002F01.admin-api","Token-authenticated API do podglądu i sterowania backendami. Bearer token, fail-closed, endpointy i przykłady curl.",{"title":911,"path":912,"stem":913,"description":914,"children":-1},"Bezpieczeństwo","\u002Freverse-proxy\u002Foperations\u002Fsecurity","02.reverse-proxy\u002F05.operations\u002F03.security","Fail-closed admin API, trusted proxies, walidacja URL, hop-by-hop headers, sekrety w environment i utwardzony kontener.",[916,1036,1087],{"title":917,"path":918,"stem":919,"children":920},"2D Game Engine","\u002Fgame-engine","01.game-engine\u002F01.index",[921,923,927,931,935,961,990,1003,1024,1028,1032],{"title":922,"path":918,"stem":919},"Przegląd",{"title":924,"path":925,"stem":926},"Szybki start","\u002Fgame-engine\u002Fgetting-started","01.game-engine\u002F02.getting-started",{"title":928,"path":929,"stem":930},"Konfiguracja","\u002Fgame-engine\u002Fconfiguration","01.game-engine\u002F03.configuration",{"title":932,"path":933,"stem":934},"Architektura","\u002Fgame-engine\u002Farchitecture","01.game-engine\u002F04.architecture",{"title":936,"path":937,"stem":938,"children":939,"page":960},"Rdzeń","\u002Fgame-engine\u002Fcore","01.game-engine\u002F05.core",[940,944,948,952,956],{"title":941,"path":942,"stem":943},"Silnik i cykl życia","\u002Fgame-engine\u002Fcore\u002Fengine","01.game-engine\u002F05.core\u002F01.engine",{"title":945,"path":946,"stem":947},"Czas i pętla gry","\u002Fgame-engine\u002Fcore\u002Ftime","01.game-engine\u002F05.core\u002F02.time",{"title":949,"path":950,"stem":951},"Sceny","\u002Fgame-engine\u002Fcore\u002Fscenes","01.game-engine\u002F05.core\u002F03.scenes",{"title":953,"path":954,"stem":955},"Obiekty i komponenty","\u002Fgame-engine\u002Fcore\u002Fobjects","01.game-engine\u002F05.core\u002F04.objects",{"title":957,"path":958,"stem":959},"Zdarzenia i harmonogram","\u002Fgame-engine\u002Fcore\u002Fevents","01.game-engine\u002F05.core\u002F05.events",false,{"title":962,"path":963,"stem":964,"children":965,"page":960},"Systemy","\u002Fgame-engine\u002Fsystems","01.game-engine\u002F06.systems",[966,970,974,978,982,986],{"title":967,"path":968,"stem":969},"Zasoby (AssetManager)","\u002Fgame-engine\u002Fsystems\u002Fassets","01.game-engine\u002F06.systems\u002F01.assets",{"title":971,"path":972,"stem":973},"Wejście (InputManager)","\u002Fgame-engine\u002Fsystems\u002Finput","01.game-engine\u002F06.systems\u002F02.input",{"title":975,"path":976,"stem":977},"Fizyka (PhysicsManager)","\u002Fgame-engine\u002Fsystems\u002Fphysics","01.game-engine\u002F06.systems\u002F03.physics",{"title":979,"path":980,"stem":981},"Kamera (CameraManager)","\u002Fgame-engine\u002Fsystems\u002Fcamera","01.game-engine\u002F06.systems\u002F04.camera",{"title":983,"path":984,"stem":985},"Audio (AudioManager)","\u002Fgame-engine\u002Fsystems\u002Faudio","01.game-engine\u002F06.systems\u002F05.audio",{"title":987,"path":988,"stem":989},"Tweeny i easing","\u002Fgame-engine\u002Fsystems\u002Ftweens","01.game-engine\u002F06.systems\u002F06.tweens",{"title":991,"path":992,"stem":993,"children":994,"page":960},"Dane i zapisy","\u002Fgame-engine\u002Fdata","01.game-engine\u002F07.data",[995,999],{"title":996,"path":997,"stem":998},"Format projektu","\u002Fgame-engine\u002Fdata\u002Fproject-format","01.game-engine\u002F07.data\u002F01.project-format",{"title":1000,"path":1001,"stem":1002},"Zapisy gry","\u002Fgame-engine\u002Fdata\u002Fsaves","01.game-engine\u002F07.data\u002F02.saves",{"title":1004,"path":1005,"stem":1006,"children":1007,"page":960},"Zaawansowane","\u002Fgame-engine\u002Fadvanced","01.game-engine\u002F08.advanced",[1008,1012,1016,1020],{"title":1009,"path":1010,"stem":1011},"Pluginy","\u002Fgame-engine\u002Fadvanced\u002Fplugins","01.game-engine\u002F08.advanced\u002F01.plugins",{"title":1013,"path":1014,"stem":1015},"WebAssembly","\u002Fgame-engine\u002Fadvanced\u002Fwasm","01.game-engine\u002F08.advanced\u002F02.wasm",{"title":1017,"path":1018,"stem":1019},"Debugowanie","\u002Fgame-engine\u002Fadvanced\u002Fdebugging","01.game-engine\u002F08.advanced\u002F03.debugging",{"title":1021,"path":1022,"stem":1023},"Wydajność i benchmarki","\u002Fgame-engine\u002Fadvanced\u002Fperformance","01.game-engine\u002F08.advanced\u002F04.performance",{"title":1025,"path":1026,"stem":1027},"Wdrożenie","\u002Fgame-engine\u002Fdeployment","01.game-engine\u002F09.deployment",{"title":1029,"path":1030,"stem":1031},"Przykłady","\u002Fgame-engine\u002Fexamples","01.game-engine\u002F10.examples",{"title":1033,"path":1034,"stem":1035},"Decyzje architektoniczne","\u002Fgame-engine\u002Fadr","01.game-engine\u002F11.adr",{"title":572,"path":1037,"stem":1038,"children":1039},"\u002Freverse-proxy","02.reverse-proxy\u002F01.index",[1040,1041,1044,1047,1068],{"title":922,"path":1037,"stem":1038},{"title":924,"path":1042,"stem":1043},"\u002Freverse-proxy\u002Fgetting-started","02.reverse-proxy\u002F02.getting-started",{"title":928,"path":1045,"stem":1046},"\u002Freverse-proxy\u002Fconfiguration","02.reverse-proxy\u002F03.configuration",{"title":1048,"path":1049,"stem":1050,"children":1051,"page":960},"Ruch i odporność","\u002Freverse-proxy\u002Ftraffic","02.reverse-proxy\u002F04.traffic",[1052,1056,1060,1064],{"title":1053,"path":1054,"stem":1055},"Load balancing","\u002Freverse-proxy\u002Ftraffic\u002Fload-balancing","02.reverse-proxy\u002F04.traffic\u002F01.load-balancing",{"title":1057,"path":1058,"stem":1059},"Health checks","\u002Freverse-proxy\u002Ftraffic\u002Fhealth-checks","02.reverse-proxy\u002F04.traffic\u002F02.health-checks",{"title":1061,"path":1062,"stem":1063},"Circuit breaker i retry","\u002Freverse-proxy\u002Ftraffic\u002Fresilience","02.reverse-proxy\u002F04.traffic\u002F03.resilience",{"title":1065,"path":1066,"stem":1067},"Rate limiting","\u002Freverse-proxy\u002Ftraffic\u002Frate-limiting","02.reverse-proxy\u002F04.traffic\u002F04.rate-limiting",{"title":1069,"path":1070,"stem":1071,"children":1072,"page":960},"Operacje i wdrożenie","\u002Freverse-proxy\u002Foperations","02.reverse-proxy\u002F05.operations",[1073,1074,1075,1076,1079,1083],{"title":906,"path":907,"stem":908},{"title":5,"path":900,"stem":902},{"title":911,"path":912,"stem":913},{"title":1025,"path":1077,"stem":1078},"\u002Freverse-proxy\u002Foperations\u002Fdeployment","02.reverse-proxy\u002F05.operations\u002F04.deployment",{"title":1080,"path":1081,"stem":1082},"Benchmarki","\u002Freverse-proxy\u002Foperations\u002Fbenchmarks","02.reverse-proxy\u002F05.operations\u002F05.benchmarks",{"title":1084,"path":1085,"stem":1086},"Troubleshooting","\u002Freverse-proxy\u002Foperations\u002Ftroubleshooting","02.reverse-proxy\u002F05.operations\u002F06.troubleshooting",{"title":1088,"path":1089,"stem":1090,"children":1091},"Vector Engine","\u002Fvector-engine","03.vector-engine\u002F01.index",[1092,1093,1096,1117,1130,1150],{"title":922,"path":1089,"stem":1090},{"title":924,"path":1094,"stem":1095},"\u002Fvector-engine\u002Fgetting-started","03.vector-engine\u002F02.getting-started",{"title":1097,"path":1098,"stem":1099,"children":1100,"page":960},"Scena","\u002Fvector-engine\u002Fscene","03.vector-engine\u002F03.scene",[1101,1105,1109,1113],{"title":1102,"path":1103,"stem":1104},"Format sceny 1.0","\u002Fvector-engine\u002Fscene\u002Fscene-format","03.vector-engine\u002F03.scene\u002F01.scene-format",{"title":1106,"path":1107,"stem":1108},"Obiekty sceny","\u002Fvector-engine\u002Fscene\u002Fobjects","03.vector-engine\u002F03.scene\u002F02.objects",{"title":1110,"path":1111,"stem":1112},"Gradienty i warstwy","\u002Fvector-engine\u002Fscene\u002Fgradients-layers","03.vector-engine\u002F03.scene\u002F03.gradients-layers",{"title":1114,"path":1115,"stem":1116},"Przykłady scen","\u002Fvector-engine\u002Fscene\u002Fexamples","03.vector-engine\u002F03.scene\u002F04.examples",{"title":1118,"path":1119,"stem":1120,"children":1121,"page":960},"Eksport","\u002Fvector-engine\u002Fexport","03.vector-engine\u002F04.export",[1122,1126],{"title":1123,"path":1124,"stem":1125},"Formaty eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-formats","03.vector-engine\u002F04.export\u002F01.export-formats",{"title":1127,"path":1128,"stem":1129},"Proces eksportu","\u002Fvector-engine\u002Fexport\u002Fexport-workflow","03.vector-engine\u002F04.export\u002F02.export-workflow",{"title":1131,"path":1132,"stem":1133,"children":1134,"page":960},"Wnętrze silnika","\u002Fvector-engine\u002Finternals","03.vector-engine\u002F05.internals",[1135,1138,1142,1146],{"title":932,"path":1136,"stem":1137},"\u002Fvector-engine\u002Finternals\u002Farchitecture","03.vector-engine\u002F05.internals\u002F01.architecture",{"title":1139,"path":1140,"stem":1141},"WebAssembly i workery","\u002Fvector-engine\u002Finternals\u002Fwasm","03.vector-engine\u002F05.internals\u002F02.wasm",{"title":1143,"path":1144,"stem":1145},"Workspace i panele","\u002Fvector-engine\u002Finternals\u002Fworkspace","03.vector-engine\u002F05.internals\u002F03.workspace",{"title":1147,"path":1148,"stem":1149},"Breakpointy","\u002Fvector-engine\u002Finternals\u002Fbreakpoints","03.vector-engine\u002F05.internals\u002F04.breakpoints",{"title":1151,"path":1152,"stem":1153},"Wdrożenie na Vercel","\u002Fvector-engine\u002Fdeployment","03.vector-engine\u002F06.deployment",1793986308551]