【问题标题】:Filebeat Input Fields are not sent to LogstashFilebeat 输入字段未发送到 Logstash
【发布时间】:2020-10-01 04:43:05
【问题描述】:

StackOverflow 社区!

我正在尝试使用 Filebeat 收集一些系统日志,然后使用 LogStash 进一步处理它们,然后在 Kibana 中查看它们。

现在,由于我有不同的日志位置,我正在尝试在 filebeat.yml 中为每个日志添加特定的标识字段。

- type: log
   enabled: true
   paths:
     - C:\Users\theod\Desktop\Logs\Test2\*
processors:
 - add_fields:
    target: ''
   fields: 
    name:"drs"


 - type: log
   enabled: true
   paths:
     - C:\Users\theod\Desktop\Logs\Test\*
processors:
 - add_fields:
    target: ''
   fields: 
    name:"pos"

据此,我正在尝试在 Logstash conf 文件中应用一些 Grok 过滤器:

input {
  beats {
    port => 5044
  }
}


filter
{    
if "pos" in [fields][name] {
        grok {
            match => { "message" => "\[%{LOGLEVEL:LogLevel}(?: ?)] %{TIMESTAMP_ISO8601:TimeStamp} \[%{GREEDYDATA:IP_Address}] \[%{GREEDYDATA:Username}] %{GREEDYDATA:Operation}] \[%{GREEDYDATA:API_RequestLink}] \[%{GREEDYDATA:Account_name_and_Code}] \[%{GREEDYDATA:Additional_Info1}] \[%{GREEDYDATA:Additional_Info2}] \[%{GREEDYDATA:Store}] \[%{GREEDYDATA:Additional_Info3}](?: ?)%{GREEDYDATA:Error}" }
        }   
}
if "drs" in [fields][name] {
        grok {
            match => { "message" => "%{TIMESTAMP_ISO8601:TimeStamp} \[%{DATA:Thread}] %{LOGLEVEL:LogLevel} (?: ?)%{INT:Sequence} %{DATA:Request_Header}] %{GREEDYDATA:Request}" }
        }   
}   
}



output
{
if "pos" in [fields][name] {
    elasticsearch {
    hosts => ["localhost:9200"]
    index => "[fields][name]logs-%{+YYYY.MM.dd}"
    }
}
else if "pos" in [fields][name] {
elasticsearch {
    hosts => ["localhost:9200"]
    index => "[fields][name]logs-%{+YYYY.MM.dd}"
    }
} else {
elasticsearch {
    hosts => ["localhost:9200"]
    index => "logs-%{+YYYY.MM.dd}"
    }
}
}

现在,每次我运行它时,Logstash conf 中的条件都会被忽略。检查 Filebeat 日志,我注意到没有字段发送到 Logstash。

有人可以提供一些指导并指出我做错了什么吗?

谢谢!

【问题讨论】:

    标签: logstash logstash-grok filebeat


    【解决方案1】:

    您的 Filebeat 配置没有添加字段 [fields][name],而是在文档的顶层添加字段 [name],因为您的 target configuration

    processors:
     - add_fields:
       target: ''
       fields: 
        name:"pos"
    

    你所有的条件测试字段[fields][name],它不存在。

    更改条件以测试 [name] 字段。

    if "pos" in [name] { 
        ... your filters ...
    }
    

    【讨论】:

    • 我不得不稍微更改一下 filebeat.yml 文件,但最后,您的解决方案正是我需要的细节。谢谢!
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多