[Zabbix] ゼロから始めるZabbix -snmptrap-

#はじめに
NW監視の学習として、監視用ツールとして良く使われている「Zabbix」とネットワーク監視方法で良く使われている「SNMP」と「SNMPTrap」の監視環境を構築をしてみる。それらの内容を数回に分けて掲載していく。
今回はSNMPTrapでL2スイッチ（cisco）の監視環境を構築する。

■掲載内容
1 - [ゼロから始めるZabbix -構築-](https://qiita.com/CyberFortress/items/b37924c6086bc779aabb)
2 - [ゼロから始めるZabbix -SNMP-](https://qiita.com/CyberFortress/items/3d06ceaa11ed3793b04a)
3 - **ゼロから始めるZabbix -SNMPTrap- （本記事）**


#SNMPTrapとは
SNMPTrapとは、SNMPエージェント（監視対象機器）がSNMPマネージャー（サーバ）に通知を送信する仕組み。パフォーマンスの低下や障害の情報を知ることができる。
![snmptrap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/fb594759-491f-df0c-4f8b-bc6738e94e75.png)

#SNMPTrap監視の流れ
ZabbixではSNMPTrapを受信する為にSNMPTTをいれるか、Zabbixに付随するPerlスクリプトを使用するか選ぶ必要がある。今回はperlスクリプトを使用して監視を行う。

![trap_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/07abe6d4-681a-c9c7-024c-e7681d3acd8f.png)


#構築環境
・Centos 7
・zabbix 4.0 LTS
・上図のようにZabbixサーバとL2スイッチを接続
・L2スイッチはciscoを使用

#作業
【Zabbix側作業】

1.関連パッケージのインストール
SNMPTrap監視で必要なものや、作業で必要なコマンド、snmp_trap_receiver.plで必要なものをyumでインストールしていく。

```
1-1 yumコマンドの実施 ※SNMP関連のインストール
# yum install net-snmp net-snmp-libs net-snmp-utils net-snmp-devel net-snmp-perl

1-2 yを押下しenter
Total download size: 12 M
Is this ok [y/d/N]: y

1-3 yumコマンドの実施 ※コマンド関連のインストール（インストール時に使用）
# yum install bzip2 gzip tar unzip make curl lynx wget ftp gpg patch gcc 

1-4 yを押下しenter
Total download size: 26 M
Is this ok [y/d/N]: y

1-5 yumコマンドの実施 ※perl関連のインストール
# yum install perl perl-CPAN perl-YAML perl-Module-Build perl-Time-HiRes 

1-6 yを押下しenter
Total download size: 9.5 M
Is this ok [y/d/N]: y
```

2.Perlライブラリの初期設定とパッケージの導入

```
2-1 cpanモジュールの起動 ※初回起動時は設定を行う
# cpan

2-2 yesを入力し、enter
Would you like to configure as much as possible automatically? [yes] yes

2-3 enterを押下
What approach do you want?  (Choose 'local::lib', 'sudo' or 'manual')
 [local::lib]

2-4 下記コマンドを入力し、enter
cpan[1]> install Config::IniFiles

2-5 cpanから抜ける
cpan[2]> bye
```


3.zabbix_trap_receiver.plの導入

```
3-1 ソースコードを入手する
# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.2/zabbix-3.2.2.tar.gz

3-2 ダウンロードしたファイルを解凍する
# tar xfvz zabbix-3.2.2.tar.gz

3-3 解凍したファイルを/usr/local/binにコピー
# cp ./zabbix-3*/misc/snmptrap/zabbix_trap_receiver.pl /usr/local/bin/

3-4 コピーしたファイルの権限を変更
# chmod 755 /usr/local/bin/zabbix_trap_receiver.pl 

3-4.viでzabbix_trap_receiver.plの中身を下記に変更
# vi /usr/local/bin/zabbix_trap_receiver.pl
【変更前】$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';
【変更後】$SNMPTrapperFile = '/var/log/zabbix/snmptrap.log';
```

```

```

4.snmptrapdの設定変更
snmptrapdの起動パラメータの設定を行う。
MIBの読み込みとログ出力先ファシリティをlocal 6に変更。

```
viで/etc/sysconfig/snmptrapdに下記を追加
# vi /etc/sysconfig/snmptrapd
【追加】
OPTIONS="-m +ALL -Ls6 -On -p /var/run/snmptrapd.pid"
```

5.snmptrapdの動作設定を行う。

```
viで/etc/snmp/snmptrapd.confに下記を追記
# vi /etc/snmp/snmptrapd.conf
【追加】
authCommunity log,execute,net private
authCommunity log,execute,net public
perl do "/usr/local/bin/zabbix_trap_receiver.pl"
```

6.rsyslog設定
local 6で受信したログの出力先ファイルを設定

```
viで/etc/rsyslog.confに下記を追記
# vi /etc/rsyslog.conf
【追加】
# SNMPTrap
local6.*     /var/log/snmpd/snmptrap.log
```

7.ログ出力先ディレクトリ作成

```
下記にsnmpdフォルダを作成
mkdir /var/log/snmpd
```

8.Zabbix設定
テンポラリファイルのパスとプロセスの起動数を指定する。

```
8-1 viで/etc/zabbix/zabbix_server.confを開く
# vi /etc/zabbix/zabbix_server.conf

8-2 下記を変更
【変更前】# SNMPTrapperFile=/tmp/zabbix_traps.tmp
【変更後】SNMPTrapperFile=/var/log/zabbix/snmptrap.log

8-3 下記を変更
【変更前】# StartSNMPTrapper=0
【変更後】StartSNMPTrapper=1
```

9.空ファイルの作成
先程追加したSNMPTrapperFileにファイルが存在しないとエラーログが出力されるため、
空ファイルを作成。

```
9-1 空ファイルの作成
# touch /var/log/zabbix/snmptrap.log
9-1 作成した空ファイルの権限を変更
# chown zabbix.zabbix /var/log/zabbix/snmptrap.log
```
10.各種再起動

```
10-1 rsyslog再起動
# systemctl restart rsyslog.service

10-2 snmptrapd起動
# systemctl start snmptrapd

```

【対象機器（ホスト）側作業】
11.監視対象機器のコンフィグを設定する　※NW機器での作業

```
11-1 特権ユーザでコンフィグモードに移行
　# configure terminal

11-2 下記をコンフィグに追加（トラップの有効化）
　(config)# snmp-server host 【ZabbixサーバIP】 【コミュニティ名】
　(config)# snmp-server enable traps

11-3 コンフィグモードから抜ける
　(config)# exit

11-4 設定を保存する
　# copy running-config startup-config

```

#設定確認（Zabbix作業）

12.SNMPTrapを送信して動作試験を行う。

```
SNMP Trapの送信
snmptrap -v 2c -c 【コミュニティ名】 127.0.0.1 8640000 .1.3.6.1.6.3.1.1.5.3
```

13.ログの受信していることを確認

```
# cat /var/log/snmpd/snmptrap.log
Apr 13 22:14:38 localhost snmptrapd[20280]: 2020-04-13 22:14:38 localhost [UDP: [127.0.0.1]:36759->[127.0.0.1]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (8640000) 1 day, 0:00:00.00#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.6.3.1.1.5.3
```

14.13で受信したログが整形されていることを確認

```
# cat /var/log/zabbix/snmptrap.log
01:02:12 2016/12/19 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  version                        1
  receivedfrom                   UDP: [127.0.0.1]:51964->[127.0.0.1]:162
  errorstatus                    0
  messageid                      0
  community                      【コミュニティ名】
  transactionid                  1
  errorindex                     0
  requestid                      1426809208
VARBINDS:
  .1.3.6.1.2.1.1.3.0             type=67 value=Timeticks: (8640000) 1 day, 0:00:00.00
  .1.3.6.1.6.3.1.1.4.1.0         type=6  value=OID: .1.3.6.1.6.3.1.1.5.3
```

#監視設定
最後にZabbix側で受信したデータを検知できるようにテンプレートを作成していく。

15.テンプレートの作成

15-1 「設定」を押下
15-2 「テンプレート」を押下
15-3 「テンプレート作成」を押下
<img width="935" alt="tem1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/1426086b-8d06-65d4-d468-95fe5a0eaf95.png">

15-4 下記項目を入力

| 項目 | 設定値 |
|:-:|:-:|
| テンプレート名 | 任意 |
| 表示名 |  任意 |
| グループ | 任意 |
| 説明 | 任意 |

15-5 「マクロ」を押下
<img width="368" alt="tem2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/038bf3e6-bd86-03c5-e335-735abace9b4a.png">

15-6 「継承したマクロとテンプレートマクロ」を押下
15-7 「変更」を押下
15-8 下記項目を入力

| 項目 | 設定値 |
|:-:|:-:|
| {$ SNMP_COMMUNITY} | コミュニティ名（任意） |

※コミュニティ名は監視対象機器と同じ値にする必要がある

15-9 「追加」を押下
<img width="393" alt="tem3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/7a69bd3c-efad-8493-09cf-2518b5dad9f0.png">



16.アイテムを作成
テンプレートができたので実際に何をするか指示をする為にアイテムを作成する

16-1 追加されたテンプレートを押下する
<img width="397" alt="tem4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/748f0aef-d549-9bd8-0fd2-08d6ac9000a9.png">

16-2 「アイテム」を押下
16-3 「アイテムの作成」を押下
<img width="958" alt="tem5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/a2750c3d-4524-a16b-8022-c3f21a8056ef.png">

16-4 下記項目を入力
ここで全てのSNMPトラップメッセージを拾うように設定
(snmptrap[*]の*を変えると特定のtrapのみをアラートして出すことが可能)

| 項目 | 設定値 |
|:-:|:-:|
| 名前 | 任意 |
| タイプ | SNMPトラップ |
| キー | snmptrap[*] |
| データ型 | ログ |
| ログの時間の形式 | ※ yyyy/MM/dd hh:★mm:ss |
| 説明 | 任意 |

※ ★は削って入力

16-5 「追加」を押下
<img width="567" alt="tem6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/20019c12-bad7-23d4-52a0-3d59c0d75137.png">

16-6 アイテムが追加されたことを確認
<img width="339" alt="tem7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/1416d8bb-cd47-421a-d8e1-2523c9534410.png">

<参考>下記はL2スイッチでLANケーブルを抜いた際に発生したアラート
<img width="368" alt="tem8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/570011/90c3e701-b8e9-f12f-2a8f-c1ddb3893523.png">

#おわりに
3回に分けて記事にしたが、今回でZabbixをインストールし、SNMP監視とSNMPTrap監視するところまでが可能になった。あくまで必要最低限の設定で構築をしてきたので、実際に監視をする際は、もっと複雑な設定になっている。今後、現場で生かせるようにZabbixでできることをもっと学習していきたい。

#参考文献
[ZABBIX SNMPTrap設定(zabbix_trap_receiver.pl)](http://extstrg.asabiya.net/pukiwiki/index.php?ZABBIX%20SNMPTrap%C0%DF%C4%EA%28zabbix_trap_receiver.pl%29)
[[CentOS7.4] logrotateサービスを入れて日次でログを保存しよう](https://qiita.com/tosite0345/items/070324492e4a2515e3db)
[ZabbixでSNMPTTを利用してSNMPトラップを監視する](https://www.miraclelinux.com/product-service/zabbix/tech-lounge/zbx-tl-001)
[Perl trap receiver(zabbix_trap_receiver.pl)を使用したSNMPトラップ監視](https://www.miraclelinux.com/product-service/zabbix/tech-lounge/zbx-tl-033-snmptrap-perlscript)