Ubuntu や Raspberry Pi に SNMP をインストール

# 環境

- サーバ & エージェント Ubuntu 20.04 ja LTS
- リモートエージェント Ubuntu 22.04 ja LTS


# インストール

サーバに以下のようにしてインストール

```
$ sudo apt install snmpd
```

また、snmpwalk などを使うためインストール。閲覧はあくまで 別 PC で行う場合はなくてもいいです。
```
$ sudo apt install snmp snmp-mibs-downloader
```

インストールしてできた /etc/snmp/snmpd.conf の 中身は以下のようになってました。

```
$ sudo cat /etc/snmp/snmpd.conf | grep -v ^# | grep -v ^$
sysLocation    Sitting on the Dock of the Bay
sysContact     Me <me@example.org>
sysServices    72
master  agentx
agentaddress udp:161,udp6:[::1]:161
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1
rocommunity  public default -V systemonly
rocommunity6 public default -V systemonly
rouser authPrivUser authpriv -V systemonly
```

そのまま読み込みしてみます。

```
$ snmpwalk -v1 localhost -c public
/etc/snmp/snmp.conf: line 5: Warning: Unknown token: rocommunity.
iso.3.6.1.2.1.1.1.0 = STRING: "Linux nanbuwks-PRIMERGY-TX1310-M3 5.11.0-43-generic #47~20.04.2-Ubuntu SMP Mon Dec 13 11:06:56 UTC 2021 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (4335) 0:00:43.35
iso.3.6.1.2.1.1.4.0 = STRING: "Me <me@example.org>"
iso.3.6.1.2.1.1.5.0 = STRING: "nanbuwks-PRIMERGY-TX1310-M3"
iso.3.6.1.2.1.1.6.0 = STRING: "Sitting on the Dock of the Bay"
iso.3.6.1.2.1.1.7.0 = INTEGER: 72
iso.3.6.1.2.1.1.8.0 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.10.3.1.1
iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.11.3.1.1
iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.15.2.1.1
iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.1
iso.3.6.1.2.1.1.9.1.2.5 = OID: iso.3.6.1.6.3.16.2.2.1
iso.3.6.1.2.1.1.9.1.2.6 = OID: iso.3.6.1.2.1.49
iso.3.6.1.2.1.1.9.1.2.7 = OID: iso.3.6.1.2.1.4
iso.3.6.1.2.1.1.9.1.2.8 = OID: iso.3.6.1.2.1.50
iso.3.6.1.2.1.1.9.1.2.9 = OID: iso.3.6.1.6.3.13.3.1.3
iso.3.6.1.2.1.1.9.1.2.10 = OID: iso.3.6.1.2.1.92
iso.3.6.1.2.1.1.9.1.3.1 = STRING: "The SNMP Management Architecture MIB."
iso.3.6.1.2.1.1.9.1.3.2 = STRING: "The MIB for Message Processing and Dispatching."
iso.3.6.1.2.1.1.9.1.3.3 = STRING: "The management information definitions for the SNMP User-based Security Model."
iso.3.6.1.2.1.1.9.1.3.4 = STRING: "The MIB module for SNMPv2 entities"
iso.3.6.1.2.1.1.9.1.3.5 = STRING: "View-based Access Control Model for SNMP."
iso.3.6.1.2.1.1.9.1.3.6 = STRING: "The MIB module for managing TCP implementations"
iso.3.6.1.2.1.1.9.1.3.7 = STRING: "The MIB module for managing IP and ICMP implementations"
iso.3.6.1.2.1.1.9.1.3.8 = STRING: "The MIB module for managing UDP implementations"
iso.3.6.1.2.1.1.9.1.3.9 = STRING: "The MIB modules for managing SNMP Notification, plus filtering."
iso.3.6.1.2.1.1.9.1.3.10 = STRING: "The MIB module for logging SNMP Notifications."
iso.3.6.1.2.1.1.9.1.4.1 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.2 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.3 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.4 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.5 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.6 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.7 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.8 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.9 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.1.9.1.4.10 = Timeticks: (1) 0:00:00.01
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (13202960) 1 day, 12:40:29.60
iso.3.6.1.2.1.25.1.2.0 = Hex-STRING: 07 E6 08 03 0E 08 26 00 2B 09 00 
iso.3.6.1.2.1.25.1.3.0 = INTEGER: 393216
iso.3.6.1.2.1.25.1.4.0 = STRING: "BOOT_IMAGE=/boot/vmlinuz-5.11.0-43-generic root=UUID=3f5e0384-61ff-4c47-8e00-839ac025fc77 ro quiet splash vt.handoff=7
"
iso.3.6.1.2.1.25.1.5.0 = Gauge32: 6
iso.3.6.1.2.1.25.1.6.0 = Gauge32: 243
iso.3.6.1.2.1.25.1.7.0 = INTEGER: 0
End of MIB
```

