文章是参考他人博客整合、改动得出!!
实验结果为监控两台虚拟机的cpu、内存、流量、nginx,简称server端,client端。(为了省事,只用两个,实际操作完成后,会发现数量上的增加很简单)
安装包 server端 mrtg snmp sysstat curl nginx
client端 snmp sysstat curl
server端配置
编辑server端/etc/snmp/snmpd.conf (可以直接将原配置替换,记得备份原文件)
com2sec notConfigUser localhost public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact all none none
view all included .1 80
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root
shell脚本存放目录/home/mrtg (路径可选,和后边保持一致)
mrtg.ram
#!/bin/bash
# run this script to check the mem usage.
swapmem=`/usr/bin/free |grep Swap |awk ‘{print $3}‘`
usedmem=`/usr/bin/free |grep Mem |awk ‘{print $3}‘`
UPtime=`/usr/bin/uptime | awk ‘{print $3""$4""$5}‘`
echo $usedmem
echo $swapmem
echo $UPtime
hostname
mtrg.cpu
#!/bin/bash
cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk ‘{print $3}‘`
cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk ‘{print $5}‘`
UPtime=`/usr/bin/uptime | awk ‘{print $3""$4""$5}‘`
echo $cpuusr
echo $cpusys
echo $UPtime
hostname
nginx_status
curl http://localhost/nginx_status | grep Active | awk ‘{print $3 }‘ > /home/mrtg/ngx.active
curl http://localhost/nginx_status | grep Waiting | awk ‘{print $6 }‘ > /home/mrtg/ngx.waiting
mrtg.ngx
#!/usr/bin/perl -W
`/home/mrtg/nginx_status`;
$hostname=`hostname`;
$hostname=~s/\s+$//;
$nginx_active_conn=`tail /home/mrtg/ngx.active`;
$nginx_waiting_conn=`tail /home/mrtg/ngx.waiting`;
$nginx_active_conn=~s/\n$//;
$nginx_waiting_conn=~s/\n$//;
$nginx_active_conn=~s/^\s+|\s+$//;
$nginx_waiting_conn=~s/^\s+|\s+$//;
$gettime=`uptime|awk ‘{print \$1" "\$3" "\$4}‘`;
$gettime=~s/\,|\n$//g;
print("$nginx_active_conn\n");
print("$nginx_waiting_conn\n");
print("$gettime\n");
print("$hostname\n");
在nginx中添加模块 (nginx配置目录中,/sites-enabled/default,包含在server中,否则会报错)
location ~ ^/nginx_status {
stub_status on;
access_log off;
}
重启nginx
生成配置文件
cfgmaker [email protected] --output /root/mrtg.cfg
修改配置
WorkDir: /home/mrtg/mrtg (工作目录)
并向其添加内容
Target[cpu]: `/home/mrtg/mrtg.cpu`
MaxBytes[cpu]: 100
Options[cpu]: gauge, nopercent, growright
YLegend[cpu]: CPU loading (%)
ShortLegend[cpu]: %
LegendO[cpu]: CPU us;
LegendI[cpu]: CPU sy;
Title[cpu]: CPU Loading
PageTop[cpu]: <H1>CPU Loading</H1>
Target[ram]: `/home/mrtg/mrtg.ram`
#Unscaled[ram]: dwym
MaxBytes[ram]: 1642472 #这里的数值为服务器内存的最大值,可通过free命令查看。
Title[ram]:Memory
ShortLegend[ram]: &
kmg[ram]:kB,MB
kilo[ram]:1024
YLegend[ram]: Memory Usage :
Legend1[ram]: Swap Memory :
Legend2[ram]: Used Memory :
LegendI[ram]: Swap Memory :
LegendO[ram]: Used Memory :
Options[ram]: growright,gauge,nopercent
PageTop[ram]:<H1>Memory</H1>
Target[nginx_conn]: `/home/mrtg/mrtg.ngx`
Options[nginx_conn]: gauge,nopercent,growright
Directory[nginx_conn]: nginx_conn
MaxBytes[nginx_conn]: 8000
YLegend[nginx_conn]: nginx_conn
ShortLegend[nginx_conn]:
LegendI[nginx_conn]: Active connections:
LegendO[nginx_conn]: Waiting:
Title[nginx_conn]: Nginx
PageTop[nginx_conn]:<h1>nginx</h1>
接着配置client端
编辑/etc/snmp/snmpd.conf
将agentAddress udp:127.0.0.1:161注释掉
将#agentAddress udp:161,udp6:[::1]:161去掉注释
这样便可以实现snmp的远程监听。
但修改后服务器还是无法监测到CPU、内存、流量的数据,所以需要再做如下修改:
找到下面的内容
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
在下面加上一行
view systemonly included .1 80
这样就允许监听所有设备。
完成所有修改后,重启snmp
service snmpd restart
本地测试SNMP是否监测各类指标的方法:运行如下命令
snmpwalk -v 2c -c public localhost
如果有很多内容输出,代表成功。
然后在server端生成client的配置文件
建立client的目录 /home/mrtg1 (在server端执行)
将/home/mrtg内的文件拷至/home/mrtg1
cfgmaker [email protected] --output /root/mrtg1.cfg (192.168.51.236为client端ip)
同样将上边的添加内容加入配置文件,但会报错,提示有同样的名字,修改下即可,例如:
Target[cpu]: `/home/mrtg/mrtg.cpu` → Target[cpu1]: `/home/mrtg1/mrtg.cpu`
建立client端的目录 /home/mrtg1
将/home/mrtg内的文件拷至/home/mrtg1
将配置文件合并
cat mrtg.cfg mtrg1.cfg > mrtg.cfg
并移至/etc
分别在mrtg mrtg1中建立子文件夹mrtg
生成mrtg首页
indexmaker /etc/mrtg.cfg > /home/mrtg/mrtg/index.html
绘制图表
env LANG=C mrtg /etc/mrtg.cfg
配置cron计划执行任务,每分钟采集一次 /etc/crontab
*/1 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
重启cron服务
在nginx中添加模块
location ~ ^/mrtg {
root /home/mrtg;
}
重启nginx
访问http://serverIP/mrtg