首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >syslog到logstash _grokparsefailure

syslog到logstash _grokparsefailure
EN

Stack Overflow用户
提问于 2018-01-30 16:29:27
回答 2查看 3.2K关注 0票数 1

我有麋鹿5.4版。我从许多网络机器上得到了syslog,比如思科,Juniper,Fortigate,F5。

logstash.conf看起来像:

代码语言:javascript
复制
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进行摸索?

以下是一些日志样本:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-01 09:34:42

我用这个网站来测试父子:

http://grokconstructor.appspot.com/do/match

这个网站要寻找预先制作的模式:

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

对于第一条消息,是这样的模式:

代码语言:javascript
复制
%{TIMESTAMP_ISO8601:time}: %{SYSLOGPROG} \[%{WORD:level}\] %{GREEDYDATA:message}

对于第三条消息,您可以使用它(如果您喜欢):

代码语言:javascript
复制
%{MONTH:month} %{MONTHDAY:day} %{TIME:time} %{NOTSPACE:serverName} %{NOTSPACE:task}: %{GREEDYDATA:message}

在logstash中,您可以这样使用:

代码语言:javascript
复制
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标记并尝试另一个。如果它失败了,它就不会尝试下一次。这有点乏味,但我没有更好的解决办法。如果您可以按其源标记日志,则可以通过编写该日志的条件使此过程更快。

我希望这能帮到你,或者至少给你一些方向。

票数 1
EN

Stack Overflow用户

发布于 2018-02-07 14:26:05

我建议您将解析失败写到文件中,这样就可以根据失败创建新的模式。

代码语言:javascript
复制
output {
  if "_grokparsefailure" in [tags] {
    file {
      path => "/tmp/var/log/parse_failures.log
    }
  }
}

并不是所有的设备都遵循syslog,所以几乎不可能有所有可用模式的列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48526210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档