zabbix企業級的分散式開源監控解決方案 v5.0 LTS

AlexG 發表於 2021-06-02

zabbix簡介

Zabbix 是由 Alexei Vladishev 開發的一種網路監視、管理系統,基於 Server-Client 架構。可用於監視各種網路服務、伺服器和網路機器等狀態。並設定自定義指令碼,做到一定的自恢復功能

Zabbix 作為企業級分散式監控系統的優點:分散式監控,支援 node 和 proxy 分散式模式;自動化註冊,根據規則,自動註冊主機到監控平臺,自動新增監控模板;支援 agentd、snmp、ipmi 和 jmx 等很多通訊方式

服務模組

zabbix-server 提供資料處理
zabbix web GUI 提供web展示
zabbix Database 提供資料儲存
zabbix-agent 被監控端安裝的模組,上報資料到zabbix-server中
SNMP: 支援各類常見的網路裝置

  1. zabbix server:負責接收agent傳送的報告資訊的核心元件,所有配置、統計資料及運算元據都由它組織進行;
  2. database storage:專用於儲存所有配置資訊,以及由zabbix收集的資料;
  3. web interface:zabbix的GUI介面;
  4. roxy:可選元件,常用於監控節點很多的分散式環境中,代理server收集部分資料轉發到server,可以減輕server的壓力;
  5. agent:部署在被監控的主機上,負責收集主機本地資料如cpu、記憶體、資料庫等資料發往server端或proxy端;

客戶端守護程式

此程式收集客戶端資料,例如cpu負載、記憶體、硬碟使用情況等。

zabbix_get zabbix工具,單獨使用的命令,通常在server或者proxy端執行獲取遠端客戶端資訊的命令。通常使用者排錯。例如在server端獲取不到客戶端的記憶體資料,我們可以使用zabbix_get獲取客戶端的內容的方式來做故障排查。

zabbix_sender

zabbix工具,用於傳送資料給server或者proxy,通常用於耗時比較長的檢查。很多檢查非常耗時間,導致zabbix超時。於是我們在指令碼執行完畢之後,使用sender主動提交資料。

zabbix_server

zabbix服務端守護程式。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的資料最終都是提交到server

備註:當然不是資料都是主動提交給zabbix_server,也有的是server主動去取資料。

zabbix_proxy

zabbix代理守護程式。功能類似server,唯一不同的是它只是一箇中轉站,它需要把收集到的資料提交/被提交到server裡。為什麼要用代理?代理是做什麼的?賣個關子,請繼續關注運維生存時間zabbix教程系列。

zabbix_java_gateway

zabbix2.0之後引入的一個功能。顧名思義:Java閘道器,類似agentd,但是隻用於Java方面。需要特別注意的是,它只能主動去獲取資料,而不能被動獲取資料。它的資料最終會給到server或者proxy。

監控流程

agentd需要安裝到被監控的主機上,它負責定期收集各項資料,併傳送到zabbix server端,zabbix server將資料儲存到資料庫中,zabbix web根據資料在前端進行展現和繪圖。這裡agentd收集資料分為主動和被動兩種模式:

主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的資料提交給server/proxy

被動:server向agent請求獲取監控項的資料,agent返回資料。

功能拆解

  1. zabbix服務搭建
  2. 監控告警外發
  3. 自定義監控指令碼
  4. 自定義執行觸發指令碼
  5. 配置Grafana頁面顯示
  6. 主機批量發現

zabbix使用者手冊 https://www.zabbix.com/documentation/5.0/zh/manual

安裝 zabbix 5.0 LTS

參考官網 zabbix 5.0.12-1.el7

image

# env --> CentOS Linux release 7.9.2009 (Core) mininal install

# 1  Install Zabbix repository
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all

# 2 Install Zabbix server and agent
yum -y install zabbix-server-mysql zabbix-agent

