elasticsearch - Logstash 中的日志未正确解析
问题描述
我的架构是
Filebeat A(远程)> Logstash A(2 个管道)> Elasticsearch A > Kibana A
Filebeat B(远程)> Logstash A(2 个管道)> Elasticsearch A > Kibana A
它用于日志分析。
说我的日志格式是abc_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" "-" "-" "-" "-"
logstash.conf 文件:
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}"
}
}
Filebeat.conf 文件
filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/logs/*.log
exclude_lines: ['.*healthcheck.*','.*swagger.*']
output.logstash:
hosts: ["<serverip>:5044"]
另外,一个额外的问题。
即使创建了索引,也不是所有有效的日志都被解析了。
就像如果一个日志文件有100 correct log
行(如文件grok filter
模式
logstash.conf
)only 60%-70% data
在 Elasticsearch 中显示为文档.. 周围40% data is getting dropped
.. 我不知道确切的原因是什么..
如果我使用指定的 grok 模式签入unparsed logs
,grok debugger
则解析完美。
这个问题有什么解决办法吗?
解决方案
推荐阅读
- css - SVG 文本标签中的 CSS 缩放动画在 Safari 上不起作用
- class - 将消息类更改为自定义表单的约会
- javascript - 需要帮助保存用户输入
- python-3.x - 正则表达式获取带有负号的模式的最后一次出现
- javascript - 顶点图表折线图仅在第一个月不显示数据标签
- python - 查找字典和列表之间的匹配字符串并用字符串替换匹配项
- javascript - 循环进入 html 元素以决定每个元素的边
- python - Kivy 在android中打开应用程序时我可以删除kivy加载屏幕吗?
- flutter - 我的 Flutter 安装有问题吗?
- tensorflow - 如何在 Google Cloud 中选择特定的 TPU?