Linux--Zabbix分布式监控
Zabbix企业级分布式监控
一、zabbix
Zabbix是一个基于Web界面的提供分布式系统监控,以及网络监控功能的企业级开源解决方案。
Zabbix 是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性。
?* 数据收集 (主动/被动)
1) 可用性及性能检测;
2) 支持 SNMP(trapping 及 polling)、IPMI、JMX 监控;
3) 自定义检测;
4) 自定义间隔收集收据;
5) server/proxy/agents。
?* 灵活的阈值定义
允许灵活地自定义问题阀值,在 Zabbix 中称为触发器(trigger), 存储在后端数据库
中。
? *高级告警配置
1) 可以自定义告警升级(escalation)、接收者及告警方式;
2) 告警信息可以配置并允许使用宏(macro)变量;
3) 通过远程命令实行自动化动作(action)。
?* 实时绘图
通过内置的绘图方法实现监控数据实时绘图。
? *扩展的图形化显示
1) 允许自定义创建多监控项视图;
2) 生成网络拓扑(network maps);
3) 自定义的面板(screen)和 slide shows,并允许在 dashboard 页面显示;
4) 生成监控报告。
?* 历史数据存储
1) 数据存储在数据库中;
2) 历史数据可配置;
3) 内置数据清理机制。
?* 配置简单
1) 被监控主机通过监控设备方式添加;
2) 一次配置,终生监控(译者注:除非调整或删除);
3) 监控设备允许使用模板来添加监控。
? *模板使用
1) 模板中可以添加组监控;
2) 模板允许继承。
? *网络自动发现
1) 自动发现网络设备;
2) Agent 自动注册;
3) 自动发现文件系统、网卡设备、SNMP OID 等。
?* 快速的 Web 接口
1) Web 前端采用 PHP 编写;
2) 访问无障碍.
?* Zabbix API
Zabbix API 提供程序级别的访问接口,第三方程序可以很快接入。
?* 权限系统
1) 安全的权限认证;
2) 用户可以限制允许维护的列表。
? *全特性、Agent 易扩展
1) 在监控目标上部署;
2) 支持 Linux 及 Windows。
? *二进制守护进程
1) C 开发,高性能,低内存消耗;
2) 易移植。
?* 具备应对复杂环境情况
通过 Zabbix Proxy 可以非常容易的创建远程监控。
1. Zabbix Server
zabbix_server 是 Zabbix 服务端守护进程。zabbix_agentd、zabbix_proxy 的数据最终
都是提交到 Server。
当然并不是所有数据都主动提交给 zabbix_server,也有的是 Server 主动去取数据。
2. Zabbix Agent
zabbix_agentd 是客户端守护进程,此进程主要用于收集客户端数据,例如 CPU 负载、
内存、硬盘使用情况等。
3. Zabbix Proxy
zabbix_proxy 是 Zabbix 代理守护进程,功能类似 Server。不同的是,zabbix_proxy
只是一个中转站,它需要把收集到的数据提交/被提交到 Server。
4. Zabbix 整体架构
下图是Zabbix整体架构的示意图。
Zabbix官网: https://www.zabbix.com
zabbix 主要由2部分构成 zabbix server和 zabbix agent
zabbix proxy是用来管理其他的agent,作为代理
zabbix监控范畴:
硬件监控 :Zabbix IPMI Interface
系统监控 :Zabbix Agent Interface
Java 监控:ZabbixJMX Interface
网络设备监抟:Zabbix SNMP Interface
应用服务监控:Zabbix Agent UserParameter
MySQL 数据库监控:percona-monitoring-pldlgins
URL监控:Zabbix Web监控
下面进行zabbix安装配置
192.168.10.2 server端
192.168.10.3 agent端
二、安装部署Zabbix 5.0
1. 部署Zabbix服务端
不需要提前构建LAMP或LNMP
1.1 服务器配置
服务器 | 配置 | ip地址 | 主机名 | 主要软件 |
zabbix-server | 内存至少2G,推荐4G | 192.168.10.2 | node1 | zabbix-server-mysql、zabbix-agent |
1.2 服务器环境
systemctl disable --now firewalld
setenforce 0
setenforce: SELinux is disabled
1.3 获取zabbix的下载源
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
1.4 更换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
1.5 下载安装zabbix以及组件
yum install -y zabbix-server-mysql zabbix-agent
vim Ali.repo
[Ali]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
yum update
wget -O ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum install centos-release-scl
安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /opt/rh 目录下。
1.6 修改zabbix-front前端源,安装zabbix前端环境到scl环境下
vim zabbix.repo
[zabbix-frontend]
##11行,开启安装源
enabled=1
完成后要确保yum源是干净的,只能有以下源
ali.repo CentOS-SCLo-scl.repo CentOS-SCLo-scl-rh.repo zabbix.repo
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
cd /opt/rh
ls
rh-php72
1.7 安装zabbix所需的数据库并启动
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
1.8 初始化数据库并设置密码
mysql_secure_installation
Enter current password for root (enter for none):
#使用root的当前密码登录,回车
Set root password? [Y/n] y
#是否设置root密码,y
New password:
#设置密码
Re-enter new password:
#再次输入密码
Remove anonymous users? [Y/n] y
#移除匿名用户,y
Disallow root login remotely? [Y/n] y也可以n
#禁止root远程登录,y
Remove test database and access to it? [Y/n] y
#移除test数据库,y
Reload privilege tables now? [Y/n] y
#重新加载权限表,y
1.9 添加数据库用户,以及zabbix所需的数据库权限
mysql -u root -p
创建zabbix数据库,并使用utf8字符编码
zabbix用户在任何主机拥有zabbix库中的全部权限,密码为zabbix
刷新权限
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';
flush privileges;
show databases;
use zabbix;
show tables;
1.10 导入数据库信息
rpm -ql zabbix-server-mysql
zcat /usr/share/doc/zabbix-server-mysql-5.0.19/create.sql.gz | mysql -uroot -pabc123 zabbix
mysql -u root -p
show databases;
use zabbix;
show tables;
zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。zcat是一个命令行实用程序,用于查看压缩文件的内容,而无需对其进行解压缩。 它将压缩文件扩展为标准输出,使您可以查看其内容。 另外,zcat与运行gunzip -c命令完全相同。
1.11 修改zabbix_server配置文件
vim /etc/zabbix/zabbix_server.conf
124行,取消注释,指定zabbix数据库的密码
DBPassword=zabbix
1.12 修改zabbix的php配置文件
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
25行,取消注释,修改时区
php_value[date.timezone] = Asia/Shanghai
1.13 启动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.10.2/zabbix/
点击下一步,设置数据库的密码 zabbix
登录成功
设置文件界面:点击左边菜单栏的【User settings】,【Language】选择 Chinese(zh_CN),再点击 Update 更新。
1.15 解决zabbix_server(node1)的Web乱码问题
主机-图形查看,发现很多乱码
yum install -y wqy-microhei-fonts
\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
回到Web页面,检查乱码是否仍然存在
已无乱码
2. 部署zabbix客户端
2.1 服务器配置
服务器 | ip地址 | 主机名 | 主要软件 |
zabbix-agent | 192.168.10.3 | node2 | zabbix-agent2 |
zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。 | |||
zabbix 服务端 zabbix_server 默认使用 10051 端口,客户端 zabbix_agent2 默认使用 10050 端口。 |
2.2 服务器环境
systemctl disable --now firewalld
setenforce 0
setenforce: SELinux is disabled
2.3 服务端和客户端配置时间同步
服务端node1
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
客户端
copy
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
2.4 客户端配置时区,与服务器保持一致
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2.5 设置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
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum install -y zabbix-agent2
2.6 修改agent2配置文件
vim /etc/zabbix/zabbix_agent2.conf
80行,指定zabbix服务端的IP地址
Server=192.168.10.2
Server=192.168.10.3
120行,指定zabbix服务端的IP地址
ServerActive=192.168.10.2
131行,指定当前zabbix客户端的主机名
Hostname=node2
2.7 启动zabbix-agent2
systemctl enable --now zabbix-agent2.service
netstat -natp | grep zabbix
2.8 在服务端验证zabbix-agent2的连通性
yum install -y zabbix-get
安装zabbix主动获取数据的命令
zabbix_get -s '192.168.10.3' -p 10050 -k 'agent.ping'
返回1即连通成功,返回0则连通失败
1
zabbix_get -s '192.168.10.3' -p 10050 -k 'system.hostname'
显示客户端的主机名
node2
2.9 在web页面中添加agent主机
点击左边菜单栏【配置】中的【主机】,点击【创建主机】
【主机名称】设置成node2
【可见的名称】设置成node2-192.168.10.3
【群组】选择 Linux servers
【Interfaces】的【IP地址】设置成 192.168.10.3
再点击上方菜单栏【模板】
【Link new tamplates】搜索 Linux ,选择 Template OS Linux by Zabbix agent,点击 【添加】
三、自定义监控内容
1. 监控需求
案例:自定义监控客户端服务器登录的人数
需求:限制登录人数不超过3个,超过3个就发出报警信息
2. 在客户端创建自定义key
2.1 明确需要执行的linux命令
who
root pts/0 2022-01-19 08:40 (192.168.10.1)
who |wc -l
2.2 创建zabbix的监控项配置文件,用于自定义key
vim /etc/zabbix/zabbix_agent2.conf
268行,可以将自定义的监控项配置文件创建在zabbix_agent2.d目录中
Include=/etc/zabbix/zabbix_agent2.d/*.conf291行,自定义监控项的格式如下
# Format: UserParameter=
cd /etc/zabbix/zabbix_agent2.d
vim user_login_limit.conf
UserParameter=user_login_limit,who | wc -l
systemctl restart zabbix-agent2.service
2.3 在服务端验证新建的监控项
zabbix_get -s '192.168.10.3' -p 10050 -k 'user_login_limit'
1
客户端增加登录终端
who
root pts/0 2022-01-19 08:40 (192.168.10.1)
root pts/1 2022-01-19 10:00 (192.168.10.1)
who |wc -l
2
服务端重新验证
zabbix_get -s '192.168.10.3' -p 10050 -k 'user_login_limit'
2
验证成功
3. 在web页面创建自定义监控项模板
- 创建模板
点击左边菜单栏【配置】中的【模板】,点击【创建模板】
【模板名称】设置成 Template User Login
【可见的名称】设置成 Template User Login
【群组】选择 Templates
【描述】可自定义
点击【添加】
此时就可在【链接的模板】中搜索到 Template Login User了,点击进入设置
- 创建应用集(用于管理监控项的)
点击上方菜单栏【应用集】,点击【创建应用集】
【名称】设置成User Login
点击【添加】
3.3 创建监控项
点击上方菜单栏【监控项】,点击【创建监控项】
【名称】设置成 Number of login users
【键值】设置成user_login_limit(键值必须要与自定义的监控项配置文件中设置的保持一致)
【更新间隔】设置成 10s
【历史数据保留时长】Storage period 30d(保留时间可自定义设置)
点击 【添加】
3.4 创建触发器(当监控项的数据超过设定阈值后,触发报警)
点击上方菜单栏【触发器】,点击【创建触发器】
【名称】设置成Number of login users is greater than 3
【严重性】设置成 一般严重
【表达式】点击添加,【监控项】点击选择 Number of login users,【功能】选择 last(),【结果】选择 > 3,点击 【插入】
点击 【添加】
3.5 创建图形
点击上方菜单栏【图形】,点击【创建图形】
【名称】设置成 Number of login users
【宽】、【高】可直接采用默认值
【监控项】点击添加勾选相关监控项 Number of login users,【功能】选择最大,其它可保持默认值
点击 【添加】
3.6 将主机与模板关联起来(一个主机可以关联多个模板)
点击左边菜单栏【配置】中的【主机】,点击你要关联的主机
点击上方菜单栏【模板】,【Link new tamplates】搜索 login,选择 Template User Login,点击【更新】
3.7 查看监控图形
此时点击【监测】中的【主机】,点击你关联主机的【图形】,即可查看到相关的监控项指标
4. 邮件报警
4.1 设置邮件报警
点击左边菜单栏【管理】中的【报警媒介类型】,点击【创建媒体类型】
【名称】设置成 qq_Email
【SMTP服务器】设置成 smtp.qq.com
【SMTP服务器端口】设置成 25
【SMTP HELO】设置成 qq.com
【SMTP电邮】设置成 自己的邮箱地址,例如 xxxx@qq.com
【认证】选择 用户名和密码
【用户名称】设置成 自己的邮箱地址,例如 xxxx@qq.com
【密码】可登录QQ邮箱页面,点击【设置】-->【账户】中的【生成授权码】,通过短信获取授权码
【描述】可自定义
点击上方菜单栏【Message templates】,点击【添加】,【Message type】选择 问题,点击【添加】
点击【添加】,进行测试
收到邮件,测试成功。
点击左边菜单栏【User settings】-->【报警媒介】,点击【添加】
【类型】选择 qq_Email
【收件人】设置成 xxxx@qq.com
【当启用时】设置成 1-7,00:00-24:00
点击 【添加】
再点击 【更新】
点击左边菜单栏【配置】中的【动作】,选择相对应的动作名称,点击【启用】
4.2 测试邮件报警
增加客户端的终端连接数至4个,确认是否能收到报警邮件。
who
root pts/0 2022-01-19 08:40 (192.168.10.1)
root pts/1 2022-01-19 10:00 (192.168.10.1)
root pts/2 2022-01-19 11:49 (192.168.10.1)
root pts/3 2022-01-19 11:49 (192.168.10.1)
who |wc -l
报警信息
报警邮件