# 3 Install Zabbix frontend (5.0版本要求高版本的php)
## 3.1 enable zabbix-frontend repository
yum install centos-release-scl -y
sed -i 11cenabled=1 /etc/yum.repos.d/zabbix.repo
## 3.2 Install Zabbix frontend packages
yum -y install zabbix-web-mysql-scl zabbix-nginx-conf-scl
# 4 初始化資料庫
# docker run -d  --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /data/mysql:/var/lib/mysql --restart=always mysql:5.7.34
create database zabbix character set utf8 collate utf8_bin;
create user [email protected]'192.168.1.%' identified by '123456';
grant all privileges on zabbix.* to [email protected]'192.168.1.%';

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -h192.168.1.113 -p zabbix

# 5 為Zabbix server配置資料庫
# sed -i.bak /\#\ DBPassword=/aDBPassword=123456 /etc/zabbix/zabbix_server.conf
cat >  /etc/zabbix/zabbix_server.conf << eof
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=192.168.1.113
DBName=zabbix
DBUser=zabbix
DBPassword=123456
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
eof

# 6 為Zabbix前端配置PHP
sed -i.bak /\;date.timezone\ =/adate.timezone=Asia/Shanghai /etc/opt/rh/rh-php72/php.ini
## 6.1配置nginx server
sed -n 1,3p /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
server {
        listen          80;
        server_name     192.168.1.113;
# 6.2 配置php使用者與時區
sed -i.bak /listen.acl_users/c'listen.acl_users = apache,nginx' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
echo 'php_value[date.timezone] = Asia/Shanghai' >> /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
## cat /etc/zabbix/web/zabbix.conf.php

# 7 啟動Zabbix server和agent程式
systemctl enable --now zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

# 8 連線Zabbix前端 [email protected]
http://192.168.1.113

zabbix-server相關優化

1. 字型漢化

對於以上環境和場景的安裝,zabbix的漢化仍然會有亂碼現象,重新載入自定義字型

#1. 上傳字型
Windows控制皮膚 -- 字型 -- simkai.ttf字型 -- 上simkai.ttf傳字型到 /usr/share/fonts/dejavu/目錄中
cat /var/lib/alternatives/zabbix-web-font
#2. 重新連線字型
ln -sf /usr/share/fonts/dejavu/simkai.ttf /etc/alternatives/zabbix-web-font
#3. 驗證

image

安裝zabbix agent

使用二進位制包安裝

# 下載與解壓包
wget https://www.zabbix.com/cn/download_agents?version=5.0+LTS&release=5.0.12&os=Linux&os_version=3.0&hardware=amd64&encryption=No+encryption&packaging=Archive&show_legacy=0 -P /tmp
mkdir /usr/local/zabbix-agent
tar -xf  zabbix_agent-5.0.12-linux-3.0-amd64-static.tar.gz -C /usr/local/zabbix-agent
useradd zabbix -s /sbin/nologin

# 配置
cat > /usr/local/zabbix-agent/conf/zabbix_agentd.conf << eof
# Passive checks related #被動檢查相關配置
Server=192.168.1.113 #指向當前zabbix server
# Option: ListenPort
#ListenPort=10050 #監聽埠
# Option: StartAgents
StartAgents=3 #被動狀態時預設啟動的例項數(程式數),為0不監聽任何埠
# Option: Hostname
Hostname=192.168.1.103  #區分大小寫且在zabbix server唯一的值
LogFile=/tmp/zabbix_agentd.log
# PidFile=/tmp/zabbix_agentd.pid
eof

# 啟動
echo '/usr/local/zabbix-agent/sbin/zabbix_agentd -c /usr/local/zabbix-agent/conf/zabbix_agentd.conf' >> /etc/rc.local
. /etc/rc.local

# server新增主機
配置 -- 主機 -- 新增主機 -- 模板關聯

使用包安裝

https://repo.zabbix.com/zabbix/

yum -y install https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.12-1.el7.x86_64.rpm

cat > /etc/zabbix/zabbix_agentd.conf << eof
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.113
ServerActive=192.168.1.113
Hostname=192.168.1.107
Include=/etc/zabbix/zabbix_agentd.d/*.conf
eof

systemctl enable --now zabbix-agent

PS