怎样在Zabbix中设置告警的接收方式?
美国、香港服务器
怎样在Zabbix中设置告警的接收方式?
07-12 来源:
在 Zabbix 中设置告警接收方式需要配置媒体类型(Media Types)和用户媒体(User Media),支持邮件、短信、微信、Slack 等多种方式。以下是详细步骤:
一、配置媒体类型(定义告警渠道)
媒体类型决定了 Zabbix 通过何种方式发送告警(如邮件、微信)。
1. 邮件告警配置
路径:管理 → 媒体类型 → 创建媒体类型
参数:
名称:邮件(自定义)
类型:邮件
SMTP 服务器:填写邮箱提供商的 SMTP 服务器(如smtp.qq.com)
SMTP 端口:25(非 SSL)或 465(SSL)
SMTP 安全连接:选择 “启用 SSL/TLS”(根据邮箱提供商要求)
SMTP 用户名 / 密码:发件邮箱的账号和密码
发件人地址:填写发件邮箱地址(如zabbix@example.com)
测试:配置完成后,点击 “测试” 发送测试邮件验证。
2. 微信告警配置(需企业微信)
准备企业微信应用:
登录企业微信管理后台 → 应用管理 → 创建应用 → 获取AgentID和Secret。
记录企业 ID(在 “我的企业” 页面查看)。
在 Zabbix 中添加微信媒体类型:
路径:管理 → 媒体类型 → 创建媒体类型
参数:
名称:微信(自定义)
类型:脚本
脚本名称:wechat.py(需先创建脚本)
脚本参数:
plaintext
{ALERT.SENDTO} # 接收人(企业微信账号)
{ALERT.SUBJECT} # 告警主题
{ALERT.MESSAGE} # 告警内容
创建微信发送脚本(保存为/usr/lib/zabbix/alertscripts/wechat.py):
python
运行
#!/usr/bin/env python3
import requests
import sys
import json
# 企业微信配置
CORP_ID = "your_corp_id" # 企业ID
SECRET = "your_agent_secret" # 应用Secret
AGENT_ID = "your_agent_id" # 应用AgentID
def get_token():
url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}"
response = requests.get(url).json()
return response["access_token"]
def send_message(token, to_user, subject, content):
url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}"
data = {
"touser": to_user,
"msgtype": "text",
"agentid": AGENT_ID,
"text": {"content": f"{subject}\n\n{content}"}
}
result = requests.post(url, data=json.dumps(data)).json()
return result
if __name__ == "__main__":
to_user = sys.argv[1] # 接收人(Zabbix中填写的企业微信账号)
subject = sys.argv[2] # 告警主题
content = sys.argv[3] # 告警内容
token = get_token()
send_message(token, to_user, subject, content)
权限设置:确保脚本可执行:chmod +x /usr/lib/zabbix/alertscripts/wechat.py。
二、关联用户与媒体类型
配置完媒体类型后,需要为用户分配接收方式。
1. 为用户添加媒体
路径:管理 → 用户 → 选择目标用户 → 媒体 → 添加
参数:
类型:选择已配置的媒体类型(如 “邮件”“微信”)
收件人:填写接收地址(如邮箱地址或企业微信账号)
当 severity 为:选择触发通知的告警级别(如 “警告” 及以上)
启用:勾选以激活该媒体类型
2. 设置默认接收方式(可选)
在用户的 “偏好设置” 中,设置默认的告警接收方式,确保在未指定时使用首选渠道。
三、配置动作(定义告警触发条件)
动作决定了在何种条件下触发告警,并使用已配置的媒体类型发送通知。
1. 创建动作
路径:配置 → 动作 → 事件源(触发器) → 创建动作
参数:
名称:资源异常告警(自定义)
条件:设置触发告警的条件(如 “触发器严重性>= 警告”)
2. 添加操作步骤
操作步骤:
持续时间:设置告警持续时间(如 1 小时)
操作类型:选择 “发送消息”
发送到用户:选择接收告警的用户或用户组
发送到媒体类型:选择使用的媒体类型(如同时使用邮件和微信)
四、测试告警配置
临时修改触发器阈值:
找到一个触发器(如 CPU 使用率),临时将阈值改为容易触发的值(如 10%)。
触发告警:
在被监控服务器上执行命令(如stress -c 4)提高 CPU 使用率,触发告警。
验证接收:
检查配置的接收渠道(邮箱、微信)是否收到告警信息。
恢复配置:
测试完成后,将触发器阈值改回正常值。
五、其他告警方式扩展
1. 短信告警
类型:选择 “脚本” 媒体类型,编写调用短信 API 的脚本(如阿里云短信、腾讯云短信)。
脚本示例(以阿里云短信为例):
python
运行
#!/usr/bin/env python3
import json
import sys
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkdysmsapi.request.v20170525.SendSmsRequest import SendSmsRequest
# 阿里云配置
ACCESS_KEY_ID = "your_access_key_id"
ACCESS_KEY_SECRET = "your_access_key_secret"
SIGN_NAME = "短信签名"
TEMPLATE_CODE = "短信模板ID"
def send_sms(phone_number, message):
client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, "cn-hangzhou")
request = SendSmsRequest()
request.set_accept_format("json")
request.set_phone_numbers(phone_number)
request.set_sign_name(SIGN_NAME)
request.set_template_code(TEMPLATE_CODE)
request.set_template_param(json.dumps({"message": message}))
response = client.do_action_with_exception(request)
return response
if __name__ == "__main__":
phone_number = sys.argv[1] # 接收手机号
message = sys.argv[3] # 告警内容(Zabbix传递的第3个参数)
send_sms(phone_number, message)
2. 集成第三方工具(如 Slack、钉钉)
类型:选择 “Webhook” 媒体类型,调用第三方 API 发送消息。
示例:钉钉机器人 Webhook 配置:
URL:https://oapi.dingtalk.com/robot/send?access_token=你的机器人Token
请求体:
json
{
"msgtype": "text",
"text": {
"content": "{ALERT.SUBJECT}\n{ALERT.MESSAGE}"
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快