elasticsearch 日志未在Logstash中正确解析,elasticsearch,logstash,kibana,logstash-grok,filebeat,elasticsearch,Logstash,Kibana,Logstash Grok,Filebeat" /> elasticsearch 日志未在Logstash中正确解析,elasticsearch,logstash,kibana,logstash-grok,filebeat,elasticsearch,Logstash,Kibana,Logstash Grok,Filebeat" />

elasticsearch 日志未在Logstash中正确解析

elasticsearch 日志未在Logstash中正确解析,elasticsearch,logstash,kibana,logstash-grok,filebeat,elasticsearch,Logstash,Kibana,Logstash Grok,Filebeat,我的架构是 Filebeat A(远程)>Logstash A(2条管道)>Elasticsearch A>Kibana A Filebeat B(远程)>Logstash A(2条管道)>Elasticsearch A>Kibana A 它用于日志分析 假设我的日志格式为abc\u logs-yyyy.mm.dd.log 我的Filebeats正在将日志推送到Logstash(我可以在数据/注册表文件中看到),但是Logstash不是为一些日志文件创建索引 比如说,abc_logs-2019.

我的架构是

Filebeat A(远程)>Logstash A(2条管道)>Elasticsearch A>Kibana A

Filebeat B(远程)>Logstash A(2条管道)>Elasticsearch A>Kibana A

它用于日志分析

假设我的日志格式为
abc\u logs-yyyy.mm.dd.log

我的
Filebeats
正在将日志推送到
Logstash
(我可以在数据/注册表文件中看到),但是
Logstash
不是为一些日志文件创建索引

比如说,
abc_logs-2019.11.02.log
在我的日志位置,并且
Filebeat
将它推到
Logstash
。但是我
Elasticsearch
中看不到创建的任何索引

示例日志:

<ip> <ip> 27 27 <ip> HTTP/1.1 - GET 8380 - GET /healthcheck/healthcheck.do HTTP/1.1 200 - [12/Nov/2019:00:33:49 +0000] - /healthcheck/healthcheck.do houston.hp.com 0 0.000 default task-245 "-" "-" "-" "-" "-" "-"
<ip> <ip> 42 42 <ip> HTTP/1.1 - POST 8743 - POST /ContactServices/api/contact/create HTTP/1.1 200 - [12/Nov/2019:07:00:54 +0000] - /ContactServices/api/contact/create - 1969 1.969 default task-199 "-" "application/json" "-" "-" "-" "-"
input {
 beats {
                port => 5044
                host => "<host_name>"
        }
}

filter {
  grok {
        match => ["message", '%{IPV4:remoteIP}\s+%{IPV4:localIP}\s+%{INT:throughtputData:int}\s+%{INT}\s+%{IPV4}\s+%{DATA:requestProtocol}\s+%{DATA:remoteLogicalUserName}\s+%{DATA:requestMethod}\s+%{DATA:port}\s+%{DATA}\s+%{DATA}\s+/ContactServices/api/%{DATA}\s+%{DATA:requestProtocol2}\s+%{INT:requestStatusCode}\s+%{DATA:userSessionID}\s+\[%{HTTPDATE:logTimeStamp}\]\s+%{DATA:remoteUser}\s+/ContactServices/api/%{DATA:requestedURL2}\s+%{DATA:serverName}\s+%{INT:timeTakenInMilliSec:int}\s+%{NUMBER}\s+default\s+task-%{INT}\s+"%{DATA:authorization}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"']
 }

        if "_grokparsefailure" in [tags]{
                drop {}
          }

        if "_groktimeout" in [tags]{
                drop {}
          }

        date {
                match => ["logTimeStamp" ,"dd/MMM/yyyy:HH:mm:ss Z" ]
        }
        mutate{
          remove_field => ["message","host","input","type","@version","prospector","beat","garbageData","offset"]
        }
}

output {
  elasticsearch {
    hosts => ["<ip>:9202"]
    index => "contact-logs-%{+YYYY.MM.dd}"
 }
}
27 27 HTTP/1.1-GET 8380-GET/healthcheck/healthcheck.do HTTP/1.1200-[2019年11月12日:00:33:49+0000]-/healthcheck/healthcheck.do休斯顿.hp.com 0.000默认任务-245“-“-“-“-“-“-“-“-“-“-“-“-”
42 HTTP/1.1-POST 8743-POST/ContactServices/api/contact/create HTTP/1.1200-[12/Nov/2019:07:00:54+0000]-/ContactServices/api/contact/create-1969 1.969 default task-199“-”application/json“--”
logstash.conf文件:

