サーバ監視項目でよく使う SNMP の MIB オブジェクト ID まとめ
サーバの監視において SNMP は必須技術なわけですが、MRTG や自前スクリプトは一度設定してしまうと、サーバが増減でもしない限り、設定ファイルを見直すことってほとんどありませんよね。
でもって、久々に改めて設定ファイルを見直してみると、設定してある MIB の OID が意味不明・・・なんだっけコレ?ってことが良くあります。※少なくとも僕の場合は、毎回調べ直してる気がする・・・
なので、よく使う MIB オブジェクト ID をまとめておこう・・・と考えました。これでこれからは迷わない。
・・・と思ったらエントリを書き始めたらビックリ仰天!SNMP の知識すら忘れてます・・・再度お勉強です・・・ヽ(τωヽ)ノ
SNMPによるネットワークシステムの監視第01回:第1回:SNMPの基礎
このエージェントとマネージャでやり取りされるMIBはツリー構造状の管理データベースであり、この値をマネージャが読み出すことで監視対象の状態を監視することができます。また、情報を変更することで監視対象の設定変更や制御を行う場合もあります。
そうそう、思い出してきました。あの意味不明な数値列はツリー構造で管理されている各階層の番号列です。
MIB のツリー構造を把握する
まずは、MIB のツリー構造一覧を表示してみましょう。一覧は膨大なデータ量になるので、サーバ監視項目として必要であろう部分を中心に、ある程度抜粋(割愛)しました。
[user@srv01 ~]$ snmptranslate -Tp +--iso(1) | +--org(3) | +--dod(6) | +--internet(1) | +--directory(1) | +--mgmt(2) | | | +--mib-2(1) | | | +--system(1) | | |.... | | | +--interfaces(2) | | |.... | |.... | +--experimental(3) | |.... | +--private(4) | | | +--enterprises(1) | | | +--ucdavis(2021) | | | | | +--prTable(2) | | | |.... | | | | | +--memory(4) | | | | | | | +-- -R-- Integer32 memIndex(1) | | | +-- -R-- String memErrorName(2) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- Integer32 memTotalSwap(3) | | | +-- -R-- Integer32 memAvailSwap(4) | | | +-- -R-- Integer32 memTotalReal(5) | | | +-- -R-- Integer32 memAvailReal(6) | | | +-- -R-- Integer32 memTotalSwapTXT(7) | | | +-- -R-- Integer32 memAvailSwapTXT(8) | | | +-- -R-- Integer32 memTotalRealTXT(9) | | | +-- -R-- Integer32 memAvailRealTXT(10) | | | +-- -R-- Integer32 memTotalFree(11) | | | +-- -R-- Integer32 memMinimumSwap(12) | | | +-- -R-- Integer32 memShared(13) | | | +-- -R-- Integer32 memBuffer(14) | | | +-- -R-- Integer32 memCached(15) | | | +-- -R-- Integer32 memUsedSwapTXT(16) | | | +-- -R-- Integer32 memUsedRealTXT(17) | | | +-- -R-- EnumVal memSwapError(100) | | | | Textual Convention: UCDErrorFlag | | | | Values: noError(0), error(1) | | | +-- -R-- String memSwapErrorMsg(101) | | | Textual Convention: DisplayString | | | Size: 0..255 | | | | | +--extTable(8) | | | |.... | | | | | +--dskTable(9) | | | | | | | +--dskEntry(1) | | | | Index: dskIndex | | | | | | | +-- -R-- Integer32 dskIndex(1) | | | | Range: 0..65535 | | | +-- -R-- String dskPath(2) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- String dskDevice(3) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- Integer32 dskMinimum(4) | | | +-- -R-- Integer32 dskMinPercent(5) | | | +-- -R-- Integer32 dskTotal(6) | | | +-- -R-- Integer32 dskAvail(7) | | | +-- -R-- Integer32 dskUsed(8) | | | +-- -R-- Integer32 dskPercent(9) | | | +-- -R-- Integer32 dskPercentNode(10) | | | +-- -R-- EnumVal dskErrorFlag(100) | | | | Textual Convention: UCDErrorFlag | | | | Values: noError(0), error(1) | | | +-- -R-- String dskErrorMsg(101) | | | Textual Convention: DisplayString | | | Size: 0..255 | | | | | +--laTable(10) | | | | | | | +--laEntry(1) | | | | Index: laIndex | | | | | | | +-- -R-- Integer32 laIndex(1) | | | | Range: 0..3 | | | +-- -R-- String laNames(2) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- String laLoad(3) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- String laConfig(4) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- Integer32 laLoadInt(5) | | | +-- -R-- Opaque laLoadFloat(6) | | | | Textual Convention: Float | | | | Size: 7 | | | +-- -R-- EnumVal laErrorFlag(100) | | | | Textual Convention: UCDErrorFlag | | | | Values: noError(0), error(1) | | | +-- -R-- String laErrMessage(101) | | | Textual Convention: DisplayString | | | Size: 0..255 | | | | | +--systemStats(11) | | | | | | | +-- -R-- Integer32 ssIndex(1) | | | +-- -R-- String ssErrorName(2) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- Integer32 ssSwapIn(3) | | | +-- -R-- Integer32 ssSwapOut(4) | | | +-- -R-- Integer32 ssIOSent(5) | | | +-- -R-- Integer32 ssIOReceive(6) | | | +-- -R-- Integer32 ssSysInterrupts(7) | | | +-- -R-- Integer32 ssSysContext(8) | | | +-- -R-- Integer32 ssCpuUser(9) | | | +-- -R-- Integer32 ssCpuSystem(10) | | | +-- -R-- Integer32 ssCpuIdle(11) | | | +-- -R-- Counter ssCpuRawUser(50) | | | +-- -R-- Counter ssCpuRawNice(51) | | | +-- -R-- Counter ssCpuRawSystem(52) | | | +-- -R-- Counter ssCpuRawIdle(53) | | | +-- -R-- Counter ssCpuRawWait(54) | | | +-- -R-- Counter ssCpuRawKernel(55) | | | +-- -R-- Counter ssCpuRawInterrupt(56) | | | +-- -R-- Counter ssIORawSent(57) | | | +-- -R-- Counter ssIORawReceived(58) | | | +-- -R-- Counter ssRawInterrupts(59) | | | +-- -R-- Counter ssRawContexts(60) | | | +-- -R-- Counter ssCpuRawSoftIRQ(61) | | | +-- -R-- Counter ssRawSwapIn(62) | | | +-- -R-- Counter ssRawSwapOut(63) | | | | | +--ucdInternal(12) | | | | | +--ucdExperimental(13) | | | | | | | +--ucdDlmodMIB(14) | | | | +-- -R-- Integer32 dlmodNextIndex(1) | | | | |.... | | | | | | | +--ucdDiskIOMIB(15) | | | | | | | | | +--diskIOTable(1) | | | | | | | | | +--diskIOEntry(1) | | | | | Index: diskIOIndex | | | | | | | | | +-- -R-- Integer32 diskIOIndex(1) | | | | | Range: 0..65535 | | | | +-- -R-- String diskIODevice(2) | | | | | Textual Convention: DisplayString | | | | | Size: 0..255 | | | | +-- -R-- Counter diskIONRead(3) | | | | +-- -R-- Counter diskIONWritten(4) | | | | +-- -R-- Counter diskIOReads(5) | | | | +-- -R-- Counter diskIOWrites(6) | | | | +-- -R-- Integer32 diskIOLA1(9) | | | | | Range: 0..100 | | | | +-- -R-- Integer32 diskIOLA5(10) | | | | | Range: 0..100 | | | | +-- -R-- Integer32 diskIOLA15(11) | | | | | Range: 0..100 | | | | +-- -R-- Counter64 diskIONReadX(12) | | | | +-- -R-- Counter64 diskIONWrittenX(13) | | | | | | | +--lmSensors(16) | | | | | | | +--lmSensorsMIB(1) | | | | | | | +--lmTempSensorsTable(2) | | | | | | | | | +--lmTempSensorsEntry(1) | | | | | Index: lmTempSensorsIndex | | | | | | | | | +-- -R-- Integer32 lmTempSensorsIndex(1) | | | | | Range: 0..65535 | | | | +-- -R-- String lmTempSensorsDevice(2) | | | | | Textual Convention: DisplayString | | | | | Size: 0..255 | | | | +-- -R-- Gauge lmTempSensorsValue(3) | | | | | | | +--lmFanSensorsTable(3) | | | | | | | | | +--lmFanSensorsEntry(1) | | | | | Index: lmFanSensorsIndex | | | | | | | | | +-- -R-- Integer32 lmFanSensorsIndex(1) | | | | | Range: 0..65535 | | | | +-- -R-- String lmFanSensorsDevice(2) | | | | | Textual Convention: DisplayString | | | | | Size: 0..255 | | | | +-- -R-- Gauge lmFanSensorsValue(3) | | | | | | | +--lmVoltSensorsTable(4) | | | | | | | | | +--lmVoltSensorsEntry(1) | | | | | Index: lmVoltSensorsIndex | | | | | | | | | +-- -R-- Integer32 lmVoltSensorsIndex(1) | | | | | Range: 0..65535 | | | | +-- -R-- String lmVoltSensorsDevice(2) | | | | | Textual Convention: DisplayString | | | | | Size: 0..255 | | | | +-- -R-- Gauge lmVoltSensorsValue(3) | | | | | | | +--lmMiscSensorsTable(5) | | | | | | | +--lmMiscSensorsEntry(1) | | | | Index: lmMiscSensorsIndex | | | | | | | +-- -R-- Integer32 lmMiscSensorsIndex(1) | | | | Range: 0..65535 | | | +-- -R-- String lmMiscSensorsDevice(2) | | | | Textual Convention: DisplayString | | | | Size: 0..255 | | | +-- -R-- Gauge lmMiscSensorsValue(3) | | |.... | | | +--netSnmp(8072) | |.... | +--security(5) | +--snmpV2(6) |....
さて、snmptranslate のログで随分と長くなってしまいましたが、まとめです。サーバ監視でよく使う MIB - OID はこんな感じでほぼ十分だと思います。このほかに lm-sensor とかを入れている場合は、そこら辺も追加すると、CPU やディスクの温度管理もできます。
OID | 監視項目名 | 説明 |
メモリ関連 | ||
.1.3.6.1.4.1.2021.4.3 | memTotalSwap | スワップファイルの確保容量(キロバイト単位) |
.1.3.6.1.4.1.2021.4.4 | memAvailSwap | スワップファイルの未使用容量(キロバイト単位) |
.1.3.6.1.4.1.2021.4.5 | memTotalReal | 搭載されている実メモリ(キロバイト単位) |
.1.3.6.1.4.1.2021.4.6 | memAvailReal | 空き実メモリ(キロバイト単位) |
.1.3.6.1.4.1.2021.4.11 | memTotalFree | 総空きメモリ(実空きメモリ+スワップ空き容量)。キロバイト単位 |
.1.3.6.1.4.1.2021.4.13 | memShared | 総共有メモリの容量(キロバイト単位) |
.1.3.6.1.4.1.2021.4.14 | memBuffer | 総バッファメモリの容量(キロバイト単位) |
.1.3.6.1.4.1.2021.4.15 | memCached | 総キャッシュメモリ容量(キロバイト単位) |
システム・ステータス関連 | ||
.1.3.6.1.4.1.2021.11.3 | ssSwapIn | スワップインにかかった時間(キロバイト/秒) |
.1.3.6.1.4.1.2021.11.4 | ssSwapOut | スワップアウトにかかった時間(キロバイト/秒) |
.1.3.6.1.4.1.2021.11.5 | ssIOSent | ブロックデバイスへの送信にかかった時間(ブロック/秒) |
.1.3.6.1.4.1.2021.11.6 | ssIOReceive | ブロックデバイスからの受信にかかった時間(ブロック/秒) |
.1.3.6.1.4.1.2021.11.7 | ssSysInterrupts | 1秒間にかかった割り込みの回数。クロック割り込みも含む |
.1.3.6.1.4.1.2021.11.8 | ssSysContext | 1秒間に切り替えられたコンテキストスイッチの回数 |
.1.3.6.1.4.1.2021.11.9 | ssCpuUser | ユーザーがCPUを使っている割合(百分率) |
.1.3.6.1.4.1.2021.11.10 | ssCpuSystem | システムがCPUを使っている割合(百分率) |
.1.3.6.1.4.1.2021.11.11 | ssCpuIdle | CPUがアイドルである割合(百分率) |
ロードアベレージ関連 | ||
.1.3.6.1.4.1.2021.10.1.3.1 | laLoad.1 | 1分平均ロードアベレージ |
.1.3.6.1.4.1.2021.10.1.3.2 | laLoad.2 | 5分平均ロードアベレージ |
.1.3.6.1.4.1.2021.10.1.3.3 | laLoad.3 | 15分平均ロードアベレージ |
ディスク関連 | ||
1.3.6.1.4.1.2021.9.1.2 | dskPath | 調査対象となるパス名。disk行の調査するパス名に指定した値 |
1.3.6.1.4.1.2021.9.1.3 | dskDevice | dskPathが含まれるデバイス名。/dev/hda1など |
1.3.6.1.4.1.2021.9.1.6 | dskTotal | dskDeviceで指定されるデバイスが格納できる最大容量。キロバイト単位 |
1.3.6.1.4.1.2021.9.1.7 | dskAvail | dskDeviceで指定されるデバイスの現在の空き容量。キロバイト単位 |
1.3.6.1.4.1.2021.9.1.8 | dskUsed | dskDeviceで指定されるデバイスの現在の利用容量。キロバイト単位 |
1.3.6.1.4.1.2021.9.1.9 | dskPercent | dskDeviceで指定されているディスクの使用率を百分率で示した値 |
1.3.6.1.4.1.2021.9.1.10 | dskPercentNode | dskDeviceで指定されているディスクのiノードの使用率を百分率で示した値 |
ちなみに、コマンドで値を確かめる場合は、下記の書式でコマンドを入力します。
snmpwalk -v1 -c <コミュニティ名> <ホスト名> [ 検索範囲 ]
試しにロードアベレージを取得してみたいと思います。
[user@srv01 ~]$ snmpwalk -v1 -c public localhost .1.3.6.1.4.1.2021.10.1.3 UCD-SNMP-MIB::laLoad.1 = STRING: 0.82 UCD-SNMP-MIB::laLoad.2 = STRING: 1.00 UCD-SNMP-MIB::laLoad.3 = STRING: 0.96
本エントリはきっと数ヶ月後の自分に役に立つことと思います。MRTGの設定ファイルや自作の監視スクリプトにお役立てください。
コメントやシェアをお願いします!