{"id":30036,"date":"2025-01-20T05:00:00","date_gmt":"2025-01-20T04:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=30036"},"modified":"2025-01-16T15:40:58","modified_gmt":"2025-01-16T14:40:58","slug":"wprowadzenie-do-fluentbit","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/wprowadzenie-do-fluentbit\/","title":{"rendered":"Wprowadzenie do FluentBit"},"content":{"rendered":"\n<p>Obecne systemy chmurowe zmagaj\u0105 si\u0119 z coraz bardziej rosn\u0105c\u0105 ilo\u015bci\u0105 danych generowanych przez r\u00f3\u017cnorodne serwisy. Skuteczne zarz\u0105dzanie i analiza log\u00f3w staj\u0105 si\u0119 kluczowymi aspektami utrzymania stabilno\u015bci i efektywno\u015bci system\u00f3w IT. W tym kontek\u015bcie narz\u0119dzia do zbierania, przetwarzania i analizy danych zdecydowanie odgrywaj\u0105 istotn\u0105 rol\u0119. Jednym z nich jest Fluent Bit.<\/p>\n\n\n\n<p>Fluent Bit pozwala na gromadzenie log\u00f3w z r\u00f3\u017cnych \u017ar\u00f3de\u0142, ich przetwarzanie, filtrowanie oraz przesy\u0142anie dalej do r\u00f3\u017cnych miejsc docelowych. W niniejszym artykule zaprezentuj\u0119 podstawowe funkcje Fluent Bita. Odczytam logi z przyk\u0142adowego serwisu znajduj\u0105cego si\u0119 na klastrze kubernetesowym, przefiltruj\u0119 logi w zale\u017cno\u015bci od ich \u017ar\u00f3d\u0142a pochodzenia i na koniec, prze\u015bl\u0119 je dalej do innych serwis\u00f3w, aby tam mog\u0142y zosta\u0107 poddane analizie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Przygotowanie klastra<\/strong><\/h2>\n\n\n\n<p>Aby pokaza\u0107 podstawowe mo\u017cliwo\u015bci Fluent Bita, potrzebujemy lokalnego klastra kubernetesowego. Skorzystamy z <a href=\"https:\/\/kind.sigs.k8s.io\/docs\/user\/quick-start\/%23installation\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >Kinda<\/a>. Do tego skomunikujemy si\u0119 z klastrem za pomoc\u0105 <a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/%23kubectl\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >kubectl<\/a>. Na koniec zainstalujemy <a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >Helma<\/a>, aby w \u0142atwy spos\u00f3b doda\u0107 Fluent Bita do naszego klastra.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Instalacja Fluent Bita<\/strong><\/h2>\n\n\n\n<p>Gdy nasz lokalny klaster jest gotowy do u\u017cytku, przy pomocy Helma instalujemy Fluent Bita:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nhelm repo add fluent https:\/\/fluent.github.io\/helm-charts\nhelm upgrade --install fluent-bit fluent\/fluent-bit --namespace default\n<\/pre><\/div>\n\n\n<p>Po uruchomieniu powy\u017cszych komend powinni\u015bmy zobaczy\u0107 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/controllers\/daemonset\/\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >DaemonSeta<\/a>, kt\u00f3ry uruchomi Poda z instancj\u0105 FluentBita na ka\u017cdym naszym Nodzie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Generator log\u00f3w<\/h3>\n\n\n\n<p>Aby sprawdzi\u0107, jak Fluent Bit przetwarza i przekazuje dalej logi, potrzebujemy serwisu, kt\u00f3ry te logi b\u0119dzie dla nas produkowa\u0142. Dodamy prosty serwer na naszym lokalnym klastrze:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: server\n  labels:\n    app: server\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: server\n  template:\n    metadata:\n      labels:\n        app: server\n    spec:\n      containers:\n        - name: server\n          image: pjasiak\/log-server:0.1.0\n          ports:\n            - containerPort: 8085\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: server\nspec:\n  selector:\n    app: server\n  ports:\n    - protocol: TCP\n      port: 8085\n      targetPort: 8085\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl apply -f server.yaml\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Podstawowa konfiguracja<\/h2>\n\n\n\n<p>Konfiguracja Fluent Bita sk\u0142ada si\u0119 z czterech podstawowych sekcji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Service: definiuje globalne ustawienia instancji Fluent Bita.<\/li>\n\n\n\n<li>Input: okre\u015bla \u017ar\u00f3d\u0142a log\u00f3w.<\/li>\n\n\n\n<li>Filter: definiuje regu\u0142y i operacje przetwarzania danych log\u00f3w. To w tej sekcji mo\u017cna modyfikowa\u0107 lub filtrowa\u0107 strumie\u0144 log\u00f3w zgodnie z w\u0142asnymi potrzebami zanim przeka\u017cemy je na wyj\u015bcie.<\/li>\n\n\n\n<li>Output: definiuje miejsca docelowe dla przefiltrowanych i\/lub zmodyfikowanych log\u00f3w. Obs\u0142ugiwane typy miejsc docelowych to np. pliki, po\u0142\u0105czenia sieciowe (TCP, UDP, HTTP), systemy SIEM czy bazy danych.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"556\" height=\"174\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz1.png\" alt=\"Podstawowa konfiguracja Fluent Bita\" class=\"wp-image-30037\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz1.png 556w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz1-300x94.png 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><figcaption class=\"wp-element-caption\">Ryc. 1 Podstawowa konfiguracja Fluent Bita<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Krok I.<\/strong><\/h3>\n\n\n\n<p>Na pocz\u0105tek skonfigurujemy Fluent Bita w celu weryfikacji poprawno\u015bci odczytu log\u00f3w z naszego przyk\u0142adowego serwisu. Zastosujemy prost\u0105 konfiguracj\u0119, kt\u00f3ra przeka\u017ce logi do standardowego wyj\u015bcia. Umo\u017cliwi to obserwacj\u0119 log\u00f3w w Podzie Fluent Bita, zapewniaj\u0105c wgl\u0105d w ich zawarto\u015b\u0107 i poprawno\u015b\u0107 dzia\u0142ania.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfluent-bit.conf: |\n  &#x5B;SERVICE]\n    Flush         5\n    Daemon        off\n    Parsers_File  parsers.conf\n    HTTP_Server   On\n    HTTP_Listen   0.0.0.0\n    HTTP_Port     2020\n\n  &#x5B;INPUT]\n    Name              tail\n    Tag               kube.default.server\n    Path              \/var\/log\/containers\/server*.log\n    Parser            cri\n    DB                \/var\/log\/flb_kube.db\n    Mem_Buf_Limit     5MB\n    Skip_Long_Lines   On\n    Refresh_Interval  10\n\n  &#x5B;OUTPUT]\n    Name  stdout\n    Match kube.default.server\n    Format json\n    json_date_key false\n\nparsers.conf: |\n  &#x5B;PARSER]\n    Name        cri\n    Format      regex\n<\/pre><\/div>\n\n\n<p>W sekcji SERVICE definiujemy globalne parametry Fluent Bita. Okre\u015blamy tam interwa\u0142 czasowy (Flush), kt\u00f3ry odpowiada za cz\u0119stotliwo\u015b\u0107 wysy\u0142ania log\u00f3w na wyj\u015bcie. Przyk\u0142adowo, ustawienie flush: 1s spowoduje wysy\u0142anie log\u00f3w co sekund\u0119.<\/p>\n\n\n\n<p>Dodatkowo, w tej sekcji mo\u017cemy w\u0142\u0105czy\u0107 oraz skonfigurowa\u0107 adres i port serwera, u\u017cywany przez Kubernetes do sprawdzania, czy Fluent Bit jest aktywny i gotowy do obs\u0142ugi \u017c\u0105da\u0144 (Liveness i Readiness probe).<\/p>\n\n\n\n<p>Rejestrujemy r\u00f3wnie\u017c parser, kt\u00f3ry poprawnie odczyta logi z kontenera.<\/p>\n\n\n\n<p>W sekcji INPUT okre\u015blamy mi\u0119dzy innymi typ i \u015bcie\u017ck\u0119 do pliku z logami. Ustawiamy te\u017c pole <strong>Tag<\/strong>, kt\u00f3re razem z polem <strong>Match<\/strong> w innych sekcjach pozwala na \u0142atwe filtrowanie log\u00f3w.<\/p>\n\n\n\n<p>W ostatniej sekcji OUTPUT r\u00f3wnie\u017c wskazujemy typ, a tak\u017ce format, w jakim logi b\u0119d\u0105 przekazywane na wyj\u015bcie. Konfiguracja naszego Fluent Bita znajduje si\u0119 w Config Mapie, dlatego musimy j\u0105 zmodyfikowa\u0107:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl edit configmaps fluent-bit\n<\/pre><\/div>\n\n\n<p>i zresetowa\u0107 DameonSeta, aby nowa konfiguracja zosta\u0142a dodana do Fluent Bita:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl rollout restart daemonset fluent-bit\n<\/pre><\/div>\n\n\n<p>Gdy nowa konfiguracja zostanie wgrana, musimy przetestowa\u0107, czy logi z naszego serwera pojawi\u0105 si\u0119 na standardowym wyj\u015bciu, czyli w logach Fluenta Bita.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl logs -l app.kubernetes.io\/name=fluent-bit -f\n<\/pre><\/div>\n\n\n<p>Przekierujmy port naszego serwera i wy\u015blijmy zapytanie na nasz endpoint:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl port-forward services\/server 8085:8085\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncurl localhost:8085\n<\/pre><\/div>\n\n\n<p>Je\u017celi wszystko dzia\u0142a poprawnie, powinni\u015bmy zobaczy\u0107 logi przekierowane z naszego serwera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Output<\/h2>\n\n\n\n<p>Fluent Bit oferuje szeroki wachlarz opcji OUTPUT, umo\u017cliwiaj\u0105c elastyczne przekazywanie przetworzonych danych. Dzi\u0119ki temu, u\u017cytkownicy mog\u0105 dostosowa\u0107 miejsca docelowe do swoich konkretnych potrzeb integracyjnych i analitycznych. U\u017cytkownicy mog\u0105 kierowa\u0107 logi do r\u00f3\u017cnych system\u00f3w. Mo\u017cliwa jest r\u00f3wnie\u017c konfiguracja wielu sekcji OUTPUT jednocze\u015bnie, co zapewnia pe\u0142n\u0105 kontrol\u0119 nad dystrybucj\u0105 log\u00f3w. <\/p>\n\n\n\n<p>W oficjalnej <a href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/outputs\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >dokumentacji<\/a> mo\u017cemy znale\u017a\u0107 wiele przyk\u0142ad\u00f3w integracji z r\u00f3\u017cnymi serwisami. W naszym przyk\u0142adzie chcemy skupi\u0107 si\u0119 na konfiguracji Fluent Bita, dlatego jako OUTPUT wykorzystamy nasz prosty server. Dodajmy kolejny Deployment z serwisem, kt\u00f3ry b\u0119dzie odbiera\u0142 przes\u0142ane logi:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: output\n  labels:\n    app: output\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: output\n  template:\n    metadata:\n      labels:\n        app: output\n    spec:\n      containers:\n        - name: output\n          image: pjasiak\/log-server:0.1.0\n          ports:\n            - containerPort: 8085\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: output\nspec:\n  selector:\n    app: output\n  ports:\n    - protocol: TCP\n      port: 8085\n      targetPort: 8085\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"624\" height=\"127\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz3.png\" alt=\"Output\" class=\"wp-image-30039\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz3.png 624w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz3-300x61.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><figcaption class=\"wp-element-caption\">Ryc. 2 Output<\/figcaption><\/figure>\n\n\n\n<p>Musimy wskaza\u0107 Fluent Bitowi, aby wysy\u0142a\u0142 logi do naszego nowo powsta\u0142ego serwisu. W konfiguracji podmieniamy standardowy Output na serwer przetwarzaj\u0105cy nasze logi pod adresem <em>output.default.svc.cluster.local<\/em>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfluent-bit.conf: |\n  &#x5B;SERVICE]\n    Flush         5\n    Daemon        off\n    Parsers_File  parsers.conf\n    HTTP_Server  On\n    HTTP_Listen  0.0.0.0\n    HTTP_Port    2020\n\n  &#x5B;INPUT]\n    Name              tail\n    Tag               kube.default.server\n    Path              \/var\/log\/containers\/server*.log\n    Parser            cri\n    DB                \/var\/log\/flb_kube.db\n    Mem_Buf_Limit     5MB\n    Skip_Long_Lines   On\n    Refresh_Interval  10\n\n  &#x5B;OUTPUT]\n    Name  http\n    Format json\n    Match kube.default.server\n    Host  output.default.svc.cluster.local\n    Port  8085\n    URI   \/logs\n    json_date_key false\n<\/pre><\/div>\n\n\n<p>Kiedy Fluent Bit uaktualni now\u0105 konfiguracje, logi z naszego serwera zaczn\u0105 by\u0107 przesy\u0142ane do serwisu \u201eoutput\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Przekierowywanie log\u00f3w do r\u00f3\u017cnych serwis\u00f3w<\/h2>\n\n\n\n<p>Kolejnym krokiem b\u0119dzie przekierowanie log\u00f3w z r\u00f3\u017cnych \u017ar\u00f3de\u0142 do r\u00f3\u017cnych serwis\u00f3w. W naszym prostym generatorze log\u00f3w mamy dwa \u017ar\u00f3d\u0142a log\u00f3w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wygenerowane przez zewn\u0119trzn\u0105 bibliotek\u0119 oznaczone jako \u201e[GIN]\u201d<\/li>\n\n\n\n<li>oraz logi w postaci JSONa z takimi polami jak \u201etime\u201d czy \u201emsg\u201d.<\/li>\n<\/ul>\n\n\n\n<p>Aby r\u00f3\u017cne serwisy konsumowa\u0142y r\u00f3\u017cne rodzaje log\u00f3w, potrzebujemy doda\u0107 osobny serwis, kt\u00f3ry wykorzysta dok\u0142adnie ten sam obraz naszej aplikacji:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: gin-output\n  labels:\n    app: gin-output\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: gin-output\n  template:\n    metadata:\n      labels:\n        app: gin-output\n    spec:\n      containers:\n        - name: gin-output\n          image: pjasiak\/log-server:0.1.0\n          ports:\n            - containerPort: 8085\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: gin-output\nspec:\n  selector:\n    app: gin-output\n  ports:\n    - protocol: TCP\n      port: 8085\n      targetPort: 8085\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"624\" height=\"160\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz4.png\" alt=\"Przekierowywanie log\u00f3w do r\u00f3\u017cnych serwis\u00f3w\" class=\"wp-image-30041\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz4.png 624w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Obraz4-300x77.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><figcaption class=\"wp-element-caption\">Ryc. 3 Przekierowywanie log\u00f3w do r\u00f3\u017cnych serwis\u00f3w<\/figcaption><\/figure>\n\n\n\n<p>Musimy tak\u017ce zmodyfikowa\u0107 konfiguracj\u0119 naszego Fluent Bita:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nfluent-bit.conf: |\n  &#x5B;SERVICE]\n    Flush         5\n    Daemon        off\n    Parsers_File  parsers.conf\n    HTTP_Server  On\n    HTTP_Listen  0.0.0.0\n    HTTP_Port    2020\n\n  &#x5B;INPUT]\n    Name              tail\n    Tag               kube.default.server\n    Path              \/var\/log\/containers\/server*.log\n    Parser            cri\n    DB                \/var\/log\/flb_kube.db\n    Mem_Buf_Limit     5MB\n    Skip_Long_Lines   On\n    Refresh_Interval  10\n\n  &#x5B;FILTER]\n    Name   rewrite_tag\n    Match  kube.default.server\n    RULE   $message \\&#x5B;GIN\\]. $TAG.gin true\n\n  &#x5B;FILTER]\n    Name    modify\n    Match   kube.default.server.gin\n    Remove stream\n    Remove time\n    Remove logtag\n\n  &#x5B;FILTER]\n    Name    parser\n    Match   kube.default.server\n    Key_Name message\n    Parser json\n\n  &#x5B;FILTER]\n    Name    rewrite_tag\n    Match kube.default.server\n    RULE $msg . $TAG.json false\n\n  &#x5B;OUTPUT]\n    Name  http\n    Format json\n    Match kube.default.server.json\n    Host  output.default.svc.cluster.local\n    Port  8085\n    URI   \/logs\n    json_date_key false\n\n  &#x5B;OUTPUT]\n    Name  http\n    Format json\n    Match kube.default.server.gin\n    Host  gin-output.default.svc.cluster.local\n    Port  8085\n    URI   \/logs\n    json_date_key false\n<\/pre><\/div>\n\n\n<p>Po pierwsze, wprowadzili\u015bmy kilka segment\u00f3w \u201eFilter\u201d, kt\u00f3re poni\u017cej pokr\u00f3tce om\u00f3wi\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pierwszy filtr sprawdza, czy w logu istnieje string [GIN] i je\u017celi tak, to dodaje do takich log\u00f3w przyrostek .gin ,<\/li>\n\n\n\n<li>w nast\u0119pnym filtrze we wszystkich logach z nowo utworzonym tagiem z przyrostkiem .gin usuwamy zb\u0119dne pola w calach czysto kosmetycznych,<\/li>\n\n\n\n<li>kolejny filtr parser wyci\u0105ga z jsona pole message i przekszta\u0142ca je ze stringa na json,<\/li>\n\n\n\n<li>w ostatnim filtrze sprawdzamy, czy nasz json posiada pole msg (co sugeruje, \u017ce nie zosta\u0142 wygenerowany przez zewn\u0119trzn\u0105 bibliotek\u0119) i je\u017celi tak, dodajemy do takich tag\u00f3w przyrostek .json,<\/li>\n<\/ul>\n\n\n\n<p>W naszym pierwszym segmencie OUTPUT musimy teraz zmieni\u0107 pole Match, tak aby zajmowa\u0142 si\u0119 on tylko logami z tagiem <em>kube.default.server.json<\/em>.<\/p>\n\n\n\n<p>Na koniec dodali\u015bmy drugi segment OUTPUT, w kt\u00f3rym to logi z etykiet\u0105 <em>kube.default.server.gin<\/em> zostan\u0105 przekierowane na inny adres docelowy: <em>gin-output.default.svc.cluster.local<\/em><em><\/em><\/p>\n\n\n\n<p>Po wygenerowaniu kolejnego loga, mo\u017cemy prze\u015bledzi\u0107 nasze serwisy ko\u0144cowe. Ka\u017cdy z nich powinien otrzyma\u0107 r\u00f3\u017cny rodzaj log\u00f3w w zale\u017cno\u015bci od ich rodzaj\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/oferty-pracy\/\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/praca-k.jpg\" alt=\"oferta pracy\" class=\"wp-image-30083\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/praca-k.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/praca-k-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Powy\u017cszy artyku\u0142 prezentuje jedynie szczypt\u0119 mo\u017cliwo\u015bci Fluent Bita. Narz\u0119dzie to zachwyca szybko\u015bci\u0105 i wydajno\u015bci\u0105. Dok\u0142adna dokumentacja i intuicyjny interfejs u\u0142atwiaj\u0105 konfiguracj\u0119, a mnogo\u015b\u0107 wbudowanych opcji zapewnia szybk\u0105 integracj\u0119 z r\u00f3\u017cnymi systemami dost\u0119pnymi na rynku.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u017celi interesuj\u0105 Ci\u0119 inne narz\u0119dzia wykorzystywane w barn\u017cy IT, zajrzyj koniecznie r\u00f3wnie\u017c <a href=\"https:\/\/sii.pl\/blog\/all\/przeglad-narzedzi\/\" target=\"_blank\" rel=\"noopener\" title=\"\">do pozosta\u0142ych artyku\u0142\u00f3w naszych ekspert\u00f3w<\/a>. <\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;30036&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;5&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 5)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Wprowadzenie do FluentBit&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 5)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Obecne systemy chmurowe zmagaj\u0105 si\u0119 z coraz bardziej rosn\u0105c\u0105 ilo\u015bci\u0105 danych generowanych przez r\u00f3\u017cnorodne serwisy. Skuteczne zarz\u0105dzanie i analiza log\u00f3w &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/wprowadzenie-do-fluentbit\/\">Continued<\/a><\/p>\n","protected":false},"author":693,"featured_media":30043,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2776,2774,2427,1546,1512],"class_list":["post-30036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-logi","tag-fluent-bit","tag-digital","tag-przeglad-narzedzi","tag-poradnik"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2025\/01\/Wprowadzenie-do-FluentBit.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/30036"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/693"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=30036"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/30036\/revisions"}],"predecessor-version":[{"id":30085,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/30036\/revisions\/30085"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/30043"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=30036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=30036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=30036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}