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

编程入门 行业动态 更新时间:2024-10-23 05:01:22

zabbix监控端和被监控端的安装以及(nginx/mysql/java服务/redis)的监控配置, 并告警<a href=https://www.elefans.com/category/jswz/34/1771348.html style=发送到钉钉群"/>

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;
}
监控端配置
  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/.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, 来获取此变量
  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 konne20220125.
    
  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 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}&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.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()
  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}
效果:

更多推荐

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

本文发布于:2024-03-09 15:05:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725324.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:发送到   mysql   nginx   zabbix   钉钉群

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!