主动与被动监控 拓扑图组合图 自定义监控

Top

NSD SECURITY DAY06

  1. 案例1:实现Zabbix报警功能
  2. 案例2:Zabbix自动发现
  3. 案例3:Zabbix主动监控
  4. 案例4:拓扑图与聚合图形
  5. 案例5:自定义监控案例

1 案例1:实现Zabbix报警功能

1.1 问题

沿用第5天Zabbix练习,使用Zabbix实现报警功能,实现如下目标:html

  1. 监控Linux服务器系统帐户
  2. 建立Media,设置邮件服务器及收件人邮箱
  3. 当系统帐户数量超过35人时发送报警邮件

1.2 方案

自定义的监控项默认不会自动报警,首页也不会提示错误,须要配置触发器与报警动做才能够自定报警。nginx

什么是触发器(trigger)?web

表达式,如内存不足300M,用户超过30个等vim

当出发条件发生后,会致使一个触发事件bash

触发事件会执行某个动做服务器

什么是动做(action)?网络

动做是触发器的条件被触发后所执行的行为架构

能够是发送邮件、也能够是重启某个服务等并发

参考以下操做步骤:curl

  1. 建立触发器并设置标记
  2. 设置邮箱
  3. 建立Action动做

1.3 步骤

实现此案例须要按照以下步骤进行。

步骤一:建立触发器规则

1)建立触发器

建立触发器时强烈建议使用英文的语言环境,经过Configuration--> Templates,找到咱们以前建立的count.line.passwd模板,点击模板后面的triggers,如图-1所示。

图-1

2)触发器表达式

建立触发器时须要定义表达式,触发器表达式(Expression)是触发异常的条件,触发器表达式格式以下:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

{主机:key.函数(参数)}<表达式>常数

在如图-2所示的蓝色方框中编写触发器表达式,能够直接手写,也能够经过add选择表达式模板。

图-2

下面,咱们看几个表达式的案例:

{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

大多数函数使用秒做为参数,可使用#来表示其余含义(具体参考表-1)。

avg, count, last, min and max 等函数支持额外的第二个参数time_shift(时间偏移量),这个参数容许从过去一段时间内引用数据。

3)配置触发器

设置触发器名称,如图-3所示,点击add添加表达式,填写表达式:监控项为帐户数量,最近300秒帐户数量大于26(根据系统帐户数量实际填写),效果如图-4所示。

图-3

图-4

选择触发器报警级别,如图-5所示,Add建立该触发器,如图-6所示。

图-5

图-6

步骤二:设置邮件

1)建立Media

经过Administration(管理)-->Media Type(报警媒体类型)-->选择Email(邮件),如图-7所示。

图-7

设置邮件服务器信息,设置邮件服务器及邮件帐户信息,如图-8所示。

图-8

2)为用户添加Media

在Administration(管理)-->Users(用户)中找到选择admin帐户,如图-9所示。

图-9

点击Admin帐户后,在弹出的界面中选择Media(报警媒介)菜单-->点击Add(添加)报警媒介,如图-10所示。

图-10

点击Add(添加)后,在Meida Type中填写报警类型,收件人,时间等信息,如图-11所示。

图-11

步骤三:建立Action动做

1)Action动做

Action(动做)是定义当触发器被触发时的时候,执行什么行为。

经过Configuration(配置)-->Actions(动做)-->Create action(建立动做),如图-12所示。

图-12

2)配置Action动做的触发条件

填写Action动做的名称,配置什么触发器被触发时会执行本Action动做(帐户数量大于26),如图-13所示。

图-13

3)配置Action动做的具体行为

配置动做的具体操做行为(发送信息或执行远程命令),无限次数发送邮件,60秒1次,发送给Admin用户,如图-14和图-15所示。

图-14

图-15

4)测试效果

在被监控主机建立帐户(让帐户数量大于26),而后登陆监控端Web页面,在仪表盘中查看问题报警(须要等待一段时间),如图-16所示。

图-16

查看报警邮件,在监控服务器上使用mail命令查收报警邮件,如图-17所示。

图-17

2 案例2:Zabbix自动发现

2.1 问题

