一、zabbix 监控系统概述
1、Zabbix是什么
-
zabbix是一个个基于web界而的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.
-
zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让理员快速定位/解决存在的各种问题.
-
zabbix由2部分构成。zabbix server 与可选组件zabbix agent 通过C/S模式采集数据,通过B/S模式在web端展示和配置.
-
zabbix server可以通过SNMP(简单网络管理协议), zabbix agent(监控端),ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能
-
他可以运行在Linux等平台上.
-
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集.
zabbix支持监控各种系统平台,包括linux和windows等主流操作系统,也可以借助SNMP或者SSH协议监控路由交换设备。
zabbix如果部署在服务器上,可以监控其CPU、内存、网络等硬件参数,也可以监控具体服务或者应用程序,服务运行情况及性能。
例如:
硬件
电源状态、cpu温度、机器温度、风扇。 物理磁盘、raid、内存状态、网卡状态等。
软件
HTTP接口、RPC接口的请求量、耗时、异常量等。
JVM上的线程数、死线程数、活跃线程数、GC耗时等。
(GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。) 线程池、连接池的连接数、线程数、拒绝任务、任务耗时等。
日志和业务指标,包括错误日志、访问日志、订单量、PV流量等。
数据
数据库连接、QPS、TPS 并行会话数、缓存数、锁状态等 Nginx的活跃、丢弃、等待连接数、错误等 Tomcat上的线程数、请求量、耗时、内存消耗等 缓存、内存消耗、内存碎片、消息队列等数据
2、Zabbix监控原理
Zabbix agent 安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发至 Zabbix server端,zabbix server收到数据后,将数据存储到数据库中。
用户基于Zabbix Web可以看到数据在前端展现图像。
当Zabbix监控监控某个具体项目,该项目会设置一个触发器阈值,当被监控的指标超过触发器设定的阈值,会进行一些必要的动作,动作包括: 发送信息(邮件、微信、短信、电话,钉钉)、发送命令(shell命令、rebbot、restart、install等)
当告警后,根据告警机制可以先自动处理(比如使用shell脚本启动nginx服务等),自动处理不了的,就会通知对应的运维人员进行处理。
原理总结
zabbix_server 服务端可以通过主动或被动的方式获取到zabbix_agent客户端的数据,zabbix_server拿到数据后进行分析,存放到自己的数据库中,zabbix再将数据给到web_server,然后用户通过client访问web_server的UI界面访问
3、zabbix常用术语
主机(host)
要监控的设备,可以有ip或是主机名(必须可解析)指定。
主机组(host group)
主机的逻辑容器,包含主机和模板,主机通常在给用户或是用户组指派监控权限时使用。
应用集(application)
一组监控的集合
web场景(web scennario)
用于检测web站点可用性的一个或多个HTTP请求
监控项(item)
一个特定指定的相关数据,比如内存的大小,CPU的使用率,甚至是服务的运行状态等,监控项数据来源于被监控对象,并且每一个监控项都由一个key值来标识。
触发器(trigger)
一个表达式,用于评估监控的值是否在合理的范围,当接收的值超出触发器的规定时,就被认为是故障,如果超出后再次符合,就被认为是正常。
事件(event)
触发器触发的一个特定时间,或者zabbix定义的一个自定上限注册主机的事件。
动作(action)
指根据配置,zabbix对于触发器触发的特定时间进行处理的具体措施,如执行某个脚本,或是向管理员邮箱发送邮件等等
报警升级(escalation)
发送警报或是执行远程命令的自定义方案。
媒介(media)
发送通知(告警)的手段,比如:电话,微信,邮件,短信,企业微信,钉钉,等等
通知(notification)
通过指定媒介,向用户发送的有关事件的信息
远程命令
指运维人员提前写好的命令,可以让被监控主机在触发事件后执行。
模板(template)
用于快速被监控主机的预设条目结合,通常包括了监控项、触发器、应用等,模板可以直接连接到某个主机
前端(frontend)
zabbix的web接口
4、Zabbix的缺点
-
需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据很大,瓶颈主要在数据库。
-
项目批量修改不方便。
-
社区虽然成熟,但是中文资料相对较少,服务支持有限。
-
入门容易,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发难度较大。
-
系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;且自定义的项目报警需要自己设置,过程比较繁琐。
-
缺少数据汇总功能,如无法查看-组服务器平均值, 需进行二次开发;
5、Zabbix的监控方式
主动模式
主动检测: 相对于agent而言; agent(active),agent向server请求与自己相关监控项配置, 主动地将server配置的监控项相关的数据发送给server;
主动监控能极大节约监控server的资源。
被动模式
被动检测:相对于agent而言 ; agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
6、Zabbix程序组件
-
Zabbix_ server:zabbix 服务端守护进程,其中 zabbix_agent、zabbix_get、zabbix_sender、zabbix_proxy 的数据最终都提交给 zabbix server;
-
Zabbix_ agentd:客户端守护进程,负责收集客户端数据,例如:收集 CPU 负载、内存、硬盘使用情况等;
-
zabbix_ proxy: zabbix 分布式代理守护进程,通常大于 500 台主机,需要进行分布式监控架构部署;
-
Zabbix_ get:zabbix 数据接收工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令;
-
Zabbix_ sender:zabbix 数据发送工具,用户发送数据给 server 或 proxy 端,通常用户耗时比较长的检查。
-
Zabbix_ java_ gateway: java网关
-
zabbix database: 存储系统,mysql, pgsql
-
Zabbix_ web:web GUI图形化界面
7、三种监控架构
-
server-client架构
-
也就是zabbix的最简单的架构
-
监控机器和被监控机器之间不经过任何处理
-
直接由zabbix-server和zabbix-agent之间进行数据交换。
-
适用于网络比较简单,尽量在局域网内,设备比较少的监控环境。
-
-
server-proxy-client架构
-
其中proxy是server、client之间沟通的一个桥梁
-
proxy本身没有前端,而且本身并不存放数据,只是将agentd发来的数据暂时存放,然后再交给server。
-
该架构经常是和master-node-client架构做比较。一般适用于跨机房、跨网络的中型网络架构的监控。
-
3.master-node-client架构
-
该架构是zabbix最复杂的监控架构,使用于跨机房、跨网络设备较多的大型环境。每一个node都会同步server端。相当于也是一个server端
-
node下面可以接proxy,也可以直接接clinet。
-
node有自己的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损不会对影响node节点的正常工作,但是会影响zabbix-server整体的完整性。
二、Zabbix部署
1、部署 zabbix 服务端
zabbix-server 内存至少 2G,推荐 4G;
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-server
#获取 zabbix 的下载源
#rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#更换 zabbix.repo 为阿里源
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo
yum clean all && yum makecache
yum install -y zabbix-server-mysql zabbix-agent
#安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /opt/rh 目录下。
yum install -y centos-release-scl
#修改 zabbix-front 前端源,安装 zabbix 前端环境到 scl 环境下
vim zabbix.repo
......
[zabbix-frontend]
......
enabled=1 #开启安装源
......
# 安装zabbix的web
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
#安装 zabbix 所需的数据库
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
mysql_secure_installation #初始化数据库,并设置密码,如 abc123
#添加数据库用户,以及 zabbix 所需的数据库信息
mysql -u root -pabc123
CREATE DATABASE zabbix character set utf8 collate utf8_bin;
GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
#导入数据库信息
rpm -ql zabbix-server-mysql #查询 sql 文件的位置
zcat /usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz | mysql -uroot -pabc123 zabbix
#修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf
......
DBPassword=zabbix #124行,指定 zabbix 数据库的密码
#修改 zabbix 的 php 配置文件
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
......
php_value[date.timezone] = Asia/Shanghai #24行,取消注释,修改时区
#启动 zabbix 相关服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
浏览器访问:http://192.168.99.50/zabbix
点击下一步,设置数据库的密码 zabbix
安装完成后,默认的登录账号和密码为:Admin/zabbix
设置文件界面:点击左边菜单栏的【User settings】,【Language】选择 Chinese(zh_CN),再点击 Update 更新。
#解决 zabbix-server Web页面报表中文乱码问题
yum install -y wqy-microhei-fonts
cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
注:如果部署nginx,需要下载zabbix压缩包,将压缩包中ui目录下的Php页面拷贝到在nginx中配置的页面目录
这里改成中文
2、部署zabbix客户端
---------- 部署 zabbix 客户端 ----------
zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。
zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-agent01
#服务端和客户端都配置时间同步
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
# 如果是内网,时间同步安装
#客户端配置时区,与服务器保持一致
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
#设置 zabbix 的下载源,安装 zabbix-agent2
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum install -y zabbix-agent2
#修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.80.20 #80行,指定 zabbix 服务端的 IP 地址
ServerActive=192.168.80.20 #120行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-agent01 #131行,指定当前 zabbix 客户端的主机名
#启动 zabbix-agent2
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
netstat -natp | grep zabbix
tcp6 0 0 :::10050 :::* LISTEN 43654/zabbix_agent2
做zabbix_get测试
#在服务端验证 zabbix-agent2 的连通性
yum install -y zabbix-get #安装 zabbix 主动获取数据的命令
zabbix_get -s '192.168.99.55' -p 10050 -k 'agent.ping'
1
zabbix_get -s '192.168.99.55' -p 10050 -k 'system.hostname'
zbx-agent01
3、自定义用户参数
1.明确需要执行的 linux 命令
who | wc -l
2.创建 zabbix 的监控项配置文件,用于自定义 key
vim /etc/zabbix/zabbix_agent2.conf
#可以将自定义的监控项配置文件创建在 zabbix_agent2.d 目录中
268 Include=/etc/zabbix/zabbix_agent2.d/*.conf
#自定义监控项的格式如下
291 # Format: UserParameter=<key>,<shell command>
cd /etc/zabbix/zabbix_agent2.d/
vim UserParameter_login.conf
UserParameter=login.user,who|wc -l
systemctl restart zabbix-agent2
3.在服务端验证新建的监控项
zabbix_get -s '192.168.99.55' -p 10050 -k 'login.user'
4、自定义监控内容
添加主机
添加模板
创建好后选择对应的应用集开始创建监控项
创建配置触发器
创建配置图形
将模板添加到客户端中
测试
5、配置报警信息的发送
配置消息模板
用户设置添加报警媒介(收件人)
配置触发器触发的动作
测试