<ip> <ip> 27 27 <ip> HTTP/1.1 - GET 8380 - GET /healthcheck/healthcheck.do HTTP/1.1 200 - [12/Nov/2019:00:33:49 +0000] - /healthcheck/healthcheck.do houston.hp.com 0 0.000 default task-245 "-" "-" "-" "-" "-" "-"
<ip> <ip> 42 42 <ip> HTTP/1.1 - POST 8743 - POST /ContactServices/api/contact/create HTTP/1.1 200 - [12/Nov/2019:07:00:54 +0000] - /ContactServices/api/contact/create - 1969 1.969 default task-199 "-" "application/json" "-" "-" "-" "-"
input {
 beats {
                port => 5044
                host => "<host_name>"
        }
}

filter {
  grok {
        match => ["message", '%{IPV4:remoteIP}\s+%{IPV4:localIP}\s+%{INT:throughtputData:int}\s+%{INT}\s+%{IPV4}\s+%{DATA:requestProtocol}\s+%{DATA:remoteLogicalUserName}\s+%{DATA:requestMethod}\s+%{DATA:port}\s+%{DATA}\s+%{DATA}\s+/ContactServices/api/%{DATA}\s+%{DATA:requestProtocol2}\s+%{INT:requestStatusCode}\s+%{DATA:userSessionID}\s+\[%{HTTPDATE:logTimeStamp}\]\s+%{DATA:remoteUser}\s+/ContactServices/api/%{DATA:requestedURL2}\s+%{DATA:serverName}\s+%{INT:timeTakenInMilliSec:int}\s+%{NUMBER}\s+default\s+task-%{INT}\s+"%{DATA:authorization}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"']
 }

        if "_grokparsefailure" in [tags]{
                drop {}
          }

        if "_groktimeout" in [tags]{
                drop {}
          }

        date {
                match => ["logTimeStamp" ,"dd/MMM/yyyy:HH:mm:ss Z" ]
        }
        mutate{
          remove_field => ["message","host","input","type","@version","prospector","beat","garbageData","offset"]
        }
}

output {
  elasticsearch {
    hosts => ["<ip>:9202"]
    index => "contact-logs-%{+YYYY.MM.dd}"
 }
}
输入{
击败{
端口=>5044
主机=>“”
}
}
滤器{
格罗克{
在“消息”方面,两名男子的两名男子的两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两名两+\[%{HTTPDATE:logTimeStamp}\]\s+%{DATA:remoteUser}\s+/ContactServices/api/%{DATA:requestedURL2}\s+%{DATA:serverName}\s+%{INT:timeTakenInMilliSec:INT}\s+%{NUMBER}\s+默认值\s+任务-%{INT}\s+“%{DATA:authorization}\s+{s+{DATA}\s+{s+{DATA}\s+]
}
如果[tags]中有“\u grokparsefailure”{
删除{}
}
如果[标签]中有“\u groktimeout”{
下降{}
}
日期{
匹配=>[“日志时间戳”,“dd/MMM/yyyy:HH:mm:ss Z”]
}
变异{
删除字段=>[“消息”、“主机”、“输入”、“类型”、“版本”、“浏览”、“节拍”、“垃圾数据”、“偏移量”]
}
}
输出{
弹性搜索{
主机=>[“:9202”]
index=>“联系人日志-%{+YYYY.MM.dd}”
}
}
Filebeat.conf文件

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /path/to/logs/*.log
  exclude_lines: ['.*healthcheck.*','.*swagger.*']

output.logstash:
  hosts: ["<serverip>:5044"]
filebeat.inputs:
-类型:原木
已启用:true
路径:
-/path/to/logs/*.log
排除_行:['.*healthcheck.*','.*swagger.*]
output.logstash:
主机:[“:5044”]
还有一个额外的问题

即使创建了索引,也不是所有有效日志都被解析

例如,如果一个日志文件有
100个正确的日志
行(如
grok filter
logstash.conf
文件)
在Elasticsearch中只有60%-70%的数据显示为文档。。
大约有40%的数据被删除。我不知道确切的原因是什么

如果我在
grok调试器
中使用指定的grok模式检查
未解析的日志
,则它是解析完美的


这个问题有什么解决方案吗?

您需要共享您的filebeat和logstash配置,以及您的日志消息示例,以便人们能够尝试了解您正在尝试执行的操作以及失败的原因。是的,当然。将添加它。。在conf文件中配置的grok模式只匹配少数日志和未得到匹配的日志您正在抛出一个错误作为“grokparsefailure”,根据上述条件。由于它正在删除日志。否@AngelH..您误解了..日志可能包含1000个日志行,其中找到了100个正确的日志..问题是在这100个日志行中,许多日志正在删除..我在尝试测试您的模式时超时,可能是丢失的日志发生了什么?