• 0
  • 1
分享
  • 企业级的开源解决方案—Zabbix自动监控Top10进程
  • 恬恬圈 2019-08-27 10:02:28 字数 4648 阅读 2303 收藏 1

简介

zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix由2部分构成:zabbix server与zabbix agent。

zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。zabbix agent可以运行在Linux, OS X, Windows ,Solaris,HP-UX,AIX,Free BSD,Open BSD等系统之上。

zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(agent方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。

1.png


Zabbix主要术语及作用

Zabbix server

-Zabbix软件的核心流程,用于执行监控,与Zabbix代理和代理交互,计算触发器,发送通知;?中央数据库。

Zabbix agent

-部署在监控目标上的流程,以主动监控本地资源和应用程序。

Zabbix proxy

-可以代表Zabbix服务器收集数据的进程,从而减轻服务器的处理负担。

host-使用IP /DNS监视的网络设备。

host group-主机的逻辑分组;?它可能包含主机和模板。主机组内的主机和模板不以任何方式相互链接。在为不同用户组分配主机的访问权限时使用主机组。

item-希望从主机接收的特定数据,即数据度量。

value preprocessing-在将接收的度量值保存到数据库之前对其进行转换

trigger- 定义问题阈值的逻辑表达式,用于“评估”项目中收到的数据。

当接收的数据高于阈值时,触发器从“Ok”变为“Problem”状态。当接收的数据低于阈值时,触发器保持/返回“OK”状态。

event-单次出现值得关注的事情,例如触发器更改状态或发现/代理自动注册发生.

remote command- 在某些情况下在受监视主机上自动执行的预定义命令。

action- 对事件作出反应的预定义方式。动作由操作(例如发送通知)和条件(当所述操作被执行)组成。

Notification-关于通过所选媒体频道发送给用户的某些事件的消息。

template- 准备应用于一个或多个主机的一组实体(项目,触发器,图形,屏幕,应用程序,低级发现规则,Web场景)。

模板的工作是加快主机上监控任务的部署; 还可以更轻松地将质量变化应用于监控任务。模板直接链接到各个主机。


Zabbix功能特点

  • 安装与配置简单,学习成本低

  • 支持多语言(包括中文)

  • 免费开源

  • 自动发现服务器与网络设备

  • 分布式监视以及WEB集中管理功能

  • 可以无agent监视

  • 用户安全认证和柔软的授权方式

  • 通过WEB界面设置或查看监视结果

  • email等通知功能


Zabbix功能流程图

1.png

主页面

2.png

监控数据展示界面

3.png


一、案例分析

在做性能监控的时候,常常需要监控进程,基本上是根据各个组件服务对应的进程来实施监控。

Zabbix自带模板中缺少一些进程监控的关键指标(比如:内存占用百分比、实际内存使用情况,进程运行时间,进程号等)。

假设有10个进程,需要监控CPU%、MEM%、RES、VIRT(共四项),在zabbix平台中共需要添加40个监控项。每次添加监控项及监控图表的过程都比较复杂繁琐,有很多重复步骤,耽误时间。

所以通过此案例可以解决以上大部分的问题。


二、解决思路

1. top.sh ---获取监控主机top信息存储到本地

2. 在监控主机上创建定时任务,实时查询top信息:     

3. check_porcess.sh    ---找出内存消耗占用前10的进程名称

4. process_monitor.sh    ---根据进程名称和监控指标名,解析top进程资源情况

5. zabbix_zagentd.conf    ---关键字配置,使得zabbix平台中调用相关脚本,

6.zabbix平台模板配置    

7.监控主机直接关联模板实现监控    


三、解决过程

1.编写top.sh:

top -n 1 -b > /tmp/top.txt

打印输出信息到/tmp/top.txt中

2.创建定时任务(执行linux命令):

 # crontab –e;
  */1 * * * * /opt/zabbix_agent/scripts/top.sh > /dev/null

分 时 日 月 周(五个星号对应表示时间单位;*/1:每分钟执行一次脚本)

可以用过crontab –l 查看定时任务

3.编写check_porcess.sh:

TABLESPACE=`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$6}END{for(k in a)print a[k]/1024,k}'|sort -gr|head -10|cut -d" " -f2`
  COUNT=`echo "$TABLESPACE" |wc -l`
  INDEX=0
  echo '{"data":['
  echo "$TABLESPACE" | while read LINE; do
  echo -n '{"{#PROCESSNAME}":"'$LINE'"}'
  INDEX=`expr $INDEX + 1`
  if [ $INDEX -lt $COUNT ]; then
  echo ','
  fi
  done
  echo ']}'

TABLESPACE:获取前十的进程名(是以 RES 作为标准衡量资源消耗,可通过其他指标来监控)

COUNT:得到TABLESPACE的行数(10)

后面代码都是为了组装成zabbix能识别读取的标准数据格式。

脚本运行结果:

 {"data":[
  {"{#PROCESSNAME}":"java"},
  {"{#PROCESSNAME}":"postgres"},
  {"{#PROCESSNAME}":"vag_dag"},
  {"{#PROCESSNAME}":"vag_pag"},
  {"{#PROCESSNAME}":"vrm"},
  {"{#PROCESSNAME}":"vtdu"},
  {"{#PROCESSNAME}":"vod"},
  {"{#PROCESSNAME}":"nginx"},
  {"{#PROCESSNAME}":"systemd-jo+"},
  {"{#PROCESSNAME}":"vag_stream"}]}

4. 编写process_monitor.sh:

process=$1
  name=$2
  case $2 in
  mem_res)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$6}END{for(k in a)print a[k]/1024,k}'|grep "$process"|cut -d" " -f1`"
  ;;
  cpu_p)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}'|grep "$process"|cut -d" " -f1`"
  ;;
  mem_virt)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$5}END{for(k in a)print a[k]/1024,k}'|grep "$process"|cut -d" " -f1`"
  ;;
  mem_p)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|grep "$process"|cut -d" " -f1`"
  ;;
  pid)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$1}END{for(k in a)print a[k],k}'|grep "$process"|cut -d" " -f1`"
  ;;
  runtime)
  echo "`tail -n +8 /tmp/top.txt|awk '{a[$NF]+=$11}END{for(k in a)print a[k],k}'|grep "$process"|cut -d" " -f1`"
  ;;
  *)
  echo "Error input:"
  ;;
  esac
  exit 0

