cacti实现企业微信告警

一、关键词:

cacti、微信告警

二、摘要:

在现实生产环境中,由于短信接收告警实现起来需要money,对企业来说也是一笔可以省下的支出,所以大部分公司会选择采用邮件告警和微信推送告警。由于微信提供了第三方API接口,所以利用微信告警可以实现降低运维成本。

三、实现过程:

1、企业微信配置过程

(1)申请企业微信公众号,官方网址:https://qy.weixin.qq.com/

image.png

(2)邮箱收到验证邮件以后点击链接激活账号
(3)选择类型为企业号,群发消息无限制
(4)主体类型选企业和团队均可以,建议选择团队,减少认证
(5)登陆微信后台管理平台https://work.weixin.qq.com。通讯录中增加成员,新建部门,此处略
(6)创建应用(创建成功后会在自建应用里能看到刚才自己创建的应用)

image.png

image.png

(7)设置可见范围(注意:此处应用ID和secret要用记事本记下来,稍后会在cacti的微信脚本中使用)
image.png

(8)验证企业微信公众号发送消息功能
点击API文档(学习API开发教程(企业微信所有的配置详解这里都有))
image.png

image.png

获取access_token(此处填写企业ID和secret),注意:access_token会一段时间内可用


image.png

找到对应的部门ID,应用ID,access_token验证发送消息


image.png

此时查看企业微信,会收到相应的测试信息

*总结:
企业微信主要获取如下数据:
#企业ID
#secret
#部门ID
#应用ID
2、cacti设置

(1)修改cacti中thold报警内容输出至文本

[root@CactiEZ ~]# vim /var/www/html/plugins/thold/thold_functions.php
#在2839行$text位置上方输入语句
$msg_wx = strip_tags(str_replace('<br>', "\n", $message)); //删除message中的html标签,并将<br>替换为换行符\n

        $msg_wx = trim($msg_wx); //整理msg_wx字符串

        $msg_wx = iconv( "GB2312//IGNORE", "UTF-8", $msg_wx); //转换编码为utf-8,防止乱码

        $sub_wx = iconv( "GB2312//IGNORE", "UTF-8", $subject); //转换编码为utf-8,防止乱码

        $file_title = '/tmp/title.txt'; //要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个

        $file_message = '/tmp/message.txt'; //要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个

        if($f = file_put_contents($file_title, $sub_wx)) //将subject参数的值保存到file_title中

        if($f = file_put_contents($file_message, $msg_wx)) //将msg_wx参数的值保存到file_message中

        shell_exec("/etc/wechat.sh"); //运行wechat.sh文件,进行微信报警操作

        $text = array('text' => '', 'html' => '');        #此语句原来有,不用加

(2)创建微信发送脚本

[root@CactiEZ ~]# vim /etc/wechat.sh 

#微信企业号发送消息脚本

#!/bin/bash

CropID='**********' #此处CropID请根据实际情况填写

Secret='*****************' #此处Secret请根据实际情况填写

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"

#此处语句获取access_token,随着时间变化,可能会有变化,需要按现实实际情况修改此语句才能获得
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}')    


PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

function body()

{

local int AppID=**********

#Appid 填写企业号中建立的报警APP的ID

Ent=$'\n'

Date=$(date '+%Y年%m月%d日 %H:%M:%S\n\n')

#添加Cacti微信报警日期参数

Tit=$(cat /tmp/title.txt)

#读取/tmp/title文件中内容到变量Tit

Msg=$Date$Tit$Ent$(cat /tmp/message.txt|sed 's/%//g')

#拼接msg主体文件,包含日期,主题,报警内容.并删除报警内容中的'%'号.

Url=$(grep "http" /tmp/message.txt|sed 's/URL: //g')

#获取message.txt中的url行内容

Pic_tmp=$(grep "http" /tmp/message.txt|sed 's/URL: //g'|sed 's/\/graph.php/\/graph_image.php/g')

if [ ! -n "$Pic_tmp" ] ;then

Pic=""

else

Pic=$Pic_tmp$'&graph_height=130&graph_width=420&t='$Date

fi

#根据url行内容修改为添加Pic参数

#在此修改图片大小,防止图像显示不全,并判断图片文件是否存在。防止宕机出现图片报警

printf '{\n'

printf '\t"touser": "'"@all"\"",\n"

printf '\t"toparty": "'"@all"\"",\n"

printf '\t"totag": "'"@all"\"",\n"

printf '\t"msgtype": "news",\n' #使用news消息类型

printf '\t"agentid": "'" $AppID "\"",\n"

printf '\t"news": {\n'

printf '\t"articles": [\n'

printf '{\n'

printf '\t\t"title": "'"$Tit"\","\n"

printf '\t\t"description": "'"$Msg"\","\n"

printf '\t\t"url": "'"$Url"\","\n"

printf '\t\t"picurl": "'"$Pic"\","\n"

printf '\t}\n'

printf '\t]\n'

printf '\t}\n'

printf '}\n'

}
/usr/bin/curl --data-ascii "$(body)" "$PURL" #传送凭证调用企业号接口

body内容可参考官方文档接口中发送消息中消息类型以及数据格式进行修改


image.png

至此,如果配置正常的话就会收到cacti告警信息

***特别注意:由于作者使用的是cacti_v10版本,鉴于centos6已停止更新,建议大家更换官方最新cacti进行尝试。(避免大家入坑,作者将遇到的问题在此说明:API对接的时候曾经报错让升到到TLS1.2及以上,此问题可以通过更新包解决,但由于官方及三方的yum仓库均无法使用,可以挂载CD系统盘进行更新。企业微信中应用管理里有开发者接口,网页授权及JS-JDK和企业可信IP有需要的话需要根据情况配置),欢迎大家批评指正,共同学习进步!
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容