前言
监控系统对于确保系统稳定性、性能优化以及故障排除至关重要。zabbix 作为一款功能强大且灵活的监控解决方案,可以通过一个友好的界面进行浏览整个网站所有服务器状态、在 web 前端方便查看数据以及可以回溯事故时的问题和告警。
目录
一、zabbix 监控介绍
1. 定义
2. 构成
3. 主要特点
4. 主要功能
5. 运行机制
6. 监控对象(应用场景)
7. 监控原理
8. 监控模式
9. zabbix 监控常见程序
9.1 zabbix_server
9.2 zabbix_agent
9.3 zabbix_proxy
9.4 zabbix_get
9.5 zabbix_sender
9.6 zabbix_java_geteway
10. 监控的架构
10.1 server-client
10.2 server-proxy-client
10.3 master-node-client
二、部署 zabbix
1. 部署 zabbix 服务端
1.1 获取并更换 zabbix 的下载源
1.2 安装 zabbix 监控系统的服务器和代理组件及 SCL
1.3 安装 zabbix 前端环境到 scl 环境下
1.4 安装 zabbix 所需的数据库
1.5 修改 zabbix server 配置文件,修改数据库的密码
1.6 修改 zabbix 的 php 配置文件
1.7 启动 zabbix 相关服务,浏览器访问
1.8 解决 zabbix-server Web页面中文乱码问题
2. 部署 zabbix 客户端
2.1 时间同步
2.2 设置 zabbix 的下载源,安装 zabbix-agent2
2.3 修改 agent2 配置文件
2.4 启动 zabbix-agent2
2.5 在服务端验证 zabbix-agent2 的连通性
一、zabbix 监控介绍
1. 定义
zabbix 是一个基于 web 界面的提供分布式系统监控以及网络监视功能的企业级的开源解决方案;保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位、解决问题。
2. 构成
zabbix 由两部分构成,zabbix server 与可选组件 zabbix agent。通过 C/S 模式采集,通过 B/S 模式(网页端和服务端)在 web 端展示和配置(提供可视化界面,反馈给运维人员)。
zabbix server 可以通过 SNMP(网络协议),zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能, 它可以运行在 Linux 等平台上。
zabbix agent 需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU 等信息的收集。agent 端口:10050,server 端口:10051。
3. 主要特点
① 安装简单(yum),学习成本低
② 支持多种语言(包括中文)
③ 免费开源
④ 自动发现服务器与网络设备
⑤ 分布式监控以及 web 集群中的管理功能
⑥ 可以通过邮件、短信、语言、微信、钉钉等通知
4. 主要功能
① CPU负载
- 监控 CPU 负载对于了解系统的处理能力至关重要,高 CPU 负载可能表明潜在的性能问题或资源限制
② 内存使用
- 跟踪内存使用有助于识别消耗大量内存的进程,并确保系统具有足够的可用内存以实现平稳运行
③ 磁盘使用率
- 监控磁盘使用是预测存储容量需求、防止因磁盘已满而导致数据丢失以及识别与磁盘 I/O 相关的潜在性能瓶颈的关键
④ 网络状态
- 监控网络状态涉及跟踪带宽使用、数据包丢失、延迟和整体网络健康状况,这对于确保顺畅通信并识别潜在的网络问题至关重要
⑤ 端口监视
- 端口监视涉及跟踪网络端口的状态和活动,这对于安全性、网络故障排除和识别潜在漏洞至关重要
⑥ 日志监视
- 日志监视涉及分析系统和应用程序日志以识别错误、安全威胁和操作问题,从而实现积极维护和问题解决
⑦ 插件开发自定义
- 自定义插件开发允许扩展监控能力以跟踪特定指标或与特定系统集成,根据特定要求提供量身定制的见解
⑧ 业务监控
- 业务监控涉及跟踪与业务流程、应用程序或服务相关的关键绩效指标(KPI),确保它们达到运营和性能目标
5. 运行机制
数据流向:zabbix-agent(数据采集)——> zabbix-server(数据分析/告警)——> 数据库(存储)——> zabbix-web(数据展示)
① zabbix agent 部署在监控目标主机上,负责收集系统和服务的各种指标数据,如 CPU 使用率、内存使用情况、网络流量等,并将这些数据发送到 zabbix server
② zabbix server 接收来自 zabbix agent 的数据,并进行数据分析、存储和处理;对接收到的数据进行分析,并在必要时触发告警通知相关用户或用户组
③ zabbix server 将处理后的数据存储在数据库中,以便长期存档和后续分析
④ zabbix web 是用户界面,通过该界面用户可以查看已存储的监控数据、配置监控项、创建报表以及管理告警等
6. 监控对象(应用场景)
① 硬件监控:如 CPU 使用率、内存利用率、磁盘空间、温度传感器等。
② 系统监控:可以监控操作系统的各项参数,包括进程状态、负载情况、文件系统状态等。
③ 网络监控:监控网络设备的状态、流量、带宽利用率等,并对网络连通性进行检测。
④ java 监控:对于基于 Java 的应用程序,Zabbix 可以监控 JVM 的运行状态、内存使用情况、垃圾回收等。
⑤ 应用服务器监控:监控各种应用服务器,如 Tomcat、Nginx、Apache等。
⑥ 数据库监控:监控数据库服务器的各种指标,如查询响应时间、连接数、缓冲池利用率等。
⑦ url 监控:监控 Web 页面的可用性和响应时间。
⑧ vmware 监控:监控 VMware 虚拟化环境中的虚拟机和宿主机的各种性能指标,包括 CPU 利用率、内存使用情况、虚拟磁盘性能等。
7. 监控原理
① zabbix agent 安装在被监控的主机上,zabbix agent 负责定期收集客户端本地各项数据,并发送至 zabbix server 端
② abbix server 收到数据后,将数据存储到数据库中,用户基于 Zabbix WEB 可以看到数据在前端展现图像;zabbix server 可以使用代理程序主动轮询监控目标(被动监控,即 server 向 agent 发起连接),也可以直接从被监控设备上获取数据(主动监控 agent 向 server发起连接)
③ 当 zabbix 监控某个具体的项目, 该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(shell 命令、reboot、restart、install 等)
8. 监控模式
① 被动监控:server 端向 agent 端发起连接,根据情况可选,不适用被监控主机过多的情况
② 主动监控:agent 端向 server 端发起连接,可以减轻服务器压力,适用被监控主机过多的情况
9. zabbix 监控常见程序
zabbix 监控部署在系统中,包含常见的五个程序: zabbix_server、zabbix_agent、zabbix_proxy、zabbix_get、zabbix_sender;在 2.0 版本后新增了 zabbix_java_geteway。
9.1 zabbix_server
zabbix 服务端的守护进程,这是Zabbix的核心组件,负责处理数据收集、存储、触发器处理、报警等功能。
9.2 zabbix_agent
zabbix 客户端的守护进程,安装在被监控设备上的一个小型程序,用于主动采集该设备的性能数据,并将其发送给zabbix_server。
9.3 zabbix_proxy
分布式代理守护进程,通常 agent 大于500台使用(不过生产环境中300台左右就会出现卡顿现象);可选的中间层,用于分担 zabbix_server 的压力。
9.4 zabbix_get
数据接收命令行工具,通常在 server 和 proxy 执行,用于从被监控设备上主动获取指定的监控项数值。
9.5 zabbix_sender
也是一个命令行工具,用于向 zabbix_server 发送自定义的监控数据,由用户发给 server 或 proxy。
9.6 zabbix_java_geteway
zabbix 2.0 版本后新增的组件,用于监控 Java 应用程序的性能数据。
10. 监控的架构
10.1 server-client
最简单的架构,监控机器和被监控机器之间不经过任何处理,直接由 server-client 之间数据交换;适用于比较简单的网络,尽量在局域网内、设备较少的监控环境。
10.2 server-proxy-client
proxy 是沟通的桥梁(代理);本身有前端,并不存放数据,将 agent 发来的数据暂时存放,提交给 server。适用于跨机房、跨网络的中型架构,一般大于500台以上才使用。
10.3 master-node-client
master-node-client 该架构是 zabbix 最复杂的监控架构,适用于跨网络跨机房设备多的大型环境。每个 node 同时接一个 sever 端,node下面可以接 proxy 端,也可以直接连接 client,node 有自己的配置文件和数据库,其要做的是将配置信息和监控数据向 master 进行数据同步,master 故障损坏对 node 其下架构的完整性无任何影响。
二、部署 zabbix
环境准备:
节点 | IP | 安装软件 | 操作系统 |
zabbix 服务端 | 192.168.190.105 | zabbix-server-mysql zabbix-agent zabbix-web-mysql-scl zabbix-apache-conf-scl mariadb-server mariadb wqy-microhei-fonts | centos 7.4 |
zabbix 客户端 | 192.168.190.106 | zabbix-agent2 zabbix-get | centos 7.4 |
systemctl stop firewalld.service
setenforce 0
hostnamectl set-hostname zbx-server # 分别修改节点主机名
hostnamectl set-hostname zbx-client
1. 部署 zabbix 服务端
1.1 获取并更换 zabbix 的下载源
[root@zbx-server ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zbx-server ~]# cd /etc/yum.repos.d
[root@zbx-server yum.repos.d]# sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo
[root@zbx-server yum.repos.d]# yum clean all && yum makecache
1.2 安装 zabbix 监控系统的服务器和代理组件及 SCL
[root@zbx-server ~]# yum install -y zabbix-server-mysql zabbix-agen
# zabbix-server-mysql: 这是Zabbix服务器的MySQL版本的软件包,安装了Zabbix服务器组件,以便Zabbix监控系统能够运行并通过MySQL保存数据。
# zabbix-agent: 这是Zabbix代理软件包,安装了Zabbix代理组件,用于在被监控设备上主动提供监控数据给Zabbix服务器。安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /opt/rh 目录下。
[root@zbx-server ~]# yum install -y centos-release-scl
1.3 安装 zabbix 前端环境到 scl 环境下
[root@zbx-server ~]# vim /etc/yum.repos.d/zabbix.repo
……
[zabbix-frontend]
……
enabled=1
……
# 修改 zabbix-front 前端源[root@zbx-server ~]# yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
# 在CentOS上安装 Zabbix Web 界面和 Apache 配置的软件包
# zabbix-web-mysql-scl:这个软件包提供了 Zabbix 的 Web 界面部分,并且使用了 MySQL 数据库作为后端存储
# zabbix-apache-conf-scl:这个软件包提供了与 Apache 服务器相关的 Zabbix 配置文件,用于与 Apache 服务器协同工作
1.4 安装 zabbix 所需的数据库
[root@zbx-server ~]# yum install -y mariadb-server mariadb
# 安装 MariaDB 数据库服务器及其相关组件
[root@zbx-server ~]# systemctl enable --now mariadb
# 启用并立即启动MariaDB数据库服务器
[root@zbx-server ~]# mysql_secure_installation
# 回车、y,输入密码、确认密码,一直y
[root@zbx-server ~]# mysql -u root -p'123123' # 登录数据库
MariaDB [(none)]> CREATE DATABASE zabbix character set utf8 collate utf8_bin;
# 在 MySQL 中创建了一个名为 zabbix 的数据库,并且使用了 UTF-8 的字符集以及校对规则
MariaDB [(none)]> GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
# 为 zabbix 数据库创建了一个用户名为 zabbix 的用户,并且授予了该用户对 zabbix 数据库的全部权限,密码为 zabbix
MariaDB [(none)]> flush privileges;
# 刷新权限,使修改后的权限立即生效
[root@zbx-server ~]# rpm -ql zabbix-server-mysql # 查询 sql 文件的位置
/usr/share/doc/zabbix-server-mysql-5.0.42
[root@zbx-server ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz | mysql -uroot -p123123 zabbix
# 将 Zabbix 监控系统所需的数据库结构导入到名为 zabbix 的数据库中
1.5 修改 zabbix server 配置文件,修改数据库的密码
[root@zbx-server ~]# vim /etc/zabbix/zabbix_server.conf
124 DBPassword=zabbix # 指定 zabbix 数据库的密码
1.6 修改 zabbix 的 php 配置文件
[root@zbx-server ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf25 php_value[date.timezone] = Asia/Shanghai # ;取消注释,修改时区东八区
1.7 启动 zabbix 相关服务,浏览器访问
[root@zbx-server ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zbx-server ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
# rh-php72-php-fpm:这是PHP-FPM(FastCGI Process Manager)的服务名称。在这个特定的情景中,rh-php72-php-fpm表示Red Hat 软件集合(Software Collections Library)中包含的 PHP 版本 7.2 的 PHP-FPM 服务。http://192.168.190.105/zabbix
# 点击下一步,设置数据库的密码 zabbix
# 安装完成后,默认的登录账号和密码为:Admin/zabbix
# 设置文件界面:点击左边菜单栏的【User settings】,【Language】选择 Chinese(zh_CN),再点击 Update 更新。
1.8 解决 zabbix-server Web页面中文乱码问题
[root@zbx-server ~]# yum install -y wqy-microhei-fonts
[root@zbx-server ~]# \cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.tt
# 将一种字体文件复制或替换为另一种字体文件
2. 部署 zabbix 客户端
zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2;zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。
2.1 时间同步
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
# 服务端和客户端都配置 ntp 时间同步[root@zbx-client ~]# mv /etc/localtime{,.bak}
[root@zbx-client ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 改变系统的时区为上海时间
2.2 设置 zabbix 的下载源,安装 zabbix-agent2
[root@zbx-client ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zbx-client ~]# cd /etc/yum.repos.d
[root@zbx-client yum.repos.d]# sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
[root@zbx-client yum.repos.d]# yum install -y zabbix-agent2
2.3 修改 agent2 配置文件
[root@zbx-client ~]# vim /etc/zabbix/zabbix_agent2.conf80 Server=192.168.190.105 # 指定 zabbix 服务端的 IP 地址125 ServerActive=192.168.190.105 # 指定 zabbix 服务端的 IP 地址136 Hostname=zbx-agent01 # 指定当前 zabbix 客户端的主机名
2.4 启动 zabbix-agent2
[root@zbx-client ~]# systemctl start enable --now zabbix-agent2
[root@zbx-client ~]# netstat -natp | grep zabbix
tcp6 0 0 :::10050 :::* LISTEN 36744/zabbix_agent2
2.5 在服务端验证 zabbix-agent2 的连通性
[root@zbx-server ~]# yum install -y zabbix-get
# 安装 zabbix 主动获取数据的命令
[root@zbx-server ~]# zabbix_get -s '192.168.190.106' -p 10050 -k 'agent.ping'
1
[root@zbx-server ~]# zabbix_get -s '192.168.190.106' -p 10050 -k 'system.hostname'
zbx-client