一、概念
1.核心概念
- Zabbix是一個CS(服務端/客戶端)架構的服務
- Zabbix-Agent獲取數據-->發送給-->Zabbix-Server服務端--- >數據會被存放在數據庫 <--- Zabbix Web 頁面展示數據
2.部署流程
- 部署ngx+php環境并測試
- 部署數據庫 mariadb 10.5及以上 然后進行配置
- 編譯安裝zabbix-server服務端及后續配置
- 部署前端代碼代碼進行訪問
- web訪問
- 配置客戶端
3.官網資料
Zabbix 文檔
二、部署
1.部署ngx+php環境并測試
-
配置ngx yum源并安裝
?#配置yum源vim /etc/yum.repos.d/nginx.repo?[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true?#安裝nginx-1.22.0-1.el7.ngx.x86_64 版本yum -y install nginx-1.22.0-1.el7.ngx.x86_64
-
配置php并安裝
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repoyum -y install epel-releasecurl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo#webtatic源,一個web服務的源#安裝php7及其它依賴軟件rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm ?rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm ? ?yum install php72w-cli php72w-fpm php72w-gd php72w-mbstring php72w-bcmath php72w-xml php72w-ldap php72w-mysqlnd -y?rpm -qa |egrep 'nginx|php'
-
nginx配置
[root@m03-zbx ~]# vim /etc/nginx/conf.d/zbx.liux.cn.conf?server {listen 80;server_name zbx.liux.cn;root /app/code/zbx;location / {index index.php;}location ~ \.php$ {fastcgi_pass ?127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}}??nginx -tsystemctl enable nginxsystemctl start nginx
-
php配置
?#修改用戶名sed -ri '/^(user|group)/s#apache#nginx#g' /etc/php-fpm.d/www.conf egrep '^(user|group)' /etc/php-fpm.d/www.conf
-
創建目錄并測試
mkdir -p /app/code/zbxcd /app/code/zbx?[root@m03-zbx zbx]# vim info.php?<?phpphpinfo();?>?#啟動systemctl enable nginx php-fpmsystemctl start nginx php-fpm?#hosts解析10.0.0.63 zbx.liux.cn
2.部署數據庫
- zabbix 6.0 不支持 mariadb 5.5(默認源中的mariadb)安裝mariadb 10.5
- 配置maraidb yum源并安裝
vim /etc/yum.repos.d/mariadb.repo[mariadb]
name = MariaDB
baseurl = https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enable = 1#安裝
yum -y install mariadb-server
[root@m03-zbx zbx]# rpm -qa |grep -i mariadb
MariaDB-common-10.5.19-1.el7.centos.x86_64
MariaDB-server-10.5.19-1.el7.centos.x86_64
MariaDB-compat-10.5.19-1.el7.centos.x86_64
MariaDB-client-10.5.19-1.el7.centos.x86_64
- 啟動
systemctl enable mariadb
systemctl start mariadb
-
初始化數據庫
?[root@Zabbix web]# mysql_secure_installationEnter current password for root (enter for none): ? #回車Switch to unix_socket authentication [Y/n] n ? ? ? #是否更改套接字Change the root password? [Y/n] y ? ? ? #改root密碼Remove anonymous users? [Y/n] y ? ? ?#清除匿名用戶Disallow root login remotely? [Y/n] y ? #是否允許root遠程登錄Remove test database and access to it? [Y/n] y ? ?#清除測試數據庫Reload privilege tables now? [Y/n] y ? ?#刷新表權限
-
創建庫和用戶
?#1. 創建數據庫要指定字符集create database zabbix charset utf8 collate utf8_bin;?#2.創建zabbix用戶grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix' ;#如果數據庫與zbx,php不在一起#grant all on zabbix.* to 'zabbix'@'172.16.1.%' identified by 'zabbix' ;
-
向數據庫中導入數據 表,數據 ? 注意導入的順序
?tar xf zabbix-6.0.9.tar.gz cd zabbix-6.0.9/database/mysql/?mysql -uroot -p12366 zabbix <schema.sql mysql -uroot -p12366 zabbix <images.sql mysql -uroot -p12366 zabbix <data.sql mysql -uroot -p12366 zabbix <double.sql mysql -uroot -p12366 zabbix <history_pk_prepare.sql ??mysql -uroot -p12366 -e 'show tables from zabbix;' |wc -l
3. 編譯安裝zabbix-server服務端
-
準備編譯安裝zabbix-server
?#安裝依賴yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel ? libcurl-devel?#進行配置 在源代碼目錄并且ls 可以看見configure文件#--sysconfdir 指定配置文件目錄#--enable-server 服務端?./configure --sysconfdir=/etc/zabbix/ --enable-server --with-mysql \--with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib --with-libpthread \--with-libevent --with-openssl --with-ldap --with-libcurl --with-libpcre?#根據提示執行make install make install?# 檢查是否成功echo $?
-
修改zbx服務端配置文件
vim /etc/zabbix/zabbix_server.confgrep -n '^[a-Z]' /etc/zabbix/zabbix_server.confListenPort=10051LogFile=/tmp/zabbix_server.logDBHost=localhostDBName=zabbixDBUser=zabbixDBPassword=zabbixTimeout=4LogSlowQueries=3000StatsAllowedIP=127.0.0.1
-
啟動zabbix服務端
?#添加個虛擬用戶useradd -s /sbin/nologin -M zabbix?#啟動zbx服務端zabbix_server#檢查端口ss -lntup|grep 10051#檢查進程ps -ef |grep zabbix
-
書寫systemctl 啟動配置文件
vim /usr/lib/systemd/system/zabbix-server.service?[Unit]Description=Zabbix Server with MySQL DBAfter=syslog.target network.target?[Service]Type=simpleExecStart=/usr/local/sbin/zabbix_server -fUser=zabbix?[Install]WantedBy=multi-user.target?# 加載配置文件systemctl daemon-reload?#關閉手動啟動的zbx serverpkill zabbix_server?# 檢查是否關閉成功ps -ef |grep zabbix?#啟動與檢查systemctl enable zabbix-serversystemctl start zabbix-serversystemctl status zabbix-server
4.部署前端代碼進行訪問
#ui/* 安裝包zabbix-6.0.9里面
cp -r ui/* /app/code/zbx
chown -R nginx.nginx /app/code/zbx
5.web訪問
10.0.0.63 zbx.liux.cnhttp://zbx.liux.cn/
-
選擇簡體中文 下一步
-
解決報錯
vim /etc/php.ini
max_execution_time = 300
max_input_time = 300
post_max_size = 16M#重啟php,刷新頁面,進入下一步
systemctl restart php-fpm.service
-
輸入php連接數據庫的信息,進行下一步
-
輸入網站名稱和選擇時區(上海),下一步,繼續下一步
-
輸入用戶名和密碼,進入zbx Admin / zabbix
6.安裝zbx客戶端
yum -y install https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.9-release1.el7.x86_64.rpm#配置客戶端(服務端和客戶端在同一臺服務器時不需要配置)
vim /etc/zabbix/zabbix_agent2.conf
Server=172.16.1.63
#啟動
systemctl enable zabbix-agent2.service
systemctl start zabbix-agent2.service
-
web頁面配置
7 解決zbx中文亂碼的問題
-
上傳一個中文的ttf字體替換zabbix自用的字體
cd /app/code/zbx/assets/fonts
rm -rf DejaVuSans.ttf
mv STKAITI.TTF DejaVuSans.ttf
三、自定義監控
1.自定義監控-客戶端
-
linux:通過命令、腳本取出對應的值
-
linux:根據zbx要求按照格式,書寫配置文件,創建鍵值
-
linux:重啟客戶端,客戶端測試鍵值是否可用 zabbix_agent2 -t
判斷nginx是否存活
#1.客戶端寫命令
ss -lntup |grep -wc 80#2.創建鍵值、重啟
UserParameter=key,cmd
UserParameter=固定寫法,表示要自定義鍵值
key表示鍵值名字,命名最好就是 單詞+"." (點)
cmd表示命令或腳本vim /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=web.ngx.80,ss -lntup |grep -wc 80#3.重啟
systemctl restart zabbix-agent2.service#4.客戶端本地測試
zabbix_agent2 -t web.ngx.80
2.自定義監控-服務端
-
linux:服務端測試鍵值是否可用 zabbix_get
-
web頁面:鍵值與監控項關聯
-
web頁面: 測試
-
web頁面:添加圖形
-
web頁面:添加觸發器(報警)
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-get-6.0.9-release1.el7.x86_64.rpm#手動測試
#zabbix_get 向客戶端要指定鍵值的數據 -s客戶端ip地址 -p客戶端端口號(默認10050) -k指定鍵值
zabbix_get -s 172.16.1.7 -p 10050 -k web.ngx.80#web頁面創建監控項、觸發器
3.自定義監控-帶參數案例
-
客戶端配置
#實現取出指定用戶的登錄的ip地址
lastlog |grep root |awk '{print $3}'#書寫鍵值key
vim /etc/zabbix/zabbix_agent2.d/login.conf
UserParameter=user.login.check[*],lastlog |grep "$1“ |awk '{print $$3}'systemctl restart zabbix-agent2.service
zabbix_agent2 -t user.login.check[root]#如果使用自定義鍵值傳參,awk取列的時候要使用$$列
-
服務端配置
[root@m03-zbx ~]# zabbix_get -s 172.16.1.7 -k user.login.check[root]
10.0.0.1
-
服務端配置監控項和觸發器 web頁面觸發器做對比
四、常用鍵值與觸發器函數
zbx客戶端鍵值:1 平臺支持的監控項 (zabbix.com)
1.常用鍵值
鍵值 | 說明 |
---|---|
agent.hostname | 主機名 獲取的是客戶端配置文件中指定的主機名 |
system.hostname | 主機名 系統的主機名 類似于hostname |
agent.ping | 服務端與客戶端是否通暢 通1 不通非1 |
net.if.in[if,] | 網絡接口上傳(進入)流量統計。返回 整數 if表示網卡名字 可以忽略 |
net.if.out[if,] | 流出流量統計。返回整數 |
proc.num[,,,,] | 進程數。返回整數 name進程名字 user用戶 state進程狀態 cmdline進程對應的命令 |
net.tcp.port[,port] | 檢查是否能建立 TCP 連接到指定端口 返回 0 - 不能連接;1 - 可以連接 |
#過濾僵尸進程數量 state 寫為 zomb
zabbix_get -s 172.16.1.7 -p 10050 -k proc.num[,,zomb]zabbix_get -s 172.16.1.7 -k net.if.in[eth0,]
zabbix_get -s 172.16.1.7 -k proc.num[nginx]
zabbix_get -s 172.16.1.7 -k net.tcp.port[,80]
2.觸發器函數
-
寫在觸發器表達式中.用于設置報警條件.
-
觸發器函數要結合鍵值(監控項)
函數 | 說明 |
---|---|
last() | 最近值 (最新的值),取出最近一些值 |
nodata() | 是否有數據 |
diff() | 是否發生變化 一般配合md5check() |
avg() | 平均值 |
min() | 最小值 |
max() | 最大值 |
-
分析案例: 目的是用來檢查/etc/passwd的變化情況,間接檢查是否有用戶增加或刪除(/etc/passwd has been changed)
#倒數第1個 /etc/passwd 的md5值
last(/web01/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
#倒數第2個 /etc/passwd 的md5值
last(/web01/vfs.file.cksum[/etc/passwd,sha256],#2)#兩個不相等,則報警
-
書寫觸發器案例 swap
-
條件1:swap總大小大于0
-
條件2:swap當前使用的大小大于0(沒有直接可以使用的監控項,這里調整為當前swap空閑率小于100)
-
#條件swap總大小大于0
last(/web01/system.swap.size[,total])>0
and
#swap空間空閑率小于100
last(/web01/system.swap.size[,pfree])<100
五、zabbix自動發現與自動注冊
1.自動發現
? ? 服務端主動去找是否有新的主機,有則添加進來并關聯模板
-
客戶端(zbx agent),配置文件
-
web配置自動發現規則. web頁面-->配置-->自動發現
-
web配置自動發現的動作 . web頁面-->配置-->動作-->Discovery actions
-
添加主機
-
添加到主機群組: Linux servers
-
鏈接到模板: Linux by Zabbix agent
-
鏈接到模板: all_sys_common
-
啟用主機
-
2.自動注冊
客戶端主動去找服務端提交自己的信息,請求向服務端注冊
-
關閉自動發現規則、動作
-
zbx客戶端配置文件
-
web頁面添加動作 web頁面-->配置-->動作-->Autoregistration actions
2.1?zbx客戶端修改配置文件
-
客戶端主動把自己的信息,提供給服務端
客戶端配置 | 說明 |
---|---|
Server=172.16.1.63 | 服務端地址 |
ServerActive=172.16.1.63 | 主動模式下的服務端ip地址 |
#Hostname=web01 | 當前主機名,這個可以注釋掉或使用ansible配置。建議注釋使用下面的內容,自動獲取主機名 |
HostnameItem=system.hostname | 通過后面指定的鍵值獲取主機名 ? Hostname和HostnameItem2選1 Item監控項、鍵值 |
HostMetadataItem=system.uname | 主機的 元數據 鍵值,類似于自動發現中的system.uname判斷存活和獲取主機信息 |
[root@web01 ~]# egrep '^[z-Z]' /etc/zabbix/zabbix_agent2.conf
PidFile=/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=172.16.1.63
ServerActive=172.16.1.63
HostnameItem=system.hostname
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf#主要修改下面四個
Server=172.16.1.63
ServerActive=172.16.1.63
HostnameItem=system.hostname
HostMetadataItem=system.uname
2.2?zbx服務端頁面添加動作-->自動注冊
六、監控告警
? ? ? 可以通過個人郵件、企業微信、OA系統告警通知,以下介紹個人郵件告警
1.設置流程
-
開啟個人郵箱 smtp功能 獲取授權碼
-
發件人配置:zabbix web頁面 管理-->報警媒介類型
-
收件人配置:zabbix web頁面 user settings-->profile-->報警媒介
-
發件條件: zabbix web頁面 配置-->動作-->trigger actions
2.設置告警模板
#163郵箱授權碼
POCENDSPAHJISVPRsmtp.163.com#添加告警郵件內容: Messages template
#故障告警信息
主題: ? 故障名稱: {EVENT.NAME}消息:
故障始于 時間: {EVENT.TIME} 日期: {EVENT.DATE}
故障名稱: {EVENT.NAME}
故障主機: {HOST.NAME}
嚴重程度: {EVENT.SEVERITY}
額外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
觸發器地址: {TRIGGER.URL}#信息類型是: Problem recov 故障解決的時候
主題: 故障解決 in {EVENT.DURATION}: {EVENT.NAME}
消息:
故障已經解決 時間: {EVENT.RECOVERY.TIME} 日期:
{EVENT.RECOVERY.DATE}
故障名稱: {EVENT.NAME}
故障持續時間: {EVENT.DURATION}
故障主機: {HOST.NAME}
故障級別: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
3.頁面配置告警
4.告警案例
? ?檢查用戶是否從堡壘機登錄
#檢查腳本
vim /server/scripts/check_baolei_login.sh########################################################
# File Name:/server/scripts/check_baolei_login.sh
# Version:V1.0
# Author:liux
# Desc:檢查是否從堡壘機登錄
########################################################ip=$1login_user_cnt=`who |wc -l`
login_no_baolei_cnt=`who |grep -wv 10.0.0.1|wc -l`#如果登錄用戶數不為0 并且 登錄的ip不是堡壘機的ip
if [ $login_user_cnt -gt 0 -a $login_no_baolei_cnt -gt 0 ];thenecho 0
elseecho 1
fi#監控腳本
vim /etc/zabbix/zabbix_agent2.d/login.confUserParameter=user.login.check[*],lastlog |grep '$1' |awk '{print $$3}'
UserParameter=user.check.bl.login[*],sh /server/scripts/check_baolei_login.sh "$1"#重啟zabbix
systemctl restart zabbix-agent2.service
#客戶端測試
zabbix_agent2 -t user.check.bl.login[10.0.0.1]
#服務端測試
zabbix_get -s 172.16.1.7 -k user.check.bl.login[10.0.0.1]
-
頁面配置監控項、觸發器
七、zbx性能優化
-
高并發需要對MySQL進行拆分
-
zabbix-agent被動上傳修改為主動上報模式
-
地區較多情況盡量使用proxy代理模式
-
系統自帶監控項優化:精簡無用的監控項,適當增加取值間隔,減少數據的保留周期
-
進程優化(服務端)
-
緩存優化(服務端)
????