0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snmpホストリソースデータ収集(Linux)

Last updated at Posted at 2024-06-07

CPU、メモリー、ディスク使用率 シェルスクリプト編

はじめに

Mrtgグラフを作成する場合、SNMPのTargetにOIDを指定する方法が一般的ですが、加工した情報を採るスクリプトを作成しグラフを作成する機会がありましたので書き残します。シェルスクリプトはmrtg.cfgのTargetに設定します。WindowsのVBスクリプト編はこちらにあります。

CPU使用率の取得

監視対象エージェントホストがWindowsまたはLinuxの場合

* OID .1.3.6.1.2.1.25.3.3.1.2 をsnmpwalkし、
HOST-RESOURCES-MIB::hrProcessorLoad.xの最大値を取得

Memory使用率の取得

監視対象エージェントホストがWindowsの場合

* OID .1.3.6.1.2.1.25.2.3.1 をsnmpwalkし、
HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: Physical Memory
のPhysical Memoryのxの数値を取得、この数値同じSizeとUsedを探し
HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 260240
HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 79706
Used/Sizex100で使用率を算出する(上記例 79706/260240x100=30%)

監視対象エージェントホストがLinuxの場合

* OID .1.3.6.1.2.1.25.2.3.1 をsnmpwalkし、
HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: Physical Memory
のPhysical Memoryのyの数値を取得、この数値同じSizeとUsedを探し
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 3715376
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 1104480
Used/Sizex100で使用率を算出する(上記例 1104480/3715376x100=29%)

Disk使用率の取得

監視対象エージェントホストがWindowsの場合

* OID .1.3.6.1.2.1.25.2.3.1 をsnmpwalkし、
HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: **C:\\ Label**
のC:\\ Labelのxの数値を取得、この数値同じSizeとUsedを探し
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 60721838
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 28520672
Used/Sizex100で使用率を算出する(上記例 28520672/60721838x100=46%)

監視対象エージェントホストがLinuxの場合

* OID .1.3.6.1.2.1.25.2.3.1 をsnmpwalkし、
HOST-RESOURCES-MIB::hrStorageDescr.x = STRING: /
の/(root directory)のyの数値を取得、この数値同じSizeとUsedを探し
HOST-RESOURCES-MIB::hrStorageSize.x = INTEGER: 36682240
HOST-RESOURCES-MIB::hrStorageUsed.x = INTEGER: 2096449
Used/Sizex100で使用率を算出する(上記例 2096449/36682240x100=6%)

使用パッケージ

  • mrtg (/usr/bin/mrtg)
  • Net-snmp (Snmp-Server, Snmp-Agent)
  • Net-snmpコマンド(/use/bin/snmpget,snmpwalk)

スクリプト概要

  1. CPU、Memory、Diskの使用率をsnmpで取得・加工するシェルスクリプトを作成します
  2. スクリプトはホスト、OS、コミュニティの引数を受け入れ、2つの値を返します
  3. 2つのうち、最初に返す値を使用し、2つ目はグラフの上限100%を返します
  4. 以下のサンプルスクリプトはチェックおよびエラー処理等を省略しています

CPU使用率取得のシェルスクリプト snmpcpuget.sh

#!/bin/bash
host=$1;ostype=$2;comm=$3
cpuarr=`snmpwalk -v1 -c${comm} ${host} .1.3.6.1.2.1.25.3.3.1.2 2>/dev/null | awk 'BEGIN{FS=":"}{print $4}'`
maxcpu=0
for cpu in ${cpuarr[@]}
do
  if [ $cpu -gt $maxcpu ];then
    maxcpu=$cpu
  fi
done
echo $maxcpu;echo 100

Memory使用率取得のBashシェルクリプト snmpramget.sh

#!/bin/bash
host=$1;ostype=$2;comm=$3
if [ "$ostype" == 'windows' ];then
  snmp=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.5.5 2> /dev/null`
  rams=`echo $snmp | awk 'BEGIN{FS=":"}{print $4}'`
  ramu=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.6.5 | awk 'BEGIN{FS=":"}{print $4}'`
  echo `expr $ramu \* 100 / $rams`;echo 100
  fi
else
  snmp=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.5.1 2> /dev/null`
  rams=`echo $snmp | awk 'BEGIN{FS=":"}{print $4}'`
  ramu=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.6.1 | awk 'BEGIN{FS=":"}{print $4}'`
  echo `expr $ramu \* 100 / $rams`;echo 100
