{"id":20674,"date":"2026-08-15T15:03:53","date_gmt":"2026-08-15T13:03:53","guid":{"rendered":"https:\/\/webhosting.de\/ebpf-performance-analyse-linux-tracing-server-monitoring-observability\/"},"modified":"2026-08-15T15:03:53","modified_gmt":"2026-08-15T13:03:53","slug":"ebpf-analiza-wydajnosci-linux-sledzenie-serwerow-monitorowanie-obserwowalnosc","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/ebpf-performance-analyse-linux-tracing-server-monitoring-observability\/","title":{"rendered":"Analiza wydajno\u015bci eBPF: wydajne \u015bledzenie w systemie Linux na potrzeby nowoczesnego monitorowania serwer\u00f3w"},"content":{"rendered":"<p>Wykorzystuj\u0119 eBPF Performance w spos\u00f3b ukierunkowany, aby uwidoczni\u0107 op\u00f3\u017anienia, wywo\u0142ania systemowe i \u015bcie\u017cki j\u0105dra bezpo\u015brednio u \u017ar\u00f3d\u0142a. W ten spos\u00f3b wykrywam w czasie rzeczywistym w\u0105skie gard\u0142a na serwerach z systemem Linux, mierz\u0119 wiarygodne wska\u017aniki i podejmuj\u0119 konkretne dzia\u0142ania w celu <strong>Serwer<\/strong>- monitorowanie i analiza b\u0142\u0119d\u00f3w.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Bezpieczny<\/strong> i dynamiczny: eBPF \u0142aduje programy w czasie wykonywania bez konieczno\u015bci ponownego uruchamiania.<\/li>\n  <li><strong>G\u0142\u0119boko<\/strong> w j\u0105drze: \u015bledzenie wywo\u0142a\u0144 systemowych, operacji wej\u015bcia\/wyj\u015bcia, sieci i harmonogramu.<\/li>\n  <li><strong>Ni\u017cszy<\/strong> Zasady og\u00f3lne: filtrowanie, wyb\u00f3r map, oszcz\u0119dne wykorzystywanie danych.<\/li>\n  <li><strong>Narz\u0119dzia<\/strong>: BCC, bpftrace oraz narz\u0119dzia przeznaczone do codziennych zastosowa\u0144.<\/li>\n  <li><strong>Integracja<\/strong>: W\u0142\u0105czenie wska\u017anik\u00f3w do istniej\u0105cych stos\u00f3w rozwi\u0105za\u0144 z zakresu obserwowalno\u015bci.<\/li>\n<\/ul>\n\n<h2>Zrozumie\u0107 eBPF: podstawy i model bezpiecze\u0144stwa<\/h2>\n\n<p>Korzystam z eBPF jako <strong>Kernel-VM<\/strong>, kt\u00f3ra wi\u0105\u017ce ma\u0142e programy z wydarzeniami, takimi jak wywo\u0142ania systemowe, punkty \u015bledzenia czy sygna\u0142y harmonogramu. Przed uruchomieniem weryfikator rygorystycznie sprawdza, czy kod pozostaje bezpieczny, nie zawiera p\u0119tli niesko\u0144czonych i poprawnie wykonuje operacje dost\u0119pu do pami\u0119ci. Dzi\u0119ki temu \u0142aduj\u0119 logik\u0119 \u015bledzenia i analizy w czasie wykonywania, bez konieczno\u015bci ponownego uruchamiania systemu lub stosowania ryzykownych modu\u0142\u00f3w j\u0105dra. Zmniejsza to ryzyko na hostach produkcyjnych i zapewnia <strong>Dost\u0119pno\u015b\u0107<\/strong> w warunkach obci\u0105\u017cenia. Ci, kt\u00f3rzy chc\u0105 zg\u0142\u0119bi\u0107 ten temat, znajd\u0105 praktyczne przyk\u0142ady w moich wskaz\u00f3wkach dotycz\u0105cych <a href=\"https:\/\/webhosting.de\/pl\/ebpf-linux-narzedzia-analityczne-monitorowanie-serwerow-spostrzezenia\/\">Narz\u0119dzia analityczne dla systemu Linux<\/a>, z kt\u00f3rych regularnie korzystam w pracy.<\/p>\n\n<p>Wa\u017cne jest dla mnie wyra\u017ane rozdzielenie gromadzenia danych od ich analizy. Programy eBPF wyodr\u0119bniaj\u0105 wy\u0142\u0105cznie niezb\u0119dne pola (np. czas trwania, kod b\u0142\u0119du, PID, identyfikator Cgroup) i zapisuj\u0105 je w mapach. Agregacja danych do histogram\u00f3w lub list najcz\u0119stszych warto\u015bci odbywa si\u0119 jak najbli\u017cej \u017ar\u00f3d\u0142a, aby ograniczy\u0107 ilo\u015b\u0107 przesy\u0142anych danych. Dzi\u0119ki temu interaktywne analizy s\u0105 mo\u017cliwe nawet przy du\u017cej cz\u0119stotliwo\u015bci zdarze\u0144.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/serverperformance-analyse-7641.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u015aledzenie w systemie Linux za pomoc\u0105 Kprobes, Uprobes i punkt\u00f3w \u015bledzenia<\/h2>\n\n<p>Aby zapewni\u0107 skuteczne \u015bledzenie, do\u0142\u0105czam programy <strong>Kprobes<\/strong>, Uprobes lub Tracepoints \u2013 w zale\u017cno\u015bci od tego, czy obserwuj\u0119 funkcje j\u0105dra, biblioteki przestrzeni u\u017cytkownika, czy stabilne zdarzenia j\u0105dra. Kprobes wskazuj\u0105 mi punkty wej\u015bcia i wyj\u015bcia w j\u0105drze, na przyk\u0142ad w stosie sieciowym lub systemie plik\u00f3w. Uprobes pomagaj\u0105 mi w analizie funkcji aplikacji bez konieczno\u015bci modyfikowania kodu \u017ar\u00f3d\u0142owego, co znacznie skraca czas diagnostyki. Tracepoints wykorzystuj\u0119, gdy potrzebuj\u0119 d\u0142ugoterminowej stabilno\u015bci interfejs\u00f3w i planuj\u0119 aktualizacje. Dzi\u0119ki nak\u0142adaj\u0105cym si\u0119 punktom pomiarowym rejestruj\u0119 op\u00f3\u017anienia wzd\u0142u\u017c \u015bcie\u017cki i identyfikuj\u0119 <strong>Hotspoty<\/strong> w sekundach.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Typ Hook<\/th>\n      <th>Typowe zastosowanie<\/th>\n      <th>Mocne strony<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Kprobes<\/td>\n      <td>Funkcje j\u0105dra w stosie sieciowym, pami\u0119ciowym lub wej\u015bcia\/wyj\u015bcia<\/td>\n      <td>Wysoki <strong>Elastyczno\u015b\u0107<\/strong>, precyzyjne informacje<\/td>\n    <\/tr>\n    <tr>\n      <td>Uprobes<\/td>\n      <td>Pliki wykonywalne i biblioteki przestrzeni u\u017cytkownika<\/td>\n      <td>Nie trzeba zmienia\u0107 kodu, szybciej <strong>U\u017cycie<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>Punkty \u015bledzenia<\/td>\n      <td>Zdarzenia j\u0105dra zdefiniowane statycznie<\/td>\n      <td>Stabilne interfejsy, niewielkie <strong>Konserwacja<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Je\u015bli jest to mo\u017cliwe, dzisiaj najch\u0119tniej korzystam z <strong>fentry\/fexit<\/strong>-Hooks (trampoliny BPF) zamiast Kprobes, poniewa\u017c zapewniaj\u0105 one stabilniejsze i wydajniejsze dokowanie na granicach dzia\u0142ania funkcji. W przestrzeni u\u017cytkownika, opr\u00f3cz Uprobes, mo\u017cliwe jest r\u00f3wnie\u017c po\u0142\u0105czenie ze statycznie zdefiniowanymi <strong>Testy USDT\/SDT<\/strong> przydatne, z kt\u00f3rych mog\u0119 konsekwentnie korzysta\u0107 bez znajomo\u015bci symboli.<\/p>\n\n<h2>Narz\u0119dzia w codziennej pracy: efektywne wykorzystanie BCC i bpftrace<\/h2>\n\n<p>Cz\u0119sto rozpoczynam analizy od <strong>bpftrace<\/strong>, poniewa\u017c za pomoc\u0105 jednego wiersza kodu uzyskuj\u0119 w ci\u0105gu kilku minut przejrzyste histogramy i listy najcz\u0119\u015bciej wyst\u0119puj\u0105cych element\u00f3w. W przypadku bardziej rozbudowanych proces\u00f3w si\u0119gam po BCC, \u0142\u0105cz\u0119 skrypty, eksportuj\u0119 wska\u017aniki i zbieram \u015blady stosu do profilowania \u015bcie\u017cek krytycznych. W ten spos\u00f3b mierz\u0119 op\u00f3\u017anienia na wywo\u0142anie systemowe, wska\u017aniki b\u0142\u0119d\u00f3w i rozk\u0142ad operacji wej\u015bcia\/wyj\u015bcia na proces, nie przeci\u0105\u017caj\u0105c przy tym maszyny. Typowe hipotezy sprawdzam od razu: czy nowa kompilacja powoduje wi\u0119cej powolnych wywo\u0142a\u0144 systemowych, czy te\u017c spowalnia system plik\u00f3w? W przypadku bardziej szczeg\u00f3\u0142owych przyk\u0142ad\u00f3w praktycznych odsy\u0142am do <a href=\"https:\/\/webhosting.de\/pl\/bpftrace-szybsze-wykrywanie-problemow-z-serwerem-hostingowym-i-diagnoza\/\">bpftrace w hostingu<\/a>, z kt\u00f3rego cz\u0119sto korzystam w celu szybkiego postawienia diagnozy.<\/p>\n\n<p>W BCC i bpftrace \u015bwiadomie decyduj\u0119, czy <strong>bufor perf<\/strong> lub <strong>ringbuf<\/strong> Stosuj\u0119: ringbuf jest ma\u0142o pami\u0119cioch\u0142onny i wydajny w przypadku strumieni ci\u0105g\u0142ych, podczas gdy perf buffer nadal sprawdza si\u0119 w przypadku sporadycznych zdarze\u0144 z pr\u00f3bkami stosowymi. Histogramy tworz\u0119 najch\u0119tniej jako przedzia\u0142y log2, aby <strong>Warto\u015bci odstaj\u0105ce<\/strong> i wyra\u017anie wyodr\u0119bni\u0107 szersze rozk\u0142ady. W razie potrzeby pobieram pr\u00f3bki okresowo (np. 49\u201399 Hz), aby ograniczy\u0107 obci\u0105\u017cenie zwi\u0105zane z profilowaniem.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/eBPF_performance_8862.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>eBPF do kompleksowego monitorowania serwer\u00f3w<\/h2>\n\n<p>Za pomoc\u0105 eBPF mierz\u0119 wska\u017aniki tam, gdzie powstaje praca: w <strong>J\u0105dro<\/strong> oraz na interfejsach przestrzeni u\u017cytkownika. W ten spos\u00f3b koreluj\u0119 wywo\u0142ania systemowe, zachowanie harmonogramu, operacje wej\u015bcia\/wyj\u015bcia blokowego oraz op\u00f3\u017anienia sieciowe na ca\u0142ej \u015bcie\u017cce. Rozpoznaj\u0119, czy przepustowo\u015b\u0107 jest ograniczana przez zmiany kontekstu, blokady czy czasy oczekiwania na no\u015bniki danych. Na serwerach internetowych, baz danych i API szybciej wykrywam w\u0105skie gard\u0142a ni\u017c przy u\u017cyciu klasycznych agent\u00f3w. W razie potrzeby do analizy na poziomie pakiet\u00f3w stosuj\u0119 <a href=\"https:\/\/webhosting.de\/pl\/xdp-wysokowydajne-przetwarzanie-pakietow-z-predkoscia-jadra-systemu\/\">Przetwarzanie pakiet\u00f3w XDP<\/a> i \u015bledzi\u0107 pakiety Drops, Retransmits oraz rozk\u0142ady RTT dla poszczeg\u00f3lnych gniazd lub proces\u00f3w, aby <strong>\u015bcie\u017cki sieciowe<\/strong> dok\u0142adnie oceni\u0107.<\/p>\n\n<p>Szczeg\u00f3lnie cenny jest podzia\u0142 wed\u0142ug <strong>Cgroups<\/strong> lub kontener\u00f3w. Dzi\u0119ki temu mog\u0119 dok\u0142adnie sprawdzi\u0107, kt\u00f3ra us\u0142uga na danym ho\u015bcie zajmuje zasoby procesora, wej\u015bcia\/wyj\u015bcia lub gniazd. W \u015brodowiskach wielodost\u0119pnych pomaga mi to weryfikowa\u0107 sprawiedliwe limity i wykrywa\u0107 \u201eha\u0142a\u015bliwych s\u0105siad\u00f3w\u201d bez ingerencji w aplikacje.<\/p>\n\n<h2>Zrozumie\u0107 koszty og\u00f3lne i ogranicza\u0107 je do minimum<\/h2>\n\n<p>W przypadku eBPF zawsze zwracam uwag\u0119, aby tylko <strong>odpowiedni<\/strong> Przetwarzanie zdarze\u0144 i ich wczesne filtrowanie. Zamiast ca\u0142ych \u0142adunk\u00f3w rejestruj\u0119 kluczowe wska\u017aniki i dobieram typy map odpowiednio do wzorca dost\u0119pu, na przyk\u0142ad LRU dla cz\u0119sto wymienianych kluczy. Optymalizuj\u0119 struktury, aby zachowa\u0107 lokalno\u015b\u0107 pami\u0119ci podr\u0119cznej i unikn\u0105\u0107 niepotrzebnych operacji dost\u0119pu do pami\u0119ci. Przed wdro\u017ceniem przeprowadzam testy na \u015brodowisku stagingowym i sprawdzam cz\u0119stotliwo\u015b\u0107 zdarze\u0144, aby p\u0142ynnie obs\u0142ugiwa\u0107 szczyty obci\u0105\u017cenia. Dzi\u0119ki temu dodatkowy nak\u0142ad pracy pozostaje niewielki, podczas gdy <strong>Znaczenie<\/strong> poziom danych pozostaje wysoki.<\/p>\n\n<p>Dzi\u0119ki mapom na procesor ograniczam zjawisko \u201efalse sharing\u201d, a dzi\u0119ki wywo\u0142aniom ogonowym dziel\u0119 z\u0142o\u017cone programy na ma\u0142e, wielokrotnego u\u017cytku modu\u0142y. Tam, gdzie ma to sens, stosuj\u0119 pr\u00f3bkowanie lub ograniczenia cz\u0119stotliwo\u015bci (np. tylko co n-te zdarzenie), aby ograniczy\u0107 kardynalno\u015b\u0107 i zu\u017cycie pami\u0119ci. Podczas eksportu wybieram przetwarzanie wsadowe, aby czytniki przestrzeni u\u017cytkownika nie sta\u0142y si\u0119 w\u0105skim gard\u0142em.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/ebpf-performance-analysis-linux-1764.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktyka: stopniowa diagnostyka z wykorzystaniem eBPF<\/h2>\n\n<p>Ka\u017cd\u0105 analiz\u0119 rozpoczynam od jasnego <strong>Pytanie badawcze<\/strong>: Przeci\u0105\u017cenie procesora, du\u017ce op\u00f3\u017anienia, zatory we\/wy lub problemy sieciowe. Nast\u0119pnie wybieram odpowiednie narz\u0119dzia, na przyk\u0142ad profilowanie procesora w przypadku \u015bcie\u017cek o najwi\u0119kszym obci\u0105\u017ceniu, \u015bledzenie op\u00f3\u017anie\u0144 we\/wy dla urz\u0105dze\u0144 blokuj\u0105cych lub analiz\u0119 gniazd w przypadku retransmisji TCP. Formu\u0142uj\u0119 hipotezy, weryfikuj\u0119 je za pomoc\u0105 jednowierszowych polece\u0144 bpftrace i w razie potrzeby dopracowuj\u0119 punkty pomiarowe. Uzyskane metryki przekszta\u0142cam w szeregi czasowe, reaguj\u0119 na trendy i por\u00f3wnuj\u0119 konfiguracje przed i po wprowadzeniu zmian. Na podstawie wynik\u00f3w wyznaczam konkretne dzia\u0142ania: dostosowuj\u0119 limity, grupuj\u0119 w\u0105tki, reguluj\u0119 pami\u0119ci podr\u0119czne lub upraszczam \u015bcie\u017cki kodu, aby <strong>Czasy reakcji<\/strong> zlew.<\/p>\n\n<p>Sprawdzonym rozwi\u0105zaniem s\u0105 kr\u00f3tkie, ukierunkowane okna pomiarowe (np. 60\u2013300 sekund) podczas szczyt\u00f3w obci\u0105\u017cenia. Takie migawki s\u0105 reprezentatywne, przejrzyste i minimalizuj\u0105 wp\u0142yw na system. W przypadku uporczywych problem\u00f3w przechodz\u0119 na ci\u0105g\u0142e pobieranie pr\u00f3bek z nisk\u0105 cz\u0119stotliwo\u015bci\u0105 i koreluj\u0119 dane z wdro\u017ceniami, zadaniami cron lub oknami tworzenia kopii zapasowych.<\/p>\n\n<h2>Integracja ze stosami rozwi\u0105za\u0144 do monitorowania<\/h2>\n\n<p>Eksportuj\u0119 metryki eBPF jako <strong>Licznik<\/strong>, wska\u017aniki i rozk\u0142ady, a nast\u0119pnie koreluj\u0119 je z logami i \u015bladami z aplikacji. W ten spos\u00f3b precyzyjnie przypisuj\u0119 zdarzenia j\u0105dra do poszczeg\u00f3lnych \u017c\u0105da\u0144 i rozpoznaj\u0119 wzorce czasowe. W \u015brodowiskach mikrous\u0142ugowa ta korelacja zapewnia mi przejrzysty obraz szczyt\u00f3w op\u00f3\u017anie\u0144 w r\u00f3\u017cnych us\u0142ugach. Strumienie zdarze\u0144 przekazuj\u0119 do system\u00f3w centralnych i kontroluj\u0119 cz\u0119stotliwo\u015b\u0107 pr\u00f3bkowania, aby pulpity nawigacyjne zachowa\u0142y swoj\u0105 przydatno\u015b\u0107. Na tej podstawie mo\u017cna sformu\u0142owa\u0107 alarmy, kt\u00f3re wskazuj\u0105 rzeczywiste <strong>Przyczyny<\/strong> zamiast zg\u0142asza\u0107 jedynie objawy.<\/p>\n\n<p>Zwracam uwag\u0119 na <strong>kardynalno\u015b\u0107<\/strong>: Identyfikatory proces\u00f3w, etykiety kontener\u00f3w i gniazda mog\u0105 spowodowa\u0107 gwa\u0142towny wzrost liczby szereg\u00f3w czasowych. Dlatego normalizuj\u0119 etykiety, ograniczam przestrzenie kluczy (Top-N) i w razie potrzeby udost\u0119pniam szczeg\u00f3\u0142y na \u017c\u0105danie. Rozk\u0142ady eksportuj\u0119 jako segmenty o sp\u00f3jnych granicach, aby umo\u017cliwi\u0107 por\u00f3wnania mi\u0119dzy hostami. Liczniki pozostaj\u0105 monotonne, a resetowania wyra\u017anie oznaczam.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/ebpf_monitoring_3721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Typowe wska\u017aniki eBPF, kt\u00f3re naprawd\u0119 si\u0119 sprawdzaj\u0105<\/h2>\n\n<p>Analizuj\u0119 op\u00f3\u017anienia na wywo\u0142anie systemu oraz wska\u017aniki b\u0142\u0119d\u00f3w, aby <strong>Warto\u015bci odstaj\u0105ce<\/strong> oraz szybko rozpoznawa\u0107 kaskady ponownych pr\u00f3b. Najcz\u0119\u015bciej wywo\u0142ywane funkcje systemowe w ka\u017cdym procesie pokazuj\u0105 mi, gdzie marnuje si\u0119 czas i kt\u00f3re \u015bcie\u017cki s\u0105 warte uwagi. Profile procesora ze \u015bladami stosu wskazuj\u0105 \u201egor\u0105ce \u015bcie\u017cki\u201d, kt\u00f3rymi zajmuj\u0119 si\u0119 w pierwszej kolejno\u015bci. W przypadku obci\u0105\u017cenia pami\u0119ci sprawdzam wzorce b\u0142\u0119d\u00f3w stronicowania i oceniam ich wp\u0142yw na przepustowo\u015b\u0107 oraz op\u00f3\u017anienia. W przypadku operacji wej\u015bcia\/wyj\u015bcia blokowego korzystam z rozk\u0142ad\u00f3w op\u00f3\u017anie\u0144 dla poszczeg\u00f3lnych urz\u0105dze\u0144 lub punkt\u00f3w montowania, natomiast metryki TCP uwidaczniaj\u0105 retransmisje, utracone pakiety i przedzia\u0142y RTT dla poszczeg\u00f3lnych po\u0142\u0105cze\u0144 oraz rzeczywiste <strong>obci\u0105\u017cenie sieci<\/strong> okre\u015bli\u0107 ilo\u015bciowo.<\/p>\n\n<p>W kwestiach zwi\u0105zanych z pami\u0119ci\u0105 zwracam uwag\u0119 na <strong>Odzyska\u0107<\/strong>-zdarzenia, wzrost wielko\u015bci slab\u00f3w oraz lokalno\u015b\u0107 NUMA. W przypadku operacji wej\u015bcia\/wyj\u015bcia (I\/O) analizuj\u0119 g\u0142\u0119boko\u015b\u0107 kolejek i szybko\u015b\u0107 scalania; w sieci skupiam si\u0119 na zaleg\u0142o\u015bciach w listach, sygna\u0142ach przeci\u0105\u017cenia oraz problemach zwi\u0105zanych z Path MTU. Sygna\u0142y te wskazuj\u0105 mi, czy optymalizacja powinna odbywa\u0107 si\u0119 na poziomie aplikacji, czy systemu.<\/p>\n\n<h2>Realistyczna ocena szans i ogranicze\u0144<\/h2>\n\n<p>Dzi\u0119ki eBPF uzyskuj\u0119 szczeg\u00f3\u0142owy wgl\u0105d w system bez konieczno\u015bci stosowania poprawek j\u0105dra i bez ponownego uruchamiania, co usprawnia dzia\u0142anie <strong>niezawodny<\/strong> . Elastyczne programowanie obejmuje wiele scenariuszy zastosowa\u0144, od debugowania po optymalizacj\u0119. Ograniczenia odczuwam tam, gdzie brakuj\u0105ce haki nie odzwierciedlaj\u0105 okre\u015blonych \u015bcie\u017cek lub weryfikator nak\u0142ada bardzo restrykcyjne zasady. R\u00f3wnie\u017c brak wiedzy hamuje sukces, dlatego inwestuj\u0119 w szkolenia i ma\u0142e eksperymenty. Podsumowuj\u0105c, zyskuj\u0119 cenn\u0105 przejrzysto\u015b\u0107, o ile przestrzegam mechanizm\u00f3w bezpiecze\u0144stwa i <strong>Z\u0142o\u017cono\u015b\u0107<\/strong> zachowa\u0107 kontrol\u0119 nad programami.<\/p>\n\n<p>Kolejnym aspektem praktycznym jest <strong>Zgodno\u015b\u0107 z j\u0105drem<\/strong>: Funkcje i struktury r\u00f3\u017cni\u0105 si\u0119 w zale\u017cno\u015bci od dystrybucji i wersji. Pomaga mi w tym przejrzysta abstrakcja (np. preferowanie punkt\u00f3w \u015bledzenia tam, gdzie to mo\u017cliwe) oraz techniki zapewniaj\u0105ce przeno\u015bno\u015b\u0107, dzi\u0119ki czemu narz\u0119dzia pozostaj\u0105 \u0142atwe w utrzymaniu w d\u0142u\u017cszej perspektywie.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch_4312.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktyczna lista kontrolna na pocz\u0105tek<\/h2>\n\n<p>Najpierw zdefiniuj\u0119 <strong>Cel<\/strong> pomiaru, aby zachowa\u0107 skupienie i unikn\u0105\u0107 zb\u0119dnych danych. Nast\u0119pnie aktywuj\u0119 odpowiednie haki, sprawdzam cz\u0119stotliwo\u015b\u0107 zdarze\u0144 i redukuj\u0119 szumy za pomoc\u0105 filtr\u00f3w. Rejestruj\u0119 wy\u0142\u0105cznie wska\u017aniki, kt\u00f3re potwierdzaj\u0105 lub obalaj\u0105 moj\u0105 hipotez\u0119, a tak\u017ce ograniczam czas trwania pomiaru, aby zminimalizowa\u0107 czynniki zak\u0142\u00f3caj\u0105ce. Wyniki dokumentuj\u0119 natychmiast, por\u00f3wnuj\u0119 je z warto\u015bciami poprzednimi i dziel\u0119 si\u0119 nimi z zespo\u0142em, aby kolejne kroki by\u0142y jasne. Na koniec ustalam dzia\u0142ania, planuj\u0119 ponown\u0105 weryfikacj\u0119 i przenosz\u0119 przydatne skrypty do <strong>Ponowne u\u017cycie<\/strong> do p\u00f3\u017aniejszych analiz.<\/p>\n\n<p>Ponadto przygotowuj\u0119 standardowe progi (np. dopuszczalne percentyle dla poszczeg\u00f3lnych klas us\u0142ug) i \u0142\u0105cz\u0119 je z playbookami. W ten spos\u00f3b alarmy mo\u017cna bezpo\u015brednio przekszta\u0142ci\u0107 w kroki diagnostyczne, a \u015brodki przyspieszaj\u0105ce dzia\u0142anie (np. dostosowanie limit\u00f3w Cgroup, kalibracja pul w\u0105tk\u00f3w) przetestowa\u0107 bez op\u00f3\u017anie\u0144.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/ebpf-server-monitoring-8472.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Przeno\u015bno\u015b\u0107 dzi\u0119ki CO-RE i BTF<\/h2>\n\n<p>Aby narz\u0119dzia dzia\u0142a\u0142y stabilnie w r\u00f3\u017cnych wersjach j\u0105dra, stawiam na <strong>CO-RE<\/strong> (Compile Once \u2013 Run Everywhere) oraz <strong>BTF<\/strong>-Informacje o typach. libbpf dostosowuje dost\u0119p do p\u00f3l w czasie wykonywania do konkretnej struktury j\u0105dra. Generuj\u0119 plik vmlinux.h i korzystam z funkcji pomocniczych bpf_core_read(), aby bezpiecznie rozdziela\u0107 przesuni\u0119cia. Zmniejsza to nak\u0142ad pracy zwi\u0105zany z utrzymaniem kodu, zapobiega problemom po aktualizacjach i sprawia, \u017ce narz\u0119dzia s\u0105 bardziej odporne na r\u00f3\u017cnice mi\u0119dzy dystrybucjami.<\/p>\n\n<p>Gdy CO-RE nie jest dost\u0119pne, korzystam z punkt\u00f3w \u015bledzenia lub stabilnych symboli i \u015bwiadomie rezygnuj\u0119 z g\u0142\u0119bi analizy na rzecz stabilno\u015bci. Wybieram t\u0119 r\u00f3wnowag\u0119 w zale\u017cno\u015bci od stopnia krytyczno\u015bci systemu.<\/p>\n\n<h2>\u015arodowiska kontenerowe i Kubernetes<\/h2>\n\n<p>W klastrach uruchamiam eBPF-Collector jako <strong>DaemonSet<\/strong> oraz izoluj\u0119 widoczno\u015b\u0107 za pomoc\u0105 przestrzeni nazw i grup Cgroup. Dokonuj\u0119 pomiar\u00f3w dla ka\u017cdego poda\/przestrzeni nazw i powi\u0105zuj\u0119 metryki z obci\u0105\u017ceniami, bez konieczno\u015bci wprowadzania instrumentacji do kontener\u00f3w. W zakresie eksploatacji starannie planuj\u0119 uprawnienia: nowoczesne j\u0105dra obs\u0142uguj\u0105 CAP_BPF\/CAP_PERFMON, starsze wymagaj\u0105 czasami CAP_SYS_ADMIN. Przestrzegam wytycznych dotycz\u0105cych bezpiecze\u0144stwa i przyznaj\u0119 tylko minimalnie niezb\u0119dne uprawnienia.<\/p>\n\n<p>W przypadku \u015bcie\u017cek sieciowych wybieram, w zale\u017cno\u015bci od miejsca docelowego, mi\u0119dzy <strong>XDP<\/strong> (wczesne, wydajne rozliczanie) oraz <strong>tc<\/strong>-Hooks (\u015bci\u015ble powi\u0105zane z logik\u0105 kszta\u0142towania ruchu). W przypadku host\u00f3w wielodost\u0119pnych zwracam uwag\u0119 na rygorystyczne filtry, aby rejestrowane by\u0142y wy\u0142\u0105cznie istotne zdarzenia zwi\u0105zane z kontenerami.<\/p>\n\n<h2>Ograniczenia dotycz\u0105ce zasob\u00f3w i bezpiecze\u0144stwa w produkcji<\/h2>\n\n<p>Rozmiary map ustalam ostro\u017cnie, testuj\u0119 cz\u0119stotliwo\u015bci zdarze\u0144 w najgorszym scenariuszu i ustalam \u015bcis\u0142e limity. Pami\u0119\u0107 dla map eBPF planuj\u0119 wyra\u017anie (w razie potrzeby dostosowuj\u0105c memlock\/rlimits) i sprawdzam, czy procesy odczytuj\u0105ce nad\u0105\u017caj\u0105 pod obci\u0105\u017ceniem. W\u0142\u0105czam logi audytowe w przypadku b\u0142\u0119d\u00f3w \u0142adowania, aby problemy z uprawnieniami i odrzucenia przez weryfikator by\u0142y natychmiast widoczne. Przestrzegam zasad ochrony danych, unikaj\u0105c \u0142adunk\u00f3w, maskuj\u0105c dane osobowe (PII) i rejestruj\u0105c wy\u0142\u0105cznie metadane.<\/p>\n\n<h2>Wykrywanie b\u0142\u0119d\u00f3w w programie Verifier i typowe trudno\u015bci<\/h2>\n\n<p>Je\u015bli weryfikator odrzuca programy, cz\u0119sto wynika to z potencjalnie niebezpiecznych \u015bcie\u017cek: niezabezpieczonych wska\u017anik\u00f3w, zbyt g\u0142\u0119bokich stos\u00f3w wywo\u0142a\u0144, niedozwolonych funkcji pomocniczych lub p\u0119tli bez ogranicze\u0144. Rozwi\u0105zuj\u0119 ten problem poprzez jawne sprawdzanie granic, mniejsze funkcje pomocnicze, konserwatywne p\u0119tle oraz stosowanie dozwolonych funkcji pomocniczych. W celu przeprowadzenia bardziej szczeg\u00f3\u0142owej analizy generuj\u0119 logi weryfikatora, kompiluj\u0119 kod z informacjami debugowania i krok po kroku zaw\u0119\u017cam obszar problemu. Ponadto zwracam uwag\u0119 na ograniczenia programu (limity instrukcji i stosu) oraz w razie potrzeby dziel\u0119 logik\u0119 za pomoc\u0105 wywo\u0142a\u0144 ogonowych.<\/p>\n\n<h2>Automatyzacja, ponowne wykorzystanie i instrukcje post\u0119powania<\/h2>\n\n<p>Sprawdzone skrypty umieszczam w <strong>bpffs<\/strong>, aby mog\u0142y by\u0107 wykorzystywane przez wiele proces\u00f3w. Tworz\u0119 wersje profili, nadaj\u0119 im jednoznaczne nazwy i udost\u0119pniam filtry domy\u015blne (np. identyfikatory Cgroup). Zadania uruchamiane co noc rejestruj\u0105 podstawowe metryki z nisk\u0105 cz\u0119stotliwo\u015bci\u0105, podczas gdy profile uruchamiane na \u017c\u0105danie zapewniaj\u0105 bardziej szczeg\u00f3\u0142owe dane. Wyniki dokumentuj\u0119 bezpo\u015brednio w zg\u0142oszeniu\/incydencie, podaj\u0105c konfiguracj\u0119, okres i wersj\u0119 j\u0105dra \u2013 dzi\u0119ki temu pomiary s\u0105 powtarzalne.<\/p>\n\n<h2>Jako\u015b\u0107 pomiar\u00f3w i statystyka w praktyce<\/h2>\n\n<p>Rzecznie rozr\u00f3\u017cniam mi\u0119dzy <strong>Czas oczekiwania<\/strong> (we\/wy, blokady) oraz <strong>czas procesora<\/strong> oraz uwzgl\u0119dniam fazy rozgrzewania pami\u0119ci podr\u0119cznej. Percentyle (P50\/P90\/P99) stosuj\u0119 sp\u00f3jnie we wszystkich us\u0142ugach, aby optymalizacje pozostawa\u0142y por\u00f3wnywalne. W przypadku silnie zmiennych op\u00f3\u017anie\u0144 stosuj\u0119 przedzia\u0142y logarytmiczne. Sprawdzam \u017ar\u00f3d\u0142a czasu (ktime) pod k\u0105tem monotoniczno\u015bci i rozdzielczo\u015bci, aby nie zniwelowa\u0107 kr\u00f3tkich skok\u00f3w. Por\u00f3wnania \u201eprzed\u201d i \u201epo\u201d przeprowadzam przy identycznym obci\u0105\u017ceniu, aby m\u00f3c zmierzy\u0107 rzeczywisty post\u0119p.<\/p>\n\n<h2>Praktyczne przyk\u0142ady z \u017cycia codziennego<\/h2>\n\n<ul>\n  <li>Serwer WWW: Wzrasta op\u00f3\u017anienie P99 \u2192 Analiza przebiegu dla akcji accept\/connect\/sendfile wskazuje na ponowne transmisje; Rozwi\u0105zanie: zoptymalizowa\u0107 stos TCP, dostosowa\u0107 bufor wysy\u0142ania, rozgrza\u0107 pami\u0119\u0107 podr\u0119czn\u0105 CDN.<\/li>\n  <li>Baza danych: D\u0142ugie czasy wywo\u0142a\u0144 systemowych podczas fsync \u2192 Rozk\u0142ad operacji wej\u015bcia\/wyj\u015bcia blokowego wskazuje na zape\u0142nienie kolejki; Rozwi\u0105zanie: Dostosowa\u0107 ustawienia zapisu z op\u00f3\u017anieniem, przenie\u015b\u0107 dziennik na szybsz\u0105 pami\u0119\u0107 masow\u0105.<\/li>\n  <li>Mikrous\u0142uga: odchylenia w RPC \u2192 \u015blady harmonogramu wskazuj\u0105 szczyty w kolejce Runqueue; rozwi\u0105zanie: dostosowa\u0107 powinowactwo procesora\/limity, skalibrowa\u0107 pule goroutyn.<\/li>\n  <li>Zadanie wsadowe: przepustowo\u015b\u0107 ulega wahaniom \u2192 analiza b\u0142\u0119d\u00f3w stron wykazuje fale odzyskiwania pami\u0119ci; rozwi\u0105zanie: zmniejszy\u0107 obci\u0105\u017cenie pami\u0119ci, celowo wykorzysta\u0107 strony typu HugePages.<\/li>\n<\/ul>\n\n<h2>Perspektywy i podsumowanie<\/h2>\n\n<p>Postrzegam eBPF jako <strong>klucz<\/strong> do nowoczesnego \u015bledzenia w systemie Linux, poniewa\u017c pozwala mi to mierzy\u0107 przyczyny, a nie objawy. Po\u0142\u0105czenie bezpiecznych hook\u00f3w, elastycznych narz\u0119dzi i niewielkiego obci\u0105\u017cenia dodatkowego zapewnia szybkie odpowiedzi na trudne pytania dotycz\u0105ce wydajno\u015bci. Kto post\u0119puje krok po kroku, dok\u0142adnie weryfikuje hipotezy i skupia si\u0119 na konkretnych pomiarach, osi\u0105ga bardziej niezawodne us\u0142ugi i kr\u00f3tsze przestoje. Uzyskane wska\u017aniki integruj\u0119 z istniej\u0105cymi \u015brodowiskami obserwowalno\u015bci i wykorzystuj\u0119 je do podejmowania jasnych decyzji dotycz\u0105cych konfiguracji, sprz\u0119tu i kodu. Dzi\u0119ki temu monitorowanie serwer\u00f3w nie opiera si\u0119 na subiektywnych odczuciach, lecz na danych \u2013 co przek\u0142ada si\u0119 na zauwa\u017caln\u0105 <strong>Korzy\u015bci<\/strong> dla u\u017cytkownik\u00f3w i obs\u0142ugi.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak dzi\u0119ki eBPF zoptymalizowa\u0107 monitorowanie wydajno\u015bci serwer\u00f3w za pomoc\u0105 analizy wydajno\u015bci i funkcji \u015bledzenia w systemie Linux. Temat: wydajno\u015b\u0107 eBPF i najlepsze praktyki dla administrator\u00f3w.<\/p>","protected":false},"author":1,"featured_media":20667,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-20674","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"181","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"eBPF Performance","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20667","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=20674"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/20674\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/20667"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=20674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=20674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=20674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}