背景:
性能监控是做性能工作过程中一个必不可少的步骤,各种开源的、商业的监控工具应有尽有,实在傲娇的自己写代码去实现的也有很多。笔者所在工作环境,因为这样或那样的原因,在进行性能测试时,除Docker容器监控外,其他的涉及Linux虚拟机的基本还是用一款叫Nmon的工具来监控的,但是因为企业系统架构大多采取微服务形式,再加上多实例负载均衡部署,需要监控的服务数量就多了。而我们团队在进行监控结果呈现时是通过进程号筛选CPU数据的,这给监控数据输出带来了很多重复、繁琐的工作。本文讲解如何使用 Alain Dejoux 在Github上的一个项目,做到Nmon数据的实时呈现。
介绍下nmon:
This systems administrator, tuner, benchmark tool gives you a huge amount of important performance information in one go. It can output the data in two ways:1.On screen 2.Save the data to a comma separated file
来源:http://nmon.sourceforge.net/pmwiki.php
nmon支持两种监控模式:
1.输入命令,在一些终端上实时呈现最新结果

2.采点,将采样数据保存至一个结果文件后用nmon analyser xx.xls打开

以上都属于nmon工具的基本用法,现在介绍下nmon2ifluxdb使nmon监控数据推送至Influxdb时序数据库。
项目GitHub地址:
https://github.com/adejoux/nmon2influxdb
参考网站:
https://nmon2influxdb.org/getting-started/linux/
下载nmon2influxdb:
https://github.com/adejoux/nmon2influxdb/releases
安装参考:
gunzip nmon2influxdb-linux-amd64.gz mv nmon2influxdb-linux-amd64 nmon2influxdb
输入命令,生成一个nmon文件:
./nmon -fT -s 15 -c 100000
导入 .nmon结果文件到Influxdb:
nmon2influxdb import xx.nmon
上述步骤之前需要参考我上篇文章部署Influxdb和Grafana。上述步骤之后会有报错内容,这个是nmon2influxdb 配置文件没有更改导致,按照下述内容进行配置文件更改:
在当前用户家目录找到配置文件:ls -alrth
编辑配置文件:vi .nmon2influxdb.cfg

配置好后再次导入 .nmon结果文件到Influxdb:
./nmon2influxdb import localhost_180925_1012.nmon
配置Grafana数据源:通过上述配置文件知道Grafana数据源名称是nmon2influxdb,数据库名称是nmon_reports

Auto Nmon Dashboard仪表板配置:这个仪表板进行了一些修改,以更适应笔者当前工作环境Auto Nmon DashBoard-1537843308257.json 导入后可见 :

作者Alain Dejoux在写这个时候,没有做nmon数据自动推送,需要每次都使用如下命令 ./nmon2influxdb import *.nmon 解析nmon文件并推送至Influxdb,而且在解析时并不是增量解析,导致在nmon文件比较大的时候有点消耗主机的CPU。可通过减少单个nmon文件大小来避免此问题的出现:shell脚本和设置crontab定时任务
#crontab 定时任务设置
#每隔一分钟推送nmon数据到influxdb,Grafana呈现
*/1 * * * * /home/ysl/nmon2influxdb import /home/ysl/*.nmon
#控制每个nmon监控文件在30分钟
*/30 * * * * /home/ysl/nmon -fT -s 15 -c 120
#每隔31分钟执行shell脚本
*/31 * * * * sh /home/ysl/auto/delnmon.sh
#shell脚本
#delnmon.sh
#按照时间排序nmon文件,删除一个距离当前时间较远的文件,始终只保留一个nmon文件
#! /bin/bash
#进入到自己的nmon文件所在目录
cd /home/ysl
ls -t *.nmon |awk '/\.nmon/ {if (NR >1){system ("rm " $1)}}'控制nmon文件大小之前和之后主机CPU耗用对比图:前半部分没有控制单个nmon文件监控总次数
至此,nmon to influxdb数据通过Grafana呈现基本搭建完成了,做一下总结:
要监控哪台机器就配置哪台机器,相当于每台机器加一个agent
时区(timezone)记得修改
Grafana数据源和Influxdb数据库名称可自定义,和配置文件一致就行
linux一般用户和root用户在配置文件上有些区别,但是在安装操作上,nmon2influxdb并不需要依赖root权限,这个就不需要劳烦运维团队了
为了达到nmon数据自动推送至influxdb,并且达到CPU低耗用目的,使用shell脚本和定时任务来实现
团队成员可基于主机名,PID,磁盘挂载、分区等条件来筛选和查看监控数据,做到了一次部署多次使用,减少了重复和繁琐工作




