使用 Docker 安裝 Zabbix,並配置自定義監控項

哈哈哈hh發表於2022-04-13

映象下載、域名解析、時間同步請點選  阿里雲開源映象站

一、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 
[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 \

[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 "(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 
[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)

file

  • 介面上出現:zabbix server is not running: the information displayed may not be current 報錯;
  • 原因可能是因為我們 docker-compose 檔案中的 ZBX_SERVER_HOST 變數配置的值不是 Zabbix Server 的 IP 地址導致的。

我上面報錯是為了讓你們看下效果,如果你們出現如上配置,按照我的配置修改即可。

配置中文

file

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

file

建立模板

file

建立應用集

file

建立監控項

file

因為在我們的監控指令碼中,一共定義了 8 個監控項,所以我們上面也要建立 8 個監控項,重複上面操作,建立出對應的即可。

file

給我們的監控項建立圖形

file

將 Nginx 模板加入到主機中

file

檢視監控圖

file

其實 Zabbix 的自定義監控項就是由 key/value 的形式組成。即,我們只需要把要監控的資料定義成一個 value,key 裡面的值就是我們想要監控的資料,那麼也就是說,當我們定時的查詢這個 key 對應的值,便可以得到監控資料。

本文轉自:https://blog.csdn.net/weixin_46902396/article/details/124016806


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2886831/,如需轉載,請註明出處,否則將追究法律責任。

相關文章