由于之前使用插件类型的方式来进行了mysql的审计,一是有两例mysql的实例崩溃,二是对性能影响比较大,故在寻求其他的解决方案。
后来发现elk beats项目,便拿来试了下,后上线了200个实例,运行了2个月,没有出现问题,故和大家简单分享一下,如需详细了解的话,可以查看官方文档。
packetbeat 支持多种协议的网络抓包,可以将抓包结果发送到es存储起来,非常方便。
性能测试:
24核 64G单机mysql sysbench测试:
查询写入性能影响约5%,无磁盘io影响,网络流量相比原来上升20%,beat进程cpu占用单核40%-70%
缺点:
1.内容因为是网络抓包故没有账号的信息
2.数据库库表定位字段path会有信息丢失的情况,估计和使用的orm框架有关
官方地址:
beats项目:https://www.elastic.co/products/beats
packetbeat子项文档:https://www.elastic.co/guide/en/beats/packetbeat/current/index.html
1.rpm安装:
centos:
sudo yum install libpcap curl -L -O https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-5.5.1-x86_64.rpm sudo rpm -vi packetbeat-5.5.1-x86_64.rpm
2.编辑配置文件:
vim /etc/packetbeat/packetbeat.yml
packetbeat.protocols.mysql:
ports: [3306,3307,3308,3309]
output.elasticsearch:
hosts: ["es地址:端口"]
index: "mysqlaudit-%{+yyyy.MM.dd}"
name: 1.1.1.1
注:
- index如果不设置,在es中的默认名称是packetbeat-2017.08.16 这样,若要设定自己需要名称,需要改成 customer_name-%{+yyyy.MM.dd},这样也能和默认一样保持每天一个索引文件
- name话 不设置的话是机器的hostname,推荐设置成ip 这样不同机器 127.0.0.1的抓包 也可以进行分析,在es里的对应字段是 beat.name
3.启动packetbeat:
!!重要!!
启动第一个beat前需要在es里load 对应的template。后面的beat启动就不需要了:
curl -H 'Content-Type: application/json' -XPUT 'http://es地址:端口/_template/packetbeat' -d@/etc/packetbeat/packetbeat.template.json
!!如果忘记这一步,先到es里把当天的index删除,再重启启动beat!!
!!如果自定义了index名称,需要修改/etc/packetbeat/packetbeat.template.json 中最后一行的对应的名称再post
启动:
/etc/init.d/packetbeat start 或 systemctl start packetbeat
4.可选:导入dashboard
如果需要官方制作的dashboard图,可以导入图的模板:
/usr/share/packetbeat/scripts/import_dashboards -es es地址:端口 -i mysqlaudit-*
注:如果是自定义的index name 则要加上-i参数,否则图用的默认index为packetbeat-*
5.打开kibana -> Management -> Index Pattern -> +Add New -> packetbeat/自定义名称-* -> 勾选Index contains time-based events -> 选择@timestamp -> Create
示意图:
6.单条数据内容:
7.index 和 dashboard