沿用前面的练习,配置Zabbix的自动发现机制,实现如下目标:

  1. 建立自动发现规则
  2. 建立自动发现后的动做,添加主机、为主机连接模板

2.2 方案

什么是自动发现(Discovery)?

当Zabbix须要监控的设备愈来愈多,手动添加监控设备愈来愈有挑战,此时,能够考虑使用自动发现功能,自动添加被监控主机,实现自动批量添加一组监控主机功能。

自动发现能够实现:

  • 自动发现、添加主机,自动添加主机到组;
  • 自动链接模板到主机,自动建立监控项目与图形等。

自动发现(Discovery)流程:

  • 建立自动发现规则
  • 建立Action动做,说明发现主机后自动执行什么动做
  • 经过动做,执行添加主机,连接模板到主机等操做

2.3 步骤

实现此案例须要按照以下步骤进行。

步骤一:自动发现规则

1)建立自动发现规则

经过Configuration(配置)-->Discovery(自动发现)-->Create discovery rule(建立发现规则),如图-18所示。

图-18

2)填写规则

填写自动发现的IP范围(逗号隔开能够写多个),多久作一次自动发现(默认为1小时,仅实验修改成1m),如图-19所示。配置检查的方式:HTTP、FTP、Agent的自定义key等检查,如图-20所示。

图-19

图-20

步骤二:建立动做

1)建立Action动做

经过Configuration(配置)--> Actions Event source(事件源):自动发现(Discovery)-->Create action(建立动做),如图-21所示。

图-21

2)配置Action动做具体行为

配置动做,添加动做名称,添加触发动做的条件,如图-22所示。

图-22

点击操做(触发动做后要执行的操做指令),操做细节:添加主机到组,与模板连接(HTTP模板),如图-23所示。

图-23

步骤二:添加新的虚拟机

1)建立新的虚拟机

建立一台新的主机,验证zabbix是否能够自动发现该主机,能够从新部署一台新的虚拟机(注意前面的课程,咱们已经建立了虚拟机web2,而且已经安装部署了Zabbix agent,若是没有该虚拟机或没有安装Agent,则须要前在web2部署Agent),也能够将旧虚拟机的IP地址,临时修改成其余IP。

2)验证结果

登录Zabbix服务器的Web页面,查看主机列表,确认新添加的主机是否被自动加入监控主机列表,是否自动绑定了监控模板。

3 案例3:Zabbix主动监控

3.1 问题

沿用前面的练习,配置Zabbix主动监控,实现如下目标:

  1. 修改被监控主机agent为主动监控模式
  2. 克隆模板,修改模板为主动监控模板
  3. 添加监控主机,并连接主动监控模板

3.2 方案

默认zabbix采用的是被动监控,主动和被动都是对被监控端主机而言的!

被动监控:Server向Agent发起链接,发送监控key,Agent接受请求,响应监控数据。

主动监控:Agent向Server发起链接,Agent请求须要检测的监控项目列表,Server响应Agent发送一个items列表,Agent确认收到监控列表,TCP链接完成,会话关闭,Agent开始周期性地收集数据。

区别:Server不用每次须要数据都链接Agent,Agent会本身收集数据并处理数据,Server仅须要保存数据便可。

当监控主机达到必定量级后,Zabbix服务器会愈来愈慢,此时,能够考虑使用主动监控,释放服务器的压力。

另外,Zabbix也支持分布式监控,也是能够考虑的方案。

3.3 步骤

实现此案例须要按照以下步骤进行。

步骤一:添加被监控主机

1)为被监控主机安装部署zabbix agent

注意:前面的实验,咱们已经在web2主机安装部署了zabbix agent,若是已经完成,则以下操做能够忽略。

  1. [root@web2 ~]# yum -y install gcc pcre-devel
  2. [root@web2 ~]# tar -xf zabbix-3.4.4.tar.gz
  3. [root@web2 ~]# cd zabbix-3.4.4/
  4. [root@web2 ~]#./configure --enable-agent
  5. [root@web2 ~]# make && make install

2)修改agent配置文件

