场景需求

在使用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.%' identified by '123456';
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 reload

查看日志中新日志的格式是否是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"            # 间隔时间为2scodec => "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中已经自动创建的数据信息:

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

当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配置文件没有对应上字段,或者数据库权限问题。

转载于:https://www.cnblogs.com/st666/p/10637208.html

ELK收集日志到mysql相关推荐

  1. ELK收集日志到mysql数据库

    场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...

  2. ELK之收集日志到mysql数据库

    写入数据库的目的是持久化保存重要数据,比如状态码.客户端浏览器版本等,用于后期按月做数据统计等. 环境准备 linux-elk1:10.0.0.22,Kibana ES Logstash Nginx ...

  3. ELK 经典用法—企业自定义日志收集切割和mysql模块

    ELK 经典用法-企业自定义日志收集切割和mysql模块 一.收集切割公司自定义的日志 很多公司的日志并不是和服务默认的日志格式一致,因此,就需要我们来进行切割了. 1.需切割的日志示例 2018-0 ...

  4. ELK分布式日志收集-企业级日志中心

    传统项目中,如果需要在生产环境定位异常的话,我们常常需要在服务器上使用命令的方式查询.而很多情况我们需要用到微服务架构或集群架构,日志被分散在不同的机器上,使得日志的查询变得异常困难.工欲善其事,必先 ...

  5. kafka 可视化工具_两小时带你轻松实战SpringBoot+kafka+ELK分布式日志收集

    一.背景 随着业务复杂度的提升以及微服务的兴起,传统单一项目会被按照业务规则进行垂直拆分,另外为了防止单点故障我们也会将重要的服务模块进行集群部署,通过负载均衡进行服务的调用.那么随着节点的增多,各个 ...

  6. 带你了解zabbix整合ELK收集系统异常日志触发告警~

    今天来了解一下关于ELK的"L"-Logstash,没错,就是这个神奇小组件,我们都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output( ...

  7. 3 ELK收集nginx正常和错误日志

    转载 : ELK收集nginx正常和错误日志 :https://www.jianshu.com/p/ef62538724f7 1.修改filebeat配置文件 在53主机操作 [root@db01 ~ ...

  8. ELK收集tomcat日志

    转载来源 :ELK收集tomcat日志 :https://www.jianshu.com/p/9f4ba87e4e15 1.安装tomcat 注意:需要提前安装好java环境 [root@db01 ~ ...

  9. ELK收集java日志

    转载来源:ELK收集java日志 https://www.jianshu.com/p/957e8ead3f8d 由于elasticsearch本身产生的日志就是java日志,所以我们可以通过ELK平台 ...

最新文章

  1. 让vs中网站的sln文件使用相对路径的办法
  2. HDU 5044 Tree 树链剖分
  3. Objective-C中把URL请求的参数转换为字典
  4. innodb和myisam的区别
  5. HTML文档中应用css样式的方法总结
  6. Protobuf从安装到配置整理帖
  7. 【编译原理】第二章课后习题(王生原版)
  8. 建立ssr服务器_如何从零打造一款轻量且天然支持SSR的个人博客系统?
  9. structs2 get方式传参中文乱码解决方法
  10. 计算机系统中的总线,计算机系统中的总线控制器及其方法
  11. Python OpenCV学习笔记之:灰度图像的直方图计算
  12. 使用NUnit进行DotNet程序测试
  13. C++ 对象的内存布局(下)
  14. 解决Mac App Store下载软件一直转圈无法完成的问题,黑白苹果均有效
  15. 保存Windows聚焦锁屏壁纸
  16. ASO学习——《ASO优化大师》笔记
  17. 技术分析是我的唯一信仰
  18. new Date兼容iOS和Android
  19. python pil grab screen
  20. 四周型文字环绕怎么设置_word艺术字四周型环绕怎么设置

热门文章

  1. python函数默认参数_Python中函数的默认参数问题
  2. python语句块的定义_第五章、Python语句
  3. promotion failed 和 Concurrent Mode Failure的区别
  4. 批处理 备份网络数据
  5. 她,18岁,李飞飞三度公开表扬,高中时NIPS获奖,创造「AI手术教练」
  6. 眼擎科技CEO朱继志:如何设计自动驾驶的视觉成像系统 | 吃瓜笔记
  7. 用GAN炼制长生不老药,这么玄幻的公司竟然能拿到药企投资
  8. ylbtech-Bill(发票管理)-数据库设计
  9. 自定义类—C#基础回顾
  10. ABAP内表数据和JSON格式互转