zabbix部署与使用记录

Zabbix 介绍

Zabbix 由 Alexei Vladishev 创建,目前由其成立的公司—— Zabbix SIA 积极的持续开发更新维护, 并为用户提供技术支持服务。

Zabbix 是一个企业级分布式开源监控解决方案。

Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。

Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。

Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。

Zabbix 功能

Zabbix 是一个高度成熟完善的网络监控解决方案,一个的软件包中包含了多种功能。

数据采集

  • 可用性和性能检查;
  • 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;
  • 自定义检查;
  • 按照自定义的时间间隔采集需要的数据;
  • 通过 Server/Proxy 和 Agents 来执行数据采集。

灵活的阈值定义

  • 您可以参考后端数据库定义非常灵活的告警阈值,即触发器高度可配置化的告警

  • 可以根据递增计划、接收者、媒介类型自定义发送告警通知;

  • 使用宏变量可以使告警通知变得更加高效有用;

  • 自动操作包含远程执行命令。

实施图形

  • 使用内置图形功能可以将监控项实时绘制成图形。

Web 监控功能

  • Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。

丰富的可视化选项

  • 可以组合多个监控项到单个视图中,创建自定义图表;
  • 网络拓扑图;
  • 以仪表盘样式展示自定义聚合图形和幻灯片演示;
  • 报表;
  • 监控资源的更高层次展示视图(业务视图)。

历史数据存储

  • 存储在数据库中的数据;
  • 历史配置;
  • 内置数据管理机制(housekeeping)。

配置简单

  • 将被监控设备添加为主机;
  • 主机一旦添加到数据库中,就会采集数据用于监控;
  • 将模板用于监控设备。

使用模板

  • 模板中分组检查;
  • 模板可以关联模板,继承已关联模板的属性。

网络发现

  • 自动发现网络设备;
  • Zabbix Agent 发现设备后自动注册;
  • 自动发现文件系统、网络接口和 SNMP OIDs 值。

快捷的 Web 界面

  • 基于 PHP 的 Web 前端;
  • 可以从任何地方访问;
  • 您可以定制自己的操作方式;
  • 您可以通过审计日志来查看你的操作。

Zabbix API

  • Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途。

权限管理系统

  • 安全的用户身份验证;
  • 指定的用户只能查看指定的权限范围内的视图。

强大且易于扩展的 Zabbix Agent

  • 部署于被监控对象上;
  • 支持 Linux 和 Windows ;

二进制守护进程

  • 为了更好的性能和更少的内存占用,采用 C 语言编写;
  • 便于移植。

适合更复杂的环境

  • 使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控。

Zabbix 概述

架构

Zabbix 由几个主要的功能组件组成,其功能介绍如下所示。

Server

Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

数据库

所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。

Web 界面

为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。

Proxy

Zabbix proxy 可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

Agent

Zabbix agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。

数据流

另外,回过头来整体的了解下 Zabbix 内部的数据流对Zabbix的使用也很重要。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监控其 CPU的监控项,最后创建一个触发器,用来触发 CPU负载过高这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。

zabbix名词解释

主机 (host)

  • 一台你想监控的网络设备,用IP或域名表示

主机组 (host group)

  • 主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。

监控项 (item)

  • 你想要接收的主机的特定数据,一个度量数据。

触发器 (trigger)

  • 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。

事件 (event)

  • 单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册

异常 (problem)

  • 一个处在“异常”状态的触发器

动作 (action)

  • 一个对事件做出反应的预定义的操作。 一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成

升级 (escalation)

  • 一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列

媒介(media)

  • 发送告警通知的手段;告警通知的途径

通知 (notification)

  • 利用已选择的媒体途径把跟事件相关的信息发送给用户

远程命令 (remote command)

  • 一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令

模版 (template)

  • 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合 模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。

应用 (application)

  • 一组监控项组成的逻辑分组

web 场景 (web scenario)

  • 利用一个或多个HTTP请求来检查网站的可用性

