zabbix
- Zabbix是一个高度集成的监控解决方案
- 可以实现企业级的开源分布式监控
- Zabbix通过C/S模式采集监控数据
- Zabbix通过B/S模式实现Web管理
1 部署安装Zabbix监控平台
1.1 部署运行环境LNMP
安装依赖
[root@zabbix-server ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel
编译安装nginx
[root@zabbix-server ~]# tar -zxvf nginx-1.19.1.tar.gz
[root@zabbix-server ~]# cd nginx.1.19.1
[root@zabbix-server nginx.1.19.1]# ./configure --with-http_ssl_module
[root@zabbix-server nginx.1.19.1]# make && make install
安装php
[root@zabbix-server ~]# yum -y insatll php php-mysql
[root@zabbix-server ~]# yum -y install mariadb-server mariadb-devel mariadb
[root@zabbix-server ~]# yum -y install php-fpm
修改nginx配置
[root@zabbix-server ~]# vim +65 /usr/local/nginx/conf/nginx.conf
··· ···
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
启动数据库
[root@zabbix-server ~]# systemctl start mariadb
[root@zabbix-server ~]# systemctl enable mariadb
[root@zabbix-server ~]# systemctl start php-fpm
[root@zabbix-server ~]# systemctl enable php-fpm
启动nginx
[root@zabbix-server ~]# /usr/local/nginx/sbin/nginx
查看端口是否启动
[root@zabbix-server ~]# netstat -utnlp | grep :80
[root@zabbix-server ~]# netstat -utnlp | grep :3306
[root@zabbix-server ~]# netstat -utnlp | grep :9000
编写nginx测试网页
[root@zabbix-server ~]# vim /usr/local/nginx/html/test.php
<?php
$i=33;
echo $i;
?>
[root@zabbix-server ~]# curl http://192.168.139.15/test.php
1.2 安装源码zabbix
[root@zabbix-server ~]# yum -y install net-snmp-devel curl-devel libevent-devel
[root@zabbix-server ~]# tar -zxvf zabbix-3.4.15.tar.gz
[root@zabbix-server ~]# cd zabbix-3.4.15
[root@zabbix-server zabbix-3.4.15]# ./configure --enable-server --enable-proxy --enable-agent --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl
[root@zabbix-server zabbix-3.4.15]# make install
[root@zabbix-server zabbix-3.4.15]# ls /usr/local/etc/ #配置文件所在目录
[root@zabbix-server zabbix-3.4.15]# ls /usr/local/bin #命令所在目录
[root@zabbix-server zabbix-3.4.15]# ls /usr/local/sbin #启动服务命令
1.3 初始化准备
**· 创建数据库与数据库账户 **
[root@ansible-server ~]# mysql
mysql> create database zabbix character set utf8;
mysql> grant all on zabbix.* to zabbix@'localhost' identified by 'zabbix';
mysql> exit
[root@ansible-server ~]# cd /home/setup/zabbix-3.4.15/database/mysql
[root@zabbix-server mysql]# mysql -uzabbix -pzabbix zabbix < schema.sql
[root@zabbix-server mysql]# mysql -uzabbix -pzabbix zabbix < images.sql
[root@zabbix-server mysql]# mysql -uzabbix -pzabbix zabbix < data.sql
**· 上线Zabbix页面 **
[root@zabbix-server ~]# cd /home/setup/zabbix-3.4.15/frontends/php
[root@zabbix-server php]# cp -a * /usr/local/nginx/html/
[root@zabbix-server php]# chmod -R 777 /usr/local/nginx/html/*
**· 修改nginx配置 **
[root@zabbix-server ~]# vim /usr/local/nginx/conf/nginx.conf
http {
··· ···
fastcgi_buffers 8 16K; #缓存php生成的页面内容,8个16k
fastcgi_buffer_size 32K; #缓存php生产的头部信息
fastcgi_connect_timeout 300; #连接PHP的超时时间
fastcgi_send_timeout 300; #发送请求的超时时间
fastcgi_read_timeout 300;
**· 安装依赖软件 **
[root@zabbix-server ~]# cd /home/setup
[root@zabbix-server ~]# yum -y install php-gd php-xml php-ldap
[root@zabbix-server ~]# yum -y install php-bcmath php-mbstring
[root@zabbix-server ~]# vim /etc/php.ini
date.timezone = Asia/Shanghai #设置时区
post_max_size = 16M #最大执行时间,秒
max_execution_time = 300 #POST数据最大容量
max_input_time = 300 #服务器接收数据的时间限制
[root@zabbix-server setup]# systemctl restart php-fpm
[root@zabbix-server setup]# /usr/local/nginx/sbin/nginx -s stop
[root@zabbix-server setup]# /usr/local/nginx/sbin/nginx
**· 访问zabbix页面 **
· 配置数据库连接配置
· 配置监控服务器
· 查看安装信息
[root@zabbix-server ~]# cat /usr/local/nginx/html/conf/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = 'localhost';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = '192.168.139.15';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'zyx-monitor';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
1.4 登陆管理页面
管理员名称:andmin
初始密码:zabbix
· 修改页面语言及管理员密码
点击右上角个人信息
设置管理员密码和页面语言
1.5 运行zabbix监控服务
** 1.5.1 修改服务主配置文件**
[root@zabbix-server ~]# vim /usr/local/etc/zabbix_server.conf
DBHost=localhost #数据库主机
DBName=zabbix #设置数据库名称
DBUser=zabbix #设置数据库账户
DBPassword=zabbix #设置数据库密码
LogFile=/tmp/zabbix_server.log #设置日志
** 1.5.2 启动服务**
因为源码安装,zabbix不会创建进程的所有者,所以需要自己手动创建
[root@zabbix-server ~]# useradd zabbix #不创建用户无法启动服务
[root@zabbix-server ~]# zabbix-server #启动服务
** 1.5.3 查看服务信息**
[root@zabbix-server ~]# netstat -utnlp | grep :10051 #查看端口
2 Zabbix监控服务
2.1 基础监控
** 2.1.1 配置被监控端 **
· 安装zabbix软件提供zabbix-agent服务
[root@agent-1 ~]# mkdir -pv /home/setup; cd /home/setup
[root@agent-1 setup]# scp 192.168.139.15:/home/setup/zabbix-3.4.15.tar.gz ./
· 安装软件(139.100为例)
[root@agent-1 setup]# yum -y install gcc pcre-devel
[root@agent-1 setup]# tar -zxvf zabbix-3.4.15.tar.gz
[root@agent-1 setup]# cd zabbix-3.4.15/
[root@agent-1 zabbix-3.4.15]# ./configure --enable-agent
[root@agent-1 zabbix-3.4.15]# make install
[root@agent-1 zabbix-3.4.15]# ls /usr/local/etc
[root@agent-1 zabbix-3.4.15]# ls /usr/local/bin
[root@agent-1 zabbix-3.4.15]# ls /usr/local/sbin
· 修改服务的主配置文件
[root@agent-1 ~]# vim /usr/local/etc/zabbix_agentd.conf
Server=127.0.0.1, 192.168.139.15 #允许访问服务器地址列表
ServerActive=192.168.139.15:10051 #监控服务器ip地址
LogFile=/tmp/zabbix_agentd.log #日志文件
· 启动服务
[root@agent-1 ~]# useradd zabbix
[root@agent-1 ~]# zabbix_agentd
· 查看服务信息
[root@agent-1 ~]# netstat -utnlp | grep :10050
[root@agent-1 ~]# ls /tmp/zabbix_agentd.log
** 2.1.2 配置监控服务器**
· 添加监控主机
Host(主机)是监控的基本载体
Zabbix 所有监控都是基于Host
通过Configuration -> Hosts -> Create Host创建
注意:设置中文环境后,中英文差异
根据提示输入
· 选择监控模块
为主机添加关联的监控模板
-在"Templates" 模块选项卡页面中
-找到Link nwe TempLates,select选择合适的模板添加
-这里我们选择Template OS Linux模板
· 查看监控数据
可以点击"Monitreing" -> “Latest data”
在过滤器中填写条件,根据群组和主机搜索即可
查看实时监控数据
2.2 自定义监控
** 2.2.1 配置客户端 **
· 启动自定义监控
被监控端修改Agent配置文件
[root@agent-1 ~]# vim /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1 #是否允许自定义key
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf #加载配置文件目录
· 定义监控命令
[root@agent-1 ~]# cd /usr/local/etc/zabbix_agentd.conf.d/
[root@agent-1 ~]# vim count.line.passwd.conf
# 查看/etc/passwd的文件里有多少个用户
UserParameter=count.line.passwd,wc -l /etc/passwd | awk '{print $1}'
# 自定义key语法格式
# UserParameter=自定义key名称,命令
· 重启服务
[root@agent-1 ~]# netstat -utnlp |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 36486/zabbix_agentd
[root@agent-1 ~]# killall -9 zabbix_agentd
[root@agent-1 ~]# zabbix_agentd
· 测试配置
[root@agent-1 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k count.line.passwd
52
[root@agent-1 ~]# useradd test
[root@agent-1 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k count.line.passwd
53
** 2.2.2 配置监控 服务器 **
· 登陆监控服务器Web管理页面,做如下配置:
创建监控模板
-选择 配置 -> 模板 创建模板
-设置模板名称与组名称
创建应用集
-模板添加后,默认模板中没有任何应用、项目、触发器、图形等
-点击模板后面的 应用集,刷新出的页面中选择 创建应用集,
-设置 名称,点击添加
创建监控项
-与创建应用一样,创建项目
-配置 -> 模板 -> 项目 -> 创建监控项
使用新模板监控主机
-选择 配置 -> 主机 -> 选择主机
-点击 模板 ,选择选项监控项目,添加
-添加完成后,点击更新 更新主机配置
查看监控数据
-点击 检测中 -> 最新数据 -> 选择监控项 -> 图形
3 Zabbix报警机制
· 自定义的监控项默认不会自动报警
· 首页也不会提示错误
· 需要配置触发器与报警动作才可以自动报警
3.1 概念介绍
** 触发器(trigger)**
-表达式,如内存不足300M,用户超过30个等
-当触发条件发生后,会导致一个触发事件
-触发事件会执行某个动作
** 动作(action)**
-触发器的条件被触发后的行为
-可以是发送右键,也可以是重启某个服务等
3.2 配置监控报警
** 3.2.1 创建触发器 **
· 通过 配置 -> 模板
· 选择模板点击后面的 触发器 -> 创建触发器
-强烈建议使用英文创建(中文翻译不敢恭维)
** 触发器表达式 **
· Expression表达式:触发异常的条件
{<server>:<key>.<function>(<parameter>)}<operator><constant>
{主机:key.函数(参数)}<表达式>常数
· Expression表达式案例1
{web1:system.cpu.load[all,avg1].last(0)}>5 #0为最新数据
#如果web1主机最新的CPU平均负载值大于5,则触发器状态Problem
{vfs.fs.size[/,free].max(5m)}<10G #5m为最近5分钟
#根分区,最近5分钟的最大容量小于10G,则状态进入Problem
{vfs.file.cksum[/etc/passwd].diff(0)}>0 #0为最新数据
#最新一次校验/etc/passwd如果与上一次有变化,则状态进入Problem
· Expression表达式案例2
-大多数函数使用秒作为参数,使用#代表不同含义
-avg,count,last,min and max 函数支持额外的第二个参数time_shift(时间偏移量)
-这个参数允许从过去一段时间内引用数据
| 函数内容 | 描述 |
| sum(600) | 600秒内所有值的总和 |
| sum(#5) | 最后5个值的总和 |
| last(20) | 最后20秒的值 |
| last(#5) | 倒数第5个值 |
| avg(1h,1d) | 一天前的1小时的平均值 |
配置触发器
· 设置触发器名称,点击add添加表达式
· 填写表达式
-监控项为账户数量,最近300秒账户数量大于53
** 3.2.2 创建动作 **
** 设置邮件服务器 **
· 设置邮件服务器
-管理 -> 报警媒介类型 -> 选择Email邮件
-设置邮件服务器信息
** 创建 Media **
· 为账户添加Media
-在 管理 -> 用户 中找到选择admin账户
-选择Media菜单 -> 点击更新添加报警媒介
-在 Meida Type中填写报警类型,收件人,时间等信息
** 创建动作 **
· Action(动作)
-定义当触发器被触发时,执行什么Action
-通过配置 -> 动作 -> 创建动作
-配置动作(填写名称)
-配置导致动作的触发条件(账户大于53)
-配置动作的具体操作行为(发送信息或执行远程命令)
-无线次数发送邮件,60秒1次,发送给Admin用户
** 效果测试 **
· 在被监控主机创建账户
· 登陆监控端Web页面,在仪表盘中查看问题
· 在zabbix服务器上查看是否收到邮件
[root@zabbix-server ~]# su - zabbix
[zabbix@zabbix-server ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/zabbix": 2 messages 2 new
>N 1 root Thu Jul 16 20:50 20/820 "Hello word"
N 2 root@localhost.local Thu Jul 16 21:41 20/815 "big53"
&
2
Message 2:
From root@localhost.localdomain Thu Jul 16 21:41:26 2020
Return-Path: <root@localhost.localdomain>
X-Original-To: zabbix@localhost
Delivered-To: zabbix@localhost.localdomain
From: <root@localhost.localdomain>
To: <zabbix@localhost.localdomain>
Date: Thu, 16 Jul 2020 21:41:25 +0800
Subject: big53
Content-Type: text/plain; charset="UTF-8"
Status: R
Problem started at 21:41:24 on 2020.07.16
Problem name: cfq1
Host: agent-1
Severity: Disaster
Original problem ID: 22
4 Zabbix进阶操作
4.1 自动发现
· 自动发现(Discovery)
-当Zabbix需要监控的设备越来越多,手动添加监控设备越来越有挑战,此时,可以考虑使用自动发现功能
· 自动发现可以实现:
-发现主机、添加主机,添加主机到组、连接模板等
**· 自动发现(Discovery)流程 **
-创建自动发现规则
-创建Action动作(发现主机后自动执行什么动作)
-通过动作,执行添加主机,链接模板到主机等操作
** 自动发现规则 **
· 创建自动发现规则
-配置 -> 自动发现 -> 创建自动发现
· 填写规则
-自动发现的IP地址(逗号隔开可以写多个)
-多久做一次自动发现(默认为1小时,仅实验修改为1m)
-检查的方式:HTTP、FTP、Agent的自定义key等检查
** 创建动作 **
· 配置 -> 动作
· 事件源 -> 创建动作
-注意:选择事件源为:自动发现
-添加动作名称,添加触发动作的条件
-操作(触发动作后要执行的操作命令),操作细节如下:
-添加主机到组,与模板链接(http模板)
** 创建新主机 **
· 创建一台新的主机,验证zabbix是否可以自动发现该主机
-可以重新部署一台新的虚拟机
-也可以将旧虚拟机的IP地址,临时修改为其他IP
** 查看测试结果 **
· 登陆zabbix服务器的Web页面。查看主机列表
4.2 主被动监控
· 主动和被动都是对被监控端主机而言的
· 默认zabbix采用的是被动监控
-默认监控:Server向Agent发起连接,发送监控key,Agent连接请求,响应监控数据
-主动监控:Agent向Server发起连接,Agent请求需要检测的监控项目列表,Server响应Agent发送一个items列表,Agent确认收到监控列表,TCP连接完成,会话关闭,Agent开始周期性地收集数据
· 区别:
-Server不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可
· 当监控主机达到一定量级后,Zabbix服务器会越来越慢
· 此时,可以考虑使用主动监控,释放服务器的压力
· 另外,Zabbix也支持分布式监控,也是可以考虑的方案
** 配置主动监控 **
· 配置客户端 192.168.139.201
安装源码zabbix软件
创建新的被监控主机(主动监控)
-给 agent-3 (192.168.139.201) 安装zabbix_agent软件
[root@agent-3 ~]# yum -y install gcc pcre-devel
[root@agent-3 ~]# cd /home/setup
[root@agent-3 ~]# tar -zxvf zabbix-3.4.15.tar.gz
[root@agent-3 ~]# cd zabbix-3.4.15
[root@agent-3 ~]# ./configure --enable-agent
[root@agent-3 ~]# make install
修改配置文件
[root@agent-3 ~]# vim /usr/local/etc/zabbix_agentd.conf
#Server=127.0.0.1,192.168.139.15 #注释该行
StartAgents=0 #禁止被动监控(有服务进程没有端口)
ServerActive=192.168.139.15 #监控服务器ip 一定要取消127.0.0.1
Hostname=agent-3 #告诉监控服务器,是谁发的数据信息一定要和zabbix服务器配置的监控主机名称一致
RefreshActiveChecks=120 #默认120秒检测一次
启动服务
[root@agent-3 ~]# useradd zabbix
[root@agent-3 ~]# zabbix_agentd
查看服务信息
[root@agent-3 ~]# ps -C zabbix_agentd
PID TTY TIME CMD
47025 ? 00:00:00 zabbix_agentd
47026 ? 00:00:00 zabbix_agentd
47027 ? 00:00:00 zabbix_agentd
· 配置服务器 192.168.139.15
克隆模板
· 为了方便,克隆系统自带模板(在此基础上就该更方便)
· 配置 -> 模板
-选择 Template OS Linux
-全克隆该模板,新建一个新的模板
-新模板名称为:Template OS linux ServerActive
修改监控项模式
· 将模板中的所有监控项目全部修改为主动监控模式
-Configuration -> Templates
-选择新克隆的模板,点击后面的items(监控项)
-点击全选,点击批量更新
-将类型修改为:Zabbix Agent(Active主动模式)
· 批量修改监控项的监控模式后,并非所有监控项目都支持主动模式
-批量修改后,会发现有几个没有修改主动模式成功
-说明,这些健吗项目不支持主动监控,关闭即可
-可以点击类型排序,方便操作,点击状态即可关闭
添加监控主机
· 在ZAbbix监控服务器,添加被监控的主机(主动模式)
· 名称:agent-3
将主机添加到AAA组
· IP地址为0.0.0.0,端口为0
验证效果
· 查看数据图案
- 监测中 -> 图形
-选择需要查看的主机组、主机以及图形
-图形数据
4.3 拓扑图与聚合图形
** 拓扑图 **
· 绘制拓扑图可以快速了解服务器架构
· 检测中 -> 拓扑图
· 选择 创建拓扑图 即可
· 操作说明
-lcon(图标),添加新的设备后可以点击图标修改属性
-Shape(形状)
-Link(连线),先选择两个图标,再连接连线
-完成后,点击Update更新
** 聚合图形 **
· 在一个页面显示多个数据图表,方便了解多组数据
· 检测中 -> 聚合图形 -> 创建聚合图形
-Owner:使用默认的Admin用户
-Name:名称设置为agent–3_host
-Columns:列数设置为2列
-Rows:行数设置为4行
· 选择刚刚创建的聚合图形(agent-3_host)
· 点击后面的构造函数(constructor)
-点击Change(更改),设置每行每列需要显示的数据图表
-设置需要显示的数据图表
5 监控案例
—在客户端编写监控脚本,给监控服务器调用
** 环境准备 **
· 一台Nginx服务器(192.168.139.200),部署Nginx时要加载status模块,因为192.168.139.200服务器是自动发现的,没有zabbix_agent的包,所以需要安装一下
-安装zabbix_agent
[root@agent-2 ~]# yum -y install gc pcre-devel
[root@agent-2 ~]# cd /home/setup
[root@agent-2 setup]# tar -zxvf zabbix-3.4.15.tar.gz
[root@agent-2 setup]# cd zabbix-3.4.15
[root@agent-2 zabbix-3.4.15]# configure --enable-agent
[root@agent-2 zabbix-3.4.15]# make install
[root@agent-2 ~]# vim /usr/local/etc/zabbix_agentd.conf
Server=127.0.0.1,192.168.139.15
ServerActive=192.168.139.15:10051
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
UnsafeUserParameters=1
[root@agent-2 ~]# useradd zabbix
[root@agent-2 ~]# zabbix_agentd
[root@agent-2 ~]# netstat -utnlp |grep :10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 43022/zabbix_agentd
-安装nginx
[root@agent-2 ~]# cd /home/setup
[root@agent-2 ~]# yum -y install zlib-devel
[root@agent-2 setup]# scp root@192.168.139.15:/home/setup/nginx-1.19.1.tar.gz ./
[root@agent-2 setup]# tar -zxvf nginx-1.19.1.tar.gz
[root@agent-2 setup]# cd nginx-1.19.1
[root@agent-2 nginx-1.19.1]# ./configure --with-http_stub_status_module
[root@agent-2 nginx-1.19.1]# make && make install
[root@agent-2 nginx-1.19.1]# ls /usr/local/nginx/
conf html logs sbin
-配置nginx
[root@agent-2 ~]# vim /usr/local/nginx/conf/nginx.conf
··· ···
server {
location /status {
stub_status on;
}
··· ···
[root@agent-2 ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@agent-2 ~]# /usr/local/nginx/sbin/nginx
[root@agent-2 ~]# netstat -utnlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 46031/nginx: master
[root@agent-2 ~]# curl http://localhost/status
Active connections: 1
server accepts handled requests
7 7 1
Reading: 0 Writing: 1 Waiting: 0
5.1 监控nginx服务状态
** 编写监控脚本 **
[root@agent-2 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
"Active")
curl -s http://localhost/status | awk 'NR==1{print $3}';;
"accepts")
curl -s http://localhost/status | awk 'NR==3{print $1}';;
"Waiting")
curl -s http://localhost/status | awk 'NR==4{print $6}'
esac
[root@agent-2 ~]# chmod +x /usr/local/bin/nginx_status.sh
[root@agent-2 ~]# /usr/local/bin/nginx_status.sh Waiting
[root@agent-2 ~]# /usr/local/bin/nginx_status.sh Active
[root@agent-2 ~]# /usr/local/bin/nginx_status.sh accepts
** 把脚本定义成监控命令 **
[root@agent-2 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/x.conf
UserParameter=nginx_statu[*],/usr/local/bin/nginx_status.sh $1
[root@agent-2 ~]# killall -9 zabbix_agentd
[root@agent-2 ~]# killall -9 zabbix_agentd
zabbix_agentd: no process found
[root@agent-2 ~]# zabbix_agentd
** 测试定义的监控命令 **
[root@agent-2 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx_statu[Waiting]
[root@agent-2 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx_statu[Active]
[root@agent-2 ~]# zabbix_get -s 127.0.0.1 -p 10050 -k nginx_statu[accepts]
评论区