0x01 前言
10月28日在B站进行的主题为ELK安装与初始化设置的直播在结束之前翻车了。以下是当天的翻车现场:
因为直播时间长达2小时,所以视频分为Part1和Part2,在Part2的最后,已经完成ELK的安装配置,但解析日志的时候出现乱码,而且解析失败:
因为是在直播,而且时间已经很紧张了,当出现问题时我也是一脸懵逼。但问题已经出现,就得找到原因。因此,在第二天,我写了这篇文章。
0x02 DEBUG
出现上图中的乱码问题一般是由于日志文件编码问题导致的,而且我在准备测试用日志文件的时候是在windows系统上进行,所以当时我第一反应是日志编码问题。
在第二天我检查该日志文件的编码:
[root@elk-t1 nginx]# file -bi access.log text/plain; charset=us-ascii
文件编码没问题,filebeat能正常那个读取,而且logstash也是可以解析的。这时候就剩下以一个原因了:logstash解析出错。
我回过头来检查logstash与filebeat的配置文件:
我在直播中给logstash配置了监听2个端口的配置文件:
# 配置文件列表 [root@elk-t1 conf.d]# ll total 16 -rw-r--r-- 1 root root 121 Oct 27 22:15 01-5014.conf -rw-r--r-- 1 root root 41 Oct 27 22:47 02-5016.conf -rw-r--r-- 1 root root 3634 Oct 27 22:15 10-ngx-access-log.conf -rw-r--r-- 1 root root 318 Oct 27 22:15 99-output.conf # 监听TCP与UDP的5014端口 [root@elk-t1 conf.d]# cat 01-5014.conf input { tcp { type => "syslog" port => 5014 } } input { udp { type => "syslog" port => 5014 } } # 调用beats插件监听5016端口 [root@elk-t1 conf.d]# cat 02-5016.conf input { beats { port => 5016 } }
在直播的环境中,因为日志文件是通过filebeat传入的,所以需要传到beats插件监听的5016端口,而不是TCP或UDP插件监听的5014端口。
然后检查filebeat的output部分:
#----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["localhost:5014"]
发现filebeat将日志传输到5014端口,因为filebeat的数据使用了自由的编码,所以在logstash中需要用beats插件才能解析,当数据传输到TCP或UDP插件的时候,则会出现解析异常的问题。最终呈现出来的就是乱码。
这部分的错误我也从另一个特征识别到:在kibana中查看到的信息中没有我自定义的“tags”字段:
正常情况下应该是这样的:
出现这种情况只有一种可能,就是logstash无法正常解析filebeat传输过来的数据,这时候只需要检查filebeat与logstash的配置文件即可。
0x03 清理
找到原因后,需要重新配置filebeat与索引的相关信息。因为我这是全新的测试环境,因此可以通过删除filebeat registry文件的方式重置filebeat的记录:
# 停止filebeat服务 [root@elk-t1 ~]# systemctl stop filebeat.service # 删除文件 [root@elk-t1 ~]# rm -f /var/lib/filebeat/registry
注意!请不要删除生产环境中的这个问题件,这将会导致filebeat重新读取文件,使数据重复!
在重新启动filebeat之前还需要对索引继续一些操作。在这里我把旧的索引删除,新建一个索引并分配一个别名。先打开kibana的dev tools:
将旧的索引删除:
再新建索引并指向别名:
PUT public-ngx_v2 POST /_aliases { "actions": [ { "add": { "index": "public-ngx_v2", "alias": "public-ngx-alias" } } ] }
最后启动filebeat即可:
[root@elk-t1 ~]# systemctl start filebeat.service
最终,分析出来的数据如下:
0x04 结语
其实整体的搭建思路没问题,就是不细致,直播前的准备不充分。
因为这次直播讲的内容太多,直播时间长达2小时,在以后的直播会将各部分内容拆分,将时间控制在45分钟至1小时以内。