• 0
  • 1
分享
  • 企业级的开源解决方案—Zabbix自动监控Top10进程
  • 恬恬圈 2019-08-27 10:02:28 字数 4648 阅读 2438 收藏 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软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   最近很多同学问我做游戏测试有前途吗?  如果你真的很喜欢游戏,每天不打游戏你浑身难受,其实做游戏测试也算是一个好的选择!  游戏测试和软件测试的区别是什么?  现在游戏测试的待遇比以前好很多,资深的游戏测试也能达到20k。我们一般的软件测试呢,就是按照正常逻辑去测正常用例和反向用例就好了。那么游戏测试和软件测试会有一个大的区别,就是它的UI会非常的复杂,假设我们打开B站或者打开视频平台,会有一个个页面,但是打开游戏可能从进去开始就会有各种动画和各种加载,所以做游戏测试的话,测试点、UI、美术技术、技能的叠加以及各项内容的加载和流量的消耗,都是和软件测试区别比较大的地方。  除了这些东西以外...
            0 0 1129
            分享
          •   再过两天,Galaxy S24 系列就要正式发布了,围绕这款新设备的消息可谓热闹非凡。几乎每一天,我们都能看到新的营销材料展示新设备的某些方面。在经历了昨天的两次大规模泄密之后,新手机又经历了一次大规模泄密,突出了三星希望你了解的一些新特性。  从上面的图片中可以看出,三星在 Galaxy S24 的设计之初就非常注重人工智能功能的引入,即时翻译功能被放到了非常重要的位置,看来,三星并没有把人工智能仅仅作为一项新奇的卖点来添加,而是希望用户能够利用它来提高工作效率,期待看到它们真正能够发挥作用。  除此之外,摄像头和屏幕的改进等几个重大亮点都出现在海报资料中。  Galaxy S24 系列...
            0 0 362
            分享
          •   前言  今天我们来说说jmeter如何进行性能测试,我们都知道jmeter工具除了可以进行接口功能测试外,还可以进行性能测试。当项目趋于稳定,根据性能需求就可以着手准备性能测试了,今天就说一说jmeter如何进行性能测试,jmeter进行性能测试的前提是接口的功能逻辑是通的,没有阻塞bug。  第一步:设置线程数量  第二步:添加事务控制器  根据业务场景设置事务,将需要进行并发测试的接口拖拽到事务控制器节点下,输出性能测试报告后可以查看该事务的性能测试结果。  第三步:设置同步定时器,同步定时器主要设置两个参数  Number of Simulated User to Group by:...
            0 0 843
            分享
          •   苹果公司已经批准了UTM SE,这是一款用于模拟电脑运行经典软件和游戏的应用程序,几周前苹果公司拒绝了这款应用程序,并禁止它在欧盟的第三方应用程序商店进行公证。但现在,这款应用程序现在可在 iOS、iPadOS 和 visionOS 上免费使用。  今年 6 月,苹果公司拒绝了这款应用,开发商表示不会继续尝试,因为这款应用"体验不佳"。 今天,UTM 感谢 AltStore 团队的帮助,并称赞另一位开发者"其 QEMU TCTI 实现对此次无 JIT 构建至关重要"。  UTM SE 不包含任何虚拟机,但可以帮你找到它们。  与App Store 上...
            0 0 514
            分享
          •   本次上线的项目属于OA系统中的一个子模块。OA系统,百度百科上解释,Office Automation(简称OA),即办公自动化,是将计算机、通信等现代化技术运用到传统办公方式,进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术,代替办公人员传统的部分手动或重复性业务活动,优质而高效地处理办公事务和业务信息,实现对信息资源的高效利用,进而达到提高生产率、辅助决策的目的,最大限度地提高工作效率和质量、改善工作环境。笔者所在公司的OA项目提供已授权的同事浏览各家公司首页、申请单据、审批单据等功能。本次谈及的项目模块即包含给公司首页浏览、公司专题配置以及模块编码功能。  产品提出的...
            0 0 476
            分享
      • 51testing软件测试圈微信