Zabbix监控笔记

主流的开源监控平台介绍有:

  • mrtg (Multi Router Traffic Grapher)通过snmp协议得到设备的流量信息,并以包含PNG格式的图形的HTML文档方式显示给用户。

  • cacti (仙人掌) 用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据。官网地址: https://www.cacti.net/

  • ntop 官网地址: https://www.ntop.org/

  • nagios 能够跨平台,插件多,报警功能强大。官网地址: https://www.nagios.org/

  • centreon 底层使用的就是nagios。是一个nagios整合版软件。官网地址:https://www.centreon.com/

  • ganglia 设计用于测量数以千计的节点,资源消耗非常小。官网地址:http://ganglia.info/

  • open-falcon 小米公司开源,高效率,高可用。用户基数相对小。官网地址: http://open-falcon.org/

  • zabbix 跨平台,画图,多条件告警,多种API接口。用户基数大。官网地址: https://www.zabbix.com/

  • prometheus 基于时间序列的数值数据的容器监控解决方案。官网地址: https://prometheus.io/

Zabbix搭建

环境准备: 这里为1台监控服务器和2台被监控端

  1. 配置静态ip

  2. 修改主机名

各自配置好主机名
# hostnamectl set-hostname --static server

三台都互相绑定IP与主机名
# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.11  server
10.1.1.12  agent1
10.1.1.13  agent2
  1. 时间同步
# systemctl restart ntpd
# systemctl enable ntpd
  1. 关闭防火墙,selinux
# systemctl stop firewalld
# systemctl disable firewalld
# iptables -F

# setenforce 0
setenforce: SELinux is disabled
  1. 所有机器(zabbix服务器和所有被监控端)配置yum(安装完centos后默认的yum源+下面zabbix源,需要上传一个压缩包)
# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=file:///root/zabbix_soft
enabled=1
gpgcheck=0

说明: 上面是将共享的软件包目录拷贝到所有机器上做的本地源,如果需要使用公网源可以去清华源搜索

1, 安装zabbix服务器端软件

[root@server ~]# yum install zabbix-server-mysql zabbix-web-mysql mariadb-server

2, 启动数据库并建库

在mysql(mariadb)里建立存放数据的库并授权,然后导入zabbix所需要用的表和数据

[root@server ~]# systemctl restart mariadb
[root@server ~]# systemctl enable mariadb

[root@server ~]# mysql 
MariaDB [(none)]> create database zabbix default charset utf8;

MariaDB [(none)]> grant all on zabbix.* to zabbix@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

说明:

  • 建库要用utf8字符集,否则后面zabbix很多中文用不了(比如创建中文名用户就创建不了)
  • 用户名与密码自定义,但需要和下面的第4步配置文件对应

3, 导入zabbix表数据

[root@server ~]# zcat /usr/share/doc/zabbix-server-mysql-4.4.4/create.sql.gz |mysql -u zabbix -p123 zabbix

验证导入的表数据

[root@server ~]# mysql -e 'use zabbix; show tables;'

4, 配置zabbix并启动服务

配置server端配置文件/etc/zabbix/zabbix_server.conf

注意: 有些参数默认为注释状态也是生效的。如果要修改,则必须要打开注释再修改

[root@server ~]# vim /etc/zabbix/zabbix_server.conf
ListenPort=10051
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123						打开注释并修改连接mysql的密码,在124行
DBSocket=/var/lib/mysql/mysql.sock 	
ListenIP=0.0.0.0
[root@server ~]# systemctl restart zabbix-server
[root@server ~]# systemctl enable zabbix-server

[root@server ~]# netstat -ntlup |grep 10051
tcp   0  0 0.0.0.0:10051      0.0.0.0:*         LISTEN      9221/zabbix_server
tcp6  0  0 :::10051           :::*              LISTEN      9221/zabbix_server

5, 配置httpd并启动服务

zabbix软件包自带了httpd的子配置文件,需要修改时区,否则监控的数据会出现时间不对应的情况

[root@server ~]# vim /etc/httpd/conf.d/zabbix.conf

20 php_value date.timezone Asia/Shanghai			打开注释,并修改时区

[root@server ~]# systemctl restart httpd 
[root@server ~]# systemctl enable httpd

[root@server ~]# netstat -ntlup |grep :80
tcp6    0    0 :::80          :::*              LISTEN      9338/httpd

6, 浏览器配置与登录

使用浏览器访问http://10.1.1.11/zabbix
Zabbix监控笔记_第1张图片

