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

[经验分享] ELK收集日志到mysql数据库

[复制链接]

尚未签到

发表于 2018-9-29 07:27:17 | 显示全部楼层 |阅读模式
场景需求
  在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式。为了便于查询,可以同时写一份数据到Elasticsearch 中。

环境准备
  CentOS7系统:


  • 192.168.20.60 node1 Kibana ES Logstash Nginx
  • 192.168.20.61 node2  ES MariaDB  这里使用收集Nginx日志到数据库和ES中作为示例。

配置数据库
  安装好数据库后,配置,并授权:
  

MariaDB [(none)]> create database elk character set utf8 collate utf8_bin;  
Query OK, 1 row affected (0.00 sec)
  


  
MariaDB [(none)]> grant all privileges on elk.* to elk@'192.168.20.%'>  
Query OK, 0 rows affected (0.00 sec)
  

  
MariaDB [(none)]> flush privileges;
  
Query OK, 0 rows affected (0.00 sec)
  

  

  在node1上测试数据库的连接:
  

[root@node1 ~]# yum install mariadb -y  
[root@node1 ~]# mysql -uelk -p123456 -h 192.168.20.61
  

  在node1上安装Logstash, 可以直接从官方下载rpm包安装,Elasticsearch和Kibana的安装跳过,可参考Kibana使用Nginx代理验证和ELK日志管理平台部署简介的前半部分,这里不再赘述。
  

[root@node1 ~]# yum install logstash-5.6.5.rpm -y  
[root@node1 ~]# systemctl start logstash
  

配置JDBC数据库驱动
  按装logstash的数据库驱动需要先安装gem源:
  

[root@node1 ~]# yum install gem -y  
[root@node1 ~]# gem -v
  
2.0.14.1
  
[root@node1 ~]# gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
  
https://gems.ruby-china.org/ added to sources
  
https://rubygems.org/ removed from sources
  
[root@node1 ~]# gem source list
  
*** CURRENT SOURCES ***
  

  
https://gems.ruby-china.org/
  

  查看当前已经安装的插件:
  

[root@node1 ~]# /usr/share/logstash/bin/logstash-plugin list  

  安装JDBC驱动:
  

[root@node1 ~]# /usr/share/logstash/bin/logstash-plugin install logstash-output-jdbc  
Validating logstash-output-jdbc
  
Installing logstash-output-jdbc
  
Installation successful
  

  安装需要等待一段时间,查看是否安装成功:
  

[root@node1 ~]# /usr/share/logstash/bin/logstash-plugin list|grep jdbc  
logstash-input-jdbc
  
logstash-output-jdbc
  

  下载数据库的JDBC驱动:https://dev.mysql.com/downloads/connector/j/ 上传到服务器。驱动的路径必须严格一致,否则连接数据库会报错。
  

[root@node1 ~]# tar xf mysql-connector-java-5.1.45.tar.gz  
[root@node1 ~]# cd mysql-connector-java-5.1.45
  
[root@node1 mysql-connector-java-5.1.45]# mkdir -p /usr/share/logstash/vendor/jar/jdbc
  
[root@node1 mysql-connector-java-5.1.45]# cp mysql-connector-java-5.1.45-bin.jar  /usr/share/logstash/vendor/jar/jdbc/
  
[root@node1 ~]# chown -R logstash.logstash /usr/share/logstash/vendor/jar/jdbc/
  

配置Nginx日志格式
  要使日志以指定的表中字段的方式存储,需要将Nginx的日志格式改写为json格式,修改nginx.conf问,将日志格式配置部分替换为:
  

log_format   access_log_json '{"host":"$http_x_real_ip","client_ip":"$remote_addr","log_time":"$time_iso8601","request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","req_time":"$request_time","AgentVersion":"$http_user_agent"}';  

  
access_log  /var/log/nginx/access.log  access_log_json;
  

  检查语法,并重新加载nginx:
  

nginx -t
  
nginx -s>  

  查看日志中新日志的格式是否是json格式。

创建数据表
  我们在数据库中存储数据的时候,没有必要存储日志的所有内容,只需存储我们需要的重要信息即可,可以根据自身的需求进行取舍。

  注意:数据表中需要创建time字段,time的默认值设置为CURRENT_TIMESTAMP.

  创建数据表语句(只获取部分数据):
  

