zabbix告警短信推送

  • 前言
  • zabbix安装部署
    • 安装zabbix-server、zabbix-agent
      • 启动一个空的MySQL服务器实例
      • 启动Zabbix Java gateway实例
      • 启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例
      • 启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联
    • zabbix agent安装部署
      • 配置安装agent
      • 启动zabbix agent
      • 配置监控agent主机
  • zabbix告警脚本配置
    • 创建告警脚本
    • 配置报警媒介
  • 短信推送

前言

萌新⊙▽⊙无聊记录一下这几天都干了啥,分享一些可能要用到的,共同学习

zabbix安装部署

docker安装以及dockerGUI管理工具配置

https://www.cnblogs.com/myzony/p/9071210.html

zabbix api提供的docker镜像安装部署

https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers

安装zabbix-server、zabbix-agent

启动一个空的MySQL服务器实例

mysql版本:5.7.28

docker run --name mysql-server -t \                              -e MYSQL_DATABASE="zabbix" \                     # 数据库名-e MYSQL_USER="zabbix" \                           # 数据库用户名-e MYSQL_PASSWORD="zabbix#2019" \                    # 数据库上述用户名密码-e MYSQL_ROOT_PASSWORD="root#2019" \             # 数据库root密码-p 3306:3306 \                                       # 开放端口-d mysql:5.7                                      # mysql镜像版本

启动Zabbix Java gateway实例

docker run --name zabbix-java-gateway -t \-p 10052:10052 \                                   # 开放端口-d zabbix/zabbix-java-gateway:latest

启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例

docker run --name zabbix-server-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix#2019" \-e MYSQL_ROOT_PASSWORD="root#2019" \             # 与之前mysql-server一致-v /etc/localtime:/etc/localtime:ro \                -v /data/docker/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \  -v /data/docker/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \-v /home/weihu/logs:/usr/lib/zabbix/ \              # 共享文件-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \--link mysql-server:mysql \--link zabbix-java-gateway:zabbix-java-gateway \-p 10051:10051 \-d zabbix/zabbix-server-mysql:latest
/usr/lib/zabbix/alertscripts → zabbix脚本文件存放位置(可通过zabbix配置文件zabbix_server.conf更改)
共享文件 -v 本地文件路径:docker容器内文件路径

启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联

docker run --name zabbix-web-nginx-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix#2019" \-e MYSQL_ROOT_PASSWORD="root#2019" \--link mysql-server:mysql \--link zabbix-server-mysql:zabbix-server \-p 80:80 \-d zabbix/zabbix-web-nginx-mysql:latest

zabbix agent安装部署

我使用的是安装包安装
zabbix-3.0.2.tar.gz

配置安装agent

# 解压压缩文件
tar -xzvf zabbix-3.0.2.tar.gz
# 编译安装zabbix agent
cd zabbix-3.0.2
./configure --prefix=/home/weihu/zabbix/configure --enable-agent
make install
# 更改配置文件
cd /home/weihu/zabbix/configure/etc
vi zabbix_agent.conf

我的配置信息(zabbix agent采用的主动式)

