Zabbix SNMPTrap監視の流れ（Perl編）

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

⓵　監視機器が異常を検知
⓶　監視機器がsnmptrapdにSNMPトラップを送信
⓷　snmp_trap_receiverがsnmptrapdのログを整形、整形したログをsnmptrapperfileに書き出す。
⓸　snmptrapperがsnmptrapperfileを読み込む
⓹　snmptrapperが読み込んだログを監視データとしてDBに登録

# 構築環境

- CentOS7
- Zabbix 4.0LTS

# 作業
【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')
```
###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-2 作成した空ファイルの権限を変更

```
# chown zabbix.zabbix /var/log/zabbix/snmptrap.log
```
## 10.各種再起動
### 10-1 rsyslog再起動

```
# systemctl restart rsyslog.service
```
### 10-2 snmptrapd起動

```
# systemctl start snmptrapd
```
# 設定確認（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/zabbix/snmptrap.log
Jun  5 10:48:58 monitor snmptrapd[1109]: NET-SNMP version 5.7.2
10:49:21 2020/06/05 ZBXTRAP 127.0.0.1
PDU INFO:
  notificationtype               TRAP
  version                        1
  receivedfrom                   UDP: [127.0.0.1]:33256->[127.0.0.1]:162
  errorstatus                    0
  messageid                      0
  community                      public
  transactionid                  1
  errorindex                     0
  requestid                      798136353
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側で受信したデータを検知できるようにテンプレートを作成していく。

14.テンプレートの作成
14-1 「設定」を押下
14-2 「テンプレート」を押下
14-3 「テンプレート作成」を押下