将agent监控模式修改成主动模式。

  1. [root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
  2. #Server=127.0.0.1,192.168.2.5
  3. //注释该行,容许谁监控本机
  4. StartAgents=0            
  5. //被动监控时启动多个进程
  6. //设置为0,则禁止被动监控,不启动zabbix_agentd服务
  7. ServerActive=192.168.2.5
  8. //容许哪些主机监控本机(主动模式),必定要取消127.0.0.1
  9. Hostname=zabbix_client_web2
  10. //告诉监控服务器,是谁发的数据信息
  11. //必定要和zabbix服务器配置的监控主机名称一致(后面设置)
  12. RefreshActiveChecks=120
  13. //默认120秒检测一次
  14. UnsafeUserParameters=1            
  15. //容许自定义key
  16. Include=/usr/local/etc/zabbix_agentd.conf.d/
  17. [root@web2 ~]# killall zabbix_agentd                    //关闭服务
  18. [root@web2 ~]# zabbix_agentd                            //启动服务

步骤二:建立主动监控的监控模板

1)克隆Zabbix自动的监控模板

为了方便,克隆系统自带模板(在此基础上就该更方便)。

经过Configuration(配置)-->Templates(模板)-->选择Template OS Linux

-->全克隆,克隆该模板,新建一个新的模板。如图-24所示。

新模板名称为:Template OS Linux ServerActive。

图-24

2)修改模板中的监控项目的监控模式

将模板中的全部监控项目所有修改成主动监控模式,经过Configuration(配置)-->Templates(模板)-->选择新克隆的模板,点击后面的Items(监控项)-->点击全选,选择全部监控项目,点击批量更新,将类型修改成:Zabbix Agent(Active主动模式),如图-25所示。

图-25

3)禁用部分监控项目

批量修改监控项的监控模式后,并不是全部监控项目都支持主动模式,批量修改后,会发现有几个没有修改主动模式成功,说明,这些监控项目不支持主动模式,关闭便可。

能够点击类型排序,方便操做,点击状态便可关闭。如图-26所示。

图-26

步骤三:添加监控主机

1)手动添加监控主机(主动模式监控)

在Zabbix监控服务器,添加被监控的主机(主动模式),设置主机名称:zabbix_client_web2 (必须与被监控端的配置文件Hostname一致),将主机添加到Linux servers组,IP地址修改成0.0.0.0,端口设置为0,如图-27和图-28所示。

图-27

图-28

为主机添加监控模板,选择刚刚建立的模板(主动模式),添加连接模板到主机,如图-29所示。

图-29

2)验证监控效果

查看数据图表,经过Monitoring-->Graphs菜单,选择须要查看的主机组、主机以及图形,查看效果,如图-30所示。

图-30

CPU、内存等其余数据可用正常获取,可是,查看分区图表时并没有数据,由于分区数据采用的是自动发现监控,与普通监控项同样,修改成主动模式便可,选择Template OS Linux ServerActive模板,修改Discovery自动发现为主动模式。如图-31所示。

图-31

4 案例4:拓扑图与聚合图形

4.1 问题

沿用前面的练习,熟悉zabbix拓扑图与聚合图形,实现如下目标:

  1. 建立修改拓扑图
  2. 建立聚合图形

4.2 步骤

实现此案例须要按照以下步骤进行。

步骤一:建立拓扑图

1)建立拓扑

绘制拓扑图能够快速了解服务器架构,经过Monitoring(监控中)-->Maps(拓扑图),选择默认的Local network拓扑图,编辑便可(也能够新建一个拓扑图),如图-32所示。

图-32

2)拓扑图图表说明

  • Icon(图标),添加新的设备后能够点击图标修改属性
  • Shape(形状)
  • Link(连线),先选择两个图标,再选择连线
  • 完成后,点击Update(更新)

建立完拓扑图,效果如图-33所示。

图-33

步骤二:建立聚合图形

1)建立聚合图形

聚合图形能够在一个页面显示多个数据图表,方便了解多组数据。

经过Monitoring(监控中)-->Screens(聚合图形)-->Create screen(建立聚合图形)便可建立聚合图形,如图-34所示。

图-34

修改聚合图形参数以下:

  • Owner:使用默认的Admin用户
  • Name:名称设置为Web2_host
  • Columns:列数设置为2列
  • Rows:行数设置为4行

2)为聚合图形中添加监控图形