前端 (frontend)

  • Zabbix提供的web界面

Zabbix API

  • Zabbix API允许你使用JSON RPC协议 (是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主) 来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务

Zabbix server

  • Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等

Zabbix agent

  • 一个部署在监控对象上的,能够主动监控本地资源和应用的程序 Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)。 Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。. Zabbix agents 的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。

被动(passive)和主动(active)检查

  • Zabbix agents可以执行被动和主动两种检查方式。 在passive check 模式中agent应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU 的负载情况,然后Zabbix agent回送结果。 Active checks 处理过程将相对复杂。 Agent必须首先从Zabbix sever索取监控项列表以进行独立处理,然后周期性地发送新的值给server。 执行被动或主动检查是通过选择相应的监测项目类型来配置的。item type. Zabbix agent处理监控项类型有’Zabbix agent’和’Zabbix agent (active)’。

Zabbix proxy

  • 一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序 Zabbix Proxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表sever工作的。 所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix sever。 部署Proxy是可选的,但是可能非常有益于分散单个Zabbix sever的负载。 如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I / O负载。 Zabbix proxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。 Zabbix proxy需要使用独立的数据库。

Zabbix的部署

服务器规划:

IP 主机名
192.168.100.161 zabbix-server
192.168.100.163 zabbix-agent

环境准备

基础配置

在server/agent两台服务器上进行配置

配置域名解析

1
2
3
echo "192.168.100.161" zabbix-server >> /etc/hosts
echo "192.168.100.162" zabbix-proxy >> /etc/hosts
echo "192.168.100.163" zabbix-agent >> /etc/hosts

配置repo源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat > /etc/yum.repos.d/zabbix.repo<<EOF
[zabbix]
name=Zabbix
baseurl=https://mirrors.huaweicloud.com/zabbix/zabbix/4.4/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF

# mysql用于server与proxy
$ cat > /etc/yum.repos.d/mysql57.repo <<EOF
[mysql-5.7-community]
name=MySQL 5.7 Community Server
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql
EOF

清理repo源环境并重新建立

1
2
$ yum clean all
$ yum repolist

安装必要软件

在server/proxy/agent上进行配置

安装fping

1
2
$ yum -y install epel-release
$ yum -y install fping

在server与proxy上进行配置

安装mysql

1
2
3
4
5
6
7
8
9
10
11
$ yum -y install mysql-server 
$ systemctl start mysqld
# 查看root账户的默认密码 => wIu8_wS_nXpf
$ cat /var/log/mysqld.log | grep password
2021-01-18T12:36:00.240888Z 1 [Note] A temporary password is generated for root@localhost: wIu8_wS_nXpf
2021-01-18T12:36:20.507908Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

# 登录mysql并修改默认root账户的密码
$ mysql -uroot -pwIu8_wS_nXpf
mysql> alter user 'root'@'localhost' identified by 'Syz123!@#';
Query OK, 0 rows affected (0.00 sec)

server端配置

安装zabbix以及必要环境组件

1
2
$ yum -y install zabbix-server-mysql zabbix-web-mysql   
$ yum -y install httpd php php-gd php-mysql

数据库授权

1
2
3
4
5
6
7
8
9
10
11
12
[root@zabbix-server ~]# mysql -uroot -p'Syz123!@#'
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on zabbix.* to admin@'%' identified by 'Syz123!@#';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> grant all on zabbix.* to admin@'localhost' identified by 'Syz123!@#';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit
Bye

导入zabbix的表

1
2
$ cd /usr/share/doc/zabbix-server-mysql-4.4.10/
$ zcat create.sql.gz | mysql -uroot -p'Syz123!@#' zabbix

配置zabbix文件

1
2
3
4
5
6
$ cat /etc/zabbix/zabbix_server.conf | grep ^DB
DBHost=localhost
DBName=zabbix
DBUser=admin
DBPassword=Syz123!@#
DBSocket=/var/lib/mysql/mysql.sock