fi

Disk使用率取得のシェルスクリプト snmpdiskget.sh

#!/bin/bash
host=$1;ostype=$2;comm=$3
if [ "$ostype" == 'windows' ];then
  snmp=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.5.1 2> /dev/null`
  disks=`echo $snmp | awk 'BEGIN{FS=":"}{print $4}'`
  disku=`snmpget -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.6.1 | awk 'BEGIN{FS=":"}{print $4}'`
  echo `expr $disku \* 100 / $disks`;echo 100
else
  snmpwalk -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.3 &> /dev/null
  lastoid=`snmpwalk -v1 -c${comm} ${host} .1.3.6.1.2.1.25.2.3.1.3 | grep ': /$' | awk '{print $1}' | awk 'BEGIN{FS="."}{print $2}'`
  oid1=".1.3.6.1.2.1.25.2.3.1.5.$lastoid"
  oid2=".1.3.6.1.2.1.25.2.3.1.6.$lastoid"
  disks=`snmpget -v1 -c${comm} ${host} ${oid1} | awk '{print $4}'`
  disku=`snmpget -v1 -c${comm} ${host} ${oid2} | awk '{print $4}'`
  echo `expr $disku \* 100 / $disks`;echo 100
fi

mrtg.cfgの設定例

 1 EnableIPv6: no
 2 WorkDir: /mypath/mrtg
 3 #------------------------------------------------------#
 4 Target[sample.com.cpu]: `/mypath/bin/snmpcpuget.sh host ostype comm`
 5 MaxBytes[sample.com.cpu]: 100
 6 Options[sample.com.cpu]: gauge,growright
 7 YTicsFactor[sample.com.cpu]: 1
 8 Factor[sample.com.cpu]: 1
 9 Title[sample.com.cpu]: CPU Load
10 YLegend[sample.com.cpu]: CPU Load
11 #------------------------------------------------------#
12 Target[sample.com.disk]: `/mypath/bin/snmpdiskget.sh host ostype comm`
13 MaxBytes[sample.com.disk]: 100
14 Options[sample.com.disk]: gauge,growright
15 YTicsFactor[sample.com.disk]: 1
16 Factor[sample.com.disk]: 1
17 Title[sample.com.disk]: Disk Usage
18 YLegend[sample.com.disk]: Disk Usage
19 #------------------------------------------------------#
20 Target[sample.com.ram]: `/mypath/bin/snmpramget.sh host ostype comm`
21 MaxBytes[sample.com.ram]: 100
22 Options[sample.com.ram]: gauge,growright
23 YTicsFactor[sample.com.ram]: 1
24 Factor[sample.com.ram]: 1
25 Title[sample.com.ram]: Memory Usage
26 YLegend[sample.com.ram]: Memory Usage 

2,4,12,20行目のパス、ホスト、コミュニティは、環境に合わせて変更が必要
Targetの snmp{cpu,ram,disk}get.sh host:ホスト ostype:{windows|unix} comm:コミュニティ
* Path構成
/mypath
    |__ /bin
    |     |__ snmpcpuget.sh
    |     |__ snmpramget.sh
    |     |__ snmpdiskget.sh
    |__ /mrtg  
          |__ mrtg.cfgなど
* 実行例
$ pwd
/mypath
$ bin/snmpcpuget.sh host {windows|unix} comm
$ bin/snmpramget.sh host {windows|unix} comm
$ bin/snmpdiskget.sh host {windows|unix} comm 
注意:unix,linuxは同じ意味、スクリプトは入力チェック、エラー処理等省略していますので、事前にsnmpコマンドでhost、ostype、commが実際に存在することを確認してから実行して下さい 

$ LANG=C /usr/bin/mrtg /mypath/mrtg/mrtg.cfg
  
$ crontab -e
0,30 * * * * LANG=C /usr/bin/mrtg /mypath/mrtg/mrtg.cfg

ソースとサンプルデータ

ここのgraphsample/linuxにあります。

サンプル画像

mrtggraph.png

おわりに

グラフデータ収集スクリプトはグラフ作成以外に、サーバ監視システムの機能の中のCPU、Memory、Diask使用率の危険値、警告値超えをチェックする機能としても動作させています。興味ある方はここからどうぞ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?