设为首页 收藏本站
查看: 1651|回复: 0

[经验分享] logstash 多行合并

[复制链接]

尚未签到

发表于 2019-1-29 13:01:35 | 显示全部楼层 |阅读模式
场景&环境
  环境:内网UAT环境ELK(elasticsearch、logstash、kibana)
日志类型:Java ERROR Log
格式:[级别] [时间] [class类] | message
grok:\[%{LOGLEVEL}\] \[%{TIMESTAMP_ISO8601}\] \[%{JAVAFILE:class}\] \| (?<info>([\s\S]*))

问题:
  在使用ELK 检索日志时发现本应属于一条内容的日志分到了多条日志显示,查看原日志文件发现在应用打日志时就换行了。
日志行开头为“[” 检查logstash 客户端配置在file{}段已经有

codec => multiline {
pattern => "^\["
negate => true
what => "previous"
  但并没有解决换行的问题,查资料发现需要在filter{}段写multiline相关配置。

方案实施:
  编写logstash 配置文件,在filter{}字段增加multiline 相关配置

        multiline {
pattern => "^\["
negate => true
what => "previous"
}
  重启logstash……结果logstash 报错了……
看了下错误日志,显示的大概内容为没有multiline 插件……

安装logstash-filter-multiline
  因为是离线环境,又到rubygems网站下载了对应的filter-multiline-gem文件做离线安装,将下载回来的文件放到logstash/vendor/cache目录下
执行如下命令执行安装

bin/logstash-plugin install --local vendor/logstash/vendor/cache/logstash-filter-multiline-3.0.4.gem
  看到如下输出即表示安装成功

Validating /root/logstash-filter-multiline-3.0.4.gem
Installing logstash-filter-multiline
  有类似上面信息输出,即可忽略连接错误,如下

Error Bundler::HTTPError, retrying 1/10
Could not fetch specs from https://rubygems.org/
  可以查看Gemfile 文件最后一行,有类似如下信息即安装成功
gem "logstash-filter-multiline", "3.0.4", :path => "vendor/local_gems/ffa5f9f7/logstash-filter-multiline-3.0.4"

验证
  启动logstash,这次没有报错信息了,再看kibana 上的日志已经合并为一行

后续
  某一条错误日志打印了有1.3k行,日志又分为了多条显示,比对后发现前两条正好都是501行,怀疑是有默认行数限制,查阅资料验证了这点怀疑,修改默认行数值解决

默认行数限制
  默认行数是在codec 字段,修改如下

        codec => multiline {
max_bytes => "20MiB"  #修改最大值
max_lines => 2000 #修改合并行数
pattern => "^\["
negate => true
what => "previous"
}
完整配置

input{
file {
path => ["/logs/error-*.log"]
type => "error"
codec => multiline {
max_bytes => "20MiB"
max_lines => 2000
pattern => "^\["
negate => true
what => "previous"
}
start_position => "beginning"
}
}
filter {
if [type] == "error" {
multiline {
pattern => "^\["
negate => true
what => "previous"
}
grok {
match => {
"message" => "\[%{LOGLEVEL:loglevel}\] \[%{TIMESTAMP_ISO8601:time}\] \[%{JAVAFILE:class}\] \| (?([\s\S]*))"
}
overwrite => ["message"]
}
}
}
output {
if [type] == "error" {
elasticsearch {
hosts => ["localhost:9200"]
index => "error-%{+YYYY-MM}"
}
}
}
参考资料
  Grok    表达式语法:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
正则:http://manual.macromates.com/en/regular_expressions
行数限制:https://blog.csdn.net/jiao_fuyou/article/details/50350497
Grok    Debugger    :http://grokdebug.herokuapp.com 需***
:http://grok.qiexun.net/ 无需***




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669200-1-1.html 上篇帖子: Spring Boot 2.0 M7 整合 ES 5 、Kibana 和 X-pack 下篇帖子: 日志监控_ElasticStack
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表