Ubuntu 22.04.1LTS へ snmp ユーティリティをインストールする
Ubuntu 22.04.1LTS へ snmpwalk などの SNMP ユーティリティをインストールする手順をメモしておきます。
インストール
以下のコマンドでインストールします。 snmp パッケージだけだと MIB が不十分ですので、snmp-mibs-downloader パッケージもインストールしておきます。
| apt -y install snmp snmp-mibs-downloader
|
snmp-mibs-downloader パッケージをインストールすると、自動的に MIB ファイルも /usr/share/snmp
配下にダウンロードされます。 通常であれば不要ですが、再度 MIB ファイルをダウンロードし直したい場合は以下を実行します。
設定ファイルの修正
設定ファイルは /etc/snmp/snmp.conf
にあります。 デフォルトの内容は以下でした。
| # As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
mibs :
# If you want to globally change where snmp libraries, commands and daemons
# look for MIBS, change the line below. Note you can set this for individual
# tools with the -M option or MIBDIRS environment variable.
#
# mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf
|
全ての MIB を参照出来るように、以下の部分を修正します。
変更前
変更後
監視対象機器で Polling 設定を行う
監視対象機器で SNMP Polling を受け付けられるに設定します。 今回は Catalyst 8000V をターゲットにしましたので、以下を設定しておきます。 Community String は public
としました。
| snmp-server community public RO
|
snmpwalk を実行する
Catalyst 8000V に対して snmpwalk で sysUpTime (1.3.6.1.2.1.1.3) を取得してみます。 値は取得出来ていますが、Bad operator 〜
というメッセージが表示されています。
| # snmpwalk -v 2c -c public 10.0.0.1 sysUpTime
Bad operator (INTEGER): At line 73 in /usr/share/snmp/mibs/ietf/SNMPv2-PDU
DISMAN-EXPRESSION-MIB::sysUpTimeInstance = Timeticks: (1235303) 3:25:53.03
|
この問題を含む、幾つかの問題を解決する為に、以下を実行して幾つかの MIB ファイルを差し替えます。
| curl -sL http://www.iana.org/assignments/ianaippmmetricsregistry-mib/ianaippmmetricsregistry-mib -o /usr/share/snmp/mibs/iana/IANA-IPPM-METRICS-REGISTRY-MIB
curl -sL http://pastebin.com/raw.php?i=p3QyuXzZ -o /usr/share/snmp/mibs/ietf/SNMPv2-PDU
curl -sL http://pastebin.com/raw.php?i=gG7j8nyk -o /usr/share/snmp/mibs/ietf/IPATM-IPMC-MIB
|
再度、snmpwalk を実行すると警告が表示されなくなりました。
| # snmpwalk -v 2c -c public 10.0.0.1 sysUpTime
DISMAN-EXPRESSION-MIB::sysUpTimeInstance = Timeticks: (1271611) 3:31:56.11
|
参考
/usr/bin/download-mibs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 | #!/bin/bash
set -e
set -o pipefail
SMISTRIP=/usr/bin/smistrip
CONFDIR=/etc/snmp-mibs-downloader
. $CONFDIR/snmp-mibs-downloader.conf
download_mibs()
{
TMP="$(mktemp -d)"
if [ ! -z "$ARCHIVE" ]; then
ARCHTMP="$(mktemp -d)"
if [ "$ARCHTYPE" == "dirgz" ]; then
if [ ! -z "$HOST" ]; then
echo "Downloading a whole directory with compressed content"
echo "is not supported."
exit 1
else
cp "$DIR/$ARCHIVE"/* "$ARCHTMP/"
gzip -d "$ARCHTMP"/* || /bin/true
fi
else
if [ ! -z "$HOST" ]; then
wget -O "$ARCHTMP/$ARCHIVE" -q -nv "$HOST/$DIR/$ARCHIVE"
else
cp "$DIR/$ARCHIVE" "$ARCHTMP/$ARCHIVE"
fi
case "$ARCHTYPE" in
tar)
tar -C "$ARCHTMP" -xf "$ARCHTMP/$ARCHIVE"
;;
tgz)
tar -C "$ARCHTMP" -xzf "$ARCHTMP/$ARCHIVE"
;;
zip)
unzip -d "$ARCHTMP" "$ARCHTMP/$ARCHIVE"
;;
esac
fi
fi
while read -r file mibs; do
if [ "$file" != "#" ]; then
if [ ! -z "$PREFIX" ]; then
file="$PREFIX$file"
fi
if [ ! -z "$SUFFIX" ]; then
file="$file$SUFFIX"
fi
if [ -z "$ARCHIVE" ]; then
archive_fetcher=(wget -O - -q -nv "$HOST/$DIR/$file")
else
archive_fetcher=(cat "$ARCHTMP/$ARCHDIR/$file")
fi
"${archive_fetcher[@]}" \
| tr -d \\r \
| $SMISTRIP -v -a -d "$TMP" -m "$mibs" -
fi
done <"$CONFDIR/$CONF"
if [ ! -z "$DIFF" ]; then
patch -d "$TMP" <"$CONFDIR/$DIFF"
fi
if [ ! -d "$BASEDIR/$DEST" ]; then
mkdir -p "$BASEDIR/$DEST"
fi
cp "$TMP"/* "$BASEDIR/$DEST"
rm -f "$BASEDIR/$DEST/.index"
rm -fr "$TMP"
if [ ! -z "$ARCHTMP" ]; then
rm -rf "$ARCHTMP"
fi
}
list_mibs()
{
while read -r file mibs; do
if [ "$file" = "#" ]; then
continue
fi
echo "$mibs" | tr ':' '\n'
done <"$CONFDIR/$CONF"
}
MODE='get'
while [ $# -gt 0 ]; do
case $1 in
--get)
MODE='get'
;;
--list)
MODE='list'
;;
*)
break
esac
shift
done
if [ $MODE = get ]; then
echo ""
echo "Downloading documents and extracting MIB files."
echo "This will take some minutes."
echo ""
echo "In case this process fails, it can always be repeated later by executing"
echo "$0 again."
echo ""
fi
sources=$1
if [ -z "$sources" ]; then
sources="$AUTOLOAD"
fi
for i in $sources; do
TMP=
ARCHTMP=
HOST=
DIR=
CONF=
DEST=
DIFF=
PREFIX=
SUFFIX=
ARCHIVE=
ARCHTYPE=
ARCHDIR=
. "$CONFDIR/$i.conf"
if [ $MODE = list ]; then
list_mibs
else
download_mibs
fi
done
|
/etc/snmp-mibs-downloader/
| # ls /etc/snmp-mibs-downloader/
cisco.conf ianarfc.conf rfc.conf screenoslist
ciscolist ianarfclist rfclist simplelist
iana.conf junos.conf rfcmibs.diff simpleweb.conf
ianalist junoslist screenos.conf snmp-mibs-downloader.conf
|