参数:

process:进程名称(zabbix中会自动赋值)

name:监控指标名(在zabbix模板中已经配置好)

后面的代码都是逻辑判断,根据上面的参数信息,获取监控数值

1.png

5.修改zabbix_agentd.conf,使得zabbix能够调用脚本:

#top10_process
  UserParameter=process.discovery,/opt/zabbix_agent/scripts/check_process.sh
  UserParameter=process.resource[*],/opt/zabbix_agent/scripts/process_monitor.sh $1 $2

注意:每次修改此文件后,需要重启zabbix-agentd服务

6.zabbix平台模板配置

6.1创建模板

6.2 创建自动发现规则


注意:数据更新间隔时间与定时任务时间的定时关系

6.3 创建监控原型


依次添加监控项


6.4 创建图形原型


7.监控主机直接关联Top10 Process模板,实现监控

主机关联成功后,自动创建40个监控项


查看图形


四、使用方法

1.解压zabbix-agented安装包(内含上面提到的脚本及配置文件)

2.创建定时任务(详见解决过程中第2步)

3.赋予脚本文件执行权限

chmod +x check_process.sh process_monitor.sh top.sh

4.zabbix页面中关联模板Top 10 Process

完成以上步骤,就可以自动监控Top10进程

结果展示:


五、经验总结

1. 定时任务的时间频率设置与监控采集数据频率的设置,息息相关。在使用过程中可以合理设置时间频率,请参考三、解决过程中的步骤。本模板默认时间频率间隔都是1min。

2. 进程名称采集是通过Liunx 的top命令,但是有时候会出现多个java进程,无法区分监控对应的服务,暂时还没办法解决。可以协调开发人员,讨论下是否可以更改进程名称来区分。

