ELK(filebeat-logstash-elasticsearch)

背景:经理说之前app直接将日志数据打入到ES里面,侵入性太高了。想要单独只对log文件进行读取后打入ES里面,并且还要将实体对象以json结构进入ES。

我尝试了filebeat读取数据直接打入到ES里面的操作,但是filebeat里面的filter没生效。也尝试过在ES前设置pipeline,也没用(如果你的log文件中本身就是json格式的log,那可以尝试使用pipeline的方式,我跑通过一次,但是因为需要改logback-spring.xml文件,好像还捕获不到异常报错,就没按照这个方案来)

最终尝试filebeat读取数据,logstash加工数据的方式成功了,以下是经验

前提:你已经参照我之前的博文,安装OK了(filebeat/ logstash/elasticsearch/kibana)。

正文:

step1:filebeat.yml文件配置

注意:上面这两个UTF-8可以解决kibana上显示信息编码错误的问题

注意:使用output.logstash,不要使用output.elasticsearch;enable要设置(具体这玩意啥作用我也不知道,没设置的时候logstash会报错,我感觉应该是beats协议的问题)

重新运行filebeat

step2:修改syslog.conf文件

注意:

红色注释掉的地方说明:tcp是之前使用tcp协议传输数据的时候使用的,现在我们改用beats协议了;multiline的作用是为了捕获多行日志。比如异常报错,或者人为打印日志是多行的,他把这些数据整理成一条log日志。为什么不放开呢,是因为logstash不是自带这个插件的,你一开始就是用这个插件,logstash就启动不了了。

if 后面的设置就是说:当message消息中出现记录字样,把这个数据转成json格式。

step3:安装multiline插件,放开注释,重启logstash

进入容器内部后执行下面的命令

./bin/logstash-plugin install logstash-filter-multiline

当显示install successfully的时候,退出容器

再将上面的注释放开

然后重启logstash。

命令:docker restart logstash

step4:程序中打印log前将实体转json格式的字符串

实验结果:大概感受一下就行(涉密全打码了)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值