[weihu@VM_0_16_centos etc]$ cat zabbix_agentd.conf|grep ^[^#$]
Hostname=***.***.***.***                           # 安装zabbix agent主机IP
PidFile=/home/weihu/zabbix/zabbix_agentd.pid       # zabbix_agent.pid文件位置
LogFile=/home/weihu/zabbix/zabbix_agentd.log       # zabbix_agent.log文件位置
EnableRemoteCommands=1                             # 允许zabbix server端的远程指令
StartAgents=0                                      # zabbix agent开启进程数
ServerActive=***.***.***.***                       # 安装zabbix server主机IP

zabbix配置文件详解

https://www.cnblogs.com/ssgeek/p/9293933.html

启动zabbix agent

# 启功zabbix agent
/home/weihu/zabbix/configure/sbin/zabbix_agentd -c /home/weihu/zabbix/configure/etc/zabbix_agentd.conf
# 查看是否启动成功
ps -ef|grep zabbix_agent

配置监控agent主机

进入zabbix web

http://zabbix server主机IP/zabbix
默认 username : Admin
默认 password : zabbix


点击配置主机创建主机进行agent主机监控配置

主机名称为你为这台主机的命名,一般为zabbix agent主机IP
群组选择Linux servers
agent代理程序的接口IP地址为zabbix agent主机IP,端口为10050

点击上方模版
点击链接的模版 → 添加
由于我配置的zabbix agent为主动式于是选择 Template OS Linux by Zabbix agent active

最后点击添加,完成zabbix agent的监控部署

zabbix告警脚本配置

创建告警脚本

在之前共享的/data/docker/zabbix/alertscripts目录下创建一个脚本,使得在发生告警时执行,主要目的为记录一个日志

并赋予脚本文件可执行权限,测试一下脚本是否能正常使用

chmod 777 sms.sh

配置报警媒介

在zabbix web页面中点击管理报警媒介类型创建媒介类型

名称随意输入即可
类型选择脚本
脚本名称为在/data/docker/zabbix/alertscripts下创建的脚本名字
脚本参数推荐按照下图配置

ALERT.SENDTO 告警收件人
ALERT.SUBJECT 告警主题
ALERT.MESSAGE 告警信息


配置完成后点击添加,随后点击管理用户 ,选择一个用户点击报警媒介,点击报警媒介→添加

类型选择刚才配置的报警媒介
收件人随意填写
配置完成后点击添加,即完成用户报警媒介配置

点击配置动作创建动作,配置发生告警事件时的动作

名称随意输入
新的触发条件如果不选择则为发生事件就执行该动作,也可以选择某一触发器触发时执行该动作

点击操作(操作、恢复操作、更新操作分别对应触发器触发时、触发器恢复时、触发器更新时),进行动作配置
操作细节 → 步骤为动作执行次数
操作细节 → 步骤持续时间为动作执行频率
配置完成后,点击添加即完成动作配置
消息内容最好为json格式,方便短信推送时解析

完成上述配置后,可配置一个易触发的触发器,等待触发,查看是否日志是否完成了记录日志

短信推送

完成了上述配置操作后,便可进行短信推送的编码,在每次执行动作后,zabbix会将告警相关信息存入alert表中,可通过zabbix api进行获取对应的告警信息

zabbix api依赖引入

<!-- zabbix api -->
<dependency><groupId>io.github.hengyunabc</groupId><artifactId>zabbix-api</artifactId><version>0.0.2</version>
</dependency>

以下为部分逻辑代码思路

登录zabbix

  • url = http://zabbix server IP/api_jsonrpc.php
  • username = Admin
  • password = zabbix
/**
* 登录zabbix
* url = http://zabbix server IP/api_jsonrpc.php
* username = Admin
* password = zabbix
**/
private static ZabbixApi zabbixApi;
try {if(null == zabbixApi){zabbixApi = new DefaultZabbixApi("url");zabbixApi.init();zabbixApi.login("username", "password");}
} catch (Exception e) {LOGGER.error("zabbix连接失败!!!",e);zabbixApi = null;
}

采取监控告警

  • MessageQueue 告警队列
  • 取出startTime到endTime时间段内的告警
/**
* 采取监控告警
* MessageQueue 告警队列
* 取出startTime到endTime时间段内的告警
**/
private final static Logger LOGGER = LoggerFactory.getLogger(AlarmMonitorServiceImpl.class);
private static Type typeToken = new TypeToken<Map<String, Object>>(){}.getType();
String method = "alert.get";
List<Map<String,Object>> alerts = new ArrayList<>();
Map<String,Object> params = new HashMap<>();
params.put("output","extend");
Long endTime = System.currentTimeMillis()/1000;
Long startTime = endTime-10;
while(true){try {params.put("time_from",startTime-1);params.put("time_till",endTime);RequestBuilder requestBuilder = RequestBuilder.newBuilder().method(method);if(params!=null){Iterator<Map.Entry<String, Object>> entries = params.entrySet().iterator();while (entries.hasNext()) {Map.Entry<String, Object> entry = entries.next();requestBuilder.paramEntry(entry.getKey(), entry.getValue());}}Request getRequest = requestBuilder.build();JSONObject getResponse = zabbixApi.call(getRequest);JSONArray jsonArray =  getResponse.getJSONArray("result");Map<String, Object> map;if(jsonArray !=null && jsonArray .size()>0){for(int i=0;i<jsonArray.size();i++){map = gson.fromJson(jsonArray.getString(i), typeToken);alerts.add(map);}}while(alerts.size() > 0){for(Map<String,Object> alert : alerts){//加入告警队列MessageQueue.getInstance().fillAlarmQueue(alert);list.add(alert);}}} catch (Exception e) {LOGGER.error("告警采集失败!!!",e);}
}

处理告警队列

  • phoneNumber = 告警接收人手机号码
  • sendLongMsg 发送短信代码 我使用的是短信宝
  • getAlarmMsgText 根据不同告警信息json解析成不同短信样式
/**
* 处理告警队列
* phoneNumber = 告警接收人手机号码
* sendLongMsg 发送短信代码 我使用的是短信宝
* getAlarmMsgText 根据不同告警信息json解析成不同短信样式
**/while (true) {try {//取出告警队列alarmInfo = MessageQueue.getInstance().takeAlarm();JSONObject jsonObject = JSONObject.fromObject(alarmInfo.get("message"));if(jsonObject!=null && jsonObject.size()>0){if ("PROBLEM".equalsIgnoreCase(jsonObject.get("TriggerStatus").toString())){String result =  sendLongMsg(getAlarmMsgText(jsonObject, 0), "phoneNumber");if ("0".equalsIgnoreCase(result)){LOGGER.info("已成功发送短信");}else {LOGGER.info("发送短信失败" + result);}}if ("OK".equalsIgnoreCase(jsonObject.get("TriggerStatus").toString())){String result =  sendLongMsg(getAlarmMsgText(jsonObject, 0), "phoneNumber");if ("0".equalsIgnoreCase(result)){LOGGER.info("已成功发送短信");}else {LOGGER.info("发送短信失败" + result);}}}} catch (Exception e) {LOGGER.error("异常的中断:" + e.getMessage(), e);}}

zabbix告警短信推送相关推荐

  1. java中使用阿里云实现短信推送

    1.注入依赖 <!-- 阿里云实现短信推送 --><dependency><groupId>com.aliyun</groupId><artifa ...

  2. 入门级短信推送,你还不会吗?

    短信推送服务是生活中常见的,包括一些企业的营销或验证码场景的服务,这些都是需要短信服务来进行的 在开发中也比较常见,如开发一个个人博客系统,就会给注册或登录界面加上填写手机号发送验证码功能,或者加上发 ...

  3. 开发一个短信推送工具需要怎么做

    开发一个短信推送工具需要以下几步: 选择合适的编程语言,比如说 Python.Java 等. 选择短信 API 提供商,比如 Twilio.Alibaba Cloud 等. 注册一个账号,获取 API ...

  4. 一篇文章带你了解短信推送机制

    写作目的: 帮助大家从应用角度了解下短信推送流程.介绍短信行业的一些常规知识,在为企业自身搭建短信平台时,提供一些经验. 一.短信推送定义与常识: 1.1 短信推送: 顾名思义,是指通过运营商将文本或 ...

  5. 【script】15行Python代码实现免费发送手机短信推送消息功能(twilio)

    实现的功能 通过代码定时给手机推送短信,短信内容可以自定义文字,当然你也可以去别的网站爬取每日心灵鸡汤,天气预报或其它信息进行推送. 本文主要讲如何实现发送短信的功能,全部代码只用15行. 首先贴出实 ...

  6. 使用阿里云短信推送服务发送验证码

    前言 最近课程项目做一个网站,需要实现注册.忘记密码等功能的推送验证码的功能 而且根据相关法律法规,用户也需要手机号认证-(反正很多网站都是这么说的) 介绍 本来想弄一个免费的短信服务商,http:/ ...

  7. 【免费的短信推送API】【MobTech】【Android】手机短信验证码推送

    前言 作业需要用到:短信验证码推送(用于注册).了解到一个免费的手机短信推送平台,就去官网看了看相关API怎么用. http://www.mob.com/wiki/detailed?wiki=SMSS ...

  8. openwrt下实现定时短信推送

    记录一下自己的兴趣折腾:实现路由器每早定时向手机发送天气预报短信. 主要涉及到3个方面:1:短信推送平台  2:linux shell编辑 3:交叉编译等环境搭建 具体实现如下: 先是注册了一个阿里大 ...

  9. java调用阿里云实现短信推送

    1.注册阿里云并开通短信推送功能 2.创建密匙对,该密匙对是访问阿里SDK的钥匙 3.创建主题和订阅(也可以选择使用默认的)并获取endpoint 4.下载最新的SDK 5.新建java项目,把sdk ...

最新文章

  1. 基于WinSvr2012共享文件夹的Hyper-V实时迁移之三实时迁移的实现及验证
  2. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
  3. mysql数据库内NOT NULL_浅谈为什么Mysql数据库尽量避免NULL
  4. springboot-cache的简单使用
  5. C#实现Windows后台服务实例浅析
  6. iptables做路由转发服务器经典案例
  7. java消息顺序执行_Apache Flink:如何并行执行但保持消息顺序?
  8. 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
  9. 关于MFC里面位图相关的操作
  10. java scanner构造函数_Java使用Scanner作为构造函数的参数
  11. 深度学习 --- 优化入门五(Batch Normalization(批量归一化)二)
  12. PHP审核接口基本判断
  13. Android Window/Window Z-Order/Surface/SurfaceView
  14. 联想7400打印机如何与手机连到一起_2020年打印机推荐选购,看这篇就够了
  15. 10 分钟了解 Flutter 跨平台方案
  16. Exploiting Sample Uncertainty for Domain Adaptive Person Re-Identification
  17. 求帮忙,给python中安装matplotlib系统里有但是显示不出来,万分感谢啊大家
  18. AD(九)原理图Value值核对、网路编号核对、元件名称核对
  19. 记毕业季——回忆四年大学,青春无悔【正能量】
  20. 云计算 原理与实践期末复习

热门文章

  1. 49.ardinality算法之优化内存开销以及HLL算法
  2. 云易绘:板绘上色的搭配有哪些技巧呢?这边看过来!
  3. gcroot java_GCRoot
  4. Excel生成guid【转】
  5. waterdrop1.x导入clickhouse分布式表-默认方式
  6. 3D点云处理:平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点
  7. STM32 JNTRST JTDI JTDO引脚用做普通IO方法(PB4、PB3、PA15)
  8. python word2vector训练wiki中文文本语料
  9. ​​2023年腾讯云轻量应用服务器和云服务器CVM区别
  10. 追梦App系列博客——第五次例会总结