3. 默认是以 RES 作为标准衡量资源消耗Top10,也可以使用CPU%来衡量,通过修改check_porcess.sh可以实现。

4. 可以直接调用键值process.resource[java,cpu_p]来监控进程


版权声明:本文出自51Testing原创,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   一、什么是敏捷测试?  敏捷测试是一种在敏捷开发中进行软件测试的方法。它强调快速、迭代和协作,以确保软件的质量和交付速度。  在敏捷测试中,测试人员需要与开发人员密切合作,尽早参与到项目中,并在整个开发过程中持续测试。测试人员不仅要测试软件的功能,还要关注软件的性能、可用性和安全性等方面。  敏捷测试强调测试的自动化,以提高测试效率和覆盖范围。测试人员通常会使用自动化测试工具来编写和执行测试用例,以便在短时间内获得反馈。同时,敏捷测试也鼓励测试人员采用探索性测试等方法,发现软件中可能存在的问题。  另外,敏捷测试还注重团队的沟通和协作。测试人员需要与开发人员、产品经理和其他相关人员保持良好...
            0 0 256
            分享
          •   前言  我们执行UI自动化操作时,大多数时间都是不在现场的,出现错误时,没有办法第一时间查看到,这时我们可以通过截图当时出错的场景保存下来,后面进行查看报错的原因,Selenium中提供了几种截图的方法,小编今天给大家介绍下。  方法一  get_screenshot_as_base64()整个函数,获取当前屏幕页面截图。  我们通过代码编写打开百度页面,然后进行进行通过base64进行截图,截图后再次进行转换成保存下来。# coding:utf-8 from selenium import webdriver import base64 ...
            0 0 1286
            分享
          • 一、软件测试概述1、软件缺陷软件缺陷:又称之为“Bug”。即计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的表现形式:软件没有实现产品规格说明书所要求的功能模块;软件中出现了产品规格说明指明不应该出现的错误;软件实现了产品规格说明中没有提到的功能需求;软件没有实现虽然产品规格说明没有明确提及但应该实现的目标;软件难以理解、不易使用、运行缓慢、用户体验不友好。产生软件缺陷的原因:需求不清晰;系统结构较为复杂;对程序逻辑路径或者数据范围考虑不全面;确保设计时间的精准同步;存在系统性、可靠性的隐患问题;系统运行环境的复杂;通信端口较多时影响系统的安全性、适用性;设...
            0 1 800
            分享
          •   测试面试话题1:敏捷开发与测试  以下是我个人总结的一些经验:  传统开发模式:V模式,瀑布模式。传统开发模式往往循规蹈矩,从需求,概要设计,详细设计,开发,单元测试,集成测试,系统测试,验收测试,上线发布,整个周期往往需要半年到一年,由于周期长,产品在开发过程中会存在需求变化,传统模式不适应需求的变化。为了解决这个问题,当前出现了敏捷模式。  敏捷分为敏捷开发和敏捷测试,特点和特征是:  1. 测试驱动开发和行为驱动测试  测试驱动开发是指开发先写单元测试,再写开发的代码,当单元测试跑通的时候,代码开发就完成了。  行为驱动测试是通过直接写user story,例如Cucumber框架,...
            0 0 1176
            分享
          •   当下软件测试岗位越来越火,然后很多人对软件测试岗位,和技能都很迷糊,下面浅谈一下当下软件测试岗位和需掌握的技能。  一、什么是软件测试  很多小伙伴只知道软件测试这个岗位,不明白它到底是什么,软件测试到底是做什么呢?  测试(test)最早是出自古拉丁字,它有罐或者容器的含义。在一般的工业生产中,被当做一个常规的检查去做的。而软件测试的经典定义是:在规定条件下,对程序进行操作,以发现错误,对软件质量进行评估。  总结:软件测试的初衷就是为了发现软件自身存在的缺陷(BUG),而设定的一个岗位,不管从事软件测试任何一个岗位,初衷都应该以发现BUG为初衷的去测试。  二、国内现状  中国软件测试...
            0 0 1140
            分享
      • 51testing软件测试圈微信