我有麋鹿5.4版。我从许多网络机器上得到了syslog,比如思科,Juniper,Fortigate,F5。
logstash.conf看起来像:
input {
tcp {
port => 514
type => syslog
}
udp {
port => 514
type => syslog
}
}
filter {
if [type] == "syslog" {
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 { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
if !("_grokparsefailure" in [tags]) {
mutate {
replace => [ "@source_host", "%{syslog_hostname}" ]
replace => [ "@message", "%{syslog_message}" ]
}
}
mutate {
remove_field => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
}
}
}我得到了很多_grokparsefailure。也许有人有一个logstash.conf的例子,可以在没有_grokparsefailure的情况下对所有机器的syslog进行摸索?
以下是一些日志样本:
2018-01-30T09:30:14.675+0200: %ADMIN-6-INFO: [local] recorded login for administrator: (user)
Jan 25 17:26:47.767: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet8/11, changed state to down
Jan 30 01:13:43 SERVER_NAME lldpd[70354]: task_process_events: no read/accept method for (null) socket 0 <39>
Feb 1 09:14:43 SERVER_NAME rshd[64810]: user@user2 as root: cmd='/xxxx/xxxx/xxxx'谢谢TA
发布于 2018-02-01 09:34:42
我用这个网站来测试父子:
http://grokconstructor.appspot.com/do/match
这个网站要寻找预先制作的模式:
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
对于第一条消息,是这样的模式:
%{TIMESTAMP_ISO8601:time}: %{SYSLOGPROG} \[%{WORD:level}\] %{GREEDYDATA:message}对于第三条消息,您可以使用它(如果您喜欢):
%{MONTH:month} %{MONTHDAY:day} %{TIME:time} %{NOTSPACE:serverName} %{NOTSPACE:task}: %{GREEDYDATA:message}在logstash中,您可以这样使用:
filter{
grok{
match=>{"message" => <pattern1>}
}
if "_grokparsefailure" in [tags]{
mutate{ remove_tag => [ "_grokparsefailure" ] }
grok{
match=>{"message" => <pattern2>}
}
}
if "_grokparsefailure" in [tags]{
mutate{ remove_tag => [ "_grokparsefailure" ] }
grok{
match=>{"message" => <pattern3>}
}
}
}这样做的目的是编写与日志匹配的模式,如果其中一个不合适,则删除_grokparsefailure标记并尝试另一个。如果它失败了,它就不会尝试下一次。这有点乏味,但我没有更好的解决办法。如果您可以按其源标记日志,则可以通过编写该日志的条件使此过程更快。
我希望这能帮到你,或者至少给你一些方向。
发布于 2018-02-07 14:26:05
我建议您将解析失败写到文件中,这样就可以根据失败创建新的模式。
output {
if "_grokparsefailure" in [tags] {
file {
path => "/tmp/var/log/parse_failures.log
}
}
}并不是所有的设备都遵循syslog,所以几乎不可能有所有可用模式的列表。
https://stackoverflow.com/questions/48526210
复制相似问题