Egy Postfix szerver logjait szeretném Elastisearch DB-be küldeni, hogy Kibana webes felületen kényelmesen tudjak keresni benne. Az Elasticsearch DB felé küldeni a Fluentd megoldása tűnt szimpatikusnak. Az alábbi Fluentd konfig remekül működik is, az ident tag-et átírja a postfix megfelelő alkotórészére.
<source>
@type syslog
port 42185
tag syslog
</source>
<match syslog.mail.info>
@type rewrite_tag_filter
<rule>
key ident
pattern ^postfix/(.+)$
tag postfix.$1
</rule>
</match>
<match postfix.**>
@type elasticsearch
logstash_format true
host elastic.lan
port 9200
flush_interval 10s
</match>
Csakhogy úgy lenne értelmes, ha a lobejegyzésekből a Kibana felületen használható index mezőket képeznénk, mert egyelőre minden a "message" nevű mezőbe kerül. Átolvastam a Fluentd dokumentációt (ami többnyire csak referencia, és a példáik nagyrésze ráadásul elavult), és megakadtam, ezért inkább kérdezek, hátha tudna valaki segíteni aki már látott ilyesmit. Hogyan kell a logbejegyzéseket mezőkre bontani?
Ilyesmivel próbálkoztam, ami például kiszedi a client_ip mezőbe az IP címet. De sajnos nem lehet egyszerre több parse tag vagy expression regexp.
<filter postfix.postscreen>
@type parser
key_name message
reserve_data true
<parse>
@type regexp
expression /(DIS)?CONNECT (from )?\[(?<client_ip>[[:xdigit:].:]{3,39})\]:.*/
</parse>
</filter>
- 1668 megtekintés
Hozzászólások
ha mar van elasticsearch, meg kibana, akkor logstash nincs? Csak mert ha fluentd-vel nem megy, en megprobalnam a logstash-t is. Tedd fel az elasticsearch melle, es a postfix logjait kuldd at a logstash-nek...
--
"dolgozni mar reg nem akarok" - HZ 'iddqd' zoli berserk mode-ba kapcsol
- A hozzászóláshoz be kell jelentkezni
Nem említettem, de Fluentd azért is tűnt szimpatikusunak, mert egy halom Docker konténer is fut a szerveren, sőt a Postfix-ek is konténerben futnak, és a Dockernek van natív fluentd log-driver-e. Később más alkalmazások logjait is szeretném feldolgozni vele, csak épp egy Postfix loggal kezdtem az ismerkedést. Meg aztán a Logstash Java alapú, és nekem a javas megoldásokról valahogy nem a pehelysúly jut először eszembe, míg a Fluend többek közt ezt állítja magáról.
És csodálkoznék, ha Fluentd képtelen lenne megoldani a fenti kérdést. Csak a fellelhető quick start tutorialok sajnos kimerülnek annyiban, hogy beküldted a logokat ES-be, és OK ennyi.
- A hozzászóláshoz be kell jelentkezni
Az első javaslatot ha próbálom, azt írja "Unknown output plugin 'parser'". Ha a "match raw.postfix.result" tag-et kicserélem filter tag-re, akkor meg: "Unknown filter plugin 'copy'" Talán ez a konfig csak egy régebbi verzióval működhetett.
A másik pedig egy extra plugin. Ki sem szeretném próbálni. A postfix-et csak példának írtam, de volna egy csomó másfajta log is, amit mezőkre kellene bontani, úgysem találnék mindenre plugint, főleg olyat ami a saját környezetemhez illeszkedik.
Egyelőre nagyon úgy tűnik, hogy egy "match"-hez csak egyetlen regexp parser lehet. Csakhogy ennek így semmi értelme. Azért köszönöm a tippet. Bár egy "filename:td-agent.conf" github keresést már csináltam korábban, sajnos nem sok eredménnyel.
- A hozzászóláshoz be kell jelentkezni
https://docs.fluentd.org/v0.12/articles/parser-plugin-overview
Ha nincs gyári plugin, írj egyet. By design ezt adja mint lehetőség. Azzal mondjuk egyet kell értenem, hogy nem túl ops barát kialakítás, de a fejlesztők szeretik
- A hozzászóláshoz be kell jelentkezni
Hát igen, hamarabb keresek inkább más megoldást, mint magam írogassak plugineket :)
Egyébként a postfix filtert egyelőre megoldottam egyetlen szuperhosszú regexp expression-nel |-ekkel elválasztva, ha már nem lehet több expression. Totál átláthatatlan, viszont működik amíg nem kell hozzányúlni.
Azonban lesz itt más probléma is. Kibana felületen megjelennek ugyan a saját mezők, de mindegyik a "_source" alatt. Szűrni éppen lehet rájuk, de a táblázatban való megjelenésüket nem tudom szabályozni, mert ott csak a _source mező van. Igen tudom, újonc vagyok az ELK stack világban, de úgy sejtem, erre is létezik valami megoldás. Lehet Fluentd azért nem ismer több expression-t, mert onnan úgyis elég egyben beküldeni, és Fluentd és Elastic közé kell még valami alkatrész, ami megfelelően szétbontja mezőkre?
- A hozzászóláshoz be kell jelentkezni
Ezt a mostani állapotot pontosan hogyan sikerült elérned?
Beküldenéd erről is a konfigot?
Én még ott akadtam meg, hogy a message-ből parse-oljak ki részt másik fieldbe.
Köszi!
- A hozzászóláshoz be kell jelentkezni
Inkább linkelem, Drupalban beszerkeszteni kész rémálom. https://ghostbin.com/paste/74ekm
Így állok most. A postfix és nginx Docker konténerek syslog-on keresztül küldik a logjaikat. A syslog.mail.info tag-et átírom postfix.-re, amit aztán lehet külön filterezni. Egyelőre smtpd és postscreen, csak hogy lássam jól feldolgozza őket külön. Egy filterhez csak egy parse regexp expression tartozhat. A postscreen-es filternél látszik hogyan csináltam a különböző tartalmú logok mezőkre bontását. De nem vagyok elégedett ezzel, biztosan lennie kell jobb megoldásnak.
Plusz egy nginx access.log feldolgozás is van, ami nálam syslog.local7.info-n jön az nginx konténerből.
A végén ami kész, megy tovább Elasticsearch-be, a maradék pedig stdout-ra (td-agent.log-ba). Ebből gondolom könnyen ki lehet válogatni, amire még szükségem lesz.
Csak továbbra is az a problémám, hogy Elastic-ban minden a _source field alá kerül.
- A hozzászóláshoz be kell jelentkezni
Az elmúlt pár hónap alatt sokat bővült a td-agent.conf. Eddig jól teljesíti az elvárásokat. Egyetlen negatívum, hogy az Elasticsearch egyre több memóriát követel.
Itt az aktuális konfig: https://ghostbin.com/paste/eryw7
- A hozzászóláshoz be kell jelentkezni
Sziasztok,
A fentiekkel kapcsolatban érdekelne, hogy 4 év után történt-e valami változás ezen a téren.
Főleg az a része, hogy ha elkezdem használni a Fluentd-t, akkor tényleg kell egy ElasticSearch meg Kibana vagy Grafana konténer is, hogy tudjam webes felületen nézni / keresni a logokat?
Ágyúval verébre érzésem van, mivel nem lesz valami nagy terhelés a gépen.
Néztem már a fluentd-ui-t is, de írják, hogy a fluent v1-es verzióval már nem működik együtt.
Szóval ott tartok, hogy írok valami hasonlót mint ez https://www.npmjs.com/package/frontail, mert 2 éve már ezt sem frissítik.
Van esetleg valakinek tudomása, más egyszerű megoldásról erre vonatkozóan?
Meg az is kérdéses számomra, hogy ilyen esetben hogyan használhatom a fail2ban-t?
Vezessem ki külön log-ba a fluentd-ből és arra engedjem rá? Viszont akkor valahogy ugyanolyan formában kellene lennie mint ahogy a postfix létrehozza, hogy a regex-ek működjenek.
Köszi!
- A hozzászóláshoz be kell jelentkezni
ha elkezdem használni a Fluentd-t, akkor tényleg kell egy ElasticSearch meg Kibana vagy Grafana konténer is, hogy tudjam webes felületen nézni / keresni a logokat?
Nem. Lehet mást is használni erre a célra... ;-)
A fluentd egy log gyűjtő/manipuláló/továbbító cucc, nem feladata a webes felületen nézegetés/keresés.
más egyszerű megoldásról erre vonatkozóan?
Loki + Grafana. Az Elasticnál kevesebb erőforrást zabál, de nem nullát.
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy a fluentd mit csinál, és jó is, mert olyan kell amit be tudok állítani a Docker-ben, hogy oda menjenek a logok.
Köszi, bár a Loki + Grafana is valószínűleg sok, mert csak egy levelezést kiszolgáló szerverről van szó és nem terveztem memóriát bővíteni.
Persze küldhetném a logokat másik szerverre is, de ezt meg más nem szeretné :)
Most felraktam a mongo_out plugint és szépen átmennek oda a logok és mivel a mongo-t meg a nodejs-t már jól ismerem, tervezem, hogy írok rá valami UI-t.
Ugyanúgy a fluentd konténerben futna, tehát elvileg 1 konténerrel megoldom (vagyis 2, mert a mongo külön van :)
- A hozzászóláshoz be kell jelentkezni
és nem terveztem memóriát bővíteni.
Most felraktam a mongo_out plugint és szépen átmennek oda a logok és mivel a mongo-t meg a nodejs-t már jól ismerem, tervezem, hogy írok rá valami UI-t.
Nos, ha fogadnom kellene, akkor arra tenném a tétjeimet, hogy ez így minden lesz, de leginkább lassú :D
De hajrá, kívánom, hogy sikerüljön.
- A hozzászóláshoz be kell jelentkezni
Olyan sok adatot nem kellene kezelnie, viszont a Mongo alapból szeret sok memóriát enni, így keresgéltem tovább
és eljutottam a ClickHouse-ig (https://clickhouse.com/) onnan meg a Loghouse-ig (https://github.com/flant/loghouse)
Ez kb. az amit én is akarok, csak 2 éve már nem fejlesztik, mert hogy Loki-znak.
Keresgélek még, de azért megnézek egy Loki-s videót is. :)
Köszi a válaszokat!
- A hozzászóláshoz be kell jelentkezni