zabbix之邮箱告警,钉钉告警,电话告警

安装zabbix的服务器 zabbix-server 192.168.231.219

zabbix-agent 192.168.231.217 ,已安装nginx

前提

Zabbix告警是指当监控项的值超过了预设的阈值时,Zabbix会向管理员发送告警信息,以便管理员及时处理问题。

浏览器访问 192.168.231.219/zabbix

创建监控项

检查 TCP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听

创建触发器

当ngixn开启时80端口存在监控正常,当nginx端口不存在时,那么就会触发警报

触发器动作

也就是监控项在监控nginx端口是否被监听,如果端口不存在,那么就会触发触发器,动作就会执行,动作执行的命令时 启动nginx服务

在zabbix-agent服务器修改

复制代码
[root@zabbix-agent ~]# vim /etc/sudoers

101行添加
zabbix  ALL=(ALL)       NOPASSWD: ALL

修改配置文件

复制代码
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf 

87行左右
EnableRemoteCommands=1

102行左右
LogRemoteCommands=1
这个是开启的,后面添加等于1即可

修改完配置文件,记得重启服务

复制代码
systemctl restart zabbix-agent

这样的话,在zabbix-agent关闭nginx服务的话 就会触发触发器,引发动作去执行启动命令,那么有时候我们不知道什么时候会发生这种情况,这样就涉及到自动告警,可以借助第三方的服务 来告诉我们监控出现的告警情况。

以前三种告警都是基于关闭nginx服务,没有nginx80端口,来触发告警的前提做的实验

zabbix邮箱告警

注册网易邮箱

注册地址:163网易免费邮-你的专业电子邮局

开启SMTP服务,获取授权码

在zabbix页面查看:

192.168.231.219/zabbix

  1. SMTP服务器如果是网易就写163,如果是QQ邮箱就写qq

  2. 服务器端口号默认是25,不加密,465是加密,如果填写465那么下main安全链接就得选择SSL/TLS

  3. SMTP HELO, SMTP电邮,用户名都写你的网易邮箱即可。密码写之前网易获取到的授权码

消息模板

有自动生成是英文的,如果想是中文,更改就好

默认信息:邮件的主题

主机: {HOST.NAME1}

时间: {EVENT.DATE} {EVENT.TIME}

级别: {TRIGGER.SEVERITY}

触发: {TRIGGER.NAME}

详情: {ITEM.NAME1}:{ITEM.KEY1}:{ITEM.VALUE1}

状态: {TRIGGER.STATUS}

项目:{TRIGGER.KEY1}

事件ID:{EVENT.ID}

我这里是发现问题是英文,解决问题时中文

zabbix添加动作

测试媒介类型

收件人是我的QQ邮箱

给用户绑定媒介类型

开始测试,在zabbix-agent端测试

复制代码
[root@zabbix-agent ~]# systemctl stop nginx 

查看邮箱

发现错误

解决错误

查看报表--动作日志

zabbix钉钉机器人告警

在钉钉中创建群聊(同组的同学创建一个群聊),在群里面添加自定义机器人

通过自定义webhook接入自定义服务

webhook:记住webhook的地址

安全设置:设置加签,只有信息内容包含签才会被机器人发送。

在zabbix-server端进行操作

复制代码
下载python
[root@zabbix-server ~]# yum -y install  python3 python3-requests

配置钉钉告警脚本zabbix_ding.conf

复制代码
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_ding.conf

[config]
log_path=/var/log/zabbix/zabbix_ding.log
webhook=https://oapi.dingtalk.com/robot/send?access_token=c1d11ecf6704f008eb25de644ed5cead752c065c0d11f9f89b58273cf0c78a96
secret=SECc26e5bc55c64d454f15a8bdcce6825b7e5bb4f6fecc38025d2845837415192d7

将之前钉钉创建机器人时候生成的俩个码 粘贴复制过来,注意别少复制

创建钉钉告警日志文件zabbix_ding.log

复制代码
[root@zabbix-server ~]# touch /var/log/zabbix/zabbix_ding.log 

设置权限

复制代码
[root@zabbix-server ~]#  chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log 

在zabbix_server.conf中配置告警脚本的路径

vim /etc/zabbix/zabbix_server.conf

在zabbix_server.conf中配置告警脚本的路径

AlertScriptsPath=/usr/lib/zabbix/alertscripts

我这里修改为

AlertScriptsPath=/usr/lib/zabbix/alertscripts
abbix5.0的默认是开启的

在/usr/bin/zabbix/alertscripts目录中执行的脚本dingding.py的内容

复制代码
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/

[root@zabbix-server alertscripts]# vim dingding.py

以下内容添加至dingding.py内
#!/usr/bin/env python3
# coding:utf8
#
import configparser
import os
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import json
import sys

config = configparser.ConfigParser()
config.read('/etc/zabbix/zabbix_ding.conf', encoding='utf-8')
log_path = config.get('config', 'log_path')
api_url = config.get('config', 'webhook')
api_secret = config.get('config', 'secret')
log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


# 钉钉机器人文档说明
# https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
def get_timestamp_sign():
    timestamp = str(round(time.time() * 1000))
    secret = api_secret
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    return timestamp, sign

# 获取加签后的链接
def get_signed_url():
    timestamp, sign = get_timestamp_sign()
    webhook = api_url + "&timestamp=" + timestamp + "&sign=" + sign
    return webhook

