zabbix告警媒介:短信篇

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

python的升级参考

centos7.6 升级python 2.7.5 到3.10.6

环境版本信息

操作系统

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 '^$|^#'

LogFile=/var/log/zabbix/zabbix_server.logLogFileSize=0PidFile=/var/run/zabbix/zabbix_server.pidSocketDir=/var/run/zabbixDBName=xxxDBUser=xxxDBPassword=xxxJavaGateway=xxx.xxx.xxx.xxxJavaGatewayPort=10052StartJavaPollers=50SNMPTrapperFile=/var/log/snmptrap/snmptrap.logCacheSize=128MTimeout=4AlertScriptsPath=/usr/lib/zabbix/alertscriptsExternalScripts=/usr/lib/zabbix/externalscriptsLogSlowQueries=3000

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

2、编写python代码

cd /usr/lib/zabbix/alertscripts

两种方式的代码:

第一种原版SDK:

安装相关的SDK:

pip install --upgrade setuptools -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com pip install aliyun-python-sdk-dysmsapi==2.1.2 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

相关的参考代码:

cat sendSMS.py

#!/usr/bin/env python3#coding=utf-8import sysfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkcore.auth.credentials import AccessKeyCredentialfrom aliyunsdkcore.auth.credentials import StsTokenCredentialfrom aliyunsdkdysmsapi.request.v20170525.SendSmsRequest import SendSmsRequestcredentials = AccessKeyCredential('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secret# use STS Token# credentials = StsTokenCredential('', '', '')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 http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

编写发送的脚本:

cat sendSMS2.py

# -*- coding: utf-8 -*-# This file is auto-generated, don't edit it. Thanks.import sysfrom typing import Listfrom alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Clientfrom alibabacloud_tea_openapi import models as open_api_modelsfrom alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_modelsfrom alibabacloud_tea_util import models as util_modelsfrom alibabacloud_tea_util.client import Client as UtilClientclass Sample:def __init__(self):pass@staticmethoddef 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)@staticmethoddef main(args: List[str],) -> None:client = Sample.create_client('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secretsend_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:# 如有需要,请打印 errorUtilClient.assert_as_string(error.message)@staticmethodasync def main_async(args: List[str],) -> None:client = Sample.create_client('access-key-id', 'access-key-secret') ##这里需要修改成上面创建的阿里云用户的key和secretsend_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:# 如有需要,请打印 errorUtilClient.assert_as_string(error.message)if __name__ == '__main__':Sample.main(sys.argv[1:])


测试一下:

手机上收到的短信效果:

四、zabbix平台配置

1、增加报警媒介类型

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

2、用户增加报警媒介

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

3、配置:动作

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

调整级别

5、测试一下

关闭nginx

systemctl stop nginx

zabbix告警

短信


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


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

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

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章