Zabbix--06主動模式和被動模式、低級自動發現、性能優化、


一、 Zabbix主動模式和被動模式

默認為被動模式:100個監控項要100個來回,要的時候才返回
主動模式:100個監控項1個回合,將所需要的100個打包,然后一次發過去,發過去之后,客戶端全部執行完再一次返回給服務端。

1.克隆模版

完全克隆原來被動模式的模版為主動模式

2.修改克隆后的模版為主動模式

3.修改監控主機關聯的模版為主動模式

4.修改客戶端配置文件並重啟

[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.conf        
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.1.61
ServerActive=10.0.1.61
Hostname=web01
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@web01 ~]# systemctl restart zabbix-agent.service 

5.查看最新數據

發現獲取數據的時間是一樣的

二、Zabbix低級自動發現

監控端口自動發現

1.查看系統自帶分區自動發現

系統自帶的自動發現會顯示紅字,比如自帶的磁盤分區發現規則

1.查看zabbbix所有的key過濾后展示

2.解析成json后的格式

3.過濾規則

實質上是從mount命令獲取的分區名和類型

但是我們zabbix顯示的並沒有這么多 是因為做了正則表達式過濾

而正則表達式是在管理里面配置的

4.使用zabbix_get獲取key 因為根據過濾規則,只發現了一個xfs的key,使用zabbix_get可以查看到這個key

2.查看系統自帶的網卡自動發現

1.查看網絡自動發現規則

2.過濾規則

2.命令行過濾

[root@m01 ~]# zabbix_agentd -p|grep net.if.discovery
net.if.discovery                              [s|{"data":[{"{#IFNAME}":"tun0"},{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]}]

3.查看自動添加的監控項
我們會發現添加了四個監控項
2個eth0
2個eth1

4.查看key的值

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k net.if.in[eth0]
2191453
[root@m01 ~]# zabbix_get -s 10.0.1.61 -k net.if.in[eth1]
7152

3.監控mysql多實例

[https://www.qstack.com.cn/archives/108.html](https://www.qstack.com.cn/archives/108.html)

1.復制並修改數據庫配置文件

[root@m01 ~]# cp /etc/my.cnf /etc/my3307.cnf
[root@m01 ~]# vim /etc/my3307.cnf 
[root@m01 ~]# cat /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@m01 ~]# cp /etc/my3307.cnf /etc/my3308.cnf
[root@m01 ~]# sed -i 's#3307#3308#g' /etc/my3308.cnf

2.創建數據目錄並初始化

[root@m01 ~]# mkdir /data/{3307,3308}
[root@m01 ~]# chown -R mysql.mysql /data/330*
[root@m01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
[root@m01 ~]# mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf

3.啟動多實例

[root@m01 ~]# mysqld_safe --defaults-file=/etc/my3307.cnf &
[root@m01 ~]# mysqld_safe --defaults-file=/etc/my3308.cnf &

4.檢查端口

[root@m01 ~]# netstat -lntup|grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2042/mysqld         
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      84790/mysqld        
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      85439/mysqld 

5.創建自動發現配置文件

[root@m01 ~]# vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
[root@m01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh

6.創建自動發現多實例腳本

[root@m01 ~]# cat /server/scripts/mysql_discovery.sh                                                
#!/bin/bash 
#mysql low-level discovery 
res=$(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'

7.測試自動發現腳本

[root@m01 ~]# bash /server/scripts/mysql_discovery.sh    
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

8.重啟zabbix-agent

[root@m01 ~]# systemctl restart zabbix-agent.service 

9.zabbix_get測試取key

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.discovery
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
{"data":[]}

這時我們發現取不出來並提示了個錯誤
原因是zabbix用戶不能使用netstat的-p參數
解決方法為給netstat命令添加s權限

[root@m01 ~]# which netstat 
/usr/bin/netstat
[root@m01 ~]# chmod u+s /usr/bin/netstat 

然后再次測試就發現可以取到值了

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3306"},{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"}]}

10.web頁面創建自動發現規則模版

創建模版

創建自動發現規則

設置過濾規則

創建過濾 規則

11.模仿zabbix自帶的mysql監控配置修改監控項

[root@m01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf    
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -uroot -p123456 -P $2 -N | awk '{print $$2}'
[root@m01 ~]# systemctl restart zabbix-agent.service

12.測試訪問監控項

[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.status[Uptime,3307]
23202
[root@m01 ~]# zabbix_get -s 10.0.1.61 -k mysql.status[Uptime,3308]
23204

13.web頁面添加監控項原型

監控項原型

12.web頁面設置主機關聯模版

主機關聯模版

13.查看是否已經自動添加成功

三、Zabbix 性能優化

1.監控數據分析

zabbix監控主機和監控項較少的時候,不需要優化
數據庫 200台主機 * 200個監控項 = 40000監控項/30秒 = 1333次寫入/每秒
寫多 讀少 

2.優化思路

1.mariadb 5.5 innodb 升級到mysql5.7 tokudb
2.去掉無用監控項,增加監控項的取值間隔,減少歷史數據的保存周期
3.被動模式改為主動模式
4.針對zabbix-server進程數量調優
5.針對zabbix-server緩存調優,誰的剩余內存少,就加大他的緩存

3.升級存儲引擎

TokuDB性能比InnoDB要好

實施步驟:

1.找一台機器安裝好mysql5.7
2.將mariadb的數據導出,然后替換sql文件里的存儲引擎為TokuDB
3.將替換之后的數據導入到mysql5.7
4.停掉mariadb
5.檢查測試

4.優化進程數

可以人為制造進程繁忙,把自動發現調整IP范圍為1-254

這個時候觀察會發現自動發現進程變得繁忙了

修改進程數

[root@zabbix-11 ~]# grep "^StartDiscoverers" /etc/zabbix/zabbix_server.conf 
StartDiscoverers=10
[root@zabbix-11 ~]# systemctl restart zabbix-server.service

調整之后發現進程不這么繁忙了

5.緩存調優

調整配置文件

[root@zabbix-11 ~]# grep "^Cache" /etc/zabbix/zabbix_server.conf 
CacheSize=128M

四、 zabbix高可用

思路:
2台zabbix-server使用keepavied做高可用
數據庫做主從復制
keepalived兩端都做backup角色,設置不搶占VIP
keepalived設置如果發生改變就將自身的從庫數據庫修改為主庫設置
然后另一台修復上線后,手動介入重新做主從同步,變成從庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM