rsyslog feldolgozas logstash-el

Fórumok

Sziasztok,

rsyslog kimenetet szeretnek logstashelni:
2015-06-30T04:02:01-05:00 <authpriv.notice> hostname nobody : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/opt/apps/nagios/libexec/check_mailq -w 300 -c 500 -M sendmail

Sehogy sem akar mukodni. Meg a timestamp sem jo. Total megakadtam. Valakinek van mukodo rsyslog filetere esetleg?
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:syslog_program} %{SYSLOGHOST:syslog_hostname} %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSZZ" ]
}
}
}

Hozzászólások

En ezt hasznalom (kivonat):


if [type] == "syslog" {

grok {
match => { "message", "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}

syslog_pri {
}

date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}

"syslog-ng feldolgozas logstash-el"

vs

"rsyslog kimenetet"

Ezt gyorsan dontsd el, mert a ket proginak mas a datumformatuma, es maskepp kell felparsolni azt.

A peldadban adott datumformatum pedig erosen gyanus, hogy semmilyen syslog ajanlasnak nem felel meg, azt nem is fogod tudni erdemben felparsoltatni.
--
Blog | @hron84
Üzemeltető macik

Mert a LogStash buta. RFC5424 syslog -nak a datum megfelel. Arra reagaltam, hogy azt irtad:

A peldadban adott datumformatum pedig erosen gyanus, hogy semmilyen syslog ajanlasnak nem felel meg, azt nem is fogod tudni erdemben felparsoltatni.

Pedig de. Csak valamiert par modern csilivili cucc ugy gondolja, hogy a standard datum formatum (ISO8601) valamiert nem jo nekik, es olyat hasznalnak, ami kisebb felbontasu, vagy nincs benne timezone, vagy app-specifikus, vagy valami egyeb sebbol verzik.

--
|8]

TIMESTAMP_ISO8601 fog neked kelleni SYSLOGTIMESTAMP helyett. Nomeg syslog_program es syslog_hostname pont nem ebben, hanem ellenkezo sorrendben van.

--
|8]

A peldaban a datum utan fac.priv jon, aztan hostname. A grok patternben viszont datum utan program, es utana hostname. Ez igy szerintem nem kerek :)

Kozben talaltam ezt: https://github.com/logstash-plugins/logstash-input-syslog/issues/15

Eszerint RFC5424 tamogatas logstashben kb nincsen. A kovetkezok valamelyiket tudnam esetleg javasolni:

  1. allitsd at rsyslogot, hogy rfc3164-et kuldjon inkabb.
  2. allitsd at rsyslog-ot, hogy kozvetlenul ElasticSearch-be kuldjon, logstash kihagyasaval
  3. Ha 2) nem megy, akkor ugyanez syslog-ng-vel

A LogStash kihagyasa egy teljesen jarhato ut, ha syslog parsolason kivul nem sok mast csinalsz vele. Vagy ha ami mast csinalsz, azt az rsyslog/syslog-ng parossal is meg lehet (kenyelmesen) csinalni - sokmindent meg lehet. Igy kozvetlenul Kibana ala tolod a cuccot, es nem kell a Grokkal szopni.

--
|8]

En nem vagyok annyira szaki, de nalunk nincs semmi trukrozes az idovel...
Igy fest a "flow"

rsyslog -> haproxy -> logstash -> redis -> logstash -> vissza az elozo redisbe -> logstash -> elasticsearch....

Az egyetlen testcsel, hogy a redisbol redisbe pakolo logstash json-ba teszi vissza a dolgokat... de ugy latom mikor mar kiszedjuk a dolgokat a redisbol akkor is megvannak a field-ek... szerintem logstash ismeri mar az rsyslog-ot...

Vagy most igy kimarad nekem valami ? Miert kell a grok ?

A grok a logstash resze, azert kell, hogy az rsyslog-logstash konverzio mukodhessen, hiszen az rsyslog alapban nem olyan JSON-ban logol, mint amilyen a redisbe fog kerulni.

"szerintem logstash ismeri mar az rsyslog-ot"

Na ez a problema. A logstash nem az rsyslogot ismeri kkonkretan, hanem altalanossagban a syslogot, es szerintem a fent irt datumformatummal nem tud mit kezdeni, mert normalisan nem igy neznek ki a syslog altal kikopott sorok.
--
Blog | @hron84
Üzemeltető macik

A grok reszevel tisztaban vagyok, viszont a mi configunkban nincs ilyen, es megis atmennek a logok ezen az egeszen rsyslog-tol elasticsearch-ig, es megvannak a field-ek az elastic-ban...

Vagy kihagyok valamit, vagy van 1xubb ut...

By the way: https://github.com/marczis/ESConsole

Ket napja altam neki, ha valakinek tetszik minden feeedback erdekel !

A startup scripthez tipp:


#!/bin/sh

ME=$(readlink -f $0)
MYDIR=$(dirname "${ME}")

exec python "${MYDIR}/main.py" "$@"

Ez minden Linux platformon el fog induln igy, akarhova kerul symlinkelesre a startup script (esc) a rendszeren.

Valamint olvass utana a setuptools-nak, azzal sokkal szebben tudnad terjeszteni a cuccot.
--
Blog | @hron84
Üzemeltető macik

Koszi !
A "terjeszteshez" ugy terveztem, hogy forditok / generalok rpm / deb-eket aztan vegyetek es egyetek, ha 1x eljut odaig a dolog, hogy komolyabb lesz... valojaban meg csak "preview peek" az egesz :)
Arra voltam kivancsi, hogy kell-e ez masnak is, de egyenlore nem kapok tul sok visszajelzest, kb. 3-an irtak G+-on discuss.elastic.co-n hogy jo 5let... de elmarad a "huha de hianyzik egy ilyen meg nekem" :D