Zabbix监控笔记_第2张图片

Zabbix监控笔记_第3张图片
Zabbix监控笔记_第4张图片
Zabbix监控笔记_第5张图片
Zabbix监控笔记_第6张图片

Zabbix监控笔记_第7张图片

7, 修改为中文web管理

右上角点一个类似小人的图标 --》 语言选 chinese zh-cn --》 点 update后换成中文件界面
在这里插入图片描述
Zabbix监控笔记_第8张图片

Zabbix监控笔记_第9张图片

zabbix服务器监控本机

概念:

  • 主机(host): 指被监控的一个设备(服务器,交换机等)

  • 主机群组(hostgroup): 指被监控的一组主机(主要应用在有特别多主机的情况,方便分组区分)

zabbix服务器端默认配置了监控本机,但还需要安装客户端收集工具:zabbix-agent。

Zabbix监控笔记_第10张图片

1, 服务器上安装zabbix-agent

[root@server ~]# yum install zabbix-agent

2, 启动zabbix-agent服务

请使用vi或vim打开agent端配置文件/etc/zabbix/zabbix_agentd.conf修改,修改后的结果如下

[root@server ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=127.0.0.1						zabbix服务器的IP,agent被动监控(默认模式)
139:ServerActive=127.0.0.1				zabbix服务器的IP,agent主动监控
150:Hostname=server						zabbix服务器的主机名
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf

说明:

  • 默认为相对于agent的被动监控,表示server找agent拿数据, 而不是agent主动给数据server
  • 主动与被动只是数据传输的方式不同, 具体区别我们在最后的章节讨论
  • 我这里只修改了第150行的主机名,其它参数都为默认值未修改
[root@server ~]# systemctl restart zabbix-agent
[root@server ~]# systemctl enable  zabbix-agent

[root@server ~]# netstat -ntlup |grep :10050
tcp    0    0 0.0.0.0:10050      0.0.0.0:*       LISTEN      65171/zabbix_agentd
tcp6   0    0 :::10050           :::*            LISTEN      65171/zabbix_agentd

3, 确认本机监控状态

Zabbix监控笔记_第11张图片

监控状态不OK的排错思路:

  • 查看日志cat /var/log/zabbix/zabbix_server.log

4, 解决图形中文乱码问题

Zabbix监控笔记_第12张图片

Zabbix监控笔记_第13张图片
Zabbix监控笔记_第14张图片
Zabbix监控笔记_第15张图片

乱码原因: 字符不兼容

解决乱码方法: 换一个字体

下载我共享的ttf-arphic-ukai.tar.gz软件包,并做如下配置

# tar xf ttf-arphic-ukai.tar.gz -C /usr/share/zabbix/assets/fonts/
# mv /usr/share/zabbix/assets/fonts/ukai.ttc /usr/share/zabbix/assets/fonts/ukai.ttf
# vim /usr/share/zabbix/include/defines.inc.php

67 define('ZBX_GRAPH_FONT_NAME',           'ukai');   修改原来的graphfont字体改成ukai

做完后不用重启服务,web界面刷新查看图形就会发现中文显示正常了

Zabbix监控笔记_第16张图片

监控远程linux服务器

1, agent1上安装zabbix-agent

[root@agent1 ~]# yum install zabbix-agent -y

2, 配置agent端并启动服务

配置/etc/zabbix/zabbix_agentd.conf配置文件,配置结果如下:

[root@agent1 ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.11					修改成zabbix监控服务器的IP,agent被动模式
139:ServerActive=10.1.1.11			修改成zabbix监控服务器的IP,agent主动模式
150:Hostname=agent1					修改为被监控端的主机名
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@agent1 ~]# systemctl restart zabbix-agent
[root@agent1 ~]# systemctl enable zabbix-agent

[root@agent1 ~]# netstat -ntlup |grep :10050
tcp    0   0 0.0.0.0:10050        0.0.0.0:*        LISTEN      7413/zabbix_agentd
tcp6   0   0 :::10050             :::*             LISTEN      7413/zabbix_agentd

3, web管理界面创建监控主机

回到web管理界面--》点配置--》点主机 --》 点创建主机
Zabbix监控笔记_第17张图片
Zabbix监控笔记_第18张图片
Zabbix监控笔记_第19张图片

4, 确认监控OK

Zabbix监控笔记_第20张图片

监控不OK的排错思路:

  • 检查server与agent1的网络是否OK,防火墙是否关闭
  • 检查IP与端口是否写错
  • 在agent端查看日志cat /var/log/zabbix/zabbix_agentd.log
  • 在server端查看日志cat /var/log/zabbix/zabbix_server.log

模板

模板介绍与作用

模板(template): 是包括监控项,应用集,触发器,图形,聚合图形,自动发现,web监测等的一组实体。

使用模板可以方便应用到主机,更改模板也会将更改应用到所有链接的主机

例: 比如我要把监控nginx相关的全部做成一个模板,有100台服务器需要监控nginx,我只需要链接模板到这100台机器即可。以后需要修改,只需要修改模板,这100台就会被同时修改。

Zabbix监控笔记_第21张图片

为主机添加或删除模板

zabbix自带了很多实用的模板, 对于一些要求不高的公司来说, 直接将模板添加到监控主机都几乎够用了。

Zabbix监控笔记_第22张图片

Zabbix监控笔记_第23张图片
Zabbix监控笔记_第24张图片

Zabbix监控笔记_第25张图片
Zabbix监控笔记_第26张图片
Zabbix监控笔记_第27张图片

创建自定义模板

Zabbix监控笔记_第28张图片
在这里插入图片描述
Zabbix监控笔记_第29张图片

练习: 请将agent1其它模板都清空,只保留刚刚自定义的Template test模板。

操作的最终结果如下:

Zabbix监控笔记_第30张图片

监控项与应用集

监控项(item): 是从主机收集的数据信息,代表收集数据或监控的一个最小单位

比如cpu1分钟内平均负载,内存空闲值,磁盘使用率等等都可以做为监控项,可以说监控项有无限种可能。

应用集(applications): 代表多个监控项目合成的组。

创建监控项的方式

创建监控项的方法有2种:

  1. 在某一台被监控机上创建(如下图所示),这样创建的监控项只对此监控机生效。

Zabbix监控笔记_第31张图片

  1. 在模板里创建(如下图所示), 这样创建的监控项对所有使用此模板的主机生效(推荐方式)。

Zabbix监控笔记_第32张图片
Zabbix监控笔记_第33张图片

创建自带键值监控项

创建监控项中最核心的概念就是**键值(key)**。

键值就看作是开发好的用于收集数据的命令,主要有两种:

  • zabbix自带的键值(太多了,不用特意去记忆)
  • 自定义开发的键值(用linux基础命令就可以开发)

案例: 使用zabbix自带键值创建监控项实现监控cpu的1分钟内平均负载

键值写法可参考下图:

Zabbix监控笔记_第34张图片

1, 在模板里创建监控项

Zabbix监控笔记_第35张图片
Zabbix监控笔记_第36张图片

2, 填写监控项相关信息

Zabbix监控笔记_第37张图片
Zabbix监控笔记_第38张图片

3, 确认创建成功

Zabbix监控笔记_第39张图片

Zabbix监控笔记_第40张图片

创建自定义键值监控项

以监控登录用户数为例,自带键值中有system.users.num这个键值,但我们不使用它,使用自定义的键值来实现。

1, 在被监控端agent1上操作

首先在agent1多打开几个终端,模拟多个登录用户,然后使用who |wc -l查询

[root@agent1 ~]# who |wc -l
15							我这里确认登录用户数为15

然后在agent1上,定义UserParameter

[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf 

318 UserParameter=loginusers,who | wc -l

说明: loginusers是我自定义的一个键值名称(会在创建监控项时用到),后面的who |wc -l就要被监控的命令

重启zabbix-agent服务使之生效

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

2, 在zabbix监控端上操作

在zabbix服务器安装zabbix-get工具,可以远程测试能否通过自定义的键值得到数据

[root@server ~]# yum install zabbix-get

[root@server ~]# zabbix_get -s 10.1.1.12 -k loginusers
15					可以确认得到的值确实为agent1的登录用户数

说明:

  • -s后接agent端的IP
  • -k接agent端自定义的键值

3, 在web管理界面创建监控项

还是在自定义模板里创建
Zabbix监控笔记_第41张图片
Zabbix监控笔记_第42张图片
Zabbix监控笔记_第43张图片

4, 确认创建成功

Zabbix监控笔记_第44张图片
Zabbix监控笔记_第45张图片

图形与聚合图形

监控项创建好了, 但是它监控收集的数据在哪里看呢? 答案就是图形

创建图形显示监控项数据

1, 在模板里创建图形

Zabbix监控笔记_第46张图片
Zabbix监控笔记_第47张图片

2, 配置图形对应监控项

Zabbix监控笔记_第48张图片
Zabbix监控笔记_第49张图片

3, 验证图形

Zabbix监控笔记_第50张图片
Zabbix监控笔记_第51张图片
Zabbix监控笔记_第52张图片

**练习: **请将前面自定义的登录用户数这个监控项也做成图形

最终结果如图:
Zabbix监控笔记_第53张图片

聚合图形

聚合图形: 就是把多个重要常用的图形整合一起来显示,方便查看.

假设需要经常查看agent1的cpu负载与登录用户数这两张图,我们可以将其聚合到一起做成一张聚合图形

1, 创建聚合图形

Zabbix监控笔记_第54张图片
Zabbix监控笔记_第55张图片
Zabbix监控笔记_第56张图片

2, 编辑聚合图形

Zabbix监控笔记_第57张图片
Zabbix监控笔记_第58张图片
Zabbix监控笔记_第59张图片
Zabbix监控笔记_第60张图片
Zabbix监控笔记_第61张图片

3, 编辑仪表板并查看

Zabbix监控笔记_第62张图片
Zabbix监控笔记_第63张图片

触发器

虽然我们可以通过图形查看到监控的数据,但我们不可能一直盯着图形的变化。

所以需要定义监控项到达一个临界值(阈值)或者满足一个条件,就会发生状态变化的通知。

定义**触发器(trigger)**就是定义这个临界值(阈值)或条件.

监控项有无限种可能,触发器也一样有无限种可能。如:

  • cpu负载值大于某个值则通知
  • 登录用户数大于某个值则通知
  • 内存空闲率小于某个值则通知
  • 磁盘使用率大于某个值则通知
  • 主机名被修改则通知

等等,主要还是看需求。

创建登录用户数过多的触发器

1, 在模板里创建触发器

Zabbix监控笔记_第64张图片
Zabbix监控笔记_第65张图片

2, 配置触发器

Zabbix监控笔记_第66张图片
在这里插入图片描述

3, 验证创建成功

Zabbix监控笔记_第67张图片
Zabbix监控笔记_第68张图片

4, 验证触发器效果

先在agent1上再多打开几个终端,将登录用户数控制在20个以上(操作过程省略)

然后通过下图查看触发器通知
Zabbix监控笔记_第69张图片
Zabbix监控笔记_第70张图片

自由思维与操作练习: 请将cpu负载的相关监控项也创建对应的触发器并验证。

报警

触发器的通知信息显示在web管理界面, 运维工程师仍然没办法24小时盯着它。所以我们希望它能自动地通知工程师们,这就是报警。

zabbix的报警媒介支持email,jabber,sms(短信),微信,电话语音等。

报警过程原理

Zabbix监控笔记_第71张图片

报警平台申请

自己配置报警过程比较复杂,需要配置触发器动作,用户与其报警媒介,最麻烦的是写程序对接邮件,微信,短信,电话等接口.

  • 邮件容易被拒,当做垃圾邮件
  • 微信需要企业微信号并开发程序对接
  • 短信一般都需要付费买运营商相关服务
  • 电话语言需要更专业的开发

以上要求对于没有开发能力和开发支持的运维工程师来说,难度较大。

所以我们这里选择专业的报警平台就可以帮助实现一体化报警方案。

如:onealeart 参考:http://www.onealert.com/

请先申请一个账号,绑定邮箱,手机,微信等(过程省略)。

登录进去后,按如下图示操作
Zabbix监控笔记_第72张图片

报警平台增加zabbix应用

在这里插入图片描述
Zabbix监控笔记_第73张图片
Zabbix监控笔记_第74张图片

server上安装报警agent

Zabbix监控笔记_第75张图片

按照提示进行安装

[root@server ~]# cd /usr/lib/zabbix/alertscripts
[root@server alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-2.1.0.tar.gz

[root@server alertscripts]# tar xf ca_zabbix_release-2.1.0.tar.gz
[root@server alertscripts]# cd cloudalert/bin/

[root@server bin]# bash install.sh 2842d6d7-f7a1-fb97-254d-9be972403dd0
start to create config file...
Zabbix管理地址: http://10.1.1.11/zabbix
Zabbix管理员账号: admin
Zabbix管理员密码: 
......

验证安装

配置完onealert后,我们可以验证下它安装后到底对zabbix做了啥。简单来说,它做了三件事:

  1. 增加了一个报警动作
  2. 增加了一个用户和一个用户组用于报警
  3. 增加了一个报警媒介类型

验证动作

Zabbix监控笔记_第76张图片

验证用户

Zabbix监控笔记_第77张图片
Zabbix监控笔记_第78张图片

验证报警媒介

Zabbix监控笔记_第79张图片

验证报警脚本

以下脚本看不懂没关系,我们只要知道是对接报警平台的API接口就OK了

[root@server bin]# cat /usr/lib/zabbix/alertscripts/cloudalert/bin/alert.sh
#!/bin/bash
# PATH
DIR="$( cd "$( dirname "$0"  )" && pwd  )"
echo $DIR
source $DIR/log.sh
$(log INFO ZabbixActionParams "$3")
r=`curl -H "Content-Type:application/json"  -X POST -d "$3" http://api.aiops.com/alert/api/event/zabbix/v3`
$(log INFO ItsmAlertResponse "$r")

把以上验证的内容再连成一条复习一下:

监控项 --》图形 --》触发器 --》动作 --》用户 --》报警媒介 --》报警脚本 --》报警平台

配置通知策略

在报警平台按需求配置通知策略(过程省略)

我这里主要配置的是任务时间任务报警立刻发送到我所绑定的邮箱,微信,手机短信,手机电话。
Zabbix监控笔记_第80张图片

触发器触发报警

这里以前面配置过的"登录用户数大于20个"这个触发器来测试报警.

注意: 要触发器有状态变化才能报警

如果在测试前就已经大于20个了是不会报警的,需要先降到20以下,再升到20以上让其触发。

Zabbix监控笔记_第81张图片
Zabbix监控笔记_第82张图片

自动化批量监控

我们要监控的服务器数量很大的情况下,如何批量操作:

  • 系统使用cobbler批量安装
  • zabbix-agent安装与配置可以使用cobbler的postscript脚本实现,或者使用ansible来实现
  • 监控主机元素: 监控项,图形,触发器等,统一使用模板

因为创建监控主机和添加模板都需要web界面操作,如何自动批量做?

答案: 自动发现或自动注册。

自动发现或自动注册

自动发现: 由Zabbix Server开启发现进程,每隔一段时间扫描网络中符合条件的主机。

自动注册: 与自动发现相反由Zabbix agent去找Server注册。

所以大家看到,和前面提过的主动监控与被动监控的概念很类似。

自动发现案例:

前面早就准备了一台agent2,一直还没使用,这里就尝试自动发现这台agent2,并通过动作将其创建为监控主机并添加模板。

1, agent2上安装zabbix-agent

[root@agent2 ~]# yum install zabbix-agent

2, 配置agent端并启动服务

配置/etc/zabbix/zabbix_agentd.conf配置文件,配置结果如下:

[root@agent2 ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.11
139:ServerActive=10.1.1.11
150:Hostname=agent2
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@agent2 ~]# systemctl restart zabbix-agent
[root@agent2 ~]# systemctl enable zabbix-agent

[root@agent2 ~]# netstat -ntlup |grep :10050
tcp     0  0 0.0.0.0:10050      0.0.0.0:*       LISTEN      20447/zabbix_agentd
tcp6    0  0 :::10050           :::*            LISTEN      20447/zabbix_agentd

再次说明: 在自动化运维体系里可以使用cobbler的postscript脚本或ansible来批量做以上2步

3, 配置并启用自动发现规则

Zabbix监控笔记_第83张图片
Zabbix监控笔记_第84张图片
Zabbix监控笔记_第85张图片
Zabbix监控笔记_第86张图片

4, 确认自动发现到主机

Zabbix监控笔记_第87张图片

5, 配置动作实现自动监控

Zabbix监控笔记_第88张图片
Zabbix监控笔记_第89张图片
Zabbix监控笔记_第90张图片
Zabbix监控笔记_第91张图片

6, 确认动作更新并启用

Zabbix监控笔记_第92张图片

7, 验证最终效果

确认时间同步, 需要耐心等待一段时间。(可能几分钟到十几分钟)

最终效果如下:

Zabbix监控笔记_第93张图片

问题: agent2上的"登录用户数"这个监控项的图形上没有数据, 为什么? 如何解决?

自动注册就不再演示了,仅了解即可。

批量操作

把大量的服务器实现了自动监控后,后续还可能会做一些相关的批量操作,如:

  • 批量启用主机
  • 批量禁用主机
  • 批量删除主机
    Zabbix监控笔记_第94张图片

说明:

  • 因为我们建议使用模板来管理监控,所以批量更新功能也可以直接更新模板即可
  • 导出功能在当前版本经测试只能导出单个主机的配置信息为.xml格式文件

导入导出

辛苦配置好的模板或主机,如果被误删除了怎么办? 或者我想搭建多个zabbix服务器,那么又要辛苦再配置一遍?

解决方法就是把配置的模板或主机导出成.xml格式文件,主要有两大好处:

  • 备份(防止误删除)
  • 迁移(导出后, 导入到另一个服务器)
    Zabbix监控笔记_第95张图片
    Zabbix监控笔记_第96张图片
    Zabbix监控笔记_第97张图片

Zabbix监控笔记_第98张图片
Zabbix监控笔记_第99张图片

zabbix代理

zabbix proxy应用场景

参考: https://www.zabbix.com/documentation/current/manual/distributed_monitoring/proxies

Zabbix监控笔记_第100张图片

应用场景1: 跨内外网监控

当zabbix server与被监控机器不在同一个机房时,跨公网监控会很麻烦, 也会带来安全隐患

  • 比如有防火墙的情况,需要防火墙开放的端口增多
  • 像mysql数据库这类应用是不适合直接被公网连接的

应用场景2: 分布式监控

当监控机主机特别多,甚至分散在不同的地域机房。这个时候zabbix server压力很大,所以可以通过增加zabbix proxy来代理收集每个机房里的主机信息,再统一给zabbix server.

Zabbix监控笔记_第101张图片

zabbix proxy案例

环境准备:

Zabbix监控笔记_第102张图片

1, 新增一台全新环境的服务器做proxy,修改主机名

[root@proxy ~]# hostnamectl set-hostname --static proxy

2, 四台服务器全部重新绑定主机名

# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.11  server
10.1.1.12  agent1
10.1.1.13  agent2
10.1.1.14  proxy

3, 确认关闭防火墙,selinux

4, 确认时间同步

5, proxy上添加zabbix源

# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=zabbix
baseurl=file:///root/zabbix_soft
enabled=1
gpgcheck=0

说明: 上面是将共享的软件包目录拷贝到所有机器上做的本地源,如果需要使用公网源可以去清华源搜索

操作步骤:

1, 在proxy上安装软件包

[root@proxy ~]# yum install mariadb-server zabbix-proxy-mysql zabbix-agent -y

2, 启动数据库并建库授权

[root@proxy ~]# systemctl restart mariadb
    [root@proxy ~]# systemctl enable mariadb

[root@proxy ~]# mysql

MariaDB [(none)]> create database zabbix_proxy default charset utf8;
MariaDB [(none)]> grant all privileges on zabbix_proxy.* to 'zabbix'@'localhost' identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

3, 导入proxy数据并验证

[root@proxy ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.4.4/schema.sql.gz |mysql zabbix_proxy -u zabbix -p123

[root@proxy ~]# mysql -e 'use zabbix_proxy; show tables' 

4, 修改proxy端配置并启动服务

[root@proxy ~]# egrep -vn '^#|^$' /etc/zabbix/zabbix_proxy.conf
30:Server=10.1.1.11						修改为zabbix服务器的ip
49:Hostname=proxy						修改为本代理服务器的主机名
91:LogFile=/var/log/zabbix/zabbix_proxy.log
102:LogFileSize=0
143:PidFile=/var/run/zabbix/zabbix_proxy.pid
153:SocketDir=/var/run/zabbix
173:DBName=zabbix_proxy
188:DBUser=zabbix
196:DBPassword=123				打开注释并修改为连接数据库的密码,和上面授权对应
250:ConfigFrequency=60			proxy多久从server接收一次配置数据(打开注释并修改)
259:DataSenderFrequency=5		proxy多久发送一次收集的数据给server(打开注释并修改)
406:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
482:Timeout=4
525:ExternalScripts=/usr/lib/zabbix/externalscripts
561:LogSlowQueries=3000
667:StatsAllowedIP=127.0.0.1

[root@proxy ~]# systemctl restart zabbix-proxy
[root@proxy ~]# systemctl enable zabbix-proxy

说明: ConfigFrequency=60DataSenderFrequency=5这两个参数需要配置,否则最终结果会很久都看不到数据。

5, 配置agent端

除了agent1和agent2之外,server和proxy也可以被监控, 也就是说一共4台都可以被监控。

这4台都可以被proxy监控,也可以被server监控。本实验我选择以下方案:

  • server监控自己(默认不变), proxy,agent1,agent2都被proxy监控,然后将数据给server

所以proxy,agent1,agent2这3台都做如下操作:

# egrep -vn '^#|^$' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=10.1.1.14							修改为proxy的IP,而不是server的IP
139:ServerActive=10.1.1.14					修改为proxy的IP,而不是server的IP
150:Hostname=XXX							主机名分别为proxy,agent1,agent2
290:Include=/etc/zabbix/zabbix_agentd.d/*.conf
318:UserParameter=loginusers,who | wc -l	都加上此自定义监控项

# systemctl restart zabbix-agent

6, 创建proxy为被监控主机

Zabbix监控笔记_第103张图片
Zabbix监控笔记_第104张图片

7, 为3台被代理机添加模板

Zabbix监控笔记_第105张图片
Zabbix监控笔记_第106张图片
Zabbix监控笔记_第107张图片

8, 创建proxy为代理

Zabbix监控笔记_第108张图片
Zabbix监控笔记_第109张图片

9, 批量更新代理

Zabbix监控笔记_第110张图片
Zabbix监控笔记_第111张图片
Zabbix监控笔记_第112张图片

10, 验证

在被代理监控机上(agent1,agent2,proxy)做信息的改变, 比如改变登录用户数,然后在web管理界面的图形上能查看到相应变化,则表示代理一切OK。

过程省略, 请自行验证.

主动监控与被动监控

一共有4种模式:

  1. agent主动
  2. agent被动(默认)
  3. proxy主动(默认)
  4. proxy被动

agent被动

相对于agent的被动,也就是表示是server或proxy去找agent拿数据。

# grep -n ^Server= /etc/zabbix/zabbix_agentd.conf
98:Server=10.1.1.14					agent被动模式, IP为server或proxy的IP

agent主动

相对于agent的主动, 也就是表示是agent主动把数据传给server或proxy

# grep -n ^ServerActive= /etc/zabbix/zabbix_agentd.conf
139:ServerActive=10.1.1.14			agent主动模式, IP为server或proxy的IP

优点: 当agent太多的情况下, server或proxy去找这么多agent搜集数据, 压力负载过大。用agent主动模式就可以缓解server或proxy的压力。

但用主动模式的问题是: 监控项也要转为主动式.

Zabbix监控笔记_第113张图片
Zabbix监控笔记_第114张图片
Zabbix监控笔记_第115张图片

Zabbix监控笔记_第116张图片

proxy主动与被动

/etc/zabbix/zabbix_proxy.conf里的ProxyMode参数决定。

Zabbix监控笔记_第117张图片

结论

默认情况下的监控方向如下图所示:

Zabbix监控笔记_第118张图片

上图中:

  • 由server找agent拿数据
  • 这种情况server端压力较大, agent端压力较小

Zabbix监控笔记_第119张图片

上图中:

  • proxy找agent拿数据,又主动将agent的数据提交给server
  • proxy压力最大

个人推荐默认的模式,完全不用修改。请讨论或思考为什么? 什么情况才有可能需要修改模式?

web监测(拓展补充)

web监测: 类似一个 (可以包含多个小监控项),主要针对web服务器做监控场景。

可以对一个url页面进行监测(监测它的状态码,页面匹配的字符串,响应时间,下载速度等)

1, 在agent1上创建web监测

Zabbix监控笔记_第120张图片

2, 创建web场景

Zabbix监控笔记_第121张图片
Zabbix监控笔记_第122张图片

3, 添加步骤一

Zabbix监控笔记_第123张图片
Zabbix监控笔记_第124张图片

Zabbix监控笔记_第125张图片

4, 添加步骤二

Zabbix监控笔记_第126张图片
Zabbix监控笔记_第127张图片
Zabbix监控笔记_第128张图片
Zabbix监控笔记_第129张图片

5, 验证步骤一

Zabbix监控笔记_第130张图片

去agent1上安装httpd,创建主页,并启动服务

[root@agent1 ~]# yum install httpd -y
[root@agent1 ~]# echo web1 > /var/www/html/index.html
[root@agent1 ~]# systemctl restart httpd
[root@agent1 ~]# systemctl enable httpd

再次验证

Zabbix监控笔记_第131张图片

6, 验证步骤二

[root@agent1 ~]# echo "1111111haha22222222" > /var/www/html/test.txt

Zabbix监控笔记_第132张图片

练习

监控系统

系统有4大子系统: CPU, 内存, 磁盘IO, 网络。除了这4大子系统外还有进程, 登录用户等等。

请有实力的同学在以下题目基础上做自由拓展。

1, 监控所有进程数量,并设定触发器(当大于200就警告,当大于300就严重警告,超过400个就灾难)


2, 监控tcp连接数量, 并自定义触发器


3, 监控某分区磁盘使用率,并自定义触发器


4, 监控可用内存,并自定义触发器


监控nginx

在前面讲模板章节中有提到zabbix4版本中有自带的nginx模板,如下图所示:

Zabbix监控笔记_第133张图片

不想用自带模板的, 也可以参考以下方式自定义监控nginx:

nginx有一个状态页,通过查看状态页信息可以连接到nginx服务负载情况.

下面我们假设监控agent1的nginx

1,在agent1上安装nginx

[root@agent1 ~]# yum install epel-release
[root@agent1 ~]# yum install nginx

2,在nginx里的server{}配置段里加上下面一段,然后重启服务

[root@agent1 ~]# vim /etc/nginx/nginx.conf

		location /status {
                stub_status on;
                allow 127.0.0.1; # 允许本机访问,因为下一步脚本是在本机,通过127.0.0.1来得到状态信息的
                allow 10.1.1.1;	 # 加这个IP是为了windows宿主机访问用的,方便浏览器测试用的(可以不加这句)
                deny all;
                access_log off;
        } 
        
[root@agent1 ~]# systemctl restart nginx
[root@agent1 ~]# systemctl enable nginx

3, 通过浏览器访问http://10.1.1.12/status就能看到如下nginx状态信息

Active connections: 1 
server accepts handled requests
 59 59 115 
Reading: 0 Writing: 1 Waiting: 0 

Active  connections:当前所有处于打开状态的活动连接数
accepts :已经接收连接数
handled : 已经处理过的连接数
requests : 已经处理过的请求数,在保持连接模式下,请求数量可能会大于连接数量

Reading: 正处于接收请求的连接数
Writing: 请求已经接收完成,处于响应过程的连接数
Waiting : 保持连接模式,处于活动状态的连接数

4, 在agent1上准备一个脚本,并给执行权限

[root@agent1 ~]# vim /opt/nginx_status.sh
#!/bin/bash

HOST="127.0.0.1"
PORT="80"

function ping {						# 这个不是ping,是判断nginx进程是否存在
    /sbin/pidof nginx | wc -l
}

function active {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
$1

[root@agent1 ~]# chmod 755 /opt/nginx_status.sh 

5, 在agent1上定义UserParameter,并重启服务

在配置文件里加上下面一句
[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=nginx_status[*],/opt/nginx_status.sh $1

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

6, 在server上(如果使用了使用proxy则这里就在proxy上操作)zabbix_get测试

[root@proxy ~]# yum install zabbix-get -y

[root@proxy ~]# zabbix_get -s 10.1.1.12 -k nginx_status[ping]
1
[root@proxy ~]# zabbix_get -s 10.1.1.12 -k nginx_status[handled]
76

7, 测试能成功监控取到值,说明监控OK。

说明: web管理界面添加监控项的过程请自行完成, 这里省略。

监控mariadb

数据库能做监控项的基本都在show status命令里

例: 自定义监控agent1上mariadb的当前登录用户数, 并设定触发器(当大于50个就警告)

[root@agent1 ~]# yum install mariadb-server -y
[root@agent1 ~]# systemctl restart mariadb

方法一:

下面这条命令就可以得到当前登录用户数,然后自定义一个UserParameter就可以了

[root@agent1 ~]# mysqladmin extended-status |grep Threads_connected |awk '{print $4}'

方法二:

[root@agent1 ~]# vim /etc/zabbix/zabbix_agentd.conf

UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | mysql -N | awk '{print $$2}'			# 这里显示方式有点特殊,需要$$2而不是$2

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

说明: 这句配置在zabbix3版本里/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf配置文件默认自带,zabbix4自带的参数不能直接对mariadb使用了,所以我们手工再加上

在server或proxy上验证,show status命令里的理论上都可以验证

[root@proxy ~]# zabbix_get -s 10.1.1.12 -k mysql.status[Threads_connected]

[root@proxy ~]# zabbix_get -s 10.1.1.12 -k mysql.status[uptime]

你可能感兴趣的:(随手记,运维,监控类)