博客作者:联系请 ,搬运不易,希望请作者喝咖啡,可以点击联系
前言
说明:本文介绍CentOS 8.3 搭建 Zabbix5.0 监控平台安装及相关要求
一、安装要求
内存和磁盘
Zabbix同时需要物理内存和磁盘空间。刚开始使用Zabbix,建议128MB物理内存和256MB可用磁盘空间。然而, 具体需要的内存大小和磁盘空间要根据主机数量和监控参数而定。如果你计划对监控的参数进行长期保存,你应该考虑至少在数据库中预留几个GB的空间,以用来保留历史数据。 每个Zabbix的守护进程需要与数据库服务器建立多个连接。分配给连接的内存数量,取决于数据库引擎的配置。
CPU
根据监控参数及选择的数据库引擎,Zabbix,特别是Zabbix数据库,可能需要大量的CPU资源,
其他硬件
如果需要启用短信(SMS)通知功能,需要串行通讯口(serial communication port)和串行GSM调制解调器(serial GSM modem)。USB转串行转接器也同样可以工作。
关闭NFtables和SElinux
复制 systemctl disable --now firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装系统常用软件包
复制 dnf install -y sysstat traceroute net-tools telnet tree \
net-snmp-utils vim lrzsz tcpdump wget git zip tar
二、安装 Zabbix 服务端
Zabbix 官方源
复制 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
替换为阿里云Zabbix源
复制 sed -i '3c baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/8/$basearch/' /etc/yum.repos.d/zabbix.repo
安装 Z abbix 服务端
复制 dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent vim
安装Apache和MariaDB并启动
复制 dnf install -y @httpd @mariadb
systemctl enable --now httpd mariadb
数据库根用户添加密码及安全设置
复制 mysql_secure_installation
步骤如下:
要求你配置VALIDATE PASSWORD component(验证密码组件): 输入y ,回车进入该配置
选择密码验证策略等级, 我这里选择0 (low),回车
不允许root远程登陆? 不需要输入y,需要远程登陆输入n ,回车
查询下root是否可以远程登陆,没有就配置一下
复制 mysql -uroot -p
use mysql;
select host,user from user;
配置远程登陆
复制 mysql -uroot -p
use mysql;
update user set host='%' where user='root';
flush privileges;
exit
关闭MySQL主机查询dns
MySQL会反向解析远程连接地址的dns记录,如果MySQL主机无法连接外网,则dns可能无法解析成功,导致第一次连接MySQL速度很慢,所以在配置中可以关闭该功能。
给/etc/my.cnf
文件,添加配置
复制 echo "[mysqld]
skip-name-resolve" >> /etc/my.cnf
重启服务
复制 systemctl restart mysqld
创建zabbix数据库,在数据库主机上运行以下内容。
复制 create database zabbix character set utf8 collate utf8_bin;
show databases;
create user zabbix@localhost identified by 'password';
flush privileges;
grant all privileges on zabbix.* to zabbix@localhost;
quit;
在 Zabbix 服务端主机上导入初始架构和数据。
复制 zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
三、启动Zabbix Server进程
在zabbix_server.conf中编辑配置
复制 vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
编辑Zabbix前端的PHP配置
复制 sed -i '$a php_value[date.timezone] = Asia/Shanghai' /etc/php-fpm.d/zabbix.conf
启动 Zabbix 服务器和代理进程,并设置开机自启动
复制 systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable --now zabbix-server zabbix-agent httpd php-fpm
配置 Zabbix 前端
数据库配置,输入数据库连接端口,zabbix数据库密码
Zabbix Server 配置,输入名称
确认配置信息
默认的用户是Admin,密码为zabbix
更换web页面显示语言,切换为zh_CN
解决Zabbix 图形中文乱码
字体文件目录:
复制 zabbix 4.0:/usr/share/zabbix/fonts/
zabbix 4.2:/usr/share/zabbix/assets/fonts/
zabbix5.0:/usr/share/zabbix/assets/fonts
php 脚本文件位置:
复制 /usr/share/zabbix/include/defines.inc.php
下载一个微软雅黑字体
复制 cd /usr/share/zabbix/assets/fonts
wget https://raw.githubusercontent.com/chenqing/ng-mini/master/font/msyh.ttf
mv -f msyh.ttf /usr/share/fonts/dejavu/DejaVuSans.ttf
systemctl restart zabbix-server
四、安装 Zabbix 客户端
关闭NFtables和SElinux
复制 systemctl disable --now firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装系统常用软件包
复制 dnf install -y sysstat traceroute net-tools telnet tree \
net-snmp-utils vim lrzsz tcpdump wget git zip tar
注意: 这里需要下载和Zabbix Server版本一致的Zabbix Agent 软件包和Yum源
Zabbix 官方源
复制 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
替换为阿里云Zabbix源
复制 sed -i '3c baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/8/$basearch/' /etc/yum.repos.d/zabbix.repo
安装 Z abbix 客户端
复制 dnf -y install zabbix-agent zabbix-sender
配置zabbix_agent.conf客户端
zabbix_agent.conf配置说明
PidFile Pid文件
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogType 日志类型,system\file\console,默认file
LogFile 日志文件
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize 日志大小,0-1024MB,0禁用自动日志轮换
LogFileSize=0
DebugLevel 调试级别,0~5,默认为3显示waring信息
SourceIP 源IP,默认为空,可以写机器IP地址
SourceIP=机器IP
Server zabbix-server的IP或名称,列出主机接受传入的连接
Server=服务端机器IP
ListenIP 监听IP,zabbix-agent的IP
ListenIP=机器IP
StartAgents 监听的服务,zabbix-server的IP地址
ServerActive=服务端机器IP:10051
Hostname 主机名zabbix-agent的IP,在zabbix-web上添加hosts时用这个名称
Hostname=机器的名称
UnsafeUserParameters=1 默认为0,不允许使用以下字符 ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @,此外,不允许换行符,修改为1,表示自定义脚本中可以包含特殊字符。
HostMetadataItem 主机元数据,默认是system.uname,当Agent程序向服务端发送自动注册请求时,会发送其主机名,在某些情况下,Zabbix服务器的主机名不足以区分发现的主机,主机元数据可将其他信息从Agent发送到服务端。
复制 vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.186.139 # 服务器IP
ServerActive=192.168.186.139 # 服务器IP
Hostname=hezhiqiang-agent01 # 客户端主机名
UnsafeUserParameters=1 # 默认为0,修改为1,表示自定义脚本中可以包含特殊字符。
HostMetadataItem=system.uname # 主机元数据
启动 Zabbix 代理进程,并设置开机自启动
复制 systemctl enable --now zabbix-agent.service
五、Zabbix5.0 监控 Nginx
安装 Nginx
复制 vim /etc/yum.repos.d/nginx.repo
复制 [nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
复制 dnf makecache timer
dnf info nginx
dnf install -y nginx
复制 rm -rf /etc/nginx/conf.d/default.conf
查看当前Nginx是否已安装内置运行状态模块
从命令返回值中出现“--with-http_stub_status_module
”这一个模块即代表内置运行状态模块已开启
开启运行状态模块,编辑Nginx配置文件
注意: stub_status模块只能应用在server或者location下
复制 vim /etc/nginx/nginx.conf
参考以下内容进行修改:
server {
location /status { #定义运行状态页面名称,页面为status
stub_status on; #开启模块
access_log off; #不开启访问日志记录
allow 127.0.0.1; #运行127.0.0.1地址访问此网页
allow 192.168.186.0/24; #只运行192.168.186.0网段的主机访问此网页
deny all; #其余网段主机不允许访问
}
}
检查配置文件语法是否正确,然后重启nginx服务
复制 nginx -t
systemctl restart nginx
浏览器访问运行状态页面
编写监控脚本
复制 mkdir /etc/zabbix/script
vim /etc/zabbix/script/nginx_status.sh
#!/bin/bash
#function: monitor nginx1.16 for zabbix5.0
#blog: he.zhiqiang.cloud
#version: 1.0
#date: 2021/6/22
#定义Nginx status页面
ngx_status="http://127.0.0.1/status"
#判断status页面是否存活
ngx_status_code() {
http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
if [ ${http_code} == "200" ];then
return 1
else
echo "Nginx status is not running."
fi
}
#获取当前活动的客户端连接数
active() {
ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}
#获取接收客户端连接的总数量
accepts() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}
#获取已处理的连接总数量
handled() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}
#获取客户端请求总数量
requests() {
ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}
#获取正在读取请求标头的当前连接数量
reading() {
ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}
#获取正在将响应写回到客户端的当前连接数量
writing() {
ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}
#获取当前正在等待响应的客户端连接数量
waiting() {
ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}
#使用位置变量控制脚本输出
case $1 in
active)
active;;
accepts)
accepts;;
handled)
handled;;
requests)
requests;;
reading)
reading;;
writing)
writing;;
waiting)
waiting;;
*)
echo "Unknown options"
esac
复制 chmod +x /etc/zabbix/script/nginx_status.sh
创建自定义监控项
说明:自定义监控项,格式为:UserParameter=<键值>,<命令>。
比如第一个自定义键值为:nginx.active
,要执行的命令为执行nginx_status.sh
这个脚本。
复制 vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
UserParameter=nginx.active,bash /etc/zabbix/script/nginx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/nginx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/nginx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/nginx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/nginx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/nginx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/nginx_status.sh waiting
说明:添加完成以后,重启zabbix_agentd才会生效。
六、Zabbix Server Web界面添加被监控主机
配置——主机群组——创建主机群组——输入组名
要在Zabbix页面创建主机组,请执行以下步骤:
配置——主机——创建主机
按照以下步骤在Zabbix前端创建一台主机:
单击页面右上角 创建主机 (或者在主机名上单击以编辑一台已有的主机)
配置——模板——创建模板
要创建模板,请执行以下操作:
主机——监控项——创建监控项
要在Zabbix管理页面创建一个监控项,请执行以下操作:
主机——触发器——创建触发器
配置一个触发器,进行下面步骤:
点击右上角的 创建触发器(或者点击触发器名称去修改一个已存在的触发器)
主机——图形——创建图形
七、在Zabbix Server 中添加告警媒介
添加企业微信机器人告警脚本
zabbix_server.conf 文件中定义脚本目录,这里就选择了默认的目录
AlertScriptsPath=/usr/lib/zabbix/alertscripts
进入该定义的脚本存放路径下,创建用来推送告警消息的脚本
复制 vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# zabbix企业微信报警
import requests, json, sys, os, datetime
#微信钩子机器人地址
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxx"
#zabbix传过来的三个变量
user = sys.argv[1]
title = sys.argv[2]
text = sys.argv[3]
#每发送一次报警,就记一次日志
file = r"/var/log/zabbix/send2wechat.log"
#报警的信息
data = {
"msgtype": "markdown",
"markdown": {
"content": title + "\n" + text
}
}
#请求这个钩子机器人
headers = {'Content-Type': 'application/json'}
x = requests.post(url=webhook, data=json.dumps(data), headers=headers)
if os.path.exists(file):
f = open(file, "a+")
else:
f = open(file, "w+")
f.write(" " + " - -" * 30)
f.write("\n")
#记录日志
if x.json()["errcode"] == 0:
f.write(" "+ str(datetime.datetime.now()) + " " + str(user) + " " + "发送成功" + " " + str(title) + "\n")
f.close()
else:
f.write(" "+ str(datetime.datetime.now()) + " " + str(user) + " " + "发送失败" + " " + str(title) + "\n")
f.close()
赋予脚本执行权限
复制 chmod +x /usr/lib/zabbix/alertscripts/wechat.py
安装python3.9版本
复制 dnf -y install python39
Python3安装requests模块
测试脚本,告警推送
复制 python3 /usr/lib/zabbix/alertscripts/wechat.py 您好,监控测试
管理——报警媒介类型——创建媒介类型
新建一个企业微信的报警,脚本名称就是我们脚本名 wechat.py
管理——报警媒介类型—— Message templates
故障模板:
复制 主题:# 服务故障: <font color="warning">{EVENT.NAME}</font>
消息:
{
> 告警主机: **{HOST.NAME}**
> 主机地址: **{HOST.IP}**
> 监控项目: {ITEM.NAME}
> 当前取值: {ITEM.LASTVALUE}
> 告警等级: {TRIGGER.SEVERITY}
> 告警时间: {EVENT.DATE}-{EVENT.TIME}
> 事件ID: {EVENT.ID}
}
效果:
效果:
管理 --> 报警 --> 媒介类型 --> 企业微信报警 --> Message templates --> 编辑 --> 更新
用户设置——报警媒介——添加媒介类型
更新告警媒介
配置——动作——创建动作——添加触发器
配置动作
修改操作 --> 步骤 1-0(无穷大)
八、测试故障,查看报表是否已经推送成功
报表——动作日志