前言
作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。利用一个优秀的监控软件,我们可以:
- 通过一个友好的界面进行浏览整个网站所有的服务器状态;
- 可以在web前端方便的查看监控数据;
- 可以回溯寻找事故发生时系统的问题和报警情况。
目录
一、zabbix概述
1.zabbix是什么?
2.zabbix监控原理
3.监控对象
(1)zabbix server
(2)zabbix agent
(3)zabbix proxy
(4)zabbix get
(5)zabbix sender
二、部署zabbix服务端
三、部署 zabbix 客户端
四、监控模板
1.使用官方或已开发设计好的模板
2.自定义监控模板
(1)监控客户端主机登录人数
(2)监控nginx客户端状态信息
五、配置zabbix报警
1.设置报警媒介
2.在用户设置中指定报警媒介
3.指定报警的监控触发器
4.测试报警
六、配置zabbix服务端自动发现与自动注册
1.自动发现
编辑
2.自动注册
七、部署zabbix代理服务器
八、SNMP监控
zabbix是一个基于 web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。
zabbix由两部分构成,zabbix server与可选组件zabbix agent。通过c/s 模式采集数据,通过b/s 模式在web端展示和配置。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux等平台上。
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
zabix agent安装在被监控的主机上,zabiboix agent负责定期收集客户端本地各项数据,并发送至zabbix server端,zabbix server收到数据后,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。当zabbix监控某个具体的项目,该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括发送信息(邮件、微信、短信)、发送命令( shell命令、reboot、restart、install等)。
zabbix 监控部署在系统中,包含常见的五个程序:zabbix_server、zabix_agent、zabbix proxy、zabbix_get、zabix_sender等。
zabbix服务端守护进程,其中 zabbix_agent、zabbix_get、zabbix_sender、zabbix _proxy的数据最终都提交给zabbix server;
客户端守护进程,负责收集客户端数据,例如:收集CPU负载、内存、硬盘使用情况等;
zabbix分布式代理守护进程,通常大于500台主机,需要进行分布式监控架构部署;
zabbix 数据接收工具,单独使用的命令,通常在server或者 proxy端执行获取远程客户端信息的命令;
zabbix数据发送工具,用户发送数据给 server或 proxy端,通常用户耗时比较长的检查。
zabbix 服务端 zabbix_server 默认使用 10051 端口
zabbix_server:192.168.116.60(内存至少 2G,推荐 4G)
1.关闭防火墙和selinux,设置服务器名称,同步时间
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-server
su
ntpdate ntp.aliyun.com
2.下载zabbix和相关软件
#获取 zabbix 的下载源
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 可以使得在同一台机器上使用多个版本的软件,而又不会影响整个系统的依赖环境。软件包会安装在 /etc/opt/rh/ 目录下。
yum install -y centos-release-scl
还需要修改一下zabbix源,开启前端环境下载
#安装前端环境
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
#导入数据库信息
zcat /usr/share/doc/zabbix-server-mysql-5.0.15/create.sql.gz | mysql -uroot -pabc123 zabbix
3.修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf
......
DBPassword=zabbix #124行,指定 zabbix 数据库的密码
4. 修改 zabbix 的 php 配置文件
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
......
php_value[date.timezone] = Asia/Shanghai #24行,取消注释,修改时区
5.启动 zabbix 相关服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
6.浏览器访问zabbix:http://192.168.116.60/zabbix
可以点击主机查看图形化数据,但会出现中文乱码,需要导入字符集
#解决 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
zabbix 5.0 版本采用 golang 语言开发的新版本客户端 agent2 。
客户端 zabbix_agent2 默认使用 10050 端口。zabbix_agent01:192.168.116.70
1. 关闭防火墙和selinux,设置服务器名称,同步时间
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-agent01
su
ntpdate ntp.aliyun.com
2.下载zabbix客户端
#设置 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
3.修改客户端配置文件并开启
#修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.116.60 #80行,指定 zabbix 服务端的 IP 地址
ServerActive=192.168.116.60 #120行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-agent01 #131行,指定当前 zabbix 客户端的主机名
#开启服务
systemctl enable --now zabbix-agent2.service
4.在服务端验证zabbix-agent2 的连通性
#安装 zabbix 主动获取数据的命令
yum install -y zabbix-get
#测试
zabbix_get -s '192.168.116.70' -p 10050 -k 'agent.ping'
zabbix_get -s '192.168.116.70' -p 10050 -k 'system.hostname'
5.新建客户端
Browse Zabbix / Zabbix - ZABBIX GIT
Zabbix searcher - 900+ Zabbix projects: templates, scripts, integrations, ...
Zabbix community templates
首先再客户端自定义键(这里演示的用于监控主机登录人数,阈值为3,大于3报警)
在/etc/zabbix/zabbix_agent2.d/下新建.conf文件,在里面自定义键,格式为
UserParameter=
,
之后重启服务读取文件配置 systemctl restart zabbix-agent2.service
可以在服务端使用命令进行测试(当前登录数为4)
测试无误就可以添加自定义模板了
创建好模板,找到并进行配置
创建配置应用集
创建配置触发器
创建配置图形
将模板添加到客户端中
查看图形(监控到了登录人数)
客户端安装nginx,模拟监控nginx服务器
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install nginx -y
修改nginx配置文件/etc/nginx/conf.d/default.conf,打开状态统计
重启服务,查看状态统计页面
systemctl start nginx
curl -s 127.0.0.1/status
编写监控nginx状态信息脚本,获取以上值,并给执行权限
#/bin/bash
#Description:Automated monitoring nginx performance and process nginx_status scripts
HOST="localhost"
PORT=80
URL="status"
NGINX_COMMAND=$1
#检查nginx状态
nginx_check() {
if [ -f /sbin/pidof ]; then
/sbin/pidof nginx | wc -w
else
ps aux | grep -v "grep" | grep -c "nginx:"
fi
}
#nginx状态相关信息的值
nginx_active(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Active/ {print $NF}'
}
nginx_reading(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Reading/ {print $2}'
}
nginx_writing(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Writing/ {print $4}'
}
nginx_waiting(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk '/Waiting/ {print $6}'
}
nginx_accepts(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $1}'
}
nginx_handled(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $2}'
}
nginx_requests(){
/usr/bin/curl -s "http://$HOST:$PORT/${URL}/" 2> /dev/null | awk 'NR==3 {print $3}'
}
#命令获取对应值
case $NGINX_COMMAND in
check)
nginx_check
;;
active)
nginx_active
;;
reading)
nginx_reading
;;
writing)
nginx_writing
;;
waiting)
nginx_waiting
;;
accepts)
nginx_accepts
;;
handled)
nginx_handled
;;
requests)
nginx_requests
;;
*)
echo $"USAGE:$0 {check|active|reading|writing|waiting|accepts|handled|requests}"
esac
脚本测试无误
自定义监控变量,用于模板使用
UserParameter=nginx.status[*],/etc/zabbix/zabbix_shell/zabbix_nginx.sh $1
#[*] 代表自定义变量nginx.status传入的值
#$1 代表前面变量传入的值作为此脚本执行的参数,获取对应状态值
重启服务systemctl restart zabbix-agent2.service,在服务端进行测试
测试无误,去前端自定义模板
可以进行测试
我们之前设置的报警触发器有一条是,当nginx进程为0,触发报警,所有我们可以模拟关闭nginx,看看是否能通过设置的报警媒介,收到zabbix的报警。
当我们恢复这个问题,此问题便会消失
zabbix 自动发现(对于 agent2 是被动模式)是zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。缺点是如果定义的网段中的主机数量多,zabbix server 登记耗时较久,且压力会较大。
首先添加一台客户端,安装好zabbix-agent2服务,修改配置文件指定服务端地址和客户端名称,然后开启服务
服务端和客户端都需要配置彼此的域名解析
zabbix 自动注册(对于 agent2 是主动模式),zabbix agent2 会主动上报自己的信息,发给 zabbix server。缺点是可能因为配置文件配置错误或者网络不通等原因导致 zabbix agent2 可能找不到 zabbix server。
先禁用自动发现,删除客户端02,做自动注册
在客户端配置文件开启自动注册,然后重启服务
添加自动注册动作
配置zabbix代理,分担 server 的集中式压力,解决多机房之间的网络延时问题。
首先关闭防火墙,修改主机名,安装代理
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname zbx-proxy
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-proxy-mysql zabbix-get
安装代理所需数据库,做初始化,密码设的是123123
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
mysql_secure_installation
添加数据库和用户,授权,导入数据库表信息
mysql -uroot -p123123
CREATE DATABASE zabbix_proxy character set utf8 collate utf8_bin;
GRANT all ON zabbix_proxy.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
quit
#退出后导入表数据
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.29/schema.sql.gz | mysql -uroot -p123123 zabbix_proxy
修改代理配置文件,然后启动服务
vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.116.60 #30行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-proxy #49行,指定当前 zabbix 代理服务器的主机名
DBPassword=zabbix #196行,指定当前数据库 zabbix 用户的密码
systemctl start zabbix-proxy
修改agent 指向代理的地址
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.116.40 #80行,指定 zabbix 代理服务器的 IP 地址
ServerActive=192.168.116.40 #120行,指定 zabbix 代理服务器的 IP 地址
还需要在每台主机添加域名解析
之后去服务端指定代理
创建客户端时添加代理
之后依次重启server、proxy、client 服务
等待客户端全部亮起即可
使用SNMP简单网络管理协议,对网络中的资源进行管理和实时监控。
首先在需要监控的路由器、交换机上安装snmp(这里以server本机为例)
yum install -y net-snmp net-snmp-utils.x86_64
systemctl start snmpd.service
然后去前端修改使用snmp