Zabbix 監(jiān)控多線路出口IP并通過飛書告警完整教程
一、方案概述
1.1 監(jiān)控原理
- 通過防火墻策略,讓不同域名走不同的出口線路
- Zabbix 定期訪問這些域名,獲取訪問時(shí)的出口IP
- 將獲取的IP與預(yù)設(shè)值比較,不一致時(shí)通過飛書發(fā)送告警
1.2 線路與域名對(duì)應(yīng)關(guān)系示例
| 線路編號(hào) | 域名 | 預(yù)設(shè)IP | 出口接口 |
|---|---|---|---|
| 線路1 | ifconfig.me | 203.0.113.10 | port2 |
| 線路2 | api.ipify.org | 203.0.113.20 | port3 |
| 線路3 | icanhazip.com | 203.0.113.30 | port4 |
| … | … | … | … |
二、環(huán)境準(zhǔn)備
2.1 前提條件
- Zabbix Server 7.4 已部署(Docker或物理機(jī))
- 已獲取飛書機(jī)器人 Webhook 地址
- Zabbix Server 能訪問外網(wǎng)(IP查詢服務(wù))
2.2 確認(rèn)Zabbix容器名稱
docker ps | grep zabbix
記錄Zabbix Server容器名稱(如 zabbix-server)
三、部署外部檢查腳本
3.1 進(jìn)入Zabbix Server容器
docker exec -it zabbix-server sh
3.2 創(chuàng)建腳本目錄并編寫腳本
# 創(chuàng)建目錄
mkdir -p /usr/lib/zabbix/externalscripts
# 創(chuàng)建腳本文件
cat > /usr/lib/zabbix/externalscripts/get_ip_by_domain.sh << 'EOF'
#!/bin/bash
# 通過指定的域名獲取公網(wǎng)出口IP
# 用法:get_ip_by_domain.sh <域名>
DOMAIN="$1"
TIMEOUT=5
if [ -z "$DOMAIN" ]; then
echo "ERROR: No domain provided"
exit 1
fi
# 使用curl訪問域名,提取IPv4地址
IP=$(curl -s -L -m $TIMEOUT "http://$DOMAIN" 2>/dev/null | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | head -1)
if [ -n "$IP" ]; then
echo "$IP"
exit 0
else
echo "ERROR: Failed to get IP from $DOMAIN"
exit 1
fi
EOF
# 賦予執(zhí)行權(quán)限
chmod +x /usr/lib/zabbix/externalscripts/get_ip_by_domain.sh
# 修改屬主
chown zabbix:zabbix /usr/lib/zabbix/externalscripts/get_ip_by_domain.sh
# 安裝curl(Alpine系統(tǒng))
apk add curl3.3 測(cè)試腳本
su -s /bin/sh -c "/usr/lib/zabbix/externalscripts/get_ip_by_domain.sh api.ipify.org" zabbix
應(yīng)返回一個(gè)公網(wǎng)IP地址。
3.4 退出容器
exit
四、創(chuàng)建監(jiān)控項(xiàng)
4.1 登錄Zabbix Web
訪問 http://你的Zabbix服務(wù)器IP:8080,使用 Admin/zabbix 登錄。
4.2 創(chuàng)建監(jiān)控項(xiàng)
- 進(jìn)入 配置 → 主機(jī),選擇目標(biāo)主機(jī)(如
hwipmonitor) - 點(diǎn)擊 監(jiān)控項(xiàng) → 創(chuàng)建監(jiān)控項(xiàng)
4.3 填寫監(jiān)控項(xiàng)信息
| 字段 | 填寫內(nèi)容 |
|---|---|
| 名稱 | WAN01 Exit IP (via api.ipify.org) |
| 類型 | 外部檢查 |
| 鍵值 | get_ip_by_domain.sh["api.ipify.org"] |
| 信息類型 | 文本 |
| 更新間隔 | 60m |
| 歷史記錄保留期 | 3d |
4.4 保存
點(diǎn)擊 添加 完成創(chuàng)建。
4.5 驗(yàn)證監(jiān)控項(xiàng)
- 進(jìn)入 監(jiān)控 → 最新數(shù)據(jù)
- 篩選主機(jī),查看監(jiān)控項(xiàng)是否有數(shù)據(jù)
- 狀態(tài)應(yīng)為 已啟用,且有IP值
五、創(chuàng)建觸發(fā)器
5.1 進(jìn)入觸發(fā)器創(chuàng)建
- 配置 → 主機(jī) → 選擇主機(jī) → 觸發(fā)器 → 創(chuàng)建觸發(fā)器
5.2 填寫觸發(fā)器信息
| 字段 | 填寫內(nèi)容 |
|---|---|
| 名稱 | WAN01 出口IP異常 (api.ipify.org) |
| 嚴(yán)重性 | 警告 |
| 描述 | 期望IP:103.248.229.101(填寫實(shí)際預(yù)設(shè)IP) |
| 表達(dá)式 | {hwipmonitor:get_ip_by_domain.sh["api.ipify.org"].last()}<>"103.248.229.101" |
5.3 表達(dá)式說明
{主機(jī)名:監(jiān)控項(xiàng)鍵值.last()}:獲取監(jiān)控項(xiàng)最新值<>"預(yù)設(shè)IP":不等于預(yù)設(shè)IP- 如需排除腳本錯(cuò)誤,可添加
and {監(jiān)控項(xiàng).str(ERROR)}=0
5.4 保存
點(diǎn)擊 添加 完成創(chuàng)建。
六、配置飛書媒介
6.1 進(jìn)入媒介類型配置
管理 → 報(bào)警媒介類型 → 創(chuàng)建媒介類型
6.2 填寫基本信息
| 字段 | 填寫內(nèi)容 |
|---|---|
| 名稱 | feishu |
| 類型 | Webhook |
6.3 添加參數(shù)
點(diǎn)擊 參數(shù) 標(biāo)簽頁,添加以下參數(shù):
| 名稱 | 值 |
|---|---|
Subject | {ALERT.SUBJECT} |
Message | {ALERT.MESSAGE} |
6.4 編寫腳本
在 腳本 框中輸入以下內(nèi)容(將Webhook地址替換為實(shí)際地址):
try {
var params = JSON.parse(value),
req = new HttpRequest(),
webhook_url = 'https://open.feishu.cn/open-apis/bot/v2/hook/你的完整Webhook地址',
msg = {
msg_type: "text",
content: {
text: params.Subject + "\n" + params.Message
}
},
resp;
req.addHeader("Content-Type: application/json");
resp = req.post(webhook_url, JSON.stringify(msg));
if (req.getStatus() != 200) {
throw "Response code: " + req.getStatus();
}
resp = JSON.parse(resp);
return JSON.stringify(resp);
} catch (error) {
throw "Failed with error: " + error;
}6.5 測(cè)試媒介
- 點(diǎn)擊 測(cè)試 按鈕
- 填寫測(cè)試內(nèi)容:
- Subject:
測(cè)試告警 - Message:
這是一條測(cè)試消息
- Subject:
- 點(diǎn)擊 測(cè)試
- 確認(rèn)飛書群收到測(cè)試消息
6.6 保存
點(diǎn)擊 添加 完成創(chuàng)建。
七、配置用戶媒介
7.1 進(jìn)入用戶配置
管理 → 用戶 → 點(diǎn)擊 Admin (Zabbix Administrator)
7.2 添加報(bào)警媒介
- 點(diǎn)擊 報(bào)警媒介 標(biāo)簽頁
- 點(diǎn)擊 添加
- 填寫:
- 類型:選擇
feishu - 收件人:填寫
飛書群(任意標(biāo)識(shí)) - 當(dāng)活動(dòng)時(shí):默認(rèn)
- 嚴(yán)重性:全選
- 啟用:勾選
- 類型:選擇
- 點(diǎn)擊 添加
7.3 保存
點(diǎn)擊 更新 保存用戶配置。
八、創(chuàng)建動(dòng)作
8.1 進(jìn)入動(dòng)作配置
配置 → 動(dòng)作 → 觸發(fā)器動(dòng)作 → 創(chuàng)建動(dòng)作
8.2 填寫基本信息
| 字段 | 填寫內(nèi)容 |
|---|---|
| 名稱 | 出口IP異常飛書告警 |
8.3 配置條件
點(diǎn)擊 條件 標(biāo)簽頁,添加:
- 類型:觸發(fā)器名稱
- 運(yùn)算符:包含
- 值:
出口IP異常
這樣所有名稱包含“出口IP異常”的觸發(fā)器都會(huì)觸發(fā)此動(dòng)作。
8.4 配置操作
點(diǎn)擊 操作 標(biāo)簽頁 → 新增:
| 字段 | 填寫內(nèi)容 |
|---|---|
| 操作類型 | 發(fā)送消息 |
| 默認(rèn)接收人 | 選擇 Admin (Zabbix Administrator) |
| 僅送到 | 選擇 feishu |
| 主題 | 告警:{TRIGGER.NAME} |
| 消息 | 主機(jī):{HOST.NAME}\n當(dāng)前IP:{ITEM.LASTVALUE}\n期望IP:{TRIGGER.DESCRIPTION}\n時(shí)間:{EVENT.DATE} {EVENT.TIME} |
| 自定義持續(xù)時(shí)間 | 0 |
| 僅當(dāng)問題出現(xiàn)時(shí)發(fā)送 | ? 勾選 |
8.5 配置恢復(fù)操作(可選)
點(diǎn)擊 新增 添加恢復(fù)操作:
| 字段 | 填寫內(nèi)容 |
|---|---|
| 操作類型 | 發(fā)送消息 |
| 默認(rèn)接收人 | 選擇 Admin |
| 僅送到 | feishu |
| 主題 | 恢復(fù):{TRIGGER.NAME} |
| 消息 | 主機(jī):{HOST.NAME}\n當(dāng)前IP:{ITEM.LASTVALUE}\n時(shí)間:{EVENT.DATE} {EVENT.TIME} |
| 自定義持續(xù)時(shí)間 | 0 |
| 僅當(dāng)問題恢復(fù)時(shí)發(fā)送 | ? 勾選 |
8.6 保存
點(diǎn)擊 添加 完成動(dòng)作創(chuàng)建。
九、測(cè)試驗(yàn)證
9.1 強(qiáng)制觸發(fā)測(cè)試
臨時(shí)修改觸發(fā)器表達(dá)式,強(qiáng)制觸發(fā)告警:
- 配置 → 主機(jī) → 選擇主機(jī) → 觸發(fā)器
- 找到目標(biāo)觸發(fā)器,點(diǎn)擊編輯
- 將表達(dá)式改為:
{hwipmonitor:get_ip_by_domain.sh["api.ipify.org"].last()}<>"1.2.3.4" - 保存
- 等待幾秒,進(jìn)入 監(jiān)控 → 問題,應(yīng)看到觸發(fā)器變?yōu)閱栴}狀態(tài)
- 進(jìn)入 報(bào)表 → 動(dòng)作日志,查看發(fā)送記錄
- 檢查飛書是否收到告警
9.2 恢復(fù)表達(dá)式
測(cè)試完成后,將表達(dá)式改回正確的預(yù)設(shè)IP。
9.3 驗(yàn)證飛書消息
飛書應(yīng)收到類似以下內(nèi)容的消息:
告警:WAN01 出口IP異常 (api.ipify.org) 主機(jī):hwipmonitor 當(dāng)前IP:103.248.229.101 期望IP:期望IP:103.248.229.101 時(shí)間:2026.03.30 17:04:23
十、批量配置其他線路
10.1 方法一:手動(dòng)創(chuàng)建
為每個(gè)域名重復(fù)以下操作:
- 創(chuàng)建監(jiān)控項(xiàng)(修改鍵值中的域名)
- 創(chuàng)建觸發(fā)器(修改預(yù)設(shè)IP和域名)
- 觸發(fā)器名稱格式:
WAN01 出口IP異常 (域名)
10.2 方法二:使用模板
- 創(chuàng)建一個(gè)模板,添加所有監(jiān)控項(xiàng)和觸發(fā)器
- 將模板鏈接到主機(jī)
10.3 方法三:使用Zabbix API(Python腳本)
#!/usr/bin/env python3
import csv
from zabbix_api import ZabbixAPI
# 配置
ZABBIX_URL = "http://localhost/zabbix"
USER = "Admin"
PASSWORD = "zabbix"
HOST_NAME = "hwipmonitor"
# 線路配置列表
configs = [
{"domain": "ifconfig.me", "ip": "203.0.113.10"},
{"domain": "api.ipify.org", "ip": "103.248.229.101"},
{"domain": "icanhazip.com", "ip": "203.0.113.30"},
# ... 添加更多
]
zapi = ZabbixAPI(ZABBIX_URL)
zapi.login(USER, PASSWORD)
# 獲取主機(jī)ID
hosts = zapi.host.get({"filter": {"host": HOST_NAME}})
host_id = hosts[0]["hostid"]
for config in configs:
domain = config["domain"]
preset_ip = config["ip"]
# 創(chuàng)建監(jiān)控項(xiàng)
item = zapi.item.create({
"name": f"WAN01 Exit IP (via {domain})",
"key_": f'get_ip_by_domain.sh["{domain}"]',
"hostid": host_id,
"type": 0, # 外部檢查
"value_type": 1, # 文本
"delay": "60m",
"history": "3d"
})
# 創(chuàng)建觸發(fā)器
trigger = zapi.trigger.create({
"description": f"WAN01 出口IP異常 ({domain})",
"expression": f'{{{HOST_NAME}:get_ip_by_domain.sh["{domain}"].last()}}<>"{preset_ip}"',
"priority": 2, # 警告
"comments": f"期望IP:{preset_ip}",
"status": 0
})
print(f"已創(chuàng)建: {domain} -> {preset_ip}")十一、常見問題排查
11.1 監(jiān)控項(xiàng)顯示“不支持”
可能原因:
- 腳本不存在或路徑錯(cuò)誤
- 腳本沒有執(zhí)行權(quán)限
- 缺少curl命令
解決方法:
# 檢查腳本是否存在 ls -l /usr/lib/zabbix/externalscripts/get_ip_by_domain.sh # 檢查curl是否安裝 which curl # 測(cè)試腳本 su -s /bin/sh -c "/usr/lib/zabbix/externalscripts/get_ip_by_domain.sh api.ipify.org" zabbix
11.2 飛書收不到消息
可能原因:
- Webhook地址錯(cuò)誤
- 飛書機(jī)器人安全設(shè)置(關(guān)鍵詞/IP白名單)
- 腳本中URL為空
解決方法:
- 在媒介類型中點(diǎn)擊測(cè)試,確認(rèn)能收到
- 檢查飛書機(jī)器人安全設(shè)置,添加關(guān)鍵詞“告警”
- 確認(rèn)腳本中Webhook地址正確
11.3 動(dòng)作日志顯示“No media defined for user”
解決方法:
- 進(jìn)入 管理 → 用戶,為Admin用戶添加feishu媒介
- 確認(rèn)媒介類型已啟用
11.4 觸發(fā)器表達(dá)式語法錯(cuò)誤
正確格式:
{主機(jī)名:監(jiān)控項(xiàng)鍵值.last()}<>"預(yù)設(shè)IP"
常見錯(cuò)誤:
- 缺少花括號(hào)
{} - IP未加雙引號(hào)
- 使用中文括號(hào)
11.5 查看Zabbix Server日志
# Docker環(huán)境 docker logs zabbix-server --tail 100 | grep -i error # 物理機(jī) tail -f /var/log/zabbix/zabbix_server.log
十二、總結(jié)
12.1 配置文件清單
| 文件/配置 | 位置 |
|---|---|
| 外部腳本 | /usr/lib/zabbix/externalscripts/get_ip_by_domain.sh |
| 監(jiān)控項(xiàng) | Zabbix Web → 配置 → 主機(jī) → 監(jiān)控項(xiàng) |
| 觸發(fā)器 | Zabbix Web → 配置 → 主機(jī) → 觸發(fā)器 |
| 媒介類型 | Zabbix Web → 管理 → 報(bào)警媒介類型 |
| 用戶媒介 | Zabbix Web → 管理 → 用戶 |
| 動(dòng)作 | Zabbix Web → 配置 → 動(dòng)作 |
12.2 關(guān)鍵宏說明
| 宏 | 說明 |
|---|---|
{HOST.NAME} | 主機(jī)名 |
{TRIGGER.NAME} | 觸發(fā)器名稱 |
{ITEM.LASTVALUE} | 監(jiān)控項(xiàng)最新值 |
{TRIGGER.DESCRIPTION} | 觸發(fā)器描述 |
{EVENT.DATE} | 事件日期 |
{EVENT.TIME} | 事件時(shí)間 |
{ALERT.SUBJECT} | 告警主題 |
{ALERT.MESSAGE} | 告警內(nèi)容 |
12.3 后續(xù)優(yōu)化建議
- 調(diào)整檢查頻率:根據(jù)線路重要性,可設(shè)置為15-30分鐘
- 添加期望IP顯示:在觸發(fā)器描述中填寫期望IP
- 配置告警重復(fù)間隔:如需重復(fù)告警,修改自定義持續(xù)時(shí)間
- 使用模板:將監(jiān)控項(xiàng)和觸發(fā)器放入模板,方便批量管理
- 監(jiān)控腳本健康:添加監(jiān)控項(xiàng)監(jiān)控腳本執(zhí)行狀態(tài)
至此,您已完成 Zabbix 多線路出口IP監(jiān)控與飛書告警的全部配置。如有任何問題,歡迎隨時(shí)交流!
到此這篇關(guān)于Zabbix 監(jiān)控多線路出口IP并通過飛書告警完整教程的文章就介紹到這了,更多相關(guān)Zabbix 監(jiān)控多線路出口IP內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Zabbix如何通過ssh監(jiān)控獲取網(wǎng)絡(luò)設(shè)備數(shù)據(jù)
這篇文章主要介紹了Zabbix如何通過ssh監(jiān)控獲取網(wǎng)絡(luò)設(shè)備數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Zabbix如何使用過濾器實(shí)現(xiàn)監(jiān)控
這篇文章主要介紹了Zabbix如何使用過濾器實(shí)現(xiàn)監(jiān)控,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
通過Zabbix監(jiān)控Oracle 19c數(shù)據(jù)庫的完整配置指南
本文將詳細(xì)介紹如何使用Zabbix配置Oracle 19c數(shù)據(jù)庫監(jiān)控,包括安裝、配置、問題排查等全過程,本指南適合新手獨(dú)立完成配置,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-12-12
CentOS 6.9 安裝 Zabbix 3.0 的詳細(xì)步驟
Zabbix 是一個(gè)基于 WEB 界面的,提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)開源解決方案,本文重點(diǎn)研究 Zabbix,使用它的目的是為了更好地監(jiān)控MySQL 數(shù)據(jù)庫服務(wù)器,并生成圖形報(bào)表,相較于 Nagios,Zabbix 在這方面功能更為強(qiáng)大,感興趣的朋友一起看看吧2025-04-04
Zabbix通過PSK共享密鑰實(shí)現(xiàn)Server和Agent的通信加密
這篇文章主要介紹了Zabbix通過PSK共享密鑰實(shí)現(xiàn)Server和Agent的通信加密,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
Zabbix?Timeout?設(shè)置不當(dāng)導(dǎo)致的問題及解決方案
這篇文章主要介紹了Zabbix?Timeout設(shè)置不當(dāng)導(dǎo)致的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
zabbix監(jiān)控Linux系統(tǒng)服務(wù)的流程
這篇文章主要介紹了zabbix監(jiān)控Linux系統(tǒng)服務(wù)的流程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
zabbix監(jiān)控4.4升級(jí)至5.0的詳細(xì)教程
這篇文章主要介紹了zabbix監(jiān)控4.4升級(jí)至5.0的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
基于zabbix實(shí)現(xiàn)監(jiān)控Jenkins過程詳解
這篇文章主要介紹了基于zabbix實(shí)現(xiàn)監(jiān)控Jenkins過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

