網站首頁 編程語言 正文
一、Zabbix 簡介
Zabbix 可以用來監控各種網絡參數,來保證服務器和系統的安全運行。并且 Zabbix 還提供了靈活的通知機制,以此來讓系統管理員快速定位/解決存在的各種問題。是一個基于 Web 界面提供的分布式系統監控以及網絡監控功能的企業級開源解決方案。
1.監控功能
- 主機性能監控、網絡設備性能監控、數據庫性能監控、多種告警方式、詳細的報表圖。
- 監控主機,我們可以使用 Zabbix 提供的 Agent 軟件,來監控 Linux、Windows、FreeBSD 等系統。
- 監控網絡設備,我們可以通過 Zabbix 支持的 SNMP 協議來進行監控(SSH 協議不常用)
1)監控對象
- 設備:服務器,路由器,交換機。
- 軟件:OS,網絡,應用程序。
2)主機性能指標監控
- 故障監控:宕機,服務不可用,主機不可達。
2.Zabbix 工作原理
首先,我們需要在被監控的主機上安裝 Agent 軟件,用來收集當前服務器的各項數據信息,并發送給監控端,當監控端接收到 Agent 發送過來的信息后,會將數據存儲到數據庫中,接著通過 Web 界面來將數據在前端頁面上進行展示和繪圖。
這里 Agent 收集數據分為 主動和被動 兩種模式:
- 主動: 客戶端通過連接監控端的 10051 端口,來主動的將收集到的信息推送給監控端。
- 被動: 監控端定時的通過連接客戶端的 10050 端口進行通信,來收集客戶端的各項數據信息。
Zabbix 默認使用的模式為被動模式,也就是說當我們需要監控的主機數量較多時,可能會影響到監控端的性能。因為監控端會定時的通過連接客戶端的端口進行數據收集,所以我們可以 選擇性的配置部分主機為主動模式,來減少監控端的性能壓力。
3.Zabbix 組件
組件 | 作用 |
---|---|
Zabbix Server |
用于接收 Agent 發送過來的信息,所有的配置、數據統計、數據操作都是由它組織進行 |
Database Storage |
用于存儲所有的配置信息以及收集的數據信息 |
Web Interface |
Zabbix 的 GUI 接口,可以用于界面展示(一般和 Server 運行在用一臺主機上) |
Agent |
用于采集本地的數據信息,也就是所謂的被監控端 |
Proxy |
可選組件,通常用于分布式監控架構;相當于是一個代理的 Server,用來收集 Agent 部分數據,并轉發給監控端 |
4.Zabbix 進程
- Sender:用于發送數據給 Server 或者 Proxy,通常用于耗時比較長的檢查;
- Get:Zabbix 命令,主要用于排查使用,可以在監控端上執行,來獲取被監控端的信息;
- Agent:客戶端守護進程,用于收集當前主機的數據信息,如:CPU 負載、內存的使用情況等;
- Proxy:代理守護進程,相當于是一個中轉站,可以將收集到的數據信息 主動/被動 的提交到監控端上;
- Server:監控端守護進程,用于接收 Agent Get Sender Proxy Java_Gateway 提供的數據。
因為 Zabbix 并不能直接監控Java 應用,所以在 Zabbix 2.0 后推出 Java_Gateway
代理進程,使我們可以監控 Java 應用。
二、使用 Zabbix 配置自定義監控項
- 我們下面采用的是
docker-compose
方式安裝,物理安裝可以看我前面寫的這篇文章:傳送門
1.安裝 Zabbix
1)安裝 Docker
[root@Zabbix ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@Zabbix ~]# yum -y install epel-release [root@Zabbix ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 [root@Zabbix ~]# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo [root@Zabbix ~]# yum -y install docker-ce-19.03.12 docker-ce-cli-19.03.12 [root@Zabbix ~]# systemctl enable docker --now
2)安裝 Docker-Compose
[root@Zabbix ~]# wget "https://github.com/docker/compose/releases/download/v2.3.2/docker-compose-$(uname -s)-$(uname -m)" -O /usr/local/bin/docker-compose [root@Zabbix ~]# chmod +x /usr/local/bin/docker-compose [root@Zabbix ~]# docker-compose --version
3)安裝 Agent
[root@Zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-agent-5.4.8-1.el7.x86_64.rpm [root@Zabbix ~]# egrep -v '^$|#' zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=127.0.0.1 ServerActive=127.0.0.1 Hostname=Zabbix server Include=/etc/zabbix/zabbix_agentd.d/*.conf [root@Zabbix ~]# systemctl enable zabbix-agent --now
4)安裝 Zabbix
[root@Zabbix ~]# mkdir -p /app/zabbix [root@Zabbix ~]# cd /app/zabbix/ [root@Zabbix zabbix]# cat <<END > docker-compose.yml version: "3" services: mysql-server: image: mysql:5.7 ports: - "3306:3306" volumes: - "/app/mysql:/var/lib/mysql" # 配置數據卷 (防止監控數據丟失) environment: MYSQL_ROOT_PASSWORD: 123123 TZ: Asia/Shanghai command: --character-set-server=utf8 --collation-server=utf8_bin restart: always zabbix-server: image: zabbix/zabbix-server-mysql:5.4.8-centos environment: DB_SERVER_HOST: 127.0.0.1 DB_SERVER_PORT: 3306 MYSQL_DATABASE: zabbix MYSQL_USER: root MYSQL_PASSWORD: 123123 TZ: Asia/Shanghai depends_on: - mysql-server restart: always network_mode: "host" # 使用主機網絡 zabbix-web: image: zabbix/zabbix-web-nginx-mysql:5.4.8-centos ports: - "8000:8080" # Zabbix WebUI 映射端口 volumes: # 當在 Web 界面配置成中文后,監控界面會出現亂碼 - "./simkai.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf" environment: DB_SERVER_HOST: mysql-server DB_SERVER_PORT: 3306 MYSQL_DATABASE: zabbix MYSQL_USER: root MYSQL_PASSWORD: 123123 TZ: Asia/Shanghai ZBX_SERVER_HOST: 192.168.1.1 depends_on: - mysql-server - zabbix-server restart: always END [root@Zabbix zabbix]# docker-compose up -d [root@Zabbix zabbix]# docker-compose ps
-
simkai.ttf
字體,你們可以在自己電腦上的這個C:\Windows\Fonts
路徑找到。
5)驗證:http://192.168.1.1:8000
(賬號:Admin/zabbix
)
- 界面上出現:
zabbix server is not running: the information displayed may not be current
報錯; - 原因可能是因為我們
docker-compose
文件中的ZBX_SERVER_HOST
變量配置的值不是 Zabbix Server 的 IP 地址導致的。
我上面報錯是為了讓你們看下效果,如果你們出現如上配置,按照我的配置修改即可。
配置中文
2.開啟自定義監控項
[root@Zabbix ~]# echo "UnsafeUserParameters=1" >> /etc/zabbix/zabbix_agentd.conf
3.編寫 Nginx 自定義監控腳本
[root@Zabbix ~]# yum -y install nginx [root@Zabbix ~]# cat <<END > /etc/nginx/conf.d/status.conf server { listen 80; server_name 127.0.0.1; location /status { stub_status on; allow 127.0.0.1; allow 192.168.1.0/24; deny all; } } END
1)編寫自定義監控腳本
[root@Zabbix ~]# mkdir /etc/zabbix/scripts [root@Zabbix ~]# vim /etc/zabbix/scripts/nginx_status.sh #!/bin/bash HOST="127.0.0.1" PORT="80" # 監控 Nginx 進程是否存在 function Ping { /sbin/pidof nginx | wc -l } # 監控 Nginx 狀態信息 function Active { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Active" | awk '{print $NF}' } function Reading { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Reading" | awk '{print $2}' } function Writing { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Writing" | awk '{print $4}' } function Waiting { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | grep "Waiting" | awk '{print $6}' } function Server { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $1}' } function Accepts { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $2}' } function Requests { /usr/bin/curl "http://$HOST:$PORT/status" 2> /dev/null | awk NR==3 | awk '{print $3}' } # 執行 function $1 [root@Zabbix ~]# chmod +x /etc/zabbix/scripts/nginx_status.sh
2)定義監控腳本
[root@Zabbix ~]# cat <<"END" > /etc/zabbix/zabbix_agentd.d/nginx_status.conf UserParameter=nginx.status[*],/etc/zabbix/scripts/nginx_status.sh $1 END [root@Zabbix ~]# systemctl restart zabbix-agent
3)驗證
[root@Zabbix ~]# docker exec -it zabbix-zabbix-server-1 /bin/bash
創建模板
創建應用集
創建監控項
因為在我們的監控腳本中,一共定義了 8 個監控項,所以我們上面也要創建 8 個監控項,重復上面操作,創建出對應的即可。
給我們的監控項創建圖形
將 Nginx 模板加入到主機中
查看監控圖
其實 Zabbix 的自定義監控項就是由 key/value
的形式組成。即,我們只需要把要監控的數據定義成一個 value
,key
里面的值就是我們想要監控的數據,那么也就是說,當我們定時的查找這個 key
對應的值,便可以得到監控數據。
原文鏈接:https://blog.csdn.net/weixin_46902396/article/details/124016806
相關推薦
- 2022-07-12 linux中刪除指定文件以外的其它所有文件
- 2022-07-19 Python?assert斷言聲明,遇到錯誤則立即返回問題_python
- 2022-07-27 Python中的協程(Coroutine)操作模塊(greenlet、gevent)_python
- 2022-11-23 python人工智能使用RepVgg實現圖像分類示例詳解_python
- 2022-04-04 Element ui NavMenu 導航菜單 template中的內容不顯示
- 2022-03-25 如何使用postman(postman的使用方法詳解)
- 2022-04-12 安裝zsh&oh-my-zsh(沒有root權限)
- 2022-09-19 ASP.NET?Core模仿中間件方式實現列表過濾功能_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支