在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式。为了便于查询,可以同时写一份数据到Elasticsearch 中。
CentOS7系统:
192.168.20.60 node1 Kibana ES Logstash Nginx
192.168.20.61 node2 ES MariaDB
这里使用收集Nginx日志到数据库和ES中作为示例。
安装好数据库后,配置,并授权:
在node1上测试数据库的连接:
按装logstash的数据库驱动需要先安装gem源:
查看当前已经安装的插件:
安装JDBC驱动:
安装需要等待一段时间,查看是否安装成功:
要使日志以指定的表中字段的方式存储,需要将Nginx的日志格式改写为json格式,修改nginx.conf问,将日志格式配置部分替换为:
检查语法,并重新加载nginx:
查看日志中新日志的格式是否是json格式。
我们在数据库中存储数据的时候,没有必要存储日志的所有内容,只需存储我们需要的重要信息即可,可以根据自身的需求进行取舍。
注意:数据表中需要创建time字段,time的默认值设置为CURRENT_TIMESTAMP.
创建数据表语句(只获取部分数据):
查看表结构:
创建Logstash的配置文件:
[root@node1 ~]# vim /etc/logstash/conf.d/nginx_log.conf
测试文件,查看是否正确:
如果发现配置文件正确,但是日志无法收集,可以使用前台启动的方式,查看日志信息:
提示: 如果是使用root操作,使用前台启动的方式也就是以root用户启动,使用系统systemd启动使用的是logstash用户,如果前台启动正常,而后台启动无法收集日志,一般是目录或者文件权限问题。
重启logstash,访问nginx生成日志,并查看Elasticsearch是否已经收集日志:
ES中已经自动创建的数据信息:
在Kibana中添加日志信息,用于展示,在输入名称之后,选择使用时间戳的方式,会自动检索出对应的信息:
当Kibana上有数据展示后,我们可以查看数据库,发现数据库中已经存储了日志信息:
将Nginx 日志收集到数据库中就完成了。
如果在收集日志的时候,出现数据库中没有数据,或者有些字段的数据无法获取,故障排除的思路是:
1、查看nginx的日志文件格式是否为json格式,日志输出是否正常。
2、查看es 或者kibana上的日志是否完整,展示是否正常。
3、查看logstash的conf配置文件是否正常,字段标注的个数,名称有无对应上。
4、测试配置文件,刷新日志,如果kibana上展示正常,一般是logstash配置文件没有对应上字段,或者数据库权限问题。
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/2050360