# 定义消息模式
def get_webhook(mode):
    if mode == 0:  # only 关键字
        webhook = api_url
    elif mode == 1 or mode == 2:  # 关键字和加签 或 # 关键字+加签+ip
        webhook = get_signed_url()
    else:
        webhook = ""
        print("error! mode:   ", mode, "  webhook :  ", webhook)
    return webhook


def get_message(text, user_info):
    # 和类型相对应,具体可以看文档 :https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
    # 可以设置某个人的手机号,指定对象发送
    message = {
        "msgtype": "text",  # 有text, "markdown"、link、整体跳转ActionCard 、独立跳转ActionCard、FeedCard类型等
        "text": {
            "content": text  # 消息内容
        },
        "at": {
            "atMobiles": [
                user_info,
            ],
            "isAtAll": False  # 是否是发送群中全体成员
        }
    }
    return message


# 消息发送日志
def log(info):
    if os.path.exists(log_path):
        log_file = open(log_path, "a+")
    else:
        log_file = open(log_path, "w+")
    log_file.write(info)


def send_ding_message(text, user_info):
    # 请求的URL,WebHook地址
    # 主要模式有 0 : 关键字 1:# 关键字 +加签 3:关键字+加签+IP
    webhook = get_webhook(1)
    # 构建请求头部
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }
    # 构建请求数据
    message = get_message(text, user_info)
    # 对请求的数据进行json封装
    message_json = json.dumps(message)
    # 发送请求
    info = requests.post(url=webhook, data=message_json, headers=header).json()
    code = info["errcode"]
    errmsg = info["errmsg"]
    if code == 0:
        log(log_time + ":消息已发送成功 返回信息:%s %s\n" % (code, errmsg))
    else:
        log(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
        print(log_time + ":消息发送失败 返回信息:%s %s\n" % (code, errmsg))
        exit(3)


if __name__ == "__main__":
    text = sys.argv[3]
    user_info = sys.argv[1]
    send_ding_message(text, user_info)

设置脚本目录的所有权

复制代码
[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/

给脚本执行权限执行

复制代码
[root@zabbix-server alertscripts]# chmod +x dingding.py 

[root@zabbix-server alertscripts]# ./dingding.py  user subject mesages

钉钉群查看消息

在页面端进行操作,创建媒介类型并测试

脚本传输参数

复制代码
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

消息模板:

以下消息模板会自动填充

也可以更改

自定义消息内容

主题:服务器报警

消息:

告警主机:{HOST.NAME}

告警地址:{HOST.IP}

监控项目:{ITEM.NAME}

监控取值:{ITEM.LASTVALUE}

告警等级:{TRIGGER.SEVERITY}

当前状态:{TRIGGER.STATUS}

告警信息:{TRIGGER.NAME}

告警时间:{EVENT.DATE} {EVENT.TIME}

事件ID:{EVENT.ID}
主题:服务器已恢复

消息:

告警主机:{HOST.NAME}

告警地址:{HOST.IP}

监控项目:{ITEM.NAME}

监控取值:{ITEM.LASTVALUE}

告警等级:{TRIGGER.SEVERITY}

当前状态:{TRIGGER.STATUS}

告警信息:{TRIGGER.NAME}

告警时间:{EVENT.DATE} {EVENT.TIME}

事件ID:{EVENT.ID}

开始测试

添加动作:远程执行命令,发邮件

为用户添加报警媒介

开始测试,在zabbix-agent端测试

复制代码
[root@zabbix-agent ~]# systemctl stop nginx 

查看报表--动作日志

电话告警

使用第三方服务:睿象云-智能运维管理平台-智能运维系统-自动化运维性能监控平台 睿象云

注册账号,登录

选择完成后 按照右面的提示步骤做可以,我这里将文件下载到前面做钉钉告警的路径下

在zabbix-server端进行操作

复制代码
[root@zabbix-server zabbix]# cd /usr/lib/zabbix/alertscripts/

下载
[root@zabbix-server alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.3.tar.gz

解压,安装

复制代码
[root@zabbix-server alertscripts]# tar -xzf ca_zabbix_release-4.0.3.tar.gz


[root@zabbix-server alertscripts]# cd cloudalert/bin
[root@zabbix-server bin]# bash install.sh b8bf3f8e2132439191fddb2f68224de5

注意事项

1、在安装过程中根据安装提示,输入zabbix管理地址、管理员用户名、密码。

2、zabbix管理地址正确示例:http://zabbix.server.com/zabbix 或是:https://zabbix.server.com/zabbix

4、修改运行zabbix服务权限与cloudalert探针目录权限

请保证运行zabbix服务的权限和cloudalert探针目录的权限保持一致,不一致会导致告警无法正常接入。

5、验证告警集成

产生新的zabbix告警(problem),动作状态为"已送达"表示集成成功。

分配策略

分配策略:什么类型的报警发送到哪个用户

通知策略

通知策略:采用什么方式进行通知

zabbix添加动作

给用户绑定报警媒介类型

查看报警媒介类型自动生成

开始测试告警

复制代码
[root@zabbix-agent ~]# systemctl stop nginx 

由于是设置了发生故障通知与故障解决通知,因此会有俩个电话

查看报表--动作日志

相关推荐
七夜zippoe10 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64812 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满12 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠12 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90312 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技13 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀14 小时前
Linux环境变量
linux·运维·服务器
zzzsde14 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º15 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~15 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化