Aceasta este o întrebare care urmează întrebarea anterioară, creat pentru că am aflat mai multe informații și este mai curat să pun asta ca o întrebare nouă.
Folosesc syslog-ng OSE v3.31.2 pentru a primi mesaje syslog RFC3164 prin portul UDP 514 de la o grămadă de clienți și le scriu în ambele fișiere și le transmit către telegraf prin portul TCP 601 non-TLS RFC5424 pentru inserare într-un Baza de date InfluxDB.
Configurația mea syslog-ng este:
@versiunea: 3.29
@include „scl.conf”
Opțiuni {
linii de culoare (1);
};
sursă s_network {
udp(ip(0.0.0.0) port(514));
};
destinație d_file {
fisier("/var/log/messages");
};
destinație d_telegraf {
syslog(portul „telegraf”(601) transport(tcp));
};
Buturuga {
sursa(s_network);
destinație(d_telegraf);
destinație(d_file);
};
Partea relevantă a configurației mele telegraf arată astfel:
[global_tags]
[agent]
interval = "100 ms"
round_interval = adevărat
metric_buffer_limit = 10000
flush_buffer_when_full = adevărat
collection_jitter = "0s"
flush_interval = "100 ms"
flush_jitter = "0s"
depanare = adevărat
quiet = fals
[[outputs.influxdb]]
urls = ["http://influxdb:8086"]
baza de date = "logs_db"
[[inputs.syslog]]
server = "tcp://telegraf:601"
În esență, syslog-ng este configurat pentru a redirecționa intrările syslog printr-o conexiune TCP către telegraf.
Problema este că văd că syslog-ng suferă deconectări frecvente TCP de la telegraf. Acestea apar în jurnalul syslog-ng ca:
[2021-11-17T02:55:32.662972] EOF a avut loc în timpul inactiv; fd='12'
[2021-11-17T02:55:32.663102] Conexiune Syslog închisă; fd='12', server='AF_INET(192.168.0.6:601)', time_reopen='60'
[2021-11-17T02:56:32.719139] Conexiune Syslog stabilită; fd='12', server='AF_INET(192.168.0.6:601)', local='AF_INET(0.0.0.0:0)'
Această deconectare este de obicei declanșată atunci când trimit un jurnal la syslog-ng cu:
logger -i -d --server test localhost
Dar dacă las totul inactiv, voi primi și:
[2021-11-17T02:57:05.392356] EOF pe canal de control, închidere conexiune;
În aceste cazuri, 192.168.0.6 este serverul telegraf.
Deși pot seta opțiunea timp de redeschidere (1)
pentru a accelera reconectarea, aș prefera să găsesc cauza principală și să previn deconectarea în primul rând.
Este posibil să existe o incompatibilitate între syslog-ng și telegraf, care cauzează acest EOF și o deconectare necurată?
Toate acestea rulează într-o stivă docker-compose pe o singură gazdă.
EDIT: Am început să caut RFC5424 și RFC6587. Folosind Wireshark pentru a adulmeca pachetele din syslog-ng, destinate telegrafului, am stabilit că acestea folosesc umplutura de octeți (denumită încadrare netransparentă), mai degrabă decât numărătoarea de octeți, pe care telegraf o așteaptă implicit. Sarcina utilă a fiecărui mesaj syslog către telegraf începe cu un caracter „<” mai degrabă decât cu un număr întreg.
Presupun că telegraf acceptă aceste mesaje, dar se blochează analizându-le și, prin urmare, închide conexiunea. Primul FIN care închide conexiunea vine de la telegraf.
Din păcate, când am setat telegraful să accepte încadrarea netransparentă, respinge întreaga intrare și încă nu am înțeles de ce.
De asemenea, încă nu mi-am dat seama cum să configurez syslog-ng pentru a afișa mesaje cu încadrare de numărare a octeților.
Dar cel puțin mesajul EOF și deconectarea au încetat să mai apară. Dar nu sunt sigur că asta înseamnă mult dacă Telegraf respinge toate mesajele.