使用elk beats的packetbeat 来进行mysql的网络抓包审计

由于之前使用插件类型的方式来进行了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

 

 

posted @ 2017-08-16 16:24  Tz_CHN  阅读(3063)  评论(1编辑  收藏  举报