ELK之收集日志到mysql数据库
写入数据库的目的是持久化保存重要数据,比如状态码、客户端浏览器版本等,用于后期按月做数据统计等.
环境准备
linux-elk1:10.0.0.22,Kibana ES Logstash Nginx
linux-elk2:10.0.0.33,MySQL5.7
1.linux-elk2上配置数据库
安装好数据库后,配置,并授权
mysql -uroot -p'Root123!@#'
create database elk character set utf8 collate utf8_bin;
grant all privileges on elk.* to elk@'10.0.0.%' identified by 'Elk123!@#';
flush privileges; # 在linux-elk1上验证是否能登录elk2上的mysql
mysql -u elk -h 10.0.0.33 -p'Elk123!@#'
2.配置JDBC数据库驱动
/usr/share/logstash/bin/logstash-plugin list | grep jdbc
logstash-input-jdbc # 没有logstash-output-jdbc
# 安装logstash的数据库驱动需要先安装gem源
yum -y install gem
gem -v
gem source list # 目前是一个国外的源,需要将其换成rubychina的
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
Error fetching https://gems.ruby-china.org/:
bad response Not Found 404 (https://gems.ruby-china.org/specs.4.8.gz)
# 替换不成功,是因为官网换地址了
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
https://gems.ruby-china.com/ added to sources
https://rubygems.org/ removed from sources
RubyChina官网由org换成com
安装JDBC驱动
报错1:WARNING: SSLSocket#session= is not supported
报错2:INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://repo.maven.apache.org:443
解决办法:
vim /usr/share/logstash/Gemfile
# source "https://rubygems.org" 将国外的源注释,换成国内的
source "https://gems.ruby-china.com/"
安装顺利的话是这样的
/usr/share/logstash/bin/logstash-plugin install logstash-output-jdbc
Validating logstash-output-jdbc
Installing logstash-output-jdbc
Installation successful /usr/share/logstash/bin/logstash-plugin list | grep jdbc
logstash-input-jdbc
logstash-output-jdbc # 下载数据库的JDBC驱动-https://dev.mysql.com/downloads/connector/j/,
# 上传到服务器,驱动的路径必须严格一致,否则连接数据库会报错.
tar xf mysql-connector-java-5.1.47.tar.gz
cd mysql-connector-java-5.1.47/
mkdir -p /usr/share/logstash/vendor/jar/jdbc
cp mysql-connector-java-5.1.47-bin.jar /usr/share/logstash/vendor/jar/jdbc/
chown -R logstash.logstash /usr/share/logstash/vendor/jar/jdbc/
3.创建数据表
配置Nginx日志格式
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 -t
nginx -s reload
创建数据表:在数据库中存储数据的时候,没有必要存储日志的所有内容,只需存储我们需要的重要信息即可.
注意:数据表中需要创建time字段,time的默认值设置为CURRENT_TIMESTAMP.
use 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;
4.配置Logstash将日志写入数据库
cat /etc/logstash/conf.d/nginx_log.conf
input{
file{
path => "/var/log/nginx/access.log"
start_position => "beginning"
stat_interval => "2"
codec => "json"
}
} output{
elasticsearch {
hosts => ["10.0.0.22:9200"]
index => "nginx-log-%{+YYYY.MM.dd}"
} jdbc{
connection_string => "jdbc:mysql://10.0.0.33/elk?user=elk&password=Elk123!@#&useUnicode=true&characterEncoding=UTF8"
statement => ["insert into nginx_log(host,client_ip,status,req_time,AgentVersion) VALUES(?,?,?,?,?)", "host","client_ip","status","req_time","AgentVersion"]
}
}
systemctl restart logstash.service
访问http://10.0.0.22/nginxweb/,可以在数据库看到数据已经入库
输出到es的nginx日志
logstash安装插件解决报错:https://www.jianshu.com/p/4fe495639a9a
ELK收集日志到mysql数据库:http://blog.51cto.com/tryingstuff/2050360
定期删除es集群10天以上的索引:https://blog.csdn.net/felix_yujing/article/details/78207667
ELK批量删除索引及集群相关操作记录:https://www.cnblogs.com/kevingrace/p/9994178.html
ELK之收集日志到mysql数据库的更多相关文章
- ELK收集日志到mysql数据库
场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...
- ELK收集日志到mysql
场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192 ...
- .net core 中使用Log4net输出日志到Mysql数据库中
.net core 中使用Log4net输出日志到数据库中去 1.使用Nuget安装log4net 和 mysql.data 2.设置log4net 的配置文件 log4net.config 可以设置 ...
- 今天搞log4net插入错误日志去mysql数据库的时候出现了点问题,已解决。记录下解决方案
先上图 配置log4net的时候要填这项,可是这个value我不知道啊.....上图里的value是我用下面的方法获取的 MySqlConnection con = new MySqlConnecti ...
- spring boot使用log4j2将日志写入mysql数据库
log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包 我给改了一下使用org.apache.commons.dbcp2包 1.log4j2. ...
- Mysql数据库之Binlog日志使用总结
binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...
- (转)Mysql数据库之Binlog日志使用总结
使用mysqlbinlog提取二进制日志 原文:http://blog.csdn.net/leshami/article/details/41962243 MySQL binlog日志记录了MySQL ...
- 烂泥:通过binlog恢复mysql数据库
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用bin ...
- log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法
这两天遇到log4net写日志到mysql数据库中,有时候在A项目中可以,有时候B项目就有问题,有时候测试环境没问题,到正式部署环境又出问题,经过两天的煎熬,终于理清楚了其中的头绪. 1.配置现状 c ...
随机推荐
- postman与charles的结合使用
1.准备charles环境 Charles端口一般配置的为8888,不知道怎么配置详见charles文档 打开charles,发现访问浏览器任意页面都是失败. 在浏览器的高级设置中设置代理服务器,以火 ...
- badboy录制提示当前页面的脚本发生错误
利用badboy录制时,发生了错误: 网上查了查,说badboy默认使用IE浏览器,打开Internet选项—>高级,图中的两个选项不要勾选即可 然鹅,然鹅,并没有作用... 请教了好心的同行, ...
- C++树的建立和遍历
#include<iostream.h> typedef char TElemtype; typedef struct Btree { TElemtype data; struct Btr ...
- Linux学习前的准备
Linux学习前的准备 Linux的学习也是这次项目的一个点. 我的学习教材是 The Linux Command Line,这是本已经被翻译好了的 中英版本的教材,知识点还是比较入门的 我使用的是 ...
- 【转】Unity3D 关于贝赛尔曲线,平滑曲线,平滑路径,动态曲线
http://tieba.baidu.com/p/2460036481 很多时候我们需要的并不是直线和折线,而是平滑的曲线,比如寻路系统,某些物体的曲线运动,都需要平滑曲线来保证效果,今天试了一下,通 ...
- 一个自动安装LNMP的简洁Shell脚本
此脚本在生产服务器上使用了一年多,本脚本崇尚简单唯美,只需要一个脚本就可以在任何一台有网络的服务器上自动配置LNMP.本脚本会在脚本执行目录下,建packages目录用于存放LNMP所需要的软件.大家 ...
- [poj] 1235 Farm Tour || 最小费用最大流
原题 费用流板子题. 费用流与最大流的区别就是把bfs改为spfa,dfs时把按deep搜索改成按最短路搜索即可 #include<cstdio> #include<queue> ...
- Codeforces 835 F Roads in the Kingdom(树形dp)
F. Roads in the Kingdom(树形dp) 题意: 给一张n个点n条边的无向带权图 定义不便利度为所有点对最短距离中的最大值 求出删一条边之后,保证图还连通时不便利度的最小值 $n & ...
- mac 安装 mysql 配置
前言:下面主要介绍2种安装方法以及后续的配置,希望对大家有帮助.(推荐通过安装包的形式安装) 1. 使用安装包安装 mysql 双击打开安装文件 双击pkg文件安装 一 ...
- 飞镖(bzoj 2335)
Description 飞镖是在欧洲颇为流行的一项运动.它的镖盘上分为20个扇形区域,分别标有1到20的分值,每个区域中有单倍.双倍和三倍的区域,打中对应的区域会得到分值乘以倍数所对应的分数.例如打中 ...