{"id":93294,"date":"2020-09-05T07:42:58","date_gmt":"2020-09-05T05:42:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi"},"modified":"2020-09-05T07:42:58","modified_gmt":"2020-09-05T05:42:58","slug":"logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","title":{"rendered":"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vi g\u00e5r igenom grunderna f\u00f6r loggning i Docker och Kubernetes, och d\u00e4refter diskuterar vi tv\u00e5 verktyg som kan anv\u00e4ndas p\u00e5 produktion: Grafana Loki och EFK-stacken (Elasticsearch + Fluent Bit + Kibana).<\/p>\n<p><\/p>\n<p><em>Inneh\u00e5llet i artikeln \u00e4r en sammanfattning fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/nkmP0-EDb1A\">\u00f6ppen f\u00f6rel\u00e4sning fr\u00e5n skolan \"Slurm\"<\/a><\/noindex>. Om det finns ett intresse och s\u00e4rskilt ett produktionsbehov kan du g\u00e5 en fullst\u00e4ndig utbildning \u2014 anm\u00e4l dig till kursen om <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/Tinm9w\">\u00d6vervakning och loggning av infrastruktur i Kubernetes<\/a><\/noindex>.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/565b51e95f609556ad38b9d294ef3f2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"logirovanie-v-docker\">Loggning i Docker<\/h2>\n<p><\/p>\n<p>P\u00e5 Kubernetes-niv\u00e5 k\u00f6rs applikationer i pods, men p\u00e5 en l\u00e4gre niv\u00e5 fungerar de vanligtvis i Docker. D\u00e4rf\u00f6r beh\u00f6ver vi konfigurera loggningen s\u00e5 att vi samlar loggar fr\u00e5n containrar. Eftersom Docker startar containrarna m\u00e5ste vi f\u00f6rst\u00e5 hur loggningen fungerar p\u00e5 Docker-niv\u00e5.<\/p>\n<p><\/p>\n<p>Jag hoppas att varje l\u00e4sare vet: applikationsloggar ska skrivas till stdout\/stderr, och inte inuti containern. Loggarna aggregeras av Docker Daemon, och den arbetar bara med de loggar som skickas till stdout\/stderr. Dessutom medf\u00f6r det att skriva loggar inuti containern problem: containern sv\u00e4ller av den v\u00e4xande loggen (eftersom det troligen inte finns n\u00e5gon Logrotate i containern), och Docker Daemon har ingen aning om denna logg.<\/p>\n<p><\/p>\n<p>Docker har flera loggdrivrutiner eller plugins f\u00f6r att samla loggar fr\u00e5n containrar. I den gratisversionen Docker Community Edition (CE) finns det f\u00e4rre loggdrivrutiner \u00e4n i den kommersiella Docker Enterprise Edition (EE).<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/2b05602b54a9075f63713f72c7e74dfa.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jag har aldrig anv\u00e4nt Docker EE i praktiken: p\u00e5 Southbridge f\u00f6rs\u00f6ker vi h\u00e5lla oss till Open Source-l\u00f6sningar, och dessutom beh\u00f6ver v\u00e5ra kunder inte de flesta av de extra funktionerna i Docker EE. <\/p>\n<p><\/p>\n<p>Loggdrivrutiner i Docker CE:<\/p>\n<p><\/p>\n<p><strong>local<\/strong> \u2014 skrivning av loggar till interna filer i Docker Daemon;<br \/>\n<strong>json-file<\/strong> \u2014 skapande av json-loggar i varje containers mapp;<br \/>\n<strong>journald<\/strong> \u2014 skicka loggar till journald.<\/p>\n<p><\/p>\n<p>Inst\u00e4llningarna f\u00f6r loggning i Docker finns i filen daemon.json. <\/p>\n<p><\/p>\n<p>I f\u00e4ltet 'log-driver' anger man pluginen, och i f\u00e4ltet 'log-opts' \u2014 dess inst\u00e4llningar. I exemplet ovan \u00e4r pluginen 'json-file' angiven, med en loggstorleksbegr\u00e4nsning \u2014 'max-size': '10m'; begr\u00e4nsningen f\u00f6r antal filer (roteringsinst\u00e4llningar) \u2014 'max-file': '3'; samt v\u00e4rden som kommer att knytas till loggarna.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/0b86671ee8d3d009da29ba66bc29d4eb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vissa inst\u00e4llningar f\u00f6r loggdrivrutinen kan anges via kommandoradsverktyget. Detta \u00e4r praktiskt om en s\u00e4rskild container m\u00e5ste startas med en annan loggdrivrutin. <\/p>\n<p><\/p>\n<p>S\u00e5 h\u00e4r ser loggningsschemat ut i Docker:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/a45d8e3044780a5b7f20d83e14545d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>S\u00e5 h\u00e4r fungerar schemat: loggdrivrutinen, till exempel json-file, skapar filer. Loggsamlare (Rsyslog, Fluentd, Logagent och andra) samlar dessa filer och \u00f6verf\u00f6r dem f\u00f6r lagring i Elastic, Sematext eller andra lagringsl\u00f6sningar.<\/p>\n<p><\/p>\n<h2 id=\"osobennosti-logirovaniya-v-kubernetes\">Egenskaper f\u00f6r loggning i Kubernetes<\/h2>\n<p><\/p>\n<p>F\u00f6renklat ser loggningen i Kubernetes ut s\u00e5 h\u00e4r: det finns en pod, i vilken en container k\u00f6rs, och containern skickar loggar till stdout\/stderr. Sedan skapar Docker en fil och skriver loggarna, som kan roteras sedan.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/76e6fdbbb9f97851bfa95a7153d8c525.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e5t oss \u00f6verv\u00e4ga egenskaperna hos loggning i Kubernetes.<\/p>\n<p><\/p>\n<p><strong>Spara loggar mellan distributioner<\/strong>. Detta \u00e4r ett obligatoriskt villkor f\u00f6r korrekt konfiguration av loggning. Om loggar inte sparas mellan deploymentar kommer loggarna fr\u00e5n den tidigare versionen av applikationen att skrivas \u00f6ver, och en omstart av containern kan ocks\u00e5 leda till f\u00f6rlust av loggar. Kubernetes har en flagga \u2014previous, som g\u00f6r att man kan se loggarna f\u00f6r applikationen innan den senaste omstarten av Pod, men inte djupare.<\/p>\n<p><\/p>\n<p><strong>Aggreggera loggar fr\u00e5n alla instanser<\/strong>. Om mikrotj\u00e4nster hostas i molnet \u00e4r det molnleverant\u00f6ren som ansvarar f\u00f6r systemets \u00f6vervakning. Om mikrotj\u00e4nsterna ligger p\u00e5 egen h\u00e5rdvara m\u00e5ste vi f\u00f6rutom loggar fr\u00e5n containrar ocks\u00e5 samla loggar fr\u00e5n systemet.<\/p>\n<p><\/p>\n<p>Tidigare fanns det inga bra verktyg f\u00f6r att samla loggar b\u00e5de fr\u00e5n systemet och fr\u00e5n mikrotj\u00e4nster. Vanligtvis anv\u00e4nde ett verktyg f\u00f6r att samla systemloggar (till exempel Rsyslog), och ett annat \u2014 loggar fr\u00e5n Docker (till exempel journal-bit med inst\u00e4llningen av loggdrivrutinen Docker till journald). Vi f\u00f6rs\u00f6kte anv\u00e4nda journal-bit \u2014 f\u00f6r att samla loggar b\u00e5de fr\u00e5n containrar (i loggdrivrutinen Docker ange att loggar ska skrivas till journald) och fr\u00e5n systemet (i CentOS 7 finns redan systemd och journald). L\u00f6sningen fungerar, men \u00e4r inte perfekt. Om det finns m\u00e5nga loggar b\u00f6rjar journal-bit att lagga och meddelanden g\u00e5r f\u00f6rlorade.<\/p>\n<p><\/p>\n<p>Experimenten fortsatte \u2014 och en annan metod hittades. I CentOS 7 dupliceras de huvudsakliga systemloggarna (messages, audit, secure) i var-log som filer. I Docker kan loggar ocks\u00e5 konfigureras f\u00f6r att sparas i json-filer. D\u00e4rmed kan dessa filer fr\u00e5n CentOS 7 och Docker samlas in tillsammans.<\/p>\n<p><\/p>\n<p>Med tiden blev ELK Stack-l\u00f6sningen popul\u00e4r. Det \u00e4r en kombination av flera verktyg: Elasticsearch, Logstash och Kibana.<\/p>\n<p><\/p>\n<p>Elasticsearch lagrar loggar fr\u00e5n containrar, Logstash samlar loggar fr\u00e5n instanser, och Kibana m\u00f6jligg\u00f6r bearbetning av de mottagna loggarna, och skapandet av grafer baserat p\u00e5 dem. Under en tid anv\u00e4nde man aktivt ELK Stack, men enligt min \u00e5sikt passerar dess tid. Jag kommer senare att ber\u00e4tta varf\u00f6r.<\/p>\n<p><\/p>\n<p><strong>L\u00e4gg till metadata<\/strong>. Pods, applikationer och containrar kan k\u00f6ras \u00f6verallt. Dessutom kan ett enda program ha flera instanser. Loggarna skrivs i ett och samma format, och vi m\u00e5ste kunna f\u00f6rst\u00e5 vilken replika som skriver vilken logg och i vilket namespace den befinner sig. D\u00e4rf\u00f6r beh\u00f6ver loggarna metadata.<\/p>\n<p><\/p>\n<p><strong>Analysera loggar<\/strong>. Det \u00e4r intressant, men kostnaderna f\u00f6r att st\u00f6dja logg- och \u00f6vervakningssystemet kan \u00f6verstiga kostnaderna f\u00f6r sj\u00e4lva applikationen. N\u00e4r du har tiotusentals och hundratusentals loggar per sekund k\u00e4nns det rimligt, men du m\u00e5ste \u00e4nd\u00e5 k\u00e4nna till gr\u00e4nsen. Ett s\u00e4tt att hitta denna gr\u00e4ns \u00e4r att analysera loggar. <\/p>\n<p><\/p>\n<p>Som regel beh\u00f6ver du inte samla in och lagra alla loggar; du b\u00f6r endast skicka en del f\u00f6r lagring \u2014 till exempel loggar med status \"warning\" eller \"error\". Om det handlar om loggar fr\u00e5n nginx eller ingress-kontrollanter kan du endast skicka loggar vars status skiljer sig fr\u00e5n 200. Men detta \u00e4r inte ett universellt r\u00e5d: om du bygger n\u00e5gon form av analys p\u00e5 Nginx-loggar, b\u00f6r du uppenbarligen samla in dem. <\/p>\n<p><\/p>\n<p>Att blint filtrera loggar rekommenderas inte, eftersom de filtrerade data kan vara otillr\u00e4ckliga f\u00f6r en normal analys. \u00c5 andra sidan kan det vara v\u00e4rt att utf\u00f6ra analys p\u00e5 metrikniv\u00e5 ist\u00e4llet f\u00f6r loggningsniv\u00e5. D\u00e5 beh\u00f6ver du inte lagra hundratusentals rader med kod 200. En av metoderna \u00e4r att f\u00e5 information om trafik och fel fr\u00e5n metrik-data fr\u00e5n ingress-kontrollanter. <\/p>\n<p><\/p>\n<p>Generellt sett kr\u00e4vs det en noggrann eftertanke: vad vill du lagra och hur l\u00e4nge, annars uppst\u00e5r en situation d\u00e4r loggningssystemet tar mer resurser \u00e4n huvudprojektet.<\/p>\n<p><\/p>\n<p><strong>Det finns fortfarande ingen standardl\u00f6sning f\u00f6r loggning<\/strong>. Till skillnad fr\u00e5n \u00f6vervakning, d\u00e4r det finns en mest spridd l\u00f6sning, Prometheus, finns det ingen standard inom loggning. <\/p>\n<p><\/p>\n<p>I denna f\u00f6rel\u00e4sning kommer vi att granska tv\u00e5 verktyg: ett popul\u00e4rt och ett som vinner mark. F\u00f6rutom dem finns det fler, men i denna artikel kommer vi inte att ber\u00f6ra dem.<\/p>\n<p><\/p>\n<p>Med tanke p\u00e5 alla ovan n\u00e4mnda egenskaper kan loggning i Kubernetes nu framst\u00e4llas i f\u00f6ljande schema:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/81f4989c1fb7b1a4ac37524db76fd4e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Det kvarst\u00e5r en logg fr\u00e5n containern och rotation, men en agent-samlare dyker upp som plockar upp loggarna och skickar dem f\u00f6r lagring (i schemat \u2014 till Logging Backend). Agenten k\u00f6rs p\u00e5 varje nod och \u00e4r vanligtvis ig\u00e5ng i Kubernetes.<\/p>\n<p><\/p>\n<p>L\u00e5t oss nu titta p\u00e5 verktygen f\u00f6r loggning.<\/p>\n<p><\/p>\n<h2 id=\"grafana-loki\">Grafana Loki<\/h2>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/oss\/loki\/\">Grafana Loki<\/a><\/noindex> har dykt upp nyligen men har redan blivit ganska v\u00e4lk\u00e4nt. Dess f\u00f6rdelar: enkel installation, l\u00e5g resursanv\u00e4ndning, ingen installation av Elasticsearch kr\u00e4vs eftersom den lagrar data i TSDB (tidsseriedatabas). I den tidigare artikeln skrev jag att Prometheus lagrar data i en s\u00e5dan databas och det \u00e4r en av m\u00e5nga likheter mellan de tv\u00e5 produkterna. Utvecklarna h\u00e4vdar till och med att Loki \u00e4r \"Prometheus f\u00f6r loggningens v\u00e4rld\".<\/p>\n<p><\/p>\n<p>Ett kort avbrott om TSDB f\u00f6r dem som inte har l\u00e4st. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/516748\/\">den f\u00f6reg\u00e5ende artikeln<\/a><\/noindex>: TSDB hanterar utm\u00e4rkt lagring av stora m\u00e4ngder data och tidsserier, men \u00e4r inte avsedd f\u00f6r l\u00e5ngvarig lagring. Om du av n\u00e5gon anledning beh\u00f6ver lagra loggar l\u00e4ngre \u00e4n tv\u00e5 veckor, \u00e4r det b\u00e4st att konfigurera \u00f6verf\u00f6ring till en annan databas.<\/p>\n<p><\/p>\n<p>En annan f\u00f6rdel med Loki \u00e4r att Grafana anv\u00e4nds f\u00f6r att visualisera data. Mycket bekv\u00e4mt: i Grafana kan vi se \u00f6vervakningsdata och d\u00e4r \u00e4ven, genom att ansluta Loki, se loggar. Diagrams kan byggas baserat p\u00e5 loggar.<\/p>\n<p><\/p>\n<p>Arkitekturen f\u00f6r Loki ser ungef\u00e4r ut s\u00e5 h\u00e4r: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/8e4ed48dbb84b7813b96728b9efddcec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med hj\u00e4lp av DaemonSet deployeras en agent \u2013 Promtail eller Fluent Bit \u2013 p\u00e5 alla servrar i klustret. Agenten samlar loggar. Loki h\u00e4mtar dem och lagrar dem i TSDB. Metadata l\u00e4ggs omedelbart till loggarna, vilket \u00e4r praktiskt: man kan filtrera efter Pods, namespaces, container-namn och till och med etiketter.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/docs\/loki\/latest\/installation\/\">Installationsguide f\u00f6r Loki<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Loki fungerar i det bekanta gr\u00e4nssnittet Grafana. Loki har till och med ett eget fr\u00e5gespr\u00e5k, som kallas LogQL \u2013 namnet och syntaxen liknar PromQL i Prometheus. I Loki-gr\u00e4nssnittet finns det tips med fr\u00e5gor, s\u00e5 det \u00e4r inte n\u00f6dv\u00e4ndigt att kunna dem utantill.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/docs\/loki\/latest\/logql\/\">Dokumentation f\u00f6r spr\u00e5ket LogQL<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/acd3028fa181604be4523096d87e48cb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Loki i Grafana-gr\u00e4nssnittet<\/em><\/p>\n<p><\/p>\n<p>Genom att anv\u00e4nda filter kan man i Loki hitta koder (\"400\", \"404\" och alla andra); se loggar fr\u00e5n hela noden; filtrera bort alla loggar som inneh\u00e5ller ordet \"error\". Om du klickar p\u00e5 en logg kommer en kortinformation med all information om h\u00e4ndelsen att \u00f6ppnas.<\/p>\n<p><\/p>\n<p>I Loki finns det tillr\u00e4ckligt med verktyg f\u00f6r att h\u00e4mta de n\u00f6dv\u00e4ndiga loggarna, \u00e4ven om det \u00e4r sant att det tekniskt sett kunde ha funnits fler. Just nu utvecklas Loki aktivt och blir mer popul\u00e4rt. <\/p>\n<p><\/p>\n<h2 id=\"elastic--fluent-bit--kibana-efk-stack\">Elastic + Fluent Bit + Kibana (EFK Stack)<\/h2>\n<p><\/p>\n<p>EFK-stapeln \u00e4r en mer klassisk och samtidigt mycket popul\u00e4r loggningsl\u00f6sning. <\/p>\n<p><\/p>\n<p>I b\u00f6rjan av artikeln n\u00e4mndes ELK (Elasticsearch + Logstash + Kibana), men detta stack har blivit f\u00f6r\u00e5ldrat p\u00e5 grund av Logstashs ineffektivitet och resurskrav. Ist\u00e4llet har man b\u00f6rjat anv\u00e4nda den l\u00e4ttare och mer effektiva Fluentd, och efter en tid fick den s\u00e4llskap av <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/about\/what-is-fluent-bit\">Fluent Bit<\/a><\/noindex> \u2014 en \u00e4nnu l\u00e4ttare och \u00e4nnu mer effektiv insamlingsagent. <\/p>\n<p><\/p>\n<p>Om vi ska tro p\u00e5 utvecklarna, s\u00e5 \u00e4r Fluent Bit mer \u00e4n 100 g\u00e5nger b\u00e4ttre i prestanda \u00e4n Fluentd: \"d\u00e4r Fluentd anv\u00e4nder 20 MB RAM, kommer Fluent Bit att anv\u00e4nda 150 kB\" \u2014 ett direkt citat fr\u00e5n dokumentationen. Med detta i \u00e5tanke har Fluent Bit b\u00f6rjat anv\u00e4ndas mer frekvent.<\/p>\n<p><\/p>\n<p>Fluent Bit har f\u00e4rre funktioner \u00e4n Fluentd, men uppfyller de grundl\u00e4ggande behoven, s\u00e5 vi anv\u00e4nder huvudsakligen Fluent Bit.<\/p>\n<p><\/p>\n<p>Arbetsfl\u00f6det f\u00f6r EFK-stacken: agenten samlar loggar fr\u00e5n alla poddar (vanligtvis en DaemonSet som k\u00f6rs p\u00e5 alla servrar i klustret) och skickar dem till lagring (Elasticsearch, PostgreSQL eller Kafka). Kibana ansluter till lagringen och h\u00e4mtar all n\u00f6dv\u00e4ndig information.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/cd5101637d30ab1e5f019fa424147023.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/kibana\">Kibana<\/a><\/noindex> presenterar informationen i ett bekv\u00e4mt webbgr\u00e4nssnitt. Det finns diagram, filter och mycket mer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/523a219739b6e7641694b240c61a15d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Baserat p\u00e5 loggar kan man skapa hela instrumentpaneler.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/21b580f8b4871bdda64692563f53303e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"vozmozhnosti-fluent-bit\">M\u00f6jligheterna hos Fluent Bit<\/h2>\n<p><\/p>\n<p>Eftersom Fluent Bit vanligtvis \u00e4r mindre k\u00e4nt \u00e4n Logstash, ska vi titta lite n\u00e4rmare p\u00e5 det. Fluent Bit kan logiskt delas in i 6 moduler, och vissa av modulerna kan ut\u00f6kas med plugins som \u00f6kar dess funktioner.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar\" src=\"\/wp-content\/uploads\/2020\/09\/f95a642aad7f5d291e05d8a17d1aaadc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Input-modulen<\/strong> samlar in loggar fr\u00e5n filer, systemd-tj\u00e4nster och \u00e4ven fr\u00e5n tcp-socket (det \u00e4r bara att ange en endpoint, s\u00e5 b\u00f6rjar Fluent Bit h\u00e4mta d\u00e4rifr\u00e5n). Dessa m\u00f6jligheter \u00e4r tillr\u00e4ckliga f\u00f6r att samla loggar b\u00e5de fr\u00e5n systemet och fr\u00e5n containrar.<\/p>\n<p><\/p>\n<p>I produktion anv\u00e4nder vi oftast plugins <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/tail\">tail<\/a><\/noindex> (det kan riktas mot en mapp med loggar) och <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.fluentbit.io\/manual\/pipeline\/inputs\/systemd\">systemd<\/a><\/noindex> (man kan s\u00e4ga \u00e5t det fr\u00e5n vilka tj\u00e4nster som ska samla loggar).<\/p>\n<p><\/p>\n<p><strong>Parser-modulen<\/strong> anpassar loggar till ett gemensamt format. Som standard \u00e4r Nginx-loggar str\u00e4ngar. Med hj\u00e4lp av en plugin kan denna str\u00e4ng omvandlas till JSON: specificera f\u00e4lt och deras v\u00e4rden. Det \u00e4r mycket enklare att arbeta med JSON \u00e4n med str\u00e4ngloggar, eftersom man f\u00e5r mer flexibla sorteringsm\u00f6jligheter.<\/p>\n<p><\/p>\n<p><strong>Filter-modulen<\/strong>. P\u00e5 denna niv\u00e5 filtreras o\u00f6nskade loggar bort. Till exempel skickas endast loggar med v\u00e4rdet \"warning\" eller med specifika etiketter till lagring. De utvalda loggarna g\u00e5r till bufferten.<\/p>\n<p><\/p>\n<p><strong>Buffer-modulen<\/strong>. Fluent Bit har tv\u00e5 typer av buffertar: minnesbuffert och diskbuffert. Bufferten \u00e4r ett tillf\u00e4lligt lager f\u00f6r loggar som beh\u00f6vs vid fel eller krascher. Alla vill spara p\u00e5 RAM, s\u00e5 diskbuffert v\u00e4ljs vanligtvis. Men det \u00e4r viktigt att notera att loggarna fortfarande laddas upp till minnet innan de sparas p\u00e5 disken.<\/p>\n<p><\/p>\n<p><strong>Routing\/Output-modulen<\/strong> inneh\u00e5ller regler och adresser f\u00f6r att skicka loggar. Som n\u00e4mnts kan loggar skickas till Elasticsearch, PostgreSQL eller till exempel Kafka. <\/p>\n<p><\/p>\n<p>Intressant nog kan loggar fr\u00e5n Fluent Bit skickas till Fluentd. D\u00e5 den f\u00f6rstn\u00e4mnda \u00e4r mer l\u00e4ttviktig och mindre funktionell kan loggar samlas in och skickas till Fluentd, d\u00e4r de kan bearbetas ytterligare med hj\u00e4lp av extra plugins och skickas till lagringsplatser.<\/p>\n<p><\/p>\n<blockquote><p>Om du planerar att anv\u00e4nda Elasticsearch\u2026<\/p>\n<p>Avslutningsvis tv\u00e5 tips f\u00f6r dem som planerar att anv\u00e4nda Elasticsearch som logglagring i produktion. <\/p>\n<ol>\n<li>Konfigurera aviseringar med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/elastalert.readthedocs.io\/en\/latest\/\">ElastAlert<\/a><\/noindex>. Detta program plockar ut viktiga meddelanden fr\u00e5n den allm\u00e4nna loggstr\u00f6mmen och skickar alerts via e-post eller andra kanaler. Tyv\u00e4rr har det nyligen kommit <em><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Yelp\/elastalert\/issues\/2911\">trista nyheter om att projektet kanske snart kommer att upph\u00f6ra att existera.<\/a><\/noindex><\/em>.<\/li>\n<li>Rota loggar med hj\u00e4lp av applikationen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/client\/curator\/5.8\/index.html\">Curator<\/a><\/noindex> eller genom att anropa Elasticsearch API. I princip g\u00f6r Elastic nu betydande framsteg n\u00e4r det g\u00e4ller att hantera livscykeln av index utan att anv\u00e4nda externa verktyg. Generellt sett finns det ingen mening med att lagra loggar l\u00e4nge: det \u00e4r osannolikt att n\u00e5gon logg kommer att beh\u00f6vas efter tv\u00e5 veckor \u2014 om den verkligen \u00e4r kritisk, kommer den med st\u00f6rsta sannolikhet att ha bearbetats inom tv\u00e5 veckor. I v\u00e4rsta fall kan gamla loggar arkiveras och skickas n\u00e5gonstans f\u00f6r l\u00e5ngtidslagring. Jag har h\u00f6rt talas om speciella loggar som enligt lag m\u00e5ste f\u00f6rvaras i upp till 5 \u00e5r. Jag har personligen inte st\u00f6tt p\u00e5 det, men jag skulle inte j\u00e4mf\u00f6ra s\u00e5dan information med vanliga loggar, och kanske till och med f\u00f6rvara dem separat.<\/li>\n<\/ol>\n<p>\n<\/p><\/blockquote>\n<p>Forts\u00e4ttning f\u00f6ljer\u2026<\/p>\n<p><\/p>\n<p><em>F\u00f6rfattare: Marcel Ibraev, certifierad Kubernetes-administrat\u00f6r, praktiserande ingenj\u00f6r p\u00e5 f\u00f6retaget <noindex><a rel=\"nofollow\" href=\"https:\/\/to.slurm.io\/TBhTzQ\">Southbridge<\/a><\/noindex>, talare och kursutvecklare <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/Tinm9w\">Sl\u00f6rm<\/a><\/noindex>.<\/em><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/517636\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana). \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u044b\u0436\u0438\u043c\u043a\u0430 \u0438\u0437 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u043b\u0435\u043a\u0446\u0438\u0438 \u0448\u043a\u043e\u043b\u044b \u00ab\u0421\u043b\u0451\u0440\u043c\u00bb. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438 \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u043a\u0443\u0440\u0441 \u043f\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93295,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93294","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Kubernetes: \u043a\u0430\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-05T05:42:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-05T05:42:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Loggning i Kubernetes: hur man samlar in, lagrar, parserar och bearbetar loggar | ProHoster","description":"Vi ska g\u00e5 igenom grunderna i loggning i Docker och Kubernetes, och sedan titta p\u00e5 tv\u00e5 verktyg som kan anv\u00e4ndas i produktion: Grafana Loki och EFK-stacken (Elasticsearch + Fluent Bit + Kibana)..","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Kubernetes: \u043a\u0430\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 | ProHoster","og:description":"\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043e\u0441\u043d\u043e\u0432\u044b \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Docker \u0438 Kubernetes, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435: Grafana Loki \u0438 \u0441\u0442\u0435\u043a EFK (Elasticsearch + Fluent Bit + Kibana)..","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/logirovanie-v-kubernetes-kak-sobirat-hranit-parsit-i-obrabatyvat-logi","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-05T05:42:58+00:00","article:modified_time":"2020-09-05T05:42:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93294","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:50:29","updated":"2022-09-27 18:43:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/93294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=93294"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/93294\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/93295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=93294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=93294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=93294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}