elasticsearch - 如何提取字段的一部分并将其存储到logstash过滤器中的另一个字段中?

标签 elasticsearch logstash kibana kibana-4

我有系统日志文件。我正在使用logstash syslog插件过滤器来处理那些日志。我在syslog_message字段中收到这样的消息:

syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down

但是我想要一个新字段,该字段只包含.ERR之前的部分,即“cdp / interface”。这部分不同,我不知道会发生多少种类型。
所以我想要一个新字段并将该部分存储在该字段上,以便可以在基巴纳语中绘制这些术语的数量。

当前的logstash配置:
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}" ]

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

按照@Val的建议将新的grok添加到配置文件后
grok {
  match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\] %{GREEDYDATA:syslog_message}" }
}

对于某些输入,发生grokparsefailure。
它失败的一些行是:
syslog_message: [hald.INFO]: Support query handler called
syslog_message:[mgmtd.INFO]: Finished database commit

任何帮助将不胜感激。
谢谢

最佳答案

您可以在您的主要grok过滤器中添加另一个模式,也可以仅针对grok字段添加另一个syslog_message过滤器

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}" ]

    }
    # ====> add this <====
    grok {
      match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\]:? %{GREEDYDATA:syslog_message}" }

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

结果,您将获得两个附加字段,即:
  • syslog_type: cdp/interface
  • syslog_level: ERR

  • syslog_message仅包含此- {- -} Error writing CDP frame on system. Link is down

    关于elasticsearch - 如何提取字段的一部分并将其存储到logstash过滤器中的另一个字段中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39616958/

    相关文章:

    linux - 每当我重新启动 docker/elk 图像时,数据就会丢失

    elasticsearch - ELK Docker-Kibana保存的对象

    elasticsearch - ElasticSearch突出显示没有按照我的期望做

    java - 如何使用Rabbitmq Spark Stram查询ES

    logging - Filebeat 多行 kubernetes 容器日志不起作用

    elasticsearch - 将Kibana 3升级到Kibana 4

    elasticsearch - 如何获取 PIG 中一组字段的 DISTINCT 值?

    elasticsearch - Elasticsearch 中的 PIT 成本如何?

    linux - 我的 bash 脚本在终止命令后不会执行命令

    elasticsearch - elasticsearch中的 “Token filter”和 “ingest node”有什么区别?