目录
前言
作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。
利用一个优秀的监控软件,我们可以
- 通过一个友好的界面进行浏览整个网站所有的服务器状态
- 可以在 Web 前端方便的查看监控数据
- 可以回溯寻找事故发生时系统的问题和报警情况
一、Zabbix概述
1.简介
- zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
- zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
- zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix agent。通过 C/S 模式采集数据,通过 B/S 模式在 Web 端展示和配置。
- zabbix server 可以通过 SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能, 它可以运行在 Linux 等平台上。
- zabbix agent 需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU 等信息的收集。
Cacti是基于网络和绘图进行监控,Nagios网络监控这两个用的比较多;Zabbix因为其支持的选项多所以用的比较多。
2.监控原理
zabbix agent安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发送至 zabbix server 端,zabbix server 收到数据后,将数据存储到数据库中,用户基于 Zabbix WEB 可以看到数据在前端展现图像。当 zabbix 监控某个具体的项目, 该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(shell 命令、reboot、restart、install 等)。
3.Zabbix由哪两部分组成
Zabbix主要分为两个部分组成,Agent和Server两个部分,Zabbix_Agent会主动的将数据交给监控监控传递给Zabbix_Server端,Zabbix_Server通过B/S在Web前端进行展示(B/S架构即浏览器和服务端架构,提供可视化界面,监控所有指标)
- Agent端口10050
- Server端口10051
4.主要特点
- 安装配置简单,学习成本较低
- 支持多种语言(包含中文)
- 免费开源
- 自动发现服务器与网络设备
- 分布式监控以及Web集群中的管理功能
- 可以通过Email功能通知(还可以通过短信、语音、微信、钉钉)
5.运行机制
Zabbix-Agent数据采集-----> Zabbix-Server数据分析/告警-----> 数据库 数据存储-----> Zabbix-Web数据展示
6.监控对象
- 硬件监控(服务器、路由、交换机等)
- 系统监控(操作系统)
- 网络监控(网络设备的协议TCP/IP、ICMP、HTTP等)
- Java监控(监控JDK JVM)
- 应用服务监控(Tomcat、Nginx、Mysql等)
- 数据库监控
- URL监控(http://)
- VMware监控平台(监控虚拟机运行状况)
7.监控模式
- 被动模式:Server端向Agent端发起连接(Server端主动发起监控请求,Agent同意之后进行监控)
- 主动模式:Agent端向Server端发起连接(Agent主动向Server端请求被监控)
假设当前有100台服务器,Zabbix监控模式要选择主动模式(因为Agent端过多的话,为了减轻Server端压力,使用主动模式会好一点)
8.Zabbix程序
zabbix 监控部署在系统中,包含常见的五个程序: zabbix_server 、zabbix_agent 、zabbix_proxy 、zabbix_get 、zabbix_sender 等。
- zabbix server:zabbix 服务端守护进程,其中 zabbix_agent、zabbix_get、zabbix_sender、zabbix_proxy 的数据最终都提交给 zabbix server;
- zabbix agent:客户端守护进程,负责收集客户端数据,例如:收集 CPU 负载、内存、硬盘使用情况等;
- zabbix proxy:zabbix 分布式代理守护进程,通常大于 500 台主机,需要进行分布式监控架构部署;
- zabbix get:zabbix 数据接收工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令;
- zabbix sender:zabbix 数据发送工具,用户发送数据给 server 或 proxy 端,通常用户耗时比较长的检查。
- Zabbix_java_gateway:Java网关
9.Zabbix架构
9.1Server-Client
Server-Client架构是Zabbix最简单的架构,监控机器和被监控机器之间不经过任何处理,直接由Zabbix-Server和Zabbix-Client之间进行数据交换。
适用于网络比较简单,尽量在局域网内,识别比较少的监控环境
9.2Server-Proxy-Client
Server-Proxy-Client,其中Proxy是Server和Client之间沟通的一个桥梁,Proxy本身有前端,而且本身不存放数据,只是将Agent发送来的数据暂时存放,而后再提交给Server,这种架构经常是Master-Node-Client,一般适用于跨机房,跨网络的中型网络监控架构
9.3Master-Node-Client
Master-Node-Client该架构是Zabbix最复杂的监控架构,适用于跨网络跨机房设备多的大型环境。每个Node同时接一个Sever端,Node下面可以接Proxy端,也可以直接连接Client,Node有自己的配置文件和数据库,其要做的是将配置信息和监控数据向Master进行数据同步,Master故障损坏对Node其下架构的完整性无任何影响
二、Zabbix-Server安装与部署
1.环境准备
bash
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-server
2.下载安装Zabbix
bash
[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
#获取 zabbix 的下载源
[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
#更换 zabbix.repo 为阿里源
[root@zbx-server yum.repos.d]#yum clean all && yum makecache
[root@zbx-server yum.repos.d]#yum install -y zabbix-server-mysql.x86_64 zabbix-agent
#安装SCL(Software Collections),便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4,版本过低,zabbix 5.0 版本对 php 版本最低要 7.2.0 版本。SCL 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /opt/rh 目录下。
[root@zbx-server yum.repos.d]#yum install -y centos-release-scl
[root@zbx-server yum.repos.d]#vim zabbix.repo
#修改 zabbix-front 前端源,安装 zabbix 前端环境到 scl 环境下
[root@zbx-server yum.repos.d]#sed -n '8,13p' zabbix.repo
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1
#开启安装源
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[root@zbx-server yum.repos.d]#yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
3.安装所需数据库
bash
[root@zbx-server yum.repos.d]#yum install -y mariadb-server.x86_64 mariadb
#安装 zabbix 所需的数据库
[root@zbx-server yum.repos.d]#systemctl enable --now mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@zbx-server yum.repos.d]#mysql_secure_installation
#初始化数据库 并设置密码
New password:
Re-enter new password:
#可以设置为123123,这里我们设置为123
其他的一路回车即可
[root@zbx-server yum.repos.d]#mysql -uroot -p123
sql
MariaDB [(none)]> CREATE DATABASE zabbix character set utf8 collate utf8_bin;Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
bash
#导入数据库信息
[root@zbx-server yum.repos.d]#rpm -ql zabbix-server-mysql
#查询 sql 文件的位置
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-5.0.42
/usr/share/doc/zabbix-server-mysql-5.0.42/AUTHORS
/usr/share/doc/zabbix-server-mysql-5.0.42/COPYING
/usr/share/doc/zabbix-server-mysql-5.0.42/ChangeLog
/usr/share/doc/zabbix-server-mysql-5.0.42/NEWS
/usr/share/doc/zabbix-server-mysql-5.0.42/README
/usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz
/usr/share/doc/zabbix-server-mysql-5.0.42/double.sql
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix
[root@zbx-server yum.repos.d]#zcat /usr/share/doc/zabbix-server-mysql-5.0.42/create.sql.gz|mysql -uroot -p123 zabbix
#zcat显示压缩包中文件的内容,可以使用 gzip -d 或 gunzip 或 zcat 将压缩文件恢复为原始格式。
4.修改配置文件
bash
[root@zbx-server yum.repos.d]#vim /etc/zabbix/zabbix_server.conf
[root@zbx-server yum.repos.d]#sed -n 124p /etc/zabbix/zabbix_server.conf
DBPassword=zabbix
#指定 zabbix 数据库的密码
[root@zbx-server yum.repos.d]#vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf [root@zbx-server yum.repos.d]#sed -n 25p /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#取消注释,修改时区
php_value[date.timezone] = Asia/Shanghai
#启动 zabbix 相关服务
[root@zbx-server yum.repos.d]#systemctl restart zabbix-server.service zabbix-agent.service httpd.service rh-php72-php-fpm.service
[root@zbx-server yum.repos.d]#systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php72-php-fpm.service to /usr/lib/systemd/system/rh-php72-php-fpm.service.
5.启动Zabbix服务端
可以在左侧菜单栏找到【User settings】,【Language】选择 Chinese(zh_CN),再点击 Update 更新。
三、Zabbix-Agent安装与部署
1.环境准备
bash
[root@node2 ~]#systemctl disable --now firewalld
[root@node2 ~]#setenforce 0
[root@node2 ~]#hostnamectl set-hostname zbk-agent
[root@node2 ~]#bash
[root@zbk-agent ~]#
2.服务端与客户端配置时间同步
bash
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
#客户端配置时区,与服务器保持一致
[root@zbk-agent ~]#mv /etc/localtime{,.bak}
[root@zbk-agent ~]#ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@zbk-agent ~]#date
Sun Apr 14 15:12:35 CST 2024
3.安装部署客户端Zabbix
bash
[root@zbk-agent ~]#rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zbk-agent yum.repos.d]#yum install -y zabbix-agent2
4.修改Agent2配置文件并启动
bash
[root@zbk-agent ~]#vim /etc/zabbix/zabbix_agent2.conf
[root@zbk-agent ~]#sed -n 80p /etc/zabbix/zabbix_agent2.conf
Server=192.168.241.11
#指定 zabbix 服务端的 IP 地址
[root@zbk-agent ~]#sed -n 125p /etc/zabbix/zabbix_agent2.conf
ServerActive=192.168.241.11
#指定 zabbix 服务端的 IP 地址
[root@zbk-agent ~]#sed -n 136p /etc/zabbix/zabbix_agent2.conf
Hostname=zbx-server
#指定当前 zabbix 客户端的主机名
[root@zbk-agent ~]#systemctl start zabbix-agent2
[root@zbk-agent ~]#systemctl enable zabbix-agent2
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent2.service to /usr/lib/systemd/system/zabbix-agent2.service.
[root@zbk-agent ~]#netstat -natp | grep zabbix
tcp6 0 0 :::10050 :::* LISTEN 6385/zabbix_agent2
5.验证连通性------服务端操作
bash
[root@zbx-server ~]#yum install -y zabbix-get
[root@zbx-server ~]#zabbix_get -s '192.168.241.22' -p 10050 -k 'agent.ping'
1
[root@zbx-server ~]#zabbix_get -s '192.168.241.22' -p 10050 -k 'system.hostname'
zbk-agent
四、在Web进行添加主机操作
此处稍等片刻,ZBX将会变为绿色代表开启成功
目前显示为正常启用
这里可以查看客户端监控项所有信息
图形对应硬件接口、网络接口等等
五、自定义监控内容
案例:自定义监控客户端服务器登录的人数
需求:限制登录人数不超过3人,超过3人发送告警
自定义监控脚本:
1.客户端创建自定义Key
bash
[root@zbk-agent ~]#who|wc -l
#明确需要执行的 linux 命令
3
[root@zbk-agent ~]#vim /etc/zabbix/zabbix_agent2.conf
#创建 zabbix 的监控项配置文件,用于自定义 key
[root@zbk-agent ~]#sed -n 273p /etc/zabbix/zabbix_agent2.conf
#可以将自定义的监控项配置文件创建在 zabbix_agent2.d 目录中
Include=/etc/zabbix/zabbix_agent2.d/*.conf
[root@zbk-agent ~]#sed -n 296p /etc/zabbix/zabbix_agent2.conf
#自定义监控项的格式如下
# Format: UserParameter=<key>,<shell command>
#UserParameter是固定格式 key是键 shell是command调用的指令(命令行或者脚本)
Format先调用键再调用指令
[root@zbk-agent ~]#cd /etc/zabbix/zabbix_agent2.d/
[root@zbk-agent zabbix_agent2.d]#ls
[root@zbk-agent zabbix_agent2.d]#vim UserParameter_login.conf
UserParameter=login.user,who|wc -l
[root@zbk-agent zabbix_agent2.d]#systemctl restart zabbix-agent2.service
[root@zbx-server ~]#zabbix_get -s "192.168.241.22" -p 10050 -k 'login.user'
#在服务端验证新建的监控项
4
[root@zbk-agent zabbix_agent2.d]#who|wc -l
4
2.在Web页面创建自定义监控项模板
2.1创建模版
2.2创建应用集
2.3创建监控项
2.4创建触发器
2.5创建图形
2.6关联主机与模版
一个主机可以关联多个模板
2.7设置邮件报警
认证密码可登录QQ邮箱页面,点击【设置】-->【账户】中的【生成授权码】,通过短信获取授权码
测试,开启多个会话窗口
如果想改变输出结果内容
六、Zabbix自动发现与自动注册
1.自动发现
zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。对于 agent2 是被动模式。
缺点是如果定义的网段中的主机数量多,zabbix server 登记耗时较久,且压力会较大。
2.1确保客户端上的Zabbix-Agent2服务状态正常
bash
[root@zbk-agent ~]#systemctl is-active zabbix-agent2.service
active
2.2在Web页面删除原有客户端主机
2.3配置地址映射
bash
vim /etc/hosts
[root@zbx-server ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.241.11 zbx-server
192.168.241.22 zbk-agent
2.4在Web页面配置自动发现
bash
[root@zbx-server ~]#tail -f /var/log/zabbix/zabbix_server.log
1968:20240417:214202.342 cannot send list of active checks to "192.168.241.22": host [zbx-server] not found
...
1959:20240417:215907.950 enabling Zabbix agent checks on host "zbk-agent": host became available
2.自动注册
zabbix agent2 会主动上报自己的信息,发给 zabbix server。对于 agent2 是主动模式.
缺点是可能因为配置文件配置错误或者网络不通等原因导致 zabbix agent2 可能找不到 zabbix server。
2.1环境准备
2.2修改Zabbix-Agent2配置文件
bash
[root@zbk-agent ~]#vim /etc/zabbix/zabbix_agent2.conf
[root@zbk-agent ~]#sed -n 144p /etc/zabbix/zabbix_agent2.conf
HostnameItem=system.hostname
[root@zbk-agent ~]#egrep -v "^#|^$" /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=192.168.241.11
ServerActive=192.168.241.11
Hostname=zbx-server
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock
2.3Web页面配置自动注册
七、部署Zabbix代理服务器
分布式监控的作用
- 分担Server的集中式的压力
- 解决多机房之间的网络延时的问题
Agent----->Proxy----->Server
1.安装Proxy
bash
systemctl disable --now firewalld
setenforce 0
[root@node3 ~]#hostnamectl set-hostname zbx-proxy
[root@node3 ~]#bash
[root@zbx-proxy ~]#rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@zbx-proxy ~]#cd /etc/yum.repos.d/
[root@zbx-proxy yum.repos.d]#ls
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo zabbix.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
[root@zbx-proxy yum.repos.d]#sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
[root@zbx-proxy yum.repos.d]#yum install -y zabbix-proxy-mysql zabbix-get
2.安装所需的数据库
bash
[root@zbx-proxy yum.repos.d]#yum install -y mariadb-server mariadb
[root@zbx-proxy yum.repos.d]#systemctl enable --now mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@zbx-proxy yum.repos.d]#mysql_secure_installation
#初始化数据库并设置密码 此处设置为123456
MariaDB [(none)]> CREATE DATABASE zabbix_proxy character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT all ON zabbix_proxy.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#添加数据库用户,以及 zabbix 所需的数据库信息
3.修改Zabbix-Proxy配置
bash
[root@zbx-proxy yum.repos.d]#rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-5.0.42
/usr/share/doc/zabbix-proxy-mysql-5.0.42/AUTHORS
/usr/share/doc/zabbix-proxy-mysql-5.0.42/COPYING
/usr/share/doc/zabbix-proxy-mysql-5.0.42/ChangeLog
/usr/share/doc/zabbix-proxy-mysql-5.0.42/NEWS
/usr/share/doc/zabbix-proxy-mysql-5.0.42/README
/usr/share/doc/zabbix-proxy-mysql-5.0.42/schema.sql.gz
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix
[root@zbx-proxy yum.repos.d]#zcat /usr/share/doc/zabbix-proxy-mysql-5.0.42/schema.sql.gz|mysql -uroot -p123456 zabbix_proxy
#导入数据库信息
[root@zbx-proxy yum.repos.d]#vim /etc/zabbix/zabbix_proxy.conf
[root@zbx-proxy yum.repos.d]#sed -n 30p /etc/zabbix/zabbix_proxy.conf
Server=192.168.241.11
#指定 zabbix 服务端的 IP 地址
Hostname=zbx-proxy
[root@zbx-proxy yum.repos.d]#sed -n 49p /etc/zabbix/zabbix_proxy.conf
Hostname=zbx-proxy
#指定当前 zabbix 代理服务器的主机名
[root@zbx-proxy yum.repos.d]#sed -n 196p /etc/zabbix/zabbix_proxy.conf
DBPassword=123456
#指定当前数据库 zabbix 用户的密码
[root@zbx-proxy yum.repos.d]#systemctl restart zabbix-proxy.service
4.配置所有主机的地址解析
bash
vim /etc/hosts
192.168.10.22 zbx-server
192.168.10.21 zbx-agent01
192.168.10.13 zbx-proxy
5.在Web配置Agent代理
6.配置Agent使用代理Proxy
bash
[root@zbk-agent zabbix]#vim /etc/zabbix/zabbix_agent2.conf
[root@zbk-agent zabbix]#sed -n 80p /etc/zabbix/zabbix_agent2.conf
Server=192.168.241.23
#指定 zabbix 代理服务器的 IP 地址
[root@zbk-agent zabbix]#sed -n 125p /etc/zabbix/zabbix_agent2.conf
ServerActive=192.168.241.23
#指定 zabbix 代理服务器的 IP 地址
7.在Web页面创建主机
bash
[root@zbk-agent zabbix]#systemctl restart zabbix-agent2.service
[root@zbx-proxy yum.repos.d]#systemctl restart zabbix-proxy.service
八、部署Zabbix-SNMP监控
SNMP,简单网络管理协议
1.服务端安装SNMP监控
bash
[root@zbx-server ~]#yum install -y net-snmp net-snmp-utils
2.配置SNMP并启动
bash
[root@zbx-server ~]#vim /etc/snmp/snmpd.conf
[root@zbx-server ~]#sed -n 57p /etc/snmp/snmpd.conf
view systemview included .1
#查看这台机器的所有状态
[root@zbx-server ~]#systemctl start snmpd
[root@zbx-server ~]#snmpwalk -v 2c -c public 127.0.0.1 sysname
SNMPv2-MIB::sysName.0 = STRING: zbx-server