wie man zwei Bedingungen check-in logstash und besser schreiben-Konfigurationsdatei
Ich bin mit logstash 1.4.2,
Ich habe logstash-forwarder.conf im client-log-server wie dieser
{
"network": {
"servers": [ "xxx.xxx.xxx.xxx:5000" ],
"timeout": 15,
"ssl ca": "certs/logstash-forwarder.crt"
},
"files": [
{
"paths": [ "/var/log/messages" ],
"fields": { "type": "syslog" }
},
{
"paths": [ "/var/log/secure" ],
"fields": { "type": "linux-syslog" }
}
]
}
=========================================================
In logstash server
1. filter.conf
filter {
if [type] == "syslog" {
date {
locale => "en"
match => ["syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss"]
timezone => "Asia/Kathmandu"
target => "@timestamp"
add_field => { "debug" => "timestampMatched"}
}
grok {
match => { "message" => "\[%{WORD:messagetype}\]%{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
}
if [type] == "linux-syslog" {
date {
locale => "en"
match => ["syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss"]
timezone => "Asia/Kathmandu"
target => "@timestamp"
add_field => { "debug" => "timestampMatched"}
}
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
mutate { replace => [ "syslog_timestamp", "%{syslog_timestamp} +0545" ] }
}
}
=======================================================
2. Ausgabe.conf
output {
if [messagetype] == "WARNING" {
elasticsearch { host => "xxx.xxx.xxx.xxx" }
stdout { codec => rubydebug }
}
if [messagetype] == "ERROR" {
elasticsearch { host => "xxx.xxx.xxx.xxx" }
stdout { codec => rubydebug }
}
if [type] == "linux-syslog" {
elasticsearch { host => "xxx.xxx.xxx.xxx" }
stdout { codec => rubydebug }
}
}
=======================================================
Möchte ich alle Protokolle zum weiterleiten von /var/log/secure und nur ERROR-und WARNING-log aus /var/log/messages, ich weiß, das ist keine gute Konfiguration. Ich will, dass jemand mir zeigen, einen besseren Weg, dies zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich es vorziehen, Entscheidungen zu treffen über die Ereignisse in der filter-block. Meine input-und output-Blöcke sind in der Regel Recht einfach. Von dort aus sehe ich zwei Optionen.
Verwenden Sie die drop-filter
Den
drop
- filter bewirkt, dass ein Ereignis gelöscht werden. Es wird nicht immer machen es zu Ihrem Ausgänge:Der Vorteil dieser ist, dass es sehr einfach ist.
Der Nachteil ist, dass das Ereignis einfach fallen gelassen. Es wird nicht sein Ausgaben. Welche ist gut, wenn es das ist, was Sie wollen.
Verwenden Sie ein tag
Viele Filter erlauben es Ihnen, hinzufügen von tags, die nützlich sind für die Kommunikation von Entscheidungen zwischen plugins. Sie befestigen konnte ein tag erzählen Sie Ihren Ausgang blockieren, um das Ereignis zu senden, um ES:
Der Vorteil dieser ist, dass es feine Steuerung ermöglicht.
Der Nachteil ist, dass es ein bisschen mehr Arbeit, und Ihre ES Daten, die enden ein wenig verschmutzt (der tag wird sichtbar und durchsuchbar in ES).