您的位置 首页 java

zabbix告警媒介:短信篇

本文写的是 阿里云 短信服务+centos7.5+zabbix 5+ Python 3.10.6

zabbix告警媒介:短信篇

python 的升级参考

环境版本信息

操作系统

CentOS Linux release 7.5.1804 (Core)

cat /etc/redhat-release

zabbix _server

zabbix_server (Zabbix) 5.0.14

zabbix_server –version

python

Python 3.10.6

python –version

短信平台

阿里云-短信服务

一、版本信息

二、阿里云的相关配置

安装阿里云短信的步骤做

1、申请签名

2、申请模版

3、增加用于短信发送的用户

增加权限:

4、上面的全部通过之后,可以使用平台测试一下是否配置成功

我们这里也可以看到上面是有两个版本的SDK,我们后面其实就是使用这个示例进行简单的修改即可实现我们发送的短信的代码。

三、zabbix 后台短信代码编写

1、查看zabbix配置

cat /etc/zabbixzabbix_server.conf|egrep -v ‘^$|^#’

 Log File =/var/log/zabbix/zabbix_server.log
LogFileSize=0
 Pid File=/var/run/zabbix/zabbix_server.pid
 Socket Dir=/var/run/zabbix
DBName=xxx
DBUser=xxx
DBPassword=xxx
JavaGateway=xxx.xxx.xxx.xxx
JavaGatewayPort=10052
Start Java Pollers=50
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=128M
Timeout=4
 Alert ScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000  

显示命令存在目录为:/usr/lib/zabbix/alertscripts

2、编写python代码

cd /usr/lib/zabbix/alertscripts

两种方式的代码:

第一种原版SDK:

安装相关的SDK:

 pip install --upgrade setuptools -i  --trusted-host mirrors.aliyun.com 
pip install aliyun-python-sdk-dysmsapi==2.1.2 -i  --trusted-host mirrors.aliyun.com  

相关的参考代码:

cat sendSMS.py

 #!/usr/bin/env python3
#coding=utf-8
import sys
from aliyunsdkcore.client import  Acs Client
from aliyunsdkcore.acs_ Exception .exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkdysmsapi. Request .v20170525.SendSmsRequest import SendSmsRequest
credentials = AccessKeyCredential('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secret
# use STS Token
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-shenzhen', credential=credentials)
request = SendSmsRequest()
request.set_accept_format('json')
request.set_SignName("XXX") ##上面创建的阿里云前面
request.set_TemplateCode("XXX") ##上面创建的阿里云模版
request.set_PhoneNumbers("%s" %sys.argv[1]) ##这里为传入的参数,后面由zabbix传入
request.set_TemplateParam("{"e_message": "%s"}" %sys.argv[2]) ##这里为传入的参数,后面由zabbix传入,注意需与模版中的参数名保持一致
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))  

测试一下:

像这样就是成功的。

第二种升级版的SDK:

安装相关的SDK

  pip install alibabacloud_dysmsapi20170525==2.0.16 -i  --trusted-host mirrors.aliyun.com  

编写发送的脚本:

cat sendSMS2.py

 # -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import sys
from typing import List
from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@ static method
def create_client(
access_key_id: str,
access_key_secret: str,
) -> Dysmsapi20170525Client:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 您的 AccessKey ID,
access_key_id=access_key_id,
# 您的 AccessKey Secret,
access_key_secret=access_key_secret
)
# 访问的域名
config.endpoint = f'dysmsapi.aliyuncs.com'
return Dysmsapi20170525Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secret
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
sign_name="XXX", ##上面创建的阿里云签名
template_code='XXX', ##这里为传入的参数,后面由zabbix传入
phone_numbers=sys.argv[1], ##这里为传入的参数,后面由zabbix传入
template_param="{"e_message": "%s"}" %sys.argv[2] ##这里为传入的参数,后面由zabbix传入,注意需与模版中的参数名保持一致
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
client.send_sms_with_options(send_sms_request, runtime)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secret
send_sms_request = dysmsapi_20170525_models.SendSmsRequest(
sign_name="XXX", ##上面创建的阿里云签名
template_code='XXX', ##上面创建的阿里云模版
phone_numbers=sys.argv[1], ##这里为传入的参数,后面由zabbix传入
template_param="{"e_message": "%s"}" %sys.argv[2] ##这里为传入的参数,后面由zabbix传入,注意需与模版中的参数名保持一致
)
runtime = util_models.RuntimeOptions()
try:
# 复制代码运行请自行打印 API 的返回值
await client.send_sms_with_options_async(send_sms_request, runtime)
except Exception as error:
# 如有需要,请打印 error
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])  

测试一下:

zabbix告警媒介:短信篇

手机上收到的短信效果:

zabbix告警媒介:短信篇

四、zabbix平台配置

1、增加报警媒介类型

zabbix告警媒介:短信篇

zabbix告警媒介:短信篇

我这里配置实现有问题的时候告警。

2、用户增加报警媒介

我这里配置的是严重和灾难级别的告警才发短信,其他的不发。

zabbix告警媒介:短信篇

3、配置:动作

zabbix告警媒介:短信篇

zabbix告警媒介:短信篇

4、调整相关主机触发级的级别,比如我这边有个ngxin的监控,当ngxin停止时需告警

调整级别

zabbix告警媒介:短信篇

5、测试一下

关闭 nginx

 systemctl stop nginx  

zabbix告警

zabbix告警媒介:短信篇

短信

zabbix告警媒介:短信篇

至此完成全部的配置步骤,实现zabbix有严重、灾难级别的警告时发送短信告警。

如果有不清楚的欢迎留言问下,帮您看下什么问题。

如果觉得对您有用,欢迎转发、转载

文章来源:智云一二三科技

文章标题:zabbix告警媒介:短信篇

文章地址:https://www.zhihuclub.com/193070.shtml

关于作者: 智云科技

热门文章

网站地图