zabbix的安装配置,邮件告警,钉钉告警

news/2024/12/23 1:31:30/

zabbix监控架构

zabbix优点

  •  开源,无软件成本投入
  • server对设备性能要求低
  • 支持设备多,自带多种监控模板
  • 支持分布式集中管理,有自动发现功能,可以实现自动化监控
  • 开放式接口,扩展性强,插件编写容易
  • 当监控的item比较多服务器队列比较大时可以采用主动状态,被监控客户端主动从server端去下载需要监控的item然后取数据上传到server端。这种方式对服务器的负载比较小
  • Api的支持,方便与其他系统结合

zabbix缺点

需在被监控主机上安装agent,所有数据都存在数据库里,产生数据很大,瓶颈主要在数据库

zabbix的安装

安装

[root@zabbix-server ~]# yum install -y https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zabbix-server ~]# yum clean all
[root@zabbix-server ~]# yum makecache fast
[root@zabbix-server ~]#  yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql

数据库安装配置

[root@zabbix-server ~]#  yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
[root@zabbix-server ~]# vim /etc/yum.repos.d/mysql-community.repo(打开5.7的源关闭8.0的源)
[root@zabbix-server ~]# systemctl start mysqld
[root@zabbix-server ~]# grep "password" /var/log/mysqld.log
[root@zabbix-server ~]# mysql -uroot -p'password'
mysql> create database zabbix character set utf8 collate utf8_bin;  # 创建zabbix数据库
mysql> grant all on zabbix.* to 'zabbix'@'%' identified by 'keer';  # 注意授权网段
mysql> flush privileges; 

数据表导入

[root@zabbix-server ~]# rpm -ql zabbix-server-mysql
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.10/create.sql.gz | mysql -uzabbix -pkeer -h 192.168.203.162 zabbix

配置zabbix并启动

[root@zabbix-server ~]# cd /etc/zabbix
[root@zabbix-server zabbix]# cp zabbix_server.conf{,.bak} # 备份配置文件
[root@zabbix-server zabbix]# vim zabbix_server.conf 
ListenPort=10051            #默认监听端口
SourceIP=192.168.249.141     #发采样数据请求的IP
DBHost=192.168.249.141       #数据库对外的主机
DBName=zabbix               #数据库名称
DBUser=zabbix              #数据库用户
DBPassword=keer             #数据库密码
DBPort=3306                 #数据库启动端口
[root@zabbix-server zabbix]# systemctl start zabbix-server.service

配置web GUI

[root@zabbix-server ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend] # 将这个软件源设置为启动
enabled=1
[root@zabbix-server ~]# yum install centos-release-scl
[root@zabbix-server ~]# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
[root@zabbix-server ~]# vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf(删除多余server模块,或修改端口)
[root@zabbix-server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
listen.acl_users = apache,nginx
php_value[date.timezone] = Asia/Shanghai
root@zabbix-server ~]# systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
[root@zabbix-server ~]# systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

再进入web页面然后登录即可   默认用户名:admin   密码:zabbix

配置agent端

1.安装zabbix

