zabbix課程大綱
zabbix課程大綱1:什么是監(jiān)控冰垄?2:常見的linux監(jiān)控命令3:使用shell腳本來監(jiān)控服務(wù)器4:zabbix的基礎(chǔ)服務(wù)架構(gòu)5:zabbix生產(chǎn)環(huán)境安裝6:監(jiān)控一臺(tái)服務(wù)器主機(jī)7:自定義監(jiān)控項(xiàng)8:自定義觸發(fā)器9:微信報(bào)警10:自定義圖形和grafana出圖11:自定義監(jiān)控模板12: zabbix 監(jiān)控角度總結(jié)13: web網(wǎng)站的可用性監(jiān)測14: 使用percona 插件監(jiān)控mysql15:snmp監(jiān)控window和Linux16:zabbix自動(dòng)發(fā)現(xiàn)和自動(dòng)注冊(主動(dòng))17:zabbix-agent主動(dòng)和被動(dòng)的區(qū)別18:zabbix版本升級(jí)19:zabbix分布式監(jiān)控proxy20:zabbix監(jiān)控jvm原理21:zabbix低級(jí)自動(dòng)發(fā)現(xiàn)a:什么是低級(jí)自動(dòng)發(fā)現(xiàn)(low level discovery)b:為什么要用低級(jí)自動(dòng)發(fā)現(xiàn)c:zabbix模板自帶的低級(jí)自動(dòng)發(fā)現(xiàn)有哪些?d:增加一個(gè)監(jiān)控項(xiàng)原型e:創(chuàng)建一個(gè)低級(jí)自動(dòng)發(fā)現(xiàn)規(guī)則22:zabbix性能優(yōu)化23:zabbix api
1:什么是監(jiān)控?
監(jiān)控:安防的監(jiān)控 看監(jiān)控幔虏,事后追責(zé)
linux監(jiān)控: 事前預(yù)警进泼,數(shù)據(jù)分析
2:常見的linux監(jiān)控命令
cpu
top
htop
uptime
vmstat
內(nèi)存
free
磁盤
df
iotop
網(wǎng)卡
iftop #查看ip地址占用流量
nethogs #查看進(jìn)程占用流量
系統(tǒng)進(jìn)程
ps
pstree #以樹狀的形式查看進(jìn)程
系統(tǒng)日志 ELK
3:使用shell腳本來監(jiān)控服務(wù)器
shell+crontab適合服務(wù)器數(shù)量少的場景
#!/bin/bash
?
avai_mem=`free -m|awk '/^Mem/{print $NF}'`
?
if [ $avai_mem -lt 100 ];then
?
echo "可用內(nèi)存過低撵儿,當(dāng)前內(nèi)存是:$avai_mem" >>/tmp/monitor_mem.log
echo "可用內(nèi)存過低渤闷,當(dāng)前內(nèi)存是:$avai_mem"|mail -s "服務(wù)可用內(nèi)存低" 296917342@qq.com
fi
定時(shí)任務(wù): * * * * * cmd
4:zabbix的基礎(chǔ)服務(wù)架構(gòu)
5:zabbix生產(chǎn)環(huán)境安裝
#安裝zabbix前提,關(guān)閉selinux
?
1:配置zabbix的yum源
#下載zabbix-release
wget http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
#安裝zabbix-release
rpm -ivh zabbix-release-4.0-1.el7.noarch.rpm
#將官方倉庫地址替換為清華倉庫地址
sed -i 's#http://repo.zabbix.com#https://mirror.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
?
2:安裝zabbix服務(wù)端和zabbix-web前端
yum install zabbix-server-mysql zabbix-web-mysql -y
?
3:安裝mariadb含潘,創(chuàng)建zabbix庫饲做,授權(quán)zabbix用戶
yum install mariadb-server -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
先回車
再n
然后一路y
?
mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
?
導(dǎo)入zabbix表結(jié)構(gòu)和初始數(shù)據(jù)
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p123456 zabbix
?
檢查zabbix庫是否導(dǎo)入成功
mysql -uroot zabbix -e 'show tables'
?
4:配置啟動(dòng)zabbix-server
vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
?
啟動(dòng)zabbix-server
systemctl start zabbix-server
systemctl enable zabbix-server
?
檢查:
netstat -lntup|grep 10051
?
5:修改Zabbix前端的PHP配置,并啟動(dòng)httpd
vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
?
systemctl start httpd
systemctl enable httpd
?
6:前端zabbix-web的安裝
瀏覽器:http://10.0.0.71/zabbix
?
后期修改zabbix數(shù)據(jù)庫密碼的時(shí)候,需要修改的配置文件:
/etc/zabbix/web/zabbix.conf.php
?
http://10.0.0.71/zabbix/zabbix.php
登錄的賬號(hào)密碼;
Admin
zabbix
6:監(jiān)控一臺(tái)服務(wù)器主機(jī)
監(jiān)控zabbix-server自己
yum install zabbix-agent.x86_64 -y
systemctl enable zabbix-agent.service
systemctl start zabbix-agent.service
使用zabbix-agent監(jiān)控其他主機(jī)(10.0.0.8)
wget https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.16-1.el7.x86_64.rpm
rpm -ivh zabbix-agent-4.0.16-1.el7.x86_64.rpm
vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.71
systemctl enable zabbix-agent.service
systemctl start zabbix-agent.service
7:自定義監(jiān)控項(xiàng)
已監(jiān)控硬盤的tps值為例
a: 命令行取值
iostat|awk '/^sda/{print $2}'
b:修改zabbix-agent配置文件
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=tps,iostat|awk '/^sda/{print $2}'
?
systemctl restart zabbix-agent.service
c: 在web界面上添加監(jiān)控項(xiàng)
8:自定義觸發(fā)器
觸發(fā)器的作用遏弱,實(shí)現(xiàn)報(bào)警
觸發(fā)器的方法:
diff() 比較兩次取到的值
last() 最新值
avg(5m) 平均5分鐘盆均,改值都大于>1
max(5m) 最大值
min(5m) 最小值
nodate(5m) 沒有收到數(shù)據(jù)報(bào)警
9:微信報(bào)警
郵件報(bào)警
1:配置發(fā)件人
2:配置收件人
3:啟動(dòng)報(bào)警發(fā)消息的動(dòng)作
微信報(bào)警
#上傳weixin.py的腳本
python weixin.py
yum install python-pip -y
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
?
mv weixin.py /usr/lib/zabbix/alertscripts
chmod +x weixin.py
配置報(bào)警媒介
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
配置收件人
重新觸發(fā)報(bào)警
#定制報(bào)警內(nèi)容
服務(wù)器:{HOST.NAME}發(fā)生: {TRIGGER.NAME}故障!
{
告警主機(jī):{HOST.NAME}
告警地址:{HOST.IP}
監(jiān)控項(xiàng)目:{ITEM.NAME}
監(jiān)控取值:{ITEM.LASTVALUE}
告警等級(jí):{TRIGGER.SEVERITY}
當(dāng)前狀態(tài):{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警時(shí)間:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
}
10:自定義圖形和grafana出圖
解決zabbix默認(rèn)圖形亂碼問題
cd /usr/share/zabbix/assets/fonts/
#上傳一個(gè)中文的ttf字體
\mv simkai.ttf graphfont.ttf
a:安裝grafana
wget https://mirror.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.5.2-1.x86_64.rpm
yum localinstall grafana-6.5.2-1.x86_64.rpm -y
systemctl start grafana-server.service
b:grafana的主要內(nèi)容
插件: zabbix的插件
#安裝zabbix插件
grafana-cli plugins install alexanderzobnin-zabbix-app
service grafana-server restart
數(shù)據(jù)源:
登錄http://10.0.0.71:3000/login(默認(rèn)admin:admin)
?
dashboard:
11:自定義監(jiān)控模板
使用其他人分享的zabbix模板
a:導(dǎo)入模板(測試模板的兼容性)
b:把zabbix-agent的自定義key的配置文件放到/etc/zabbix/zabbix_agentd.d
c:如果有取值腳本,將取值腳本放在對應(yīng)的目錄
d:手動(dòng)執(zhí)行腳本測試取值(使用root身份執(zhí)行)
e:使用zabbix_get測試取值(使用zabbix身份執(zhí)行)
f:目標(biāo)主機(jī)監(jiān)控關(guān)聯(lián)模板
自定義模板(監(jiān)控tcp 11種狀態(tài))
ESTABLISHED
SYN_SENT
SYN_RECV
FIN_WAIT1
FIN_WAIT2
TIME_WAIT
CLOSE
CLOSE_WAIT
LAST_ACK
LISTEN
CLOSING
略
12: zabbix 監(jiān)控角度總結(jié)
服務(wù)器硬件(cpu溫度漱逸,主板溫度,功率,風(fēng)扇的轉(zhuǎn)速泪姨,硬盤的健康狀態(tài)) ipmi芯片 遠(yuǎn)程管理控制卡idrac,ilo饰抒,imm
交換機(jī)路由器: snmp協(xié)議
?
操作系統(tǒng) (cpu肮砾,內(nèi)存,硬盤袋坑,網(wǎng)卡仗处,系統(tǒng)進(jìn)程,日志) zabbix linux模板
?
應(yīng)用程序 nginx枣宫,mysql婆誓,redis,k8s-master 自定義模板(網(wǎng)上現(xiàn)有的模板)
?
業(yè)務(wù)層面 業(yè)務(wù)訪問速度也颤,流量(pv旷档,uv,ip)歇拆,活躍用戶日活,周活范咨,月活故觅,成單量,交易額
?
日志監(jiān)控 ELK
13: web網(wǎng)站的可用性監(jiān)測
14: 使用percona 插件監(jiān)控mysql
下載插件
wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
安裝插件
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
15:snmp監(jiān)控window和Linux
snmp監(jiān)控:simple network manager protocol
交換機(jī)渠啊,路由器输吏,打印機(jī) 開啟snmp,打開snmp服務(wù)端
snmp協(xié)議三個(gè)版本
v1
v2c
v3
使用snmp監(jiān)控linux
#linux上面snmp服務(wù)端替蛉,守護(hù)進(jìn)程
yum install net-snmp -y
vim /etc/snmp/snmpd.conf
com2sec notConfigUser default oldboy
view systemview included .1
systemctl start snmpd
systemctl enable snmpd
netstat -lntup
?
#zabbix就是snmp客戶端 oid
yum install net-snmp-utils.x86_64 -y
snmpwalk -c oldboy -v 2c 10.0.0.7 .1.3.6.1.2.1.25.2.2.0
16:zabbix自動(dòng)發(fā)現(xiàn)和自動(dòng)注冊(主動(dòng))
·a:自動(dòng)發(fā)現(xiàn)
配置規(guī)則
自動(dòng)注冊:
配置agent客戶端
vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.71
ServerActive=10.0.0.71
Hostname=10.0.0.8
HostMetadata=web
17:zabbix-agent主動(dòng)和被動(dòng)的區(qū)別
18:zabbix版本升級(jí)
a:新版本可以提高性能
b:模板不兼容問題
19:zabbix分布式監(jiān)控proxy
#web01上安裝zabbix-proxy
yum install zabbix-proxy-mysql mariadb-server -y
#mysql中創(chuàng)庫贯溅,授權(quán)
mysql> 略
cd /usr/share/doc/zabbix-proxy-mysql-4.0.16/
gzip -d schema.sql.gz
mysql zabbix_proxy -uzabbix -p123456 < schema.sql
mysql zabbix_proxy -uzabbix -p123456 -e 'show tables;'
vim /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=10.0.0.71
ServerPort=10051
Hostname=sh_proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=123456
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=1
?
systemctl restart zabbix-proxy.service
20:zabbix監(jiān)控jvm原理
#開啟tomcat的遠(yuǎn)程監(jiān)控
vim /app/apache-tomcat-8.0.27/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=10.0.0.100 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
1578725642492
21:zabbix低級(jí)自動(dòng)發(fā)現(xiàn)
a:什么是低級(jí)自動(dòng)發(fā)現(xiàn)(low level discovery)
低級(jí)自動(dòng)發(fā)現(xiàn)(LLD)提供了一種在計(jì)算機(jī)上為不同實(shí)體自動(dòng)創(chuàng)建監(jiān)控項(xiàng)拄氯,觸發(fā)器和圖形的方法。
b:為什么要用低級(jí)自動(dòng)發(fā)現(xiàn)
低級(jí)自動(dòng)發(fā)現(xiàn)特別適合用于監(jiān)控那些有規(guī)律它浅,又有差異的監(jiān)控對象译柏。例如A主機(jī)有3個(gè)掛載分區(qū),B主機(jī)有4個(gè)掛載分區(qū)姐霍,c主機(jī)有5個(gè)掛載分區(qū)鄙麦,每個(gè)分區(qū)掛載目錄還不一樣,現(xiàn)在要求镊折,監(jiān)控每一個(gè)分區(qū)的磁盤總?cè)萘浚S嗳萘浚褂萌萘可咀常琤lock剩余百分比灼卢,inode使用百分比,這時(shí)候使用普通的zabbix模板根本無法監(jiān)控
c:zabbix模板自帶的低級(jí)自動(dòng)發(fā)現(xiàn)有哪些赃泡?
d:增加一個(gè)監(jiān)控項(xiàng)原型
增加監(jiān)控項(xiàng)原型1:
增加監(jiān)控項(xiàng)原型2:
自定義監(jiān)控項(xiàng)原型
#修改agent配置文件
[root@hdss7-11 ~]# cat /etc/zabbix/zabbix_agentd.d/net.conf
UserParameter=net.if.mac[*],ifconfig $1|awk 'NR==4{print $$2}'
#zabbix-get測試取值
[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.11 -k net.if.mac[eth0]
fa:16:3e:f1:36:29
1573745441492
效果展示:
e:創(chuàng)建一個(gè)低級(jí)自動(dòng)發(fā)現(xiàn)規(guī)則
第一個(gè)特殊key:定義低級(jí)自動(dòng)發(fā)現(xiàn)規(guī)則寒波,輸出格式為json:例如:{"data":[{"{#IFNAME}":"eth0"},{"{#IFNAME}":"eth1"},{"{#IFNAME}":"lo"}]}
第二個(gè)key: 監(jiān)控項(xiàng)原型,取值
第一步:修改agent配置文件
#agent配置文件
[root@k8s-node-2 ~]# cat /etc/zabbix/zabbix_agentd.d/discovery_container.conf
UserParameter=discovery_container,/bin/bash /opt/discovery_container.sh
UserParameter=container_mem_per[*],/usr/bin/docker stats --no-stream |grep "$1"|awk '{print $$8}'|tr -d '%'
低級(jí)自動(dòng)發(fā)現(xiàn)腳本
#!/bin/bash
port=($(/usr/bin/docker ps -a|grep -v "CONTAINER ID"|awk '{print $NF}'))
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '\t {\n'
printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '\t {\n'
printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'
第二步:測試取值
[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.17 -k discovery_container
{
"data":[
{
"{#CONTAINERNAME}":"7a4552bf6b07"},
{
"{#CONTAINERNAME}":"4081845226ee"},
{
"{#CONTAINERNAME}":"9d73c4fc6eb4"},
{
"{#CONTAINERNAME}":"7c7aadff9e11"},
{
"{#CONTAINERNAME}":"bbf5e3e231e0"}
]
}
?
[root@k8s-zabbix ~]# zabbix_get -s 10.4.7.17 -k container_mem_per[bbf5e3e231e0]
0.12
第三步:web界面創(chuàng)建規(guī)則和監(jiān)控項(xiàng)原型
效果展示:
22:zabbix性能優(yōu)化
1)針對mysql,寫多讀少 mariadb 5.5 innodb 升級(jí) mysql 5.7 tokudb 2)去掉無用監(jiān)控項(xiàng),增加監(jiān)控項(xiàng)的取值間隔,減少歷史數(shù)據(jù)保存周期 3)把被動(dòng)模式修改為主動(dòng)模式,增加zabbix-proxy 4)針對于zabbix-server進(jìn)程調(diào)優(yōu),誰忙,就加大它的進(jìn)程數(shù)量 5)針對于zabbix-server緩存調(diào)優(yōu),誰的剩余內(nèi)存少,就加大它的緩存值 6)針對zabbix 歷史數(shù)據(jù)和趨勢圖的表,進(jìn)行周期性分表( 分表)
23:zabbix api
api:application interface
zabbix集成到其他的平臺(tái)急迂,把zabbix二次開發(fā)
調(diào)用api影所,發(fā)起一個(gè)http請求
#獲取認(rèn)證
curl -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://10.0.0.71/zabbix/api_jsonrpc.php
?
{"jsonrpc":"2.0","result":"5fce40fb14005e696d26873c88b83465","id":1}
#創(chuàng)建主機(jī)
curl -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "oldboy",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "10.0.0.8",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "15"
}
],
"templates": [
{
"templateid": "10272"
},
{
"templateid": "10001"
}
]
},
"auth": "5fce40fb14005e696d26873c88b83465",
"id": 1
}
' http://10.0.0.71/zabbix/api_jsonrpc.php
curl -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10295"
],
"auth": "5fce40fb14005e696d26873c88b83465",
"id": 1
}
' http://10.0.0.71/zabbix/api_jsonrpc.php