Zabbix短信Python脚本

介绍

Zabbix是一种广泛使用的开源网络监控解决方案,它可以监控各种网络设备和服务器,并提供实时的性能和可用性数据。有时,当监控项达到特定条件时,我们可能需要通过短信通知来及时了解问题的发生。本文将介绍如何使用Python编写一个Zabbix短信通知脚本。

准备工作

在开始编写脚本之前,我们需要准备以下内容:

  1. Zabbix服务器:确保您已经安装和配置了Zabbix服务器,并将需要监控的设备添加到系统中。

  2. Zabbix API:您需要获取Zabbix API的访问权限,以便通过API与Zabbix服务器进行交互。您可以在Zabbix用户界面中创建一个新的API访问令牌。

  3. 短信服务提供商:您需要选择一个可以提供短信通知服务的短信服务提供商,并在其网站上注册一个帐户。这些提供商通常提供API来发送短信。

  4. Python环境:确保您已经安装了Python,并安装了必要的第三方库。我们将使用requests库来发送HTTP请求。

编写脚本

首先,我们需要导入所需的库:

import requests
import json

然后,我们需要定义一些常量,包括Zabbix服务器的URL、API访问令牌和短信服务提供商的API密钥等:

ZABBIX_URL = 'https://your-zabbix-server/api_jsonrpc.php'
ZABBIX_TOKEN = 'your-zabbix-api-token'
SMS_API_KEY = 'your-sms-api-key'

接下来,我们可以编写一个函数来发送Zabbix短信通知。该函数将接收一个消息参数,并将其发送到指定的手机号码:

def send_sms(message, phone_number):
    url = '
    headers = {'Content-Type': 'application/json'}
    data = {
        'api_key': SMS_API_KEY,
        'message': message,
        'phone_number': phone_number
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        print('SMS sent successfully!')
    else:
        print('Failed to send SMS:', response.text)

在定义完发送短信的函数后,我们可以编写一个函数来获取Zabbix中的所有触发器,并检查它们是否已触发。如果触发器已触发,则发送短信通知:

def check_triggers():
    headers = {'Content-Type': 'application/json'}
    data = {
        'jsonrpc': '2.0',
        'method': 'trigger.get',
        'params': {
            'output': ['triggerid', 'description', 'value'],
            'filter': {'value': 1},
            'expandExpression': True,
            'expandDescription': True
        },
        'auth': ZABBIX_TOKEN,
        'id': 1
    }
    response = requests.post(ZABBIX_URL, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        triggers = response.json().get('result', [])
        for trigger in triggers:
            message = f"Trigger '{trigger['description']}' is triggered!"
            send_sms(message, '+1234567890')
    else:
        print('Failed to get triggers:', response.text)

最后,我们可以编写一个无限循环来定期检查Zabbix中的触发器,并发送短信通知:

import time

while True:
    check_triggers()
    time.sleep(60)  # 每60秒检查一次

甘特图

下面是一个使用mermaid语法标识的甘特图示例,显示了脚本的工作流程:

gantt
    title Zabbix短信通知脚本工作流程

    section 准备工作
    获取Zabbix API访问令牌: done, 2022-01-01, 1d
    注册短信服务提供商帐户: done, 2022-01-02, 1d
    安装Python和必要的库: done, 2022-01-03, 1d

    section 编写脚本