zabbix监控端和被监控端的安装以及(nginx/mysql/java服务/redis)的监控配置, 并告警发送到钉钉群

安装zabbix 5.0 监控端

CentOS8监控端安装

# ** 注意centos8 阿里镜像源地址已换, 需要删除原来的镜像重新拉取
# 删除原来的镜像配置
rm -rf /etc/yum/repos.d/*

# 拉取最新的 
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

# 生成缓存
dnf makecache

# 拉取zabbix 5.0镜像源 
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
dnf clean all

# 安装zabbix组件
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent

# 连接已有mysql, 创建数据库
create database zabbix
# 创建zabbix连接用户
grant all privileges on zabbix.* to zabbix@localhost identified by '20220512';

# 导入初始架构和数据,系统将提示您输入新创建的密码
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p'20220512' zabbix

# 编辑配置文件修改zabbix 连库信息
vim /etc/zabbix/zabbix_server.conf
-- DBPassword=20220512

# 打开zabbix 前端nginx配置, 如果已存在nginx, 将配置信息, 复制到原有的nginx.conf即可
# ** 注意 php-fpm 与 nginx 通讯时有user权限校验, 所以需要把nginx.conf的user改为apache
# 或者修改php-fpm user名称
vim /etc/nginx/conf.d/zabbix.conf

# 修改php-fpm配置
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
-- php_value[date.timezone] = Asia/Shanghai

# 重启这些服务
systemctl restart zabbix-server zabbix-agent php-fpm

# 访问管理页面
主机:端口

被监控端安装

安装zabbix-agent2

# CentOS 安装
dnf install zabbix-agent2 -y
# ubuntu 安装
apt install zabbix-agent2
# 修改配置文件
vim /etc/zabbix/zabbix_agent2.conf
-- Server=172.16.xx.xx  #修改为监控端的主机ip
-- ServerActive=172.16.xx.xx  #修改为监控端的主机ip
-- Hostname=monitor_handle  # 主机名称与监控端[配置-主机-创建主机]中所配置的主机名称保持一致
-- UnsafeUserParameters=1  # 设置为1, 防止获取监控参数是格式化乱码

# 重启服务
service zabbix-agent2 restart

安装zabbix-agent(外网不可访问只能用旧版)

# CentOS 安装
dnf install zabbix-agent -y
# ubuntu 安装
apt install zabbix-agent
# 修改配置文件
vim /etc/zabbix/zabbix_agentd.conf
-- Server=172.16.xx.xx  #修改为监控端的主机ip
-- ServerActive=172.16.xx.xx  #修改为监控端的主机ip
-- Hostname=monitor_handle  # 主机名称与监控端[配置-主机-创建主机]中所配置的主机名称保持一致
-- UnsafeUserParameters=1  # 设置为1, 防止获取监控参数是格式化乱码

# 重启服务
service zabbix-agent restart

用例

添加监控主机(监控页面)

在这里插入图片描述

在这里插入图片描述

添加监控模板(就是zabbix已经配置好的监控方案)

在这里插入图片描述

在这里插入图片描述

1. 监控nginx
被监控端配置(nginx.conf)
# 添加代理
location /nginx_status {
	stub_status;
}
监控端配置
  1. 添加个名为[Template App Nginx by Zabbix agent]监控模板

  2. 配置宏

    在这里插入图片描述

    在这里插入图片描述

在这里插入图片描述

效果图

在这里插入图片描述

2. 监控java服务存活
被监控端配置
# 比如目前有一个[kn-review-handle-0.0.1-SNAPSHOT.jar]服务

cd  etc/zabbix/zabbix_agentd.d  # 进入到zabbix_agent.d 配置文件中

# UserParameter=监控key, 执行的命令
# ps -ef | grep kn-review-handle-0.0.1-SNAPSHOT.jar | grep -v grep |wc -l 可以获取kn-review-handle-0.0.1-SNAPSHOT.jar这个jar包的服务是否存活(1存活/0挂掉)
# 添加到配置文件中:
UserParameter=kn-review-handle,ps -ef | grep kn-review-handle-0.0.1-SNAPSHOT.jar | grep -v grep |wc -l
监控端管理页面配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建触发器

在这里插入图片描述

在这里插入图片描述

3. 监控mysql
3.1.1 zabbix-agent2 被监控端配置
vim /etc/zabbix/.my.cnf
	[mysql]
    user=被监控数据库的连接用户名
    password=被监控数据库的连接密码

    [mysqladmin]
    user=被监控数据库的连接用户名
    password=被监控数据库的连接密码
    
# 重启zabbix-agent2 服务
service zabbix-agent2 restart
3.1.2 监控端配置

只需要添加个名为[Template DB MySQL by Zabbix agent2]监控模板即可

3.2.1 zabbix-agent被监控端配置(自定义监控)
由于外网无法访问, zabbix-agent2 安装有障碍
所以改用旧版的zabbix-agent
	问题:
		1. 监控端zabbix为5.0, 被监控端为旧版zabbix-agent, 使用现成的mysql监控模板时会获取不到监控数据
	解决:
		1. 编写脚本获取mysql监控数据
		2. 配置一个监控变量
		3. 用监控端zabbix, 来获取此变量
  1. 准备python脚本(MysqlGlobalStatus.py), 获取mysql状态信息
import json
import sys
import pymysql

'''
	获取mysql状态信息, 并输出为json格式
'''
class MysqlGlobalStatus:
    def __init__(self, host, password):
        conn = pymysql.connect(host=host, user='root', password=password)
        cursor = conn.cursor()
        cursor.execute("show global status")
        print(json.dumps(dict(cursor.fetchall())))


if __name__ == '__main__':
    # mysql主机
    host = sys.argv[1]
    # mysql密码
    password = sys.argv[2]
    g = MysqlGlobalStatus(host, password)
  1. 放入到 /etc/zabbix/zabbix_agentd.conf.d目录下

    # 测试一下是否可以获取到
    # 可以根据需求修改脚本 执行参数, 当前参数为(连接主机和连接密码)
    python3 /etc/zabbix/zabbix_agentd.conf.d/MysqlGlobalStatus.py 172.16.xx.xxx 20220125
    # 成功, 会输出json格式的 mysql状态信息
    
  2. 将mysql默认的模板配置文件复制到 /etc/zabbix/zabbix_agentd.conf.d目录下并配置

    cp /usr/share/doc/zabbix-agent/examples/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.conf.d/
    
    vim /etc/zabbix/zabbix_agentd.conf.d/userparameter_mysql.conf
        # 添加此监控参数
        UserParameter=mysql.get_status_variables,python3 /etc/zabbix/zabbix_agentd.conf.d/MysqlGlobalStatus.py 172.16.75.193 konne.cn20220125.
    
  3. 重启zabbix-agent

    service zabbix-agent restart
    
3.2.2监控端配置
  1. 修改原有自带的[ Template DB MySQL by Zabbix agent ] 监控模板(也可以复制出来重新创建一个自定义的)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

效果图

在这里插入图片描述

4. 监控redis
被监控端条件
1. 被监控端装有redis
2. redis保护模式关闭
总之可被客户端连接
监控端配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置zabbix发送告警到钉钉

  1. 先去钉钉上获取[webhook地址 和 加签secret]

    1. 打开一个想要将预警消息推送到的钉钉群
     	群设置->智能群助手->添加机器人->选择自定义机器人
    

在这里插入图片描述
在这里插入图片描述

  1. 编写发送消息脚本(DingDingWarn.py)
#!/bin/python3
# -*- coding:utf-8 -*-
import base64
import hashlib
import hmac
import json
import sys
import time
import urllib

import requests

"""
    zabbix 警告消息通过webhook方式发送到钉钉机器人
"""


class DingDingWarn:
    headers = {'Content-Type': 'application/json; charset=utf-8'}
    
    # 从钉钉群机器人配置上获取的webhook地址和加签
    url = r'xxx'
    secret = 'xxx'


    #linux 日志路径(自己定义的)
    log_path1 = r'/usr/lib/zabbix/alertscripts/dingdingmsg.log'
    #windows 日志路径(自己定义的)
    log_path2 = r'D:/project/py/test/dingdingmsg.log'

    def __init__(self, alert_subject, alert_message):
        '''
        初始化发送的钉钉消息
        :param alert_subject: 警告消息描述
        :param alert_message: 警告消息内容
        '''
        self.alert_subject = alert_subject
        self.alert_message = alert_message

    def build_request_url(self):
        timestamp = str(round(time.time() * 1000))
        secret = self.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 f'{self.url}&timestamp={timestamp}&sign={sign}'

    def build_body(self):
        '''
        构建请求体
        :return:
        '''
        return {
            "msgtype": "text",
            "text": {
                "content": f"告警描述:\n{self.alert_subject}\n\n告警内容:\n{self.alert_message.strip()}"
            }
        }

    def send_msg(self):
        '''
        发送警告消息
        :return:
        '''
        print(self.build_request_url())
        response = requests.post(url=self.build_request_url(), data=json.dumps(self.build_body()), headers=self.headers)
        body = response.text
        print(body)
        if eval(body)['errmsg'] == 'ok':
            status = 'send success!'
        else:
            status = 'send error!'
        self.save_log(status)

    def save_log(self, status):
        '''
        保存日志
        :param status: 发送状态
        :return:
        '''
        f = open(file=self.log_path1, mode='a')
        f.write(f'''
        {status.center(25, '-')}
        告警描述:
        {self.alert_subject}

        告警内容:
        {self.alert_message}
        {'End'.center(30, '-')}
        ''')
        f.close()


if __name__ == '__main__':
    # 获取执行参数
    alert_subject = sys.argv[1]
    alert_message = sys.argv[2].replace('\r\n', '\n')
    # 将接受到的消息参数, 输出到日志文件
    # a = open("r'/usr/lib/zabbix/alertscripts/dingdingparam.log'", mode='a')
    # a.write(alert_subject + '---' + alert_message)
    # 发送警告消息
    d = DingDingWarn(alert_subject, alert_message)
    # print('可执行')
    d.send_msg()
  1. 将脚本文件放到 /usr/lib/zabbix/alertscripts/ 下

  2. 配置报警媒介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主题:
	{HOST.NAME} 告警信息:{TRIGGER.NAME}

消息:
    告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    告警信息:{TRIGGER.NAME}
    当前状态:{TRIGGER.STATUS}
    监控取值:{ITEM.LASTVALUE}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件ID:{EVENT.ID}
    告警等级:{TRIGGER.SEVERITY}
  1. 设置触发动作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
主题:
	出现问题!! {HOST.NAME} 监控信息:{TRIGGER.NAME}
	
消息:
	告警主机:{HOST.NAME}
    告警地址:{HOST.IP}
    监控项目:{ITEM.NAME}
    告警信息:{TRIGGER.NAME}
    当前状态:{TRIGGER.STATUS}
    监控取值:{ITEM.LASTVALUE}
    告警时间:{EVENT.DATE} {EVENT.TIME}
    恢复时间:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
    持续时间:{EVENT.AGE}
    事件ID:{EVENT.ID}
    告警等级:{TRIGGER.SEVERITY}
效果:

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值