下载安装官方yum源
[root@zabbix-slave1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
[root@zabbix-slave1 ~]# yum clean all
[root@zabbix-slave1 ~]# yum makecache fast
已加载插件:fastestmirror
正在清理软件源: base extras updates zabbix zabbix-non-supported
# yum 下载
[root@zabbix-slave1 ~]# yum install zabbix-agent zabbix-sender -y

2.修改配置文件

[root@zabbix-slave1 ~]# cd /etc/zabbix/
[root@zabbix-slave1 zabbix]# vim zabbix_agentd.conf
Server=172.16.147.153       #指明服务器是谁
ListenPort=10050            #自己监听的端口
ListenIP=0.0.0.0            #自己监听的地址,0.0.0.0表示本机所有地址
StartAgents=3               #优化时使用的ServerActive=172.16.147.153 #主动监控时的服务器
Hostname=node1.keer.com     #自己能被server端识别的名称
[root@zabbix-slave1 zabbix]# systemctl start zabbix-agent.service

zabbix页面添加监控机器的过程

先创建主机群组,再创建主机并加入到主机群组中,然后点击监控项,创建监控项,起个易懂的名称,设置键值选择要监控的模块,然后修改此键值所需要的信息类型以及单位,再测试并添加,再创建用于此模块的触发器,然后设置动作,发送通知或者自动修改。

邮箱,钉钉告警流程

邮箱告警:在创建完上方所需动作后,先修改配置文件sudo提权以及配置文件允许接收远程命令 ,把接收的远程命令计入日志,然后设置报警媒介类型中,创建媒体类型,在其中添加好自己要发送邮件的地址,然后添加完成后再进入用户中添加报警媒介,然后进入动作中添加发送消息的操作邮件,以及执行远程命令 

钉钉告警

 在群聊中添加自定义机器人

安装python依赖模块python-requests

yum -y install python3 python3-requests

 创建目录/etc/zabbix/创建zabbix_ding.conf文件,配置钉钉告警脚本zabbix_ding.conf

[root@qfedu ~]# 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

 在目录/var/log/zabbix中创建钉钉告警日志文件zabbix _ding.log,并设置权限

[root@qfedu ~]# touch /var/log/zabbix/zabbix_ding.log 
[root@qfedu ~]# 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

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

# cd /usr/lib/zabbix/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 sysconfig = 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_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 timestamp, sign# 获取加签后的链接
def get_signed_url():timestamp, sign = get_timestamp_sign()webhook = api_url + "&timestamp=" + timestamp + "&sign=" + signreturn webhook# 定义消息模式
def get_webhook(mode):if mode == 0:  # only 关键字webhook = api_urlelif mode == 1 or mode == 2:  # 关键字和加签 或 # 关键字+加签+ipwebhook = get_signed_url()else:webhook = ""print("error! mode:   ", mode, "  webhook :  ", webhook)return webhookdef 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:关键字+加签+IPwebhook = 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)

设置脚本目录的所以权,并测试

chown -R zabbix.zabbix /usr/lib/zabbix/alertscripts/
chmod +x dingding.py 
./dingding.py  user subject mesages

然后在web端配置告警媒介

{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} 


http://www.ppmy.cn/news/1230099.html

相关文章

庖丁解牛:NIO核心概念与机制详解 06 _ 连网和异步 I/O

文章目录 Pre概述异步 I/OSelectors打开一个 ServerSocketChannel选择键内部循环监听新连接接受新的连接删除处理过的 SelectionKey传入的 I/O回到主循环 Pre 庖丁解牛:NIO核心概念与机制详解 01 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现…

单图像3D重建AI算法综述【2023】

计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…

LongAdder功能和原理

AtomicLong能保证并发情况下计数的准确性,其内部通过CAS来解决并发安全性的问题。 AtomicLong的缺点: 可以看到在高并发情况下,当有大量线程同时去更新一个变量,任意一个时间点只有一个线程能够成功,绝大部分的线程在尝…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`

嗨,亲爱的读者们!欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中,jQuery 提供了简便而强大的工具,其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…

CTFHub Git泄露

Log 前言 根据题目描述,这个题目需要使用到工具 GitHack 来完成,而 CTFHub 上提供的工具需要在 python2 环境中执行,注意 python3 环境无法使用。 GitHack准备(kali Linux) 打开虚拟机 sudo su 以管理员的身份运行…

vue统一登录

说明: 统一登录其实就是前端去判断Url地址的token 之后如果有token未过期就直接跳转到首页。 说到浏览器输入url地址,那从浏览器输入地址一共发生了几件事大致如下: DNS解析域名,获取IP地址 --》 建立TCP连接(三次握…

MLP感知机python实现

from torch import nn from softmax回归 import train_ch3 import torch import torchvision from torch.utils import data from torchvision import transforms# ①准备数据集 def load_data_fashion_mnist(batch_size, resizeNone):# PyTorch中的一个转换函数,它…

手把手从零开始训练YOLOv8改进项目(官方ultralytics版本)教程

手把手从零开始训练 YOLOv8 改进项目 (Ultralytics版本) 教程,改进 YOLOv8 算法 本文以Windows服务器为例:从零开始使用Windows训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 文章目录 官方 YOLOv8 算法介绍改进网络代码汇总第…