MariaDB [elk]> create table nginx_log(host varchar(128),client_ip varchar(128),status int(4),req_time float(8,3),AgentVersion varchar(512), time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  

  查看表结构:
  

MariaDB [elk]> desc nginx_log;  
+-------------+--------------+------+-----+-------------------+-------+
  
| Field       | Type         | Null | Key | Default           | Extra |
  
+-------------+--------------+------+-----+-------------------+-------+
  
| host        | varchar(128) | YES  |     | NULL              |       |
  
| client_ip   | varchar(128) | YES  |     | NULL              |       |
  
| status      | int(4)       | YES  |     | NULL              |       |
  
| req_time    | float(8,3)   | YES  |     | NULL              |       |
  
| AgentVersion | varchar(512) | YES  |     | NULL              |       |
  
| time        | timestamp    | NO   |     | CURRENT_TIMESTAMP |       |
  
+-------------+--------------+------+-----+-------------------+-------+
  
6 rows in set (0.00 sec)
  

配置Logstash将日志写入数据库
  创建Logstash的配置文件:
  [root@node1 ~]# vim /etc/logstash/conf.d/nginx_log.conf
  

[root@node1 ~]# cat /etc/logstash/conf.d/nginx_log.conf  
input{
  file{
  path => "/var/log/nginx/access.log"     # 指定文件
  start_position => "beginning"     # 从开始收集
  stat_interval => "2"            # 间隔时间为2s
  codec => "json"            # 使用json格式
  
}
  

  
}
  

  
output{
  elasticsearch {
  hosts => ["192.168.20.60:9200"]
  index => "nginx-log-%{+YYYY.MM.dd}"
  
}
  

  jdbc{
  connection_string => "jdbc:mysql://192.168.20.61/elk?user=elk&password=123456&useUnicode=true&characterEncoding=UTF8"
  statement => ["insert into nginx_log(host,client_ip,status,req_time,AgentVersion) VALUES(?,?,?,?,?)", "host","client_ip","status","req_time","AgentVersion"]
  
}
  
}
  

  测试文件,查看是否正确:
  

[root@node1 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_log.conf -t  
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
  
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
  
Configuration OK
  

  如果发现配置文件正确,但是日志无法收集,可以使用前台启动的方式,查看日志信息:
  

[root@node1 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_log.conf   

  提示: 如果是使用root操作,使用前台启动的方式也就是以root用户启动,使用系统systemd启动使用的是logstash用户,如果前台启动正常,而后台启动无法收集日志,一般是目录或者文件权限问题。

  重启logstash,访问nginx生成日志,并查看Elasticsearch是否已经收集日志:
  

[root@node1 ~]# systemctl restart logstash  

  ES中已经自动创建的数据信息:
DSC0000.jpg

  在Kibana中添加日志信息,用于展示,在输入名称之后,选择使用时间戳的方式,会自动检索出对应的信息:
DSC0001.jpg

  当Kibana上有数据展示后,我们可以查看数据库,发现数据库中已经存储了日志信息:
  

[root@node2 elasticsearch-head]# mysql -uroot -p123456 -e "select * from elk.nginx_log;"|head -10  
host    client_ip   status  req_time    AgentVersion    time
  
-   192.168.20.191  304 0.023   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:33:39
  
-   192.168.20.191  200 0.042   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:33:39
  
-   192.168.20.191  200 0.030   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:33:39
  
-   192.168.20.191  200 0.042   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:34:33
  
-   192.168.20.191  200 0.380   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:34:33
  
-   192.168.20.191  200 0.195   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:34:37
  
-   192.168.20.191  200 0.034   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:34:45
  
-   192.168.20.191  200 0.016   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:34:59
  
-   192.168.20.191  200 0.570   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 2017-12-18 11:35:00
  

  

  将Nginx 日志收集到数据库中就完成了。
  如果在收集日志的时候,出现数据库中没有数据,或者有些字段的数据无法获取,故障排除的思路是:
  1、查看nginx的日志文件格式是否为json格式,日志输出是否正常。
  2、查看es 或者kibana上的日志是否完整,展示是否正常。
  3、查看logstash的conf配置文件是否正常,字段标注的个数,名称有无对应上。
  4、测试配置文件,刷新日志,如果kibana上展示正常,一般是logstash配置文件没有对应上字段,或者数据库权限问题。



运维网声明 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.iyunv.com/thread-603478-1-1.html 上篇帖子: mysql-connector-java 6.x 时区设置 下篇帖子: Centos 6.5 安装配置Mysql MHA
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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