zabbix告警短信推送
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告警短信推送相关推荐
- java中使用阿里云实现短信推送
1.注入依赖 <!-- 阿里云实现短信推送 --><dependency><groupId>com.aliyun</groupId><artifa ...
- 入门级短信推送,你还不会吗?
短信推送服务是生活中常见的,包括一些企业的营销或验证码场景的服务,这些都是需要短信服务来进行的 在开发中也比较常见,如开发一个个人博客系统,就会给注册或登录界面加上填写手机号发送验证码功能,或者加上发 ...
- 开发一个短信推送工具需要怎么做
开发一个短信推送工具需要以下几步: 选择合适的编程语言,比如说 Python.Java 等. 选择短信 API 提供商,比如 Twilio.Alibaba Cloud 等. 注册一个账号,获取 API ...
- 一篇文章带你了解短信推送机制
写作目的: 帮助大家从应用角度了解下短信推送流程.介绍短信行业的一些常规知识,在为企业自身搭建短信平台时,提供一些经验. 一.短信推送定义与常识: 1.1 短信推送: 顾名思义,是指通过运营商将文本或 ...
- 【script】15行Python代码实现免费发送手机短信推送消息功能(twilio)
实现的功能 通过代码定时给手机推送短信,短信内容可以自定义文字,当然你也可以去别的网站爬取每日心灵鸡汤,天气预报或其它信息进行推送. 本文主要讲如何实现发送短信的功能,全部代码只用15行. 首先贴出实 ...
- 使用阿里云短信推送服务发送验证码
前言 最近课程项目做一个网站,需要实现注册.忘记密码等功能的推送验证码的功能 而且根据相关法律法规,用户也需要手机号认证-(反正很多网站都是这么说的) 介绍 本来想弄一个免费的短信服务商,http:/ ...
- 【免费的短信推送API】【MobTech】【Android】手机短信验证码推送
前言 作业需要用到:短信验证码推送(用于注册).了解到一个免费的手机短信推送平台,就去官网看了看相关API怎么用. http://www.mob.com/wiki/detailed?wiki=SMSS ...
- openwrt下实现定时短信推送
记录一下自己的兴趣折腾:实现路由器每早定时向手机发送天气预报短信. 主要涉及到3个方面:1:短信推送平台 2:linux shell编辑 3:交叉编译等环境搭建 具体实现如下: 先是注册了一个阿里大 ...
- java调用阿里云实现短信推送
1.注册阿里云并开通短信推送功能 2.创建密匙对,该密匙对是访问阿里SDK的钥匙 3.创建主题和订阅(也可以选择使用默认的)并获取endpoint 4.下载最新的SDK 5.新建java项目,把sdk ...
最新文章
- 基于WinSvr2012共享文件夹的Hyper-V实时迁移之三实时迁移的实现及验证
- mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
- mysql数据库内NOT NULL_浅谈为什么Mysql数据库尽量避免NULL
- springboot-cache的简单使用
- C#实现Windows后台服务实例浅析
- iptables做路由转发服务器经典案例
- java消息顺序执行_Apache Flink:如何并行执行但保持消息顺序?
- 来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle
- 关于MFC里面位图相关的操作
- java scanner构造函数_Java使用Scanner作为构造函数的参数
- 深度学习 --- 优化入门五(Batch Normalization(批量归一化)二)
- PHP审核接口基本判断
- Android Window/Window Z-Order/Surface/SurfaceView
- 联想7400打印机如何与手机连到一起_2020年打印机推荐选购,看这篇就够了
- 10 分钟了解 Flutter 跨平台方案
- Exploiting Sample Uncertainty for Domain Adaptive Person Re-Identification
- 求帮忙,给python中安装matplotlib系统里有但是显示不出来,万分感谢啊大家
- AD(九)原理图Value值核对、网路编号核对、元件名称核对
- 记毕业季——回忆四年大学,青春无悔【正能量】
- 云计算 原理与实践期末复习
热门文章
- 49.ardinality算法之优化内存开销以及HLL算法
- 云易绘:板绘上色的搭配有哪些技巧呢?这边看过来!
- gcroot java_GCRoot
- Excel生成guid【转】
- waterdrop1.x导入clickhouse分布式表-默认方式
- 3D点云处理:平面度|平行度(增加精度的平行度优化)|平面之间的夹角|点到平面的投影点
- STM32 JNTRST JTDI JTDO引脚用做普通IO方法(PB4、PB3、PA15)
- python word2vector训练wiki中文文本语料
- ​​2023年腾讯云轻量应用服务器和云服务器CVM区别
- 追梦App系列博客——第五次例会总结