选择刚刚建立的聚合图形(web2_host),点击后面的构造函数(constructor),点击Change(更改),设置每行每列须要显示的数据图表,如图-35所示。

图-35

5 案例5:自定义监控案例

5.1 问题

沿用前面的练习,使用自定义key监控经常使用监控项目,实现如下目标:

  1. 监控Nginx状态
  2. 监控网络链接状态

5.2 步骤

实现此案例须要按照以下步骤进行。

步骤一:监控Nginx服务状态

1)准备环境,部署nginx软件

安装nginx软件,开启status模块

  1. [root@web1 nginx-1.12.2]# ./configure \
  2. > --with-http_stub_status_module
  3. [root@web1 nginx-1.12.2]# make && make install
  4. [root@web1 ~]# cat /usr/local/nginx/conf/nginx.conf
  5. … …
  6. location /status {
  7. stub_status on;
  8. }
  9. … …
  10. [root@web1 ~]# curl http://192.168.4.5/status
  11. Active connections: 1
  12. server accepts handled requests
  13. 10 10 3
  14. Reading: 0 Writing: 1 Waiting: 0

2)自定义监控key

语法格式:

UserParameter=key,command

UserParameter=key[*],<command>

key里的全部参数,都会传递给后面命令的位置变量

如:

UserParameter=ping[*],echo $1

ping[0], 返回的结果都是0

ping[aaa], 返回的结果都是aaa

注意:被监控端修改配置文件,注意要容许自定义key并设置Include!

建立自定义key

  1. [root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx.status
  2. UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
  3. [root@web1 ~]# killall zabbix_agentd
  4. [root@web1 ~]# zabbix_agentd

自定义监控脚本(仅供参考,未检测完整状态)

  1. [root@web1 ~]# vim /usr/local/bin/nginx_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. active)
  5. curl -s http://192.168.2.100/status |awk '/Active/{print $NF}';;
  6. waiting)
  7. curl -s http://192.168.2.100/status |awk '/Waiting/{print $NF}';
  8. accepts)
  9. curl -s http://192.168.2.100/status |awk 'NR==3{print $2 }';;
  10. esac
  11. [root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh

测试效果:

  1. [root@web1 ~]# zabbix_get -s 192.168.2.100 -k 'nginx.status[accepts]'

登录Zabbix监控Web,建立监控项目item,点击Configuration(配置)-->Hosts(主机),点击主机后面的items(项目),点击Create item(建立项目)。修改项目参数如图-36所示。

图-36

步骤二:监控网络链接状态

1)了解TCP协议

熟悉TCP三次握手,参考图-37。

图-37

熟悉TCP链接的四次断开,参考图-38。

图-38

2)查看网络链接状态

模拟多人并发链接

  1. [root@web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/

查看网络链接状态,仔细观察、分析第二列的数据

  1. [root@web1 ~]# ss -antup
  2. //-a显示全部
  3. //-t显示TCP链接状态
  4. //-u显示UDP链接状态
  5. //-n以数字形式显示端口号和IP地址
  6. //-p显示链接对应的进程名称

3)建立自定义key

注意:被监控端修改配置文件,注意要容许自定义key并设置Include。

  1. [root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
  2. UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
  3. [root@web1 ~]# killall zabbix_agentd
  4. [root@web1 ~]# zabbix_agentd

自定义监控脚本(仅供参考,未检测完整状态)

  1. [root@web1 ~]# vim /usr/local/bin/net_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. estab)
  5. ss -antp |awk '/^TIME-WAIT/{x++} END{print x}';;
  6. close_wait)
  7. ss -antp |awk '/^CLOSE-WAIT/{x++} END{print x}';;
  8. time_wait)
  9. ss -antp |awk '/^TIME-WAIT/{x++} END{print x}';;
  10. esac
  11. [root@web1 ~]# chmod +x /usr/local/bin/net_status.sh

测试效果:

  1. [root@web1 ~]# zabbix_get -s 192.168.2.100 -k 'net.status[time_wait]'

4) 监控netstatus

在监控服务器,添加监控项目item,Configuration-->Hosts点击主机后面的items

点击Create item,如图-39所示。

图-39

相关文章
相关标签/搜索