本文重点在于Zabbix监控平台的工作原理与运行原理,后面会将详细的搭建流程展示,如有错误和遗漏的地方,欢迎大家指正,谢谢。
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。( 基于 GPL V2 )
zabbix由2部分构成,zabbix server 与可选组件 zabbix agent。
在系统构建时的正常流程中,通常是不允许未被监控的系统或应用上线的,因为未被监控的系统存在不可预知性、故障未知性等不稳定因素,且无法及时被发现并排除。这对整个架构或系统来说都是很大的风险隐患。所以我们原则上是需要对整个架构或系统进行监控,随时监测系统各方面的指标是否正常,以提高整个系统的稳定性。
一个完整的监控系统所需指标:
1.采样:周期性的获取某个被监测指标的相关数据
2.存储:将采集到的数据存储在指定的存储系统中,Zabbix默认是MySQL
对于数据的存储可分为两大类:
历史数据:可理解为过去某一时间点的数据
趋势数据:可理解为过去某一段时间的数据
3.展示:采集完数据后,为了使数据能更直观的展现在用户面前,可将采集到的数据做二次处理,做成各类图形。Zabbix就是使用的PHP程序将采集的数据通过Web GUI直观的展示给用户。
4.报警:当监控的指标出现异常时需要监控系统能自动的发出告警信息,甚至在出现报警后能自动完成修复。
1.SNMP:(Simple Network Management Protocol),监控网络设备或windows主机等。通过设定SNMP的参数将相关监控数据传送至服务端,交换机、防火墙等网络设备一般都支持SNMP协议。
2.Agent:Zabbix可以基于自身zabbix_agent客户端插件监控OS的状态,例如CPU、内存、硬盘、网卡、文件等。
3.IPMI:智能平台管理接口(Intelligent Platform Management Interface)即主要应用于设备的物理特性,包括:温度、电压、电扇工作状态,电源供应以及机箱入侵等。IPMI最大的优势在于无论OS的开机还是关机状态下,只要接通电源就可以实现对服务器的监控。
4.JMX:Java Management Extensions(不常见)
zabbix 安装完成后会产生 5 个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、 zabbix_server,zabbix_java_gateway 是可选,这个需要另外安装。
1.zabbix_agentd:客户端守护进程,此进程收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等。
2.zabbix_get:zabbix 工具,单独使用的命令,通常用于排错。
3.zabbix_sender:zabbix 工具,用于发送数据给 server 或者 proxy ,在脚本完成之后使用 sender 主动将数据提交 。
4.zabbix_server:zabbix 服务端守护进程,所有数据都是被提交或主动提交到 zabbix_server 端。
5.zabbix_proxy:zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。
6.zabbix_java_gateway:zabbix2.0 之后引入的一个功能。顾名思义:Java 网关,类似 agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy。
Zabbix监控客户端分为主动监控与被动监控,主被动模式以客户端为参照,Zabbix监控客户端默认为被动模式,可以修改为主动模式,只需要在客户端配置文件中添加 StartAgents=0。
Zabbix主动模式:Agent主动请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy,zabbix agent首先向ServerActive配置的IP请求获取active items,获取并提交active items数据至server/proxy。
Zabbix被动模式:Server向agent请求获取监控项的数据,agent返回数据,server打开一个TCP连接,Server发送请求agent.ping,Agent接收到请求并且响应,Server处理接收到的数据。
以下的总结和问题部分来自网上:https://blog.csdn.net/qq_37960324/article/details/93588260
https://blog.csdn.net/scott_bing/article/details/78613194
目前生产环境中,主流的监控解决方案大多为Zabbix和Prometheus。
Zabbix | Prometheus |
---|---|
后端用 C 开发,界面用 PHP 开发,定制化难度很高。 | 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。 |
集群规模上限为 10000 个节点。 | 支持更大的集群规模,速度也更快。 |
更适合监控物理机环境。 | 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。 |
监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属于不同的组件。 |
图形化界面比较成熟,界面上基本上能完成全部的配置操作。 | 界面相对较弱,很多配置需要修改配置文件。 |
发展时间更长,对于很多监控场景,都有现成的解决方案。 | 2015 年后开始快速发展,但发展时间较短,成熟度不及 Zabbix。 |
实验目的:搭建Zabbix监控平台
实验准备:两台标准C7系统虚拟机(selinux已关闭,防火墙规则已清空)
实验规划:
服务器角色 | 简称 | IP |
---|---|---|
监控端 | MS(Monitor Server) | 192.168.10.20 |
被监控端 | MC(Monitor Client) | 192.168.10.21 |
yum -y install mariadb mariadb-server httpd php php-mysql
systemctl enable httpd # 设置httpd开机自启
systemctl start httpd # 重启httpd服务
systemctl enable mariadb #设置mariadb开机自启
systemctl start mariadb # 开启mariadb服务
mysql_secure_installation # 安全初始化mariadb
# 操作为回车→y→123456→123456→y→y→y→y
mysql -uroot -p123456
配置Zabbix的yum仓库
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm # 安装Zabbix的yum源仓库
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX # 导入Zabbix秘钥
vim /etc/yum.repos.d/zabbix.repo # 将默认的源替换为国内镜像源
安装Zabbix的相关软件
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
初始化数据库
mysql -uroot -p123456
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; # 创建Zabbix数据库,默认字符集为utf8
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; # 配置Zabbix库访问权限,访问用户与密码都为zabbix
exit
还原数据库,进行还原操作后,进入数据库查看是否还原。
cd /usr/share/doc/zabbix-server-mysql-3.2.11/
zcat create.sql.gz | mysql -uroot -p123456 zabbix
mysql -uroot -p123456
show databases;
use zabbix
show tables;
exit
编辑Zabbix服务端配置文件,配置数据库信息。
vim /etc/zabbix/zabbix_server.conf
# 取消81行注释,配置指定zabbix的数据库服务器IP
DBHost=localhost
# 修改91行,配置指定zabbix使用的数据库库名
DBName=zabbix
# 修改107行,指定zabbix数据库登录用户
DBUser=zabbix
# 取消115行注释,指定zabbix数据库登录密码
DBPassword=zabbix
启动Zabbix客户端
systemctl start zabbix-server # 启动zabbix服务
systemctl enable zabbix-server # 设置zabbix服务开机自启
配置apache的默认主页目录,方便访问。
vim /etc/httpd/conf/httpd.conf
# 修改119行,配置默认目录
DocumentRoot "/usr/share/zabbix"
请求服务器正确时间
yum -y install ntpdate
/usr/sbin/ntpdate -u ntp1.aliyun.com # 请求正确时间
echo "/usr/sbin/ntpdate -u ntp1.aliyun.com" >> /etc/rc.d/rc.local # 开机自动请求正确时间
编辑zabbix前端php配置
vim /etc/httpd/conf.d/zabbix.conf
# 取消19行注释,配置正确时区
php_value date.timezone Asia/Shanghai
保存退出,启动服务。
systemctl start httpd
浏览器访问测试,进入安装页面。
192.168.10.20
点击 Next step进行下一步:检查先决条件
检测无误,点击 Next step进行下一步:配置数据库连接
输入正确信息后,点击 Next step进行下一步:配置服务器详细信息
点击 Next step进行下一步:查看安装总结
点击 Next step进行下一步:完成安装
点击Finish完成安装,进入登陆界面。登录时,用户名:Admin,密码:zabbix。
安装成功,开始配置中文界面。
点击Administration→Users→Admin→在language一栏中选择语言→Update应用设置
刷新页面
中文页面设置完毕
编辑客户端配置文件,配置本地主机信息。
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix服务器的IP或域名
Server=192.168.10.20
# 修改136行,指定主动方案中的zabbix服务器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本机的主机名,此项必须与web界面配置项一致
Hostname=192.168.10.20
保存退出,启动zabbix-agent服务并设置为开机自启。
systemctl start zabbix-agent
systemctl enable zabbix-agent
netstat -antp | grep :10050
返回浏览器配置被监控主机
配置→主机
将默认被监控机删除,自行添加新的被监控主机。
删除操作完成后,点击创建主机,开始配置被监控主机
配置主机信息
配置模版信息(监控项)
其余信息按需设置,点击添加完成设置。
查看监控
监测中→图形→选择群组、主机、图形(监控对象)
可以看出正在监测,但是有些字符无法显示(字符缺失)
win+R 输入fonts,找到设置的字体,上传至linux主机/usr/share/zabbix/fonts目录下。
原字体放到备份目录下,替换选择的字体名
然后刷新网页,发现网页字体变成中文。
cd /usr/share/zabbix/fonts/
mkdir back
mv graphfont.ttf back/ #
mv STXINWEI.TTF graphfont.ttf
chmod a+x graphfont.ttf
成功显示中文
安装Zabbix的agent端
yum -y install zabbix-agent-3.2.1-1.el7.x86_64.rpm
编辑客户端配置文件,配置被监控端信息。
vim /etc/zabbix/zabbix_agentd.conf
# 修改95行,指定zabbix服务器的IP或域名
Server=192.168.10.20
# 修改136行,指定主动方案中的zabbix服务器的IP或域名
ServerActive=192.168.10.20
# 修改147行,指定本机的主机名,此项必须与web界面配置项一致
Hostname=192.168.10.21
保存退出,启动zabbix-agent服务并设置为开机自启。
systemctl start zabbix-agent
systemctl enable zabbix-agent
netstat -antp | grep :10050
返回浏览器监控端添加被监控端
配置→主机→创建主机
主机信息设置
监控模版设置
其余配置按需配置,点击添加,完成监控配置。
点击小人头,设置报警声音提示。
安装一个自刷新插件,关闭被监测端HTTP服务,测试是否有报警声音。
出现错误,报警提示。(推荐使用Auto Refresher)
重新开启被监测端HTTP服务,提示已经修复。
基本的Zabbix监控配置搭建完毕,本文只展示了最基本的功能,之后的实验文档会展示进阶操作。
本文于2020年11月25日由Vonmerlot整理成文。