发送到钉钉群"/>
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 .5.2111.repo# 生成缓存
dnf makecache# 拉取zabbix 5.0镜像源
rpm -Uvh .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;
}
监控端配置
-
添加个名为[Template App Nginx by Zabbix agent]监控模板
-
配置宏
效果图
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/.myf[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, 来获取此变量
- 准备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)
-
放入到 /etc/zabbix/zabbix_agentd.conf.d目录下
# 测试一下是否可以获取到 # 可以根据需求修改脚本 执行参数, 当前参数为(连接主机和连接密码) python3 /etc/zabbix/zabbix_agentd.conf.d/MysqlGlobalStatus.py 172.16.xx.xxx 20220125 # 成功, 会输出json格式的 mysql状态信息
-
将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 konne20220125.
-
重启zabbix-agent
service zabbix-agent restart
3.2.2监控端配置
- 修改原有自带的[ Template DB MySQL by Zabbix agent ] 监控模板(也可以复制出来重新创建一个自定义的)
效果图
4. 监控redis
被监控端条件
1. 被监控端装有redis
2. redis保护模式关闭
总之可被客户端连接
监控端配置
配置zabbix发送告警到钉钉
-
先去钉钉上获取[webhook地址 和 加签secret]
1. 打开一个想要将预警消息推送到的钉钉群群设置->智能群助手->添加机器人->选择自定义机器人
- 编写发送消息脚本(DingDingWarn.py)
#!/bin/python3
# -*- coding:utf-8 -*-
import base64
import hashlib
import hmac
import json
import sys
import time
import urllibimport 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_subjectself.alert_message = alert_messagedef build_request_url(self):timestamp = str(round(time.time() * 1000))secret = self.secretsecret_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}×tamp={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.textprint(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()
-
将脚本文件放到 /usr/lib/zabbix/alertscripts/ 下
-
配置报警媒介
主题:{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}
- 设置触发动作
主题:出现问题!! {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}
效果:
更多推荐
zabbix监控端和被监控端的安装以及(nginx/mysql/java服务/redis)的监控配置, 并告警发送到钉钉群
发布评论