Zabbix 6.0
1.Zabbix 组件 C/S架构
(1)服务端
1)zabbix server(端口10051):zabbix服务端进程,用于接收代理端发来的监控指标数据,配置和管理zabbix应用程序,也是监控系统的告警中心(通过监控项告警触发配置实现)
2)zabbix database:持久化存储配置信息和监控指标数据(支持mysql postgresql oracle db2 tsdb等)
3)zabbix web:用于zabbix服务端配置管理界面和监控数据的UI界面的展示(支持LAMP/LNMP)
(2)客户代理端
1)zabbix agent(端口10050):部署在被监控的主机上,采集监控指标数据,并发送给zabbix server(数据采集支持主动模式和被动模式)
①主动模式:zabbix agent 主动向 zabbix server 请求监控项列表,并返回监控项所需要采集的监控指标数据给 zabbix server
②被动模式:zabbix agent 被动接收 zabbix server 请求的监控指令,zabbix agent 再返回监控项所需要的监控指标数据给 zabbix server
2)zabbix java gateway:用于获取从通过在JAVA应用暴露的JXM远程端口采集的监控指标数据
3)zabbix proxy:zabbix代理端进程,部署在zabbix server与zabbix agent之间,代替zabbix server接收zabbix agent发来的监控指标数据并存储在本地数据库,汇总后再转发给zabbix server, 从而可以分担zabbix server的集中式负载压力
2.Zabbix工作原理
zabbix agent 等代理端会定期采集被监控主机的指标数据并发送给 zabbix server,zabbix server 接收数据后会存储带 zabbix database 中,管理员可基于 zabbix web 在浏览器页面查看监控数据的图像。
3.Zabbix 6.0 部署
###关闭 selinux 与防火墙
systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
disabled
(1)部署 zabbix 服务端
##部署 Nginx + PHP 环境并测试
#安装 nginx
cd /etc/yum.repos.d/
ls
mv repo.bak/* ./
mv local.repo repo.bak/
ls
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
vim CentOS-Base.repo
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum install -y nginx
#安装 php
yum install -y epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
cd /opt/
mkdir php
createrepo php/ #自动生成yum数据库依赖关系
cd php/
vim /etc/yum.repos.d/repo.bak/local.repo
baseurl=file:///opt/php
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath
#修改 nginx 配置
vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name zbx.xlb666.com;
location / {
root /var/www/zbx;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /var/www/zbx;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/zbx$fastcgi_script_name;
include fastcgi_params;
}
}
nginx -t
#修改 php 配置
vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
vim /etc/php.ini
max_execution_time = 300 # 368行
max_input_time = 600 # 378行
post_max_size = 80M # 656行
date.timezone = Asia/Shanghai # 877行
#创建目录和测试文件
mkdir -p /var/www/zbx
vim /var/www/zbx/index.php
<?php
phpinfo();
?>
#启动服务
systemctl enable --now nginx php-fpm
#测试访问(hosts解析)
方法一
修改 C:\Windows\System32\drivers\etc\hosts
192.168.80.20 zbx.kgc.com
方法二
echo 20.0.0.170 zbx.xlb666.com > /etc/hosts
(2)部署数据库
MySQL 5.7 或 Mariadb 10.5 及以上版本
#配置 Mariadb yum源
cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
EOF
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
#初始化数据库
mysql_secure_installation
mysql -u root -pabc123
#创建数据库并指定字符集
CREATE DATABASE zabbix character set utf8 collate utf8_bin;
show databases;
#创建 zabbix 数据库用户并授权
GRANT all ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
#向数据库导入 zabbix 数据
cd /opt/
rz -E 上传zabbix-6.0.31.tar.gz
tar xf zabbix-6.0.31.tar.gz
ls
cd zabbix-6.0.31/
ls
cd database/
cd mysql/
ls *.sql
#按照顺利导入数据库
for i in schema.sql images.sql data.sql double.sql history_pk_prepare.sql
do
mysql -uroot -pabc123 zabbix < $i
done
mysql -u root -pabc123
show tables from zabbix;
(3)编译安装 zabbix Server 服务端
#安装依赖包,创建 zabbix 用户
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make
useradd -M -s /sbin/nologin zabbix
id zabbix
#编译安装
cd /opt/zabbix-6.0.31
ls
./configure \
--sysconfdir=/etc/zabbix/ \
--enable-server \
--with-mysql \
--with-net-snmp \
--with-libxml2 \
--with-ssh2 \
--with-openipmi \
--with-zlib \
--with-libpthread \
--with-libevent \
--with-openssl \
--with-ldap \
--with-libcurl \
--with-libpcre
make install
#检查版本
zabbix_server --version
#修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf
#准备 systemctl 服务管理文件
cat > /usr/lib/systemd/system/zabbix-server.service << EOF
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-relead
#日志文件创建
touch /var/log/zabbix_server.log
chown zabbix:zabbix /var/log/zabbix_server.log
systemctl enable --now zabbix-server
netstat -lntp | grep zabbix
(4)部署 Web 前端,进行访问
cd /opt/zabbix-6.0.13/ui/
cp -a * /var/www/zbx/
chown -R nginx:nginx /var/www/zbx/
ll /var/www/
ll /var/www/zbx/
(5)安装 zabbix 客户端,实现 zabbix 服务端自我监控
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
#zabbix 5.0 版本开始采用 golang 语言开发的新版本客户端 agent2
yum install zabbix-agent2 zabbix-agent2-plugin-* -y
systemctl enable --now zabbix-agent2.service
netstat -lntp | grep zabbix
(6)解决 zabbix-server Web页面中文乱码问题
rpm -q wqy-microhei-fonts
#yum install -y wqy-microhei-fonts 没有yum安装
\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /var/www/zbx/assets/fonts/DejaVuSans.ttf
4.添加 zabbix 客户端主机
systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
disabled
(1)服务端和客户端都配置时间同步
timedatectl
#yum install -y ntpdate
#ntpdate -u ntp.aliyun.com
systemctl status chronyd
hostnamectl set-hostname zbx-agent01
bash
(2)服务端和客户端都设置 hosts 解析
vim /etc/hosts
20.0.0.170 zbx-server
20.0.0.160 zbx-agent01
(3)设置 zabbix 的下载源,安装 zabbix-agent2
cd /etc/yum.repos.d/
ls
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
ls
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
yum install zabbix-agent2 zabbix-agent2-plugin-* -y
systemctl enable --now zabbix-agent2.service
netstat -lntp | grep zabbix
(4)修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
(5)启动 zabbix-agent2
systemctl restart zabbix-agent2.service
netstat -natp | grep zabbix
(6)在服务端验证 zabbix-agent2 的连通性
yum install -y zabbix-get #安装 zabbix 主动获取数据的命令
zabbix_get -s '20.0.0.160' -p 10050 -k 'agent.ping'
zabbix_get -s '20.0.0.160' -p 10050 -k 'system.hostname'
常用的键值 | |
---|---|
agent.ping | 服务端与客户端是否连通,返回1表示可达,返回非表示不可达 |
system.hostname | 系统主机名 |
agent.hostname | 客户端主机名 |
net.if.in[if, |
网络接口进入的流量统计,if表示网卡名称,带<>的参数表示可以省略 |
net.if.out[if, |
网络接口流出的流量统计 |
proc.num[ |
进程数 |
net.tcp.port[ |
检查是否能建立tcp连接到指定端口,返回0表示不能连接,返回1表示可以连接 |
(7)在 Web 页面中添加 agent 主机
监控模板下载地址
https://share.zabbix.com/
https://monitoringartist.github.io/zabbix-searcher/
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
5.自定义监控内容
案列:自定义监控客户端服务器登录的人数
需求:限制登录人数不超过 3 个,超过 3 个就发出报警信息
(1)在客户端创建自定义 key
明确需要执行的 linux 命令
who | wc -l
pkill -9 -t pts/0 #杀掉用户
创建 zabbix 的监控项配置文件,用于自定义 key
cd /etc/zabbix/zabbix_agent2.d/
vim UserParameter_login.conf
UserParameter=login.user,who | wc -l
systemctl restart zabbix-agent2.service
在服务端验证新建的监控项
zabbix_get -s '20.0.0.160' -p 10050 -k 'login.user'
(2)在 Web 页面创建自定义监控项模板
1.创建模板
2.创建监控项
3.创建触发器(当监控项获取到监控的值后和触发器预设的值进行对比,判断是否报警)
4.创建图形
5.将主机与模板关联起来(一个主机可以关联多个模板)
6.设置邮件报警
测试邮件报警
增加测试客户端的用户登录数超过触发器预设的值,查看【监测】-->【仪表板】,确认报警
(3)配置邮件报警通知
1)在zabbix服务端Web管理页面【管理】-【媒介】中创建 报警媒介类型 和 消息模板
2)在【用户设置】-【配置】-【报警媒介】中设置 邮件接收人 启用时间 严重级别
3)在【配置】-【动作】-【触发器动作】创建 动作,设置 动作条件 操作细节
4)测试验证
(4)如何自定义监控模板?
1)先明确获取监控指标数据的命令或脚本
2)在被监控主机的配置文件目录中(/etc/zabbix/zabbix_agent2.d/)创建以 .conf 为结尾的监控项配置文件,在配置文件文件里自定义监控项的键值,再重载zabbix-agent2服务
键值配置格式:UserParameter=<键名>,<获取值的命令/脚本路径>
3)在zabbix服务端Web管理页面中依次添加 模板 - 监控项 - 触发器 - 图形
4)将监控模板和被监控主机相关联
6.zabbix 自动发现与自动注册
zabbix自动发现 zabbix server服务端主动发现 zabbix agent客户端
1)在【配置】-【自动发现】创建 发现规则,设置 IP范围 检测键值(system.uname)
2)在【配置】-【动作】-【发现动作】创建 动作,设置 动作条件 操作细节
3)等待agent自动加入(可重启 agent server加快速度)
zabbix自动注册 zabbix agent客户端主动找 zabbix server 服务端注册
1)修改zabbix agent配置文件,取消注释 HostnameItem=system.hostname
2)在【配置】-【动作】-【自动注册动作】创建 动作,设置 动作条件 操作细节
3)等待agent自动加入
7.zabbix 监控 java 应用
(1)在 java 应用启动参数中添加开启 JMX 远程监控端口的配置
java \
-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.rmi.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=<服务器IP> \
-jar XXX.jar
(2)在zabbix server/proxy 安装 zabbix java gateway,修改 server/proxy 的配置文件,设置 JavaGateway 地址、StartJavaPollers 收集进程数
3)在zabbix服务端Web管理页面【配置】-【主机】添加 JMX 接口监控目标主机,默认端口为 12345
(1)zabbix 通过 SNMP 监控网络设备
在zabbix服务端Web管理页面【配置】-【主机】添加 SNMP 接口监控目标主机,默认端口为161;指定SNMP版本为2c,网络设备团体名(一般默认为 public)
(2)华为网络设备SNMP配置
设置SNMP基本信息,包括版本、团体名。
system-view
[Sysname] snmp-agent sys-info version v1 v2c
[Sysname] snmp-agent community read public
查看配置的只读团体名
[Sysname] display snmp-agent community read
8.部署 zabbix 代理服务器
分布式监控的作用:
●分担 server 的集中式压力
●解决多机房之间的网络延时问题
agent --> proxy --> server
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-proxy
- 设置 zabbix 的下载源,安装 zabbix-proxy
rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
sed -i 's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum install -y zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy
- 部署数据库,要求 MySQL 5.7 或 Mariadb 10.5 及以上版本
- 配置 Mariadb yum源
cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
EOF
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
#初始化数据库
mysql_secure_installation
分别输入 回车 -> n -> Y (设置root密码,如abc123) -> 后面一路 Y
mysql -u root -pabc123
#创建数据库并指定字符集
CREATE DATABASE zabbix_proxy character set utf8 collate utf8_bin;
#创建 zabbix 数据库用户并授权
GRANT all ON zabbix_proxy.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
GRANT all ON zabbix_proxy.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
FLUSH PRIVILEGES;
- 导入数据库信息
rpm -ql zabbix-sql-scripts #查询 sql 文件的位置
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql -uroot -pabc123 zabbix_proxy
- 修改 zabbix-proxy 配置文件
vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.80.20 #32行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-proxy #42行,指定当前 zabbix 代理服务器的主机名
DBPassword=zabbix #194行,指定当前数据库 zabbix 用户的密码
- 启动 zabbix-proxy
systemctl start zabbix-proxy
systemctl enable zabbix-proxy
- 在所有主机上配置 hosts 解析
vim /etc/hosts
192.168.80.20 zbx-server
192.168.80.30 zbx-agent01
192.168.80.13 zbx-proxy
- 在 Web 页面配置 agent 代理
点击左边菜单栏【配置】中的【动作】,勾选自动注册规则,点击 禁用
点击左边菜单栏【配置】中的【主机】,勾选原有的客户端主机,点击 删除
点击左边菜单栏【管理】中的【agent代理程序】,点击【创建代理】
【agent代理程序名称】输入 zbx-proxy
【系统代理程序模式】选择 主动式
【代理地址】输入 192.168.80.13
点击 【添加】
- 配置 agent 使用 proxy
1.在客户端修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.80.13 #80行,指定 zabbix 代理服务器的 IP 地址
ServerActive=192.168.80.13 #120行,指定 zabbix 代理服务器的 IP 地址
2.在 Web 页面配置
点击左边菜单栏【配置】中的【主机】,点击【创建主机】
【主机名称】输入 zbx-agent01
【可见的名称】输入 zbx-agent01
【模板】搜索 Linux ,选择 Linux by Zabbix agent
【群组】选择 Linux server
【Interfaces】选择 客户端,【IP地址】输入 192.168.80.30,【端口】输入 10050
【由agent代理程序监测】选择 zbx-proxy
点击 【添加】
3.分别在客户端和代理服务器上重启服务
systemctl restart zabbix-agent2
systemctl restart zabbix-proxy
等待一段时间后,点击左边菜单栏【配置】中的【主机】刷新,查看客户端主机监控状态正常
在服务端查看日志
tail -f /var/log/zabbix/zabbix_proxy.log
9.部署 Zabbix 高可用集群
- 服务端配置
#主节点 Zabbix Server 配置
vim /etc/zabbix/zabbix_server.conf
......
DBHost=192.168.80.20
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
......
HANodeName=zbx-server01 #设置为当前节点主机名或者IP地址,需保证同一集群中唯一
NodeAddress=192.168.80.20:10051 #设置为相对应的节点IP
systemctl restart zabbix-server
- 主节点给数据库授权远程登录权限
mysql -uroot -pabc123
GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
FLUSH PRIVILEGES;
- 备节点 Zabbix Server 配置
vim /etc/zabbix/zabbix_server.conf
......
DBHost=192.168.80.20
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
......
HANodeName=zbx-server02
NodeAddress=192.168.80.30:10051
systemctl restart zabbix-server
- 客户端配置
vim /etc/zabbix/zabbix_agentd.conf
......
Server=192.168.80.20,192.168.80.30
ServerActive=192.168.80.20;192.168.80.30 #注意,ServerActive 的连接符是‘;’ ,而不是‘,’