【问题标题】:logstash grok not working for some of the datasetlogstash grok 不适用于某些数据集
【发布时间】:2019-02-01 15:39:14
【问题描述】:

这仅与post 相关,我使用下面的 grok 过滤器剖析要在 kibana 中可视化的数据,下面是我在我的 logstash conf 文件中使用的内容,并根据需要处理数据但是今天我遇到了一种情况,它没有按需要过滤数据。

Kibana 的正确视觉效果如下:

received_at:February 1st 2019, 21:00:04.105 float:0.5, 0.0 type:rmlog Hostname:dbafoxon93 Date: 19/02/01 User_1:dv_vxehw @version:1 Hour_since:06 Command:rm -rf /data /rg/日志

logstash conf 文件中的 grok 过滤器:

 match => { "message" => "%{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} %{HOUR:hour2}:%{MINUTE:minute2} %{HOUR:hour3}:%{MINUTE:minute3} %{GREEDYDATA:Command}" }

我的 logstash 配置文件:

input {
  file {
    path => [ "/data/mylogs/*.txt" ]
    start_position => beginning
    sincedb_path => "/dev/null"
    type => "tac"
  }
}

filter {
  if [type] == "tac" {
    grok {
      match => { "message" => "%{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} %{HOUR:hour2}:%{MINUTE:minute2} %{HOUR:hour3}:%{MINUTE:minute3} %{GREEDYDATA:Command}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      remove_field => [ "@version", "host", "message", "_type", "_index", "_score" ]
   }
 }
}

output {
        if [type] == "rmlog" {
        elasticsearch {
                hosts => ["localhost:9200"]
                manage_template => false
                index => "tac-%{+YYYY.MM.dd}"
  }
 }
}

下面是正在处理的新数据,但我没有得到该数据的 HostnameCommand 等字段。

dbproj01,19/02/01,00:04,23-hrs,cvial,cvial 120804 0.0 0.0 106096 1200 pts/90 S Jan30 0:00 /bin/sh -c /bin/rm -f ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.cxt ../../../../../../
tools.lnx86/dfII/etc/context/64bit/hBrowser.toc ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.aux ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.ini ; (CUR_DIR=`pwd` ;
 cd ../../../../obj/linux-x86-64/optimize/bin/virtuoso ; ${CUR_DIR}/../../../../../../tools.lnx86/dfII/bin/virtuoso -ilLoadIL hBrowserBuildContext.il -log hBrowserBuildContext.log -nograph && [ `/bi
n/grep -c Error hBrowserBuildContext.log` = 0 ]) || (echo '*** Error: Failed to build hBrowser context.' ; /bin/rm -f ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.cxt ../../../../..
/../tools.lnx86/dfII/etc/context/64bit/hBrowser.toc ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.aux ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.ini ; exit 1),/pro
j/cvial/WS/BUNGEE/REBASE_190120-138_2/tools.lnx86/dfII/group/bin/src

【问题讨论】:

    标签: logstash logstash-grok kibana-6


    【解决方案1】:

    我在%{HOUR:hour2}:%{MINUTE:minute2} 值中看到了您的问题,因为它以日期Jan30 而不是时间返回,并且还包含在%{DATA} 部分中。

    下面的模式会处理它

    %{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} (?:%{HOUR:hour2}:|)(?:%{MINUTE:minute2}|) (?:%{HOUR:hour3}:|)(?:%{MINUTE:minute3}|)%{GREEDYDATA:Command} 
    

    您也可以使用Grok Debug 进行模式测试。

    【讨论】:

    • @Wael,感谢您的快速了解,如果当前的 grok 不匹配,是否有条件,然后使用另一个 grok。
    • 你可以试试if "_grokparsefailure" in [tags] { // another grok } }
    • @krock1516 检查我对所需模式的回答
    • @krock1516 您还可以在一个 grok 过滤器中使用多个 grok 模式。过滤器将尝试将字段与模式匹配,直到其中一个匹配。请参阅此 question 以获取有关 hos 的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多