uptime を取得してみます。

```
$ snmpwalk -v1 localhost -c public iso.3.6.1.2.1.25.1.1.0 
/etc/snmp/snmp.conf: line 5: Warning: Unknown token: rocommunity.
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (13206812) 1 day, 12:41:08.12
```

# 別の PC から値を読んでみる

サーバの値を他のPCから見えるようにするためには、以下のように /etc/snmp/snmpd.conf を編集

```
agentaddress  127.0.0.1,[::1]
```
を以下のように無効化
```
# agentaddress  127.0.0.1,[::1]
```
snmpdを再起動する
```
$ sudo systemctl restart  snmpd
```

# 別のPC

```
$ sudo apt-get install -y snmp snmp-mibs-downloader
```

の後、

```
$ snmpwalk -v1 localhost -c public iso.3.6.1.2.1.25.1.1.0 
```

とすると

```
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (13355805) 1 day, 13:05:58.05
```

uptime が取得できました。

# 読める値を増やす

snmp サーバで、/etc/snmp/snmpd.conf を編集します。


```
#  system + hrSystem groups only
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1

# rocommunity: a SNMPv1/SNMPv2c read-only access community name
#   arguments:  community [default|hostname|network/bits] [oid | -V view]

# Read-only access to everyone to the systemonly view
rocommunity  public default -V systemonly
rocommunity6 public default -V systemonly
```
上記の該当箇所を以下のように変更します。

```
#  system + hrSystem groups only
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1
view   systemview  included   .1.3.6.1.2.1.25
view   systemview  included   .1.3.6.1.4.1.2

# rocommunity: a SNMPv1/SNMPv2c read-only access community name
#   arguments:  community [default|hostname|network/bits] [oid | -V view]

# Read-only access to everyone to the systemonly view
rocommunity  public default
rocommunity6 public default -V systemonly
```
snmpd再起動

```
$ sudo systemctl restart snmpd
```

```
$ snmpwalk -v1 localhost -c public
```

とすると膨大に出てきます。


外部から、メモリの値を読んでみました。
```
$ snmpwalk -v1 192.168.42.100 -c public UCD-SNMP-MIB::memory
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0
UCD-SNMP-MIB::memErrorName.0 = STRING: swap
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 2097148 kB
UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 1844236 kB
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 3840912 kB
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 679384 kB
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 2523620 kB
UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 kB
UCD-SNMP-MIB::memShared.0 = INTEGER: 118180 kB
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 254896 kB
UCD-SNMP-MIB::memCached.0 = INTEGER: 1355500 kB
UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0)
UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING: 
```

ディスクの値を読もうとしましたが、出てきませんでした。

```
$ snmpwalk -v1 192.168.42.100 -c public UCD-SNMP-MIB::dskTable
```

load average を表示してみました。
```
$ snmpwalk -v1 192.168.42.100 -c public 1.3.6.1.4.1.2021.10.1.3
iso.3.6.1.4.1.2021.10.1.3.1 = STRING: "0.01"
iso.3.6.1.4.1.2021.10.1.3.2 = STRING: "0.07"
iso.3.6.1.4.1.2021.10.1.3.3 = STRING: "0.08"
```
過去1分、5分、15分の間のロードアベレージ値です。

以下では CPU コアそれぞれの利用率の値が取得できるようです。
```
$ snmpwalk -v1 192.168.42.100 -c public 1.3.6.1.2.1.25.3.3
iso.3.6.1.2.1.25.3.3.1.1.196608 = OID: ccitt.0
iso.3.6.1.2.1.25.3.3.1.1.196609 = OID: ccitt.0
iso.3.6.1.2.1.25.3.3.1.2.196608 = INTEGER: 5
iso.3.6.1.2.1.25.3.3.1.2.196609 = INTEGER: 4
```

# 他のツール

snmpstatus

```
$ snmpstatus -v 1 -c public localhost
[UDP: [127.0.0.1]:161->[0.0.0.0]:47832]=>[Linux nanbuwks-PRIMERGY-TX1310-M3 5.11.0-43-generic #47~20.04.2-Ubuntu SMP Mon Dec 13 11:06:56 UTC 2021 x86_64] Up: 0:04:45.44
Interfaces: 4, Recv/Trans packets: 878912/6781368 | IP: 667121/1366586
2 interfaces are down!
```