zabbix邮件告警 钉钉告警

1、zabbix的安装过程

去官网(Zabbix:企业级开源监控解决方案)上找到 ‘zabbix下载’

下滑选择使用的版本平台

然后根据下方的技术文档进行安装部署:

a. 安装Zabbix存储库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
b. 安装Zabbix server,Web前端,agent
yum install zabbix-server-mysql zabbix-agent
c. 安装Zabbix前端
yum install centos-release-scl

编辑配置文件 /etc/yum.repos.d/zabbix.repo 启用zabbix前端存储库。

[zabbix-frontend]
...
enabled=1
...

安装zabbix前端包.

# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
d. 创建初始数据库

确保数据库服务器已启动并正在运行,在数据库主机上运行以下代码。

mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

导入初始架构和数据,系统将提示您输入新创建的密码。

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

导入数据库架构后禁用log_bin_trust_function_creators选项

mysql -uroot -p

mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
e. 为Zabbix server配置数据库

编辑配置文件 /etc/zabbix/zabbix_server.conf

DBPassword=password
f. 为Zabbix前端配置PHP

编辑配置文件 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf uncomment 并且设置“listen”和“server_name”指令。

listen 80;
server_name example.com;

编辑配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 将nginx添加到listen.acl_users指令中。

listen.acl_users = apache,nginx

然后取消注释并为您设置正确的时区。

; php_value[date.timezone] = Europe/Riga
g. 启动Zabbix server和agent进程,并为它们设置开机自启:
systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

webserver为nginx的需要做以下更改

修改完成后去浏览器进行访问,按引导进行配置安装,完成后如下图:

2、zabbix添加监控机器的过程

还是在zabbix的官网,前面3个不变,第四个选择Agent,然后继续按照下边的技术文档进行部署

a. 安装zabbix的存储库
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
b. 安装Zabbix代理
yum install zabbix-agent
c.启动Zabbix代理进程,并使其在系统启动时启动。
systemctl restart zabbix-agent
systemctl enable zabbix-agent
d.装好之后来修改一下配置文件
[root@slave ~]# cd /etc/zabbix/
[root@slave ~]#  ls
zabbix_agentd.conf  zabbix_agentd.d
[root@slave zabbix]# cp zabbix_agentd.conf{,.bak}
[root@slave zabbix]# vim zabbix_agentd.conf
#修改一下几个参数信息
Server=192.168.43.134       #指明服务器是谁(server端)
ListenPort=10050            #自己监听的端口
ListenIP=0.0.0.0            #自己监听的地址,0.0.0.0表示本机所有地址
StartAgents=3               #优化时使用的

ServerActive=192.168.43.134  #主动监控时的服务器(server端)
Hostname=slave    #自己能被server端识别的名称

[root@slave zabbix]# systemctl start zabbix-agent.service
[root@slave zabbix]# ss -ntul |grep 10050
tcp    LISTEN     0      128       *:10050                 *:* 

已经开启成功。接着,可以去网页添加主机了

e.定义一个主机群组:

主机组定义完成后就可以去添加主机了:在 配置 下的 主机 模块 ,右上角的 创建主机

然后将必填项都填上,主机名称要和配置文件中填写的一致,群组选择刚才创建的,客户端就填写这台被监控服务器的ip,填完后点击添加

f.添加监控项和触发器,然后为触发器设置动作

点击监控项 创建监控项(右上角)

添加了一个应用集和一个监控项,下面为监控项配置触发器

配置完成后进行测试。

3、钉钉告警、邮箱告警流程

钉钉告警
  • 钉钉群添加机器人
  • 安装python3 python3-requests
[root@master ~]# yum install -y python3 python3-requests
  • 配置钉钉配置文件
[root@master ~]# vim /etc/zabbix/zabbix_ding.conf
[root@master ~]# touch /var/log/zabbix/zabbix_ding.log  #创建日志文件
[root@master ~]# chown zabbix.zabbix /var/log/zabbix/zabbix_ding.log  #更改权限
[root@master ~]# cat /etc/zabbix/zabbix_server.conf 
[config]
log_path=/var/log/zabbix/zabbix_ding.log
webhook=  
secret=  
  • 测试脚本能否正常发送消息
[root@master ~]# cd /usr/lib/zabbix/alertscripts/
[root@master alertscripts]# cat 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@master zabbix]# chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts
[root@master alertscripts]# chmod +x dingding.py 
[root@master alertscripts]# ./dingding.py user subject mesages
  • 创建告警媒介类型并测试

更新后可以测试一下

  • 给用户绑定告警媒介类型

当收到告警后,就会给钉钉群里发送消息。

邮件告警

添加邮箱信息

给用户绑定

测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值