修改时区

1
2
$ vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/shanghai

重启服务

1
2
3
4
5
$ systemctl restart zabbix-server
$ systemctl restart httpd
$ netstat -anltp | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 12490/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 12490/zabbix_server

如果zabbix没有起来,那么查看日志进行问题排查

1
$ cat /var/log/zabbix/zabbix_server.log

浏览器访问

http://192.168.100.161/zabbix

用户:Admin
密码:zabbix

image-20210118214736111

image-20210118214813798

image-20210118214904168

image-20210118215330123

image-20210118215525393

image-20210118215546365

image-20210118215731539

image-20210118215751155

设置中文

image-20210118215945581

image-20210118220037136

agent端配置

安装zabbix-agent

1
$ yum -y install zabbix-agent

修改配置文件

1
2
3
4
5
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.161
ServerActive=192.168.100.161
Hostname=zabbix-agent
UnsafeUserParameters=1 # 是否限制用户自定义keys使用特殊字符

启动zabbix-agent服务

1
2
3
4
$ systemctl restart zabbix-agent
$ netstat -antp | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 11809/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 11809/zabbix_agentd

Zabbix本地与远程监测

修改字体

在zabbix-server端进行配置

首先要有字体文件

链接: https://pan.baidu.com/s/1nRqCDa9vie1yOR67uVr0iw 密码: pql7

将字体放在 /usr/share/zabbix/assets/fonts 目录下

给字体权限

1
2
3
4
5
6
7
8
9
10
$ chmod 777 /usr/share/zabbix/assets/fonts/simkai.ttf 

$ vim /usr/share/zabbix/include/defines.inc.php
# zabbix4.2版本之后默认访问根路径为/usr/share/zabbix/,所以字体目录改为了assets/fonts下
define('ZBX_FONTPATH', realpath('assets/fonts'))
define('ZBX_GRAPH_FONT_NAME','simkai');
define('ZBX_FONT_NAME', 'simkai');

# 重启服务
$ systemctl restart zabbix-server

监控(server端)本地服务器

在zabbix-server端进行配置

安装配置zabbix-agent

1
2
3
4
5
6
7
8
9
10
$ yum -y install zabbix-agent

# 配置agent文件
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.161
ServerActive=192.168.100.161
Hostname=zabbix-server
UnsafeUserParameters=1

$ systemctl restart zabbix-agent

配置zabbix页面

配置 => 主机 => Zabbix Server => 修改’agent代理程序的接口’为服务器的ip => 更新

image-20210120135504863

image-20210120135731436

点击”更新”

大约过两分钟后,即可看到下面的效果:

image-20210120140016225

监测远程服务器

在zabbix-agent上进行配置

安装配置zabbix-agent

首先在远程主机上安装 zabbix-agentx

1
$ yum -y install zabbix-agent

修改配置文件

1
2
3
4
5
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.161 # server端
ServerActive=192.168.100.161 # server端
Hostname=zabbix-agent # agent端
UnsafeUserParameters=1

重启zabbix-agent服务

1
$ systemctl restart zabbix-agent

配置zabbix页面

配置 => 主机群组 => 创建主机群组(右上角) => webservers => 添加

image-20210120224000274

image-20210120224857974

点击”添加”

配置 => 主机 => 创建主机(右上角) => 主机名称,群组(webservers),agent代理程序的接口(192.168.100.163) => 添加

image-20210120225156768

image-20210120232343752

image-20210120233628212

image-20210120233726161

监测 => 图形 => 选择(群组,主机,图形) => 观察

image-20210120234208395

Zabbiz自定义item

删除zabbix-agent

image-20210120235250696

image-20210120235400041

重新创建zabbix-agent

image-20210120235544290

直接点击下面的”添加”

image-20210120235630245

应用集

点击”应用集”

image-20210121134118650

添加应用集 => web

image-20210121134225885

image-20210121134255904

点击”添加”

监控项

点击’监控项’

image-20210121134458635

添加监控项 => 名称:agent_net_info_in,键值:net.if.in[ens33],单位:bps,应用集:web

image-20210122000620204

添加监控项 => 名称:agent_net_info_out,键值:net.if.out[ens33],单位:bps,应用集:web

image-20210122000712951

image-20210122000738639

触发器

点击’触发器’

image-20210121135130685

添加触发器 =>

image-20210121135312715

名称:zabbix-agent_cpu_trigger_in
严重性:灾难
问题表现形式:{zabbix-agent:net.if.in[ens33].last()}>=1.5G
恢复表达式:{zabbix-agent:net.if.in[ens33].last()}<1.5G

image-20210121135756863

=> 更新

添加触发器 =>
名称:zabbix-agent_cpu_trigger_out
严重性:灾难
问题表现形式:{zabbix-agent:net.if.out[ens33].last()}>=1G
恢复表达式:{zabbix-agent:net.if.out[ens33].last()}<1G

image-20210121140106372

=> 更新

image-20210121140157470

图形

点击’图形’

image-20210121140453065

创建图形 =>

image-20210121140534747

名称:zabbix-agent_net_graph
监控项->添加(zabbix-agent_net_info_in,zabbix-agent_net_info_out)

=> 添加

观察图形

image-20210122010715146

Zabbix的动作和报警

建立顺序:

报警媒介 => 报警对象 => 条件(触发器) => 报警

本地报警

创建报警媒介类型

管理 => 报警媒介类型 => 创建媒介类型

image-20210121163521764

=> 名称:测试媒介,SMTP服务器:localhost,SMTP HELO:localhost,SMTP电邮:zabbix@localhost.com

image-20210122002041580

=> 添加

添加用户群组

管理 => 用户群组 => 创建用户群组 => 组名:shang

image-20210121164500093

image-20210121164721210

添加用户

管理 => 用户 => 创建用户 => 别名,群组,密码 => 报警媒介 => 添加 =>
类型:测试媒介
收件人:syz@localhost.localdomain
=> 权限 => 用户类型 => 超级管理员 => 添加

image-20210121170041801

image-20210121171421512

image-20210122010210612

image-20210121171859436

创建动作

配置 => 动作 => 创建动作

image-20210121172354616

=> 动作 => 名称,新的触发条件:触发器->选择->添加

image-20210121173635506

=> 操作 => 新的:选择用户

image-20210121173004327

=> 恢复操作 =>新的

image-20210121173152447

=> 更新操作 => 新的 => 添加

image-20210121173243571
1
2
3
4
# 在server端进行操作
$ useradd syz
# 下载必要的软件
$ yum -y install wget mailx

手动去触发触发器

例如,使用如下命令升高网络的流量

1
wget http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso

image-20210122010836181

查看是否给本地用户 syz 发送了邮件

1
2
$ su - syz
$ mail

image-20210122010929339

邮件报警

配置邮件

在server端进行配置

1
2
3
4
$ vim /etc/mail.rc
set from=syz15822409222@126.com smtp=smtp.126.com
set smtp-auth-user=syz15822409222 smtp-auth-password=MYGVECUQOJSXSLTV
set smtp-auth=login

测试邮件

1
2
3
4
$ mail -s ceshi syz15822409222@126.com
hello world
.
EOT

配置zabbix

添加报警媒介

管理 => 报警媒介类型 => 创建媒体类型 =>

image-20210122155320981

名称:sendmail
类型:脚本
脚本名称:sendmail.sh
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

image-20210122155508019

=> 添加

添加用户

管理 => 用户 => 创建用户 => 别名,群组,密码 => 报警媒介 => 点击添加 =>
类型:sendmail
收件人:syz15822409222@126.com
=> 添加 => 权限 => 用户类型:超级管理员

image-20210122160103131

image-20210122160302327

image-20210122160436707

image-20210122160553703

创建脚本

创建目录与脚本

1
2
3
4
5
6
7
8
9
10
11
$ mkdir /usr/share/zabbix/alertscripts
$ vim /usr/share/zabbix/alertscripts/sendmail.sh
#################################################################
#!/bin/bash
echo $1 >> /tmp/text.txt
echo $2 >> /tmp/text.txt
echo $3 >> /tmp/text.txt
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
#################################################################

赋予权限

1
2
3
$ chown -R zabbix.zabbix /usr/share/zabbix/alertscripts/
$ chmod a+x /usr/share/zabbix/alertscripts/sendmail.sh
$ chmod 777 /tmp/text.txt /tmp/mailx.log

修改zabbix脚本路径

1
2
$ vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/share/zabbix/alertscripts

重启server服务

1
$ systemctl restart zabbix-server

测试脚本

1
2
$ cd /usr/share/zabbix/alertscripts/
$ ./sendmail.sh syz15822409222@126.com 1111 2222

image-20210125012103068

添加动作

配置 => 动作 => 创建动作

image-20210125004813971

=> 名称:send to mail,条件:自己选触发器即可

image-20210125005006641

=> 操作:消息内容->
告警主机: {HOST.NAME}
告警IP: {HOST.IP}
告警时间: {EVENT.DATE}-{EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
问题详情: {ITEM.NAME}:{ITEM.VALUE}
事件ID: {EVENT.ID}

image-20210125005220428

新的:发送到用户
仅送到

image-20210125012503052

点击”添加”

=> 恢复操作 => 消息内容->
OK告警主机: {HOST.NAME}
OK告警IP: {HOST.IP}
OK告警时间: {EVENT.DATE}-{EVENT.TIME}
OK告警等级: {TRIGGER.SEVERITY}
OK告警信息: {TRIGGER.NAME}
OK问题详情: {ITEM.NAME}:{ITEM.VALUE}
OK事件ID: {EVENT.ID}
新的:通知所有参与者

image-20210125005509699

点击”添加”

=> 添加

测试

目前触发器触发的告警无法恢复,所以修改触发器的范围使报警恢复

恢复报警

image-20210125010138908

image-20210125005911788

image-20210125005935834

image-20210125010048160

点击”更新”

触发报警

等待报警消失后,再次修改触发器阈值,主动触发告警,具体步骤不再赘述,详情见上面的”恢复报警”步骤

修改后,等待触发报警,等待邮件的发送

image-20210125014517087

本地邮件群发

注意: 一个 zabbix 用户只能对应一个 linux 用户

zabbix用户1 <=> robin
zabbix用户2 <=> zorro
zabbix用户3 <=> tom
zabbix用户4 <=> jerry

首先解释一下,在配置”动作”中的操作时,需要理解所填数字的含义:

操作细节:

步骤 [ 1 ]-[ 2 ]….等是什么意思

​ ① ②

① => 指的是第几步,操作的执行顺序
② => 指的是这个步骤持续到所有步骤的第几步(注意,是所有步骤的第一步开始计算,不是从哪一步开始)

[注意]: ② >= ①

举个例子

第一步: robin 1 - 3 >>> 第一步开始执行,邮件发送至第三步
第二步: zorro 2 - 2 >>> 第二步开始执行,邮件发送至第二步(因为是从第二步开始,第二步结束,所以等于只发送一次)
第三步: tom 3 - 5 >>> 第三步开始执行,邮件发送至第五步
第四步: jerry 4 - 5 >>> 第四步开始执行,邮件发送至第五步

其余略…

Zabbix模板

image-20210125151007556

image-20210125151126353

点击”添加”

image-20210125151237669

点击该模板

添加应用集

在该模板中创建新的”应用集”

image-20210125151408291

image-20210125153103086

image-20210125153133119

添加监控项

在该模板中创建新的”监控项”

image-20210125153305845

image-20210125160613246

店家”添加”

添加触发器

image-20210125160948926

添加图形

image-20210125161204873

应用模板

image-20210125161310939

image-20210125161416091

Zabbix的自定义键值

语法

在agent端定义key时只需要使用UserParameter参数即可

1
2
UserParameter=<key>,<command>;[<command>...]
# command只能有一个返回值 并且返回值不能超过512K

例如:
UserParameter=mysql.ping.mysqladmin -uroot ping | grep -c alive
The agent will return ‘1’,if Mysql server is alive, ‘0’ -otherwise
也就是对于zabbix来说,1为正确

无参数键值

agent端

配置用户自定义key

1
2
3
4
5
6
7
[root@zabbix-agent ~]# free
total used free shared buff/cache available
Mem: 483612 90584 283488 6244 109540 348788
Swap: 1048572 162408 886164

[root@zabbix-agent ~]# /usr/bin/free|awk '/^Mem:/{print $4}'
283340

获取到值后,将该值在/etc/zabbix/zabbix_agentd.conf中进行配置

1
2
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memory.free,/usr/bin/free|awk '/^Mem:/{print $4}'

重启agent服务

1
[root@zabbix-agent ~]# systemctl restart zabbix-agent

server端

zabbix监控端获取数据

1
2
3
[root@zabbix-server alertscripts]# yum -y install zabbix-get
[root@zabbix-server ~]# zabbix_get -s 192.168.100.163 -k "memory.free"
280488

已经可以获取mem数据,添加为模板的Item

有参数键值

agent端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[root@zabbix-agent ~]# /bin/cat /proc/meminfo
MemTotal: 483612 kB
MemFree: 279756 kB
MemAvailable: 352120 kB
Buffers: 0 kB
Cached: 70908 kB
SwapCached: 3324 kB
Active: 30272 kB
Inactive: 79716 kB
Active(anon): 13608 kB
Inactive(anon): 31684 kB
Active(file): 16664 kB
Inactive(file): 48032 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 886280 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 36316 kB
Mapped: 12644 kB
Shmem: 6212 kB
Slab: 45560 kB
SReclaimable: 20564 kB
SUnreclaim: 24996 kB
KernelStack: 4256 kB
PageTables: 5084 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1290376 kB
Committed_AS: 785128 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 176280 kB
VmallocChunk: 34359310332 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 53120 kB
DirectMap2M: 471040 kB
DirectMap1G: 0 kB
[root@zabbix-agent ~]# /bin/cat /proc/meminfo | awk '/^SwapTotal/{print $2}'
1048572

在/etc/zabbix/zabbix_agentd.conf中进行配置

1
2
3
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=memory.usage[*],/bin/cat /proc/meminfo|awk '/^$1/{print $$2}'
[root@zabbix-agent ~]# systemctl restart zabbix-agent

server端

监控端获取根据传递的参数获取数据(同一个key可以监控多个指标)

1
2
[root@zabbix-server ~]# zabbix_get -s 192.168.100.163 -k memory.usage[MemFree]
279940

监控CPU的负载

agent端

1
2
3
4
5
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=load.avg1,/usr/bin/uptime | awk -F ':' '{print $5}' | awk -F ',' '{print $1}'
UserParameter=load.avg5,/usr/bin/uptime | awk -F ':' '{print $5}' | awk -F ',' '{print $2}'
UserParameter=load.avg15,/usr/bin/uptime | awk -F ':' '{print $5}' | awk -F ',' '{print $3}'
[root@zabbix-agent ~]# systemctl restart zabbix-agent

server端

1
2
3
4
5
6
[root@zabbix-server ~]# zabbix_get -s 192.168.100.163 -k load.avg1
0.05
[root@zabbix-server ~]# zabbix_get -s 192.168.100.163 -k load.avg5
0.03
[root@zabbix-server ~]# zabbix_get -s 192.168.100.163 -k load.avg15
0.05

image-20210127204707710

image-20210127204744784

image-20210127211112691

image-20210127211205118

image-20210127211257729

image-20210127205132419

image-20210127205208978

image-20210127205241726

image-20210127205340391

image-20210127211341385

image-20210127211410757

自动发现

server主动发现agent服务器的过程

添加自动发现规则

配置 => 自动发现 => 创建发现规则 =>

image-20210129001217933

名称:AutoDiscoveryHost
IP 范围:192.168.122.101-105

检查:新的->

HTTP

Zabbix 客户端->端口范围:10050,键值:system

abbix 客户端->端口范围:10050,键值:uname

image-20210129110334616

添加自动发现的动作

配置 => 动作 => 事件源:自动发现(右上角) => 创建动作 =>

image-20210129001840328

image-20210129002158791

image-20210129002415761

新建虚拟机

重新打开一台 192.168.100.0/24 网段的虚拟机

安装zabbix-agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat > /etc/yum.repos.d/zabbix.repo<<EOF
[zabbix]
name=Zabbix
baseurl=https://mirrors.huaweicloud.com/zabbix/zabbix/4.4/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF

$ yum -y install zabbix-agent

# 修改
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.161 # server端
ServerActive=192.168.100.161 # server端
Hostname=192.168.100.164 # agent端
UnsafeUserParameters=1

$ systemctl start zabbix-agent

image-20210129110457489

自动注册

自动发现功能主要是用与服务器端自动发现客户端,并且将其设置模板 群组并且监控,实际上服务端在主动扫描需要监控的server
而自动注册时客户端动作,客户端直接联系服务端,请求注册并且监控,实际上服务端在被动接受请求
对于部署多台服务器阶段,自动注册可能是更好的选择,而自动发现则用户后期维护比较合适

新建虚拟机

192.168.100.165

安装zabbix-agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cat > /etc/yum.repos.d/zabbix.repo<<EOF
[zabbix]
name=Zabbix
baseurl=https://mirrors.huaweicloud.com/zabbix/zabbix/4.4/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF

$ yum -y install zabbix-agent

# 修改
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.161 # server端
ServerActive=192.168.100.161 # server端
Hostname=192.168.100.165 # agent端
UnsafeUserParameters=1

$ systemctl start zabbix-agent

只需创建动作即可,[注意]:事件源选择->自动注册
创建的内容与自动发现一样,只不过不需要填入任何条件,在[操作]中填写细节即可

image-20210130155809495

image-20210130160946182

image-20210130161226323

点击”添加”

image-20210130161835119

配置Zabbix - 实现proxy代理功能

服务器规划:

IP 主机名
192.168.100.161 zabbix-server
192.168.100.162 zabbix-proxy
192.168.100.163 zabbix-agent

基础配置

在server/proxy/agent三台服务器上进行配置

配置域名解析

1
2
3
echo "192.168.100.161" zabbix-server >> /etc/hosts
echo "192.168.100.162" zabbix-proxy >> /etc/hosts
echo "192.168.100.166" zabbix-agent >> /etc/hosts

配置repo源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat > /etc/yum.repos.d/zabbix.repo<<EOF
[zabbix]
name=Zabbix
baseurl=https://mirrors.huaweicloud.com/zabbix/zabbix/4.4/rhel/7/x86_64/
enabled=1
gpgcheck=0
EOF

# mysql用于server与proxy
$ cat > /etc/yum.repos.d/mysql57.repo <<EOF
[mysql-5.7-community]
name=MySQL 5.7 Community Server
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql
EOF

清理repo源环境并重新建立

1
2
$ yum clean all
$ yum repolist

安装必要软件

在server/proxy/agent上进行配置

安装fping

1
2
$ yum -y install epel-release
$ yum -y install fping

mysql在server与proxy上进行安装

安装mysql

1
2
3
4
5
6
7
8
9
10
11
$ yum -y install mysql-server 
$ systemctl start mysqld
# 查看root账户的默认密码 => wIu8_wS_nXpf
$ cat /var/log/mysqld.log | grep password
2021-01-18T12:36:00.240888Z 1 [Note] A temporary password is generated for root@localhost: wIu8_wS_nXpf
2021-01-18T12:36:20.507908Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

# 登录mysql并修改默认root账户的密码
$ mysql -uroot -pwIu8_wS_nXpf
mysql> alter user 'root'@'localhost' identified by 'Syz123!@#';
Query OK, 0 rows affected (0.00 sec)

server端配置

上面已有,不再赘述

proxy端配置

创建数据库并授权

1
2
3
4
5
6
7
8
9
$ mysql -uroot -p'Syz123!@#'
mysql> create database zabbix_proxy character set 'utf8';
Query OK, 1 row affected (0.00 sec)

mysql> grant all on zabbix_proxy.* to zbxproxy@localhost identified by 'Syz123!@#';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> exit
Bye

安装zabbix-proxy

1
$ yum install -y zabbix-proxy zabbix-proxy-mysql zabbix-agent

导入表

1
zcat /usr/share/doc/zabbix-proxy-mysql-4.4.10/schema.sql.gz | mysql -u zbxproxy -p'Syz123!@#' zabbix_proxy

修改配置文件

1
2
3
4
5
6
7
8
$ vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.100.161
Hostname=zabbix-proxy
DBHost=localhost
DBName=zabbix_proxy
DBUser=zbxproxy
DBPassword=Syz123!@#
DBSocket=/var/lib/mysql/mysql.sock

注意: 上面的 Hostname 名称要记住,一会儿在 zabbix 界面中创建代理时,需要与其保持一致,最好所有名字都取为 zabbix-proxy

启动proxy服务

1
2
3
4
$ systemctl restart zabbix-proxy
$ netstat -anplt|grep zabbix_proxy
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2619/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 2619/zabbix_proxy

agent端配置

安装zabbix-agent

1
$ yum -y install zabbix-agent

修改配置文件

1
2
3
4
5
$ vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.100.162
ServerActive=192.168.100.162
Hostname=zabbix-agent
UnsafeUserParameters=1 # 是否限制用户自定义keys使用特殊字符

启动zabbix-agent服务

1
2
3
4
$ systemctl restart zabbix-agent
$ netstat -antp | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 11809/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 11809/zabbix_agentd

添加代理

管理 => agent 代理程序 => 创建代理 =>

agent 代理程序名称:zabbix-proxy

系统代理程序模式:主动式(由proxy端主动将数据发送给server端)

=> 添加

add_zabbix_proxy

image-20210120002739986

添加自动发现

配置 => 自动发现 => 创建发现规则 =>

名称:AutoDiscoveryProxyHost
由agent代理程序自动发现:zabbix-proxy
IP范围:192.168.100.162
更新间隔:10
检查:ICMP ping

=> 添加

image-20210120003226480

image-20210130172426634

添加动作

配置 => 动作 => 创建动作 =>

image-20210130171259725

[动作]
名称:AutoDiscoveryProxyHostAction
A 自动发现规则 等于 AutoDiscoveryProxyHost 移除
B 自动发现状态 等于 上 移除

image-20210130171457728

[操作]
添加主机 编辑 移除
添加到主机群组: webservers 编辑 移除
链接到模板: Template web server 编辑 移除

image-20210130171713262

=> 添加

新建虚拟机进行测试

新添加一台ip为192.168.100.166的虚拟机

image-20210130175114536

也许你会奇怪怎么多出来这么多的新主机,其实正常,这是因为zabbix-proxy代理通过自动发现再次把之前的机器添加了进来,造成了重复

本文标题:zabbix部署与使用记录

文章作者:尚先森

发布时间:2021年01月18日 - 20:46:26

最后更新:2023年02月20日 - 18:09:41

原始链接:https://imauu.gitee.io/2021/01/18/zabbix部署与使用记录/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

尚先森 wechat
有任何问题可以扫描上方二维码私聊我哦😊
您的支持是我创作的最大动力^_^