1、低級自動發現概述
zabbix的低級自動發現(LLD)適用於監控多實例,監控變化的數據(分區、網卡)。
自動發現(LLD)提供了一種在計算機上為不同實體自動創建監控項,觸發器和圖形的方法。例如,Zabbix可以在你的機器上自動開始監控文件系統或網絡接口,而無需為每個文件系統或網絡接口手動創建監控項。此外,可以配置Zabbix根據定期執行發現后的得到實際結果,來移除不需要的監控項。
在zabbix中,支持六種類型的發現項目:
系統文件的發現
網絡接口的發現
CPU和CPU內核的發現
SNMP OID的發現
使用ODBC SQL查詢的發現
Windows服務的發現
用戶可以自己定義發現類型,只要它們遵循特定的JSON協議。
發現過程的一般架構如下。
首先,用戶在"配置"→"模板"→"發現"列中創建一個發現規則。發現規則包括(1)發現必要實體(例如,文件系統或網絡接口)的項目和(2)應該根據該項目的值創建的監控項,觸發器和圖形的原型
發現必要實體的項目就像其他地方所看到的常規項目:服務器向該項目的值詢問Zabbix agent(或者該項目的任何類型的設置),agent以文本值進行響應。區別在於agent響應的值應該包含特定JSON格式的發現實體的列表。這種格式的自定義檢查者發現的細節才是最重要的,因為返回值必須包含宏→值對。例如,項目"net.if.discovery"可能會返回兩對鍵值:"{#IFNAME}"→"lo"和"{#IFNAME}"→"eth0"。
這些宏用於名稱,鍵值和其他原型字段中,然后用接收到的值為每個發現的實體創建實際的監控項,觸發器,圖形甚至主機。
當服務器接收到發現項目的值時,它會查看宏→值對,每對都根據原型生成實際監控項,觸發器和圖形。在上面的"net.if.discovery"示例中,服務器將生成環路接口"lo"的一組監控項,觸發器和圖表,另一組用於界面"eth0"。
2、mysql多實例
2.1 什么是MySQL多實例
MySQL多實例就是在一台機器上開啟多個不同的服務端口(如:3306,3307),運行多個MySQL服務進程,通過不同的socket監聽不同的服務端口來提供各自的服務
2.2 MySQL多實例的特點
有效利用服務器資源,當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務
節約服務器資源
資源互相搶占問題,當某個服務實例服務並發很高時或者開啟慢查詢時,會消耗更多的內存、CPU、磁盤IO資源,導致服務器上的其他實例提供服務的質量下降
2.3 部署mysql多實例的兩種方式
第一種是使用多個配置文件啟動不同的進程來實現多實例,這種方式的優勢邏輯簡單,配置簡單,缺點是管理起來不太方便
第二種是通過官方自帶的mysqld_multi使用單獨的配置文件來實現多實例,這種方式定制每個實例的配置不太方面,優點是管理起來很方便,集中管理
3、mysql單實例監控
即為主機鏈接mysql模板,進行監控,查看最新數據
4、開啟mysql多實例
4.1 准備配置文件
[root@db01 ~]# cp /etc/my.cnf /etc/my3307.cnf
[root@db01 ~]# vim /etc/my3307.cnf
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
port=3307
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid
[root@db01 ~]# cp /etc/my3307.cnf /etc/my3308.cnf
[root@db01 ~]# sed -i 's#3307#3308#g' /etc/my3308.cnf
4.2 初始化數據庫
初始化數據庫3307
[root@db01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
[root@db01 ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
初始化數據庫3308
[root@db01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
[root@db01 ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &
4.3 檢查多實例是否正常
[root@db01 ~]# netstat -lntup|grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1648/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 5434/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 6021/mysqld
[root@db01 ~]# mkdir /data/3306
[root@db01 ~]# ln -s /var/lib/mysql/mysql.sock /data/3306/
檢查
[root@db01 ~]# find /data -name "*.sock"
/data/3307/mysql.sock
/data/3308/mysql.sock
/data/3306/mysql.sock
[root@db01 ~]# chmod 755 /data/*
[root@db01 ~]# ll -d /data/*
drwxr-xr-x 2 root root 23 6月 21 09:58 /data/3306
drwxr-xr-x 5 mysql root 4096 6月 21 09:48 /data/3307
drwxr-xr-x 5 mysql root 4096 6月 21 09:53 /data/3308
[root@db01 ~]# netstat -lntp|awk -F "[ :]+" '/mysqld/{print$5}'
3306
3307
3308
5、編寫腳本並測試
編寫腳本獲取多實例並輸出為json格式
[root@db01 ~]# mkdir /etc/zabbix/scripts
[root@db01 ~]# cd /etc/zabbix/scripts
[root@db01 scripts]# vim discover.sh
#!/bin/bash
#mysql low-level discovery
res=`sudo netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'`
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
腳本中需要為zabbix用戶授權netstat的命令
方法一:
sed -i '98a zabbix\tALL=(ALL)\tNOPASSWD: /bin/netstat' /etc/sudoers
sed -i 's@^Defaults requiretty@#Defaults requiretty@g' /etc/sudoers
方法二:
去掉腳本的sudo,添加suid
usermod -s /bin/bash zabbix
chmod u+s /usr/bin/netstat
測試腳本
[root@db01 scripts]# sh discover.sh
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}
6、自定義key
[root@db01 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@db01 zabbix_agentd.d]# vim mysql.conf
UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh
[root@db01 zabbix_agentd.d]# systemctl restart zabbix-agent.service
在server端命令行測試
[root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}
增加自定義key
[root@db01 zabbix_agentd.d]# vim mysql.conf
UserParameter=mysql.discovery,sh /etc/zabbix/scripts/discover.sh
UserParameter=mysql-status[*],echo "show global status where Variable_name='$2';" |mysql -S /data/$1/mysql.sock -N | awk '{print $$2}'
UserParameter=mysql-ping[*],mysqladmin -S /data/$1/mysql.sock ping | grep -c alive
UserParameter=mysql-version,mysql -V
[root@db01 zabbix_agentd.d]# systemctl restart zabbix-agent.service
在server端命令行進行測試
[root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3306]
1
[root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3307]
1
[root@zabbix ~]# zabbix_get -s 192.168.1.51 -k mysql-ping[3308]
1
7、server端web界面操作
創建自動發現規則,添加監控項原型,觸發器類型,圖形原型,可以參照系統已有的規則進行創建
為了簡化操作,直接導入做好的模板並為主機鏈接模板
成功鏈接模板后查看最新數據