由於之前使用插件類型的方式來進行了mysql的審計,一是有兩例mysql的實例崩潰,二是對性能影響比較大,故在尋求其他的解決方案。後來發現elk beats項目,便拿來試了下,後上線了200個實例,運行了2個月,沒有出現問題,故和大家簡單分享一下,如需詳細瞭解的話,可以查看官方文檔。 packetb ...
由於之前使用插件類型的方式來進行了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