Zabbix4.0 をRHEL8 へインストール（仮）- SNMPTT設定もするよ

##0. 前提条件
- AWS EC2 を使用。Marketplace RHEL8 選択
- Mem 4GB (MariaDBに2GB ZabbixのValueCacheに1GB与える想定)
- パッケージは主にCentOSからとってますが自分で使うときは適宜変えてください
- ポートはSGで制御。環境に合わせて以下の穴開けてください。
 （http(80)/snmptrap(UDP 162)/zabbix-agent(10050)/zabbix-server(10051)）

※2020年2月現在 (OS/ソフトウェア側の変更には必ずしも追随しないっス！)

##1. 事前設定

####タイムゾーン設定

```
# timedatectl set-timezone Asia/Tokyo
```

####SELinux 無効化
※設定は任意。やらない場合は適宜ポリシー追加してください

```
# vi /etc/selinux/config
'---------------
SELINUX=enforcing
↓
SELINUX=disabled
'---------------
```

1回再起動

```
# reboot
```

####epelを使えるようにする

```
# dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf -y install wget 
```

```

# dnf -y install perl-Encode \
perl-MIME-Base64 \
perl-Time-Local \
perl-Math-BigRat \
perl-Math-BigInt-FastCalc \
mariadb
```

####net-snmp 古めのものを入れる
※net-snmp-perl の5.8.7 以降がまだないみたい。これが(仮)の所以

```
# cd /tmp
# wget http://repo.okay.com.mx/centos/8/x86_64/release/\
net-snmp-libs-5.8-7.el8.2.x86_64.rpm
# wget http://repo.okay.com.mx/centos/8/x86_64/\
release/net-snmp-agent-libs-5.8-7.el8.2.x86_64.rpm
# wget http://repo.okay.com.mx/centos/8/x86_64/\
release/net-snmp-5.8-7.el8.2.x86_64.rpm
# wget http://mirror.centos.org/centos/8/BaseOS/x86_64/os/Packages/\
lm_sensors-libs-3.4.0-20.20180522git70f7e08.el8.x86_64.rpm

# rpm -Uvh net-snmp-5.8-7.el8.2.x86_64.rpm \
net-snmp-agent-libs-5.8-7.el8.2.x86_64.rpm \
net-snmp-libs-5.8-7.el8.2.x86_64.rpm \
lm_sensors-libs-3.4.0-20.20180522git70f7e08.el8.x86_64.rpm

# wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/\
perl-IO-stringy-2.111-9.el8.noarch.rpm
# rpm -Uvh perl-IO-stringy-2.111-9.el8.noarch.rpm

# wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub/redhat/rhel/\
rhel-8-beta/appstream/aarch64/Packages/\
perl-JSON-2.97.001-2.el8.noarch.rpm
# rpm -Uvh perl-JSON-2.97.001-2.el8.noarch.rpm

# wget http://download-ib01.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/p/\
perl-Mail-Sender-0.903-7.el8.noarch.rpm
# wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/\
perl-Types-Serialiser-1.0-12.el8.noarch.rpm
# wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/Packages/\
perl-common-sense-3.7.4-8.el8.x86_64.rpm

# rpm -Uvh perl-Mail-Sender-0.903-7.el8.noarch.rpm \
perl-Types-Serialiser-1.0-12.el8.noarch.rpm \
perl-common-sense-3.7.4-8.el8.x86_64.rpm

# wget http://mirror.centos.org/centos/8/AppStream/x86_64/os/Packages/\
perl-JSON-PP-2.97.001-3.el8.noarch.rpm
# rpm -Uvh perl-JSON-PP-2.97.001-3.el8.noarch.rpm

# wget http://repo.okay.com.mx/centos/8/x86_64/release/\
net-snmp-perl-5.8-7.el8.2.x86_64.rpm
# rpm -Uvh net-snmp-perl-5.8-7.el8.2.x86_64.rpm

# wget http://mirror.centos.org/centos/8/PowerTools/x86_64/os/\
Packages/perl-Digest-SHA1-2.13-23.el8.x86_64.rpm
# rpm -Uvh perl-Digest-SHA1-2.13-23.el8.x86_64.rpm

# dnf -y install perl-Text-CSV \
perl-Text-Balanced \
perl-Config-IniFiles \
perl-Sys-Syslog \
perl-Digest-SHA \
perl-Net-SNMP

# wget http://repo.okay.com.mx/centos/8/x86_64/release/\
net-snmp-utils-5.8-7.el8.2.x86_64.rpm
# rpm -Uvh net-snmp-utils-5.8-7.el8.2.x86_64.rpm

# rm -fr *.rpm
```

##2. Zabbixと関連パッケージのインストール

```
# cd /tmp
# dnf -y install https://repo.zabbix.com/zabbix/4.0/rhel/8/x86_64/\
zabbix-release-4.0-2.el8.noarch.rpm

# dnf -y install zabbix-server-mysql \
zabbix-web-mysql \
zabbix-web-japanese \
zabbix-agent \
zabbix-get \
mariadb-server
```

##3. MariaDB設定

#### MariaDB構成ファイルの編集

```
# cd /etc/my.cnf.d
# cp -p mariadb-server.cnf mariadb-server.cnf.org
# vi mariadb-server.cnf
以下の様に編集
'---------------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
↓↓追記
character-set-server=utf8
skip-character-set-client-handshake
innodb_buffer_pool_size = XXG		←大体メモリの半分
innodb_log_files_in_group = 2
innodb_log_file_size = 128M
max_allowed_packet=16M
innodb_file_per_table
innodb_flush_log_at_trx_commit = 2
innodb_strict_mode = 0
↑↑ここまで
'-------------------

# cp -p mysql-clients.cnf mysql-clients.cnf.org
# vi mysql-clients.cnf
'-------------------
↓↓以下追記
[mysqldump]
socket=/var/lib/mysql/mysql.sock
max_allowed_packet=16M
'-------------------

# cp -p client.cnf client.cnf.org
# vi client.cnf
'-------------------
↓↓以下追記
[client]
socket=/var/lib/mysql/mysql.sock
'-------------------
```

■MariaDB起動 及び 自動起動設定

```
# systemctl start mariadb && systemctl enable mariadb
```
#### Zabbix用DB設定

■ Zabbix用DBの作成

```
# mysql -uroot -e'create database zabbix character set utf8;'
```
※2020年 2月 collationの設定 は見送り。初期ログイン不可問題未解決の為
※大文字/小文字を区別できない問題が発生する可能性ある為、utf8mb4 の使用も見送り

■ DBアカウント作成

```
# mysql -uroot -e'grant all privileges on zabbix.* to zabbix@localhost identified by "<zabbixDBのパスワード>";'
# mysql -uroot -e'flush privileges;'
```

■ Zabbixの初期DBをインポート

```
# zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -p<zabbixDBのパスワード> zabbix
```

##4. httpd基本設定 apache起動

■httpd.conf 編集

```
# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf.org
# vi httpd.conf

以下を追記
/etc/httpd/conf/httpd.conf
-----------
# 以下編集
ServerName <ホスト名FQDN>:80

# 以下好みで追記
ServerTokens Prod
ServerSignature Off
TraceEnable off
-----------
```

##5. snmptrapd設定

■ snmptrapd.conf 編集

```
# cd /etc/snmp
# vi snmptrapd.conf
以下を追記
---------
authCommunity log,execute,net <CommunityName>
perl do "/usr/sbin/snmptthandler-embedded";
---------
```

■ snmptrapd起動 及び 自動起動設定

```
# systemctl start snmptrapd && systemctl enable snmptrapd
```

##6. zabbix_server設定

#### zabbix_server.conf 編集

※設定内容はご自身の環境に合わせて適宜変更を

```
# cd /etc/zabbix
# cp -p zabbix_server.conf zabbix_server.conf.org40
# vi zabbix_server.conf
------------
# DBPassword=
↓
DBPassword=<zabbixDBのパスワード>

# DBSocket=
↓
DBSocket=/var/lib/mysql/mysql.sock

# SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
↓
SNMPTrapperFile=/var/log/snmptt/snmptt.log

# StartSNMPTrapper=0
↓
StartSNMPTrapper=1

#ListenIP=0.0.0.0
↓
ListenIP=0.0.0.0

# ValueCacheSize=8M
↓
ValueCacheSize=XXG		←環境に合わせて割り当て

#Timeout=4	←コメントアウトし変更
↓
Timeout=30
------------
※デフォルトが/var/runなので/run に変更するのは見送る

```

■ zabbix_server起動 及び 自動起動設定

```
# systemctl start zabbix-server && systemctl enable zabbix-server
```


##7. 管理画面の設定

#### zabbix web フロント 設定追加

■PHP設定追加

```

# cd /etc/php-fpm.d
# vi zabbix.conf

'-----------------
[zabbix]
user = apache
group = apache

listen = /run/php-fpm/zabbix.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session

php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 10M  ←10Mくらいにしとく
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
; php_value[date.timezone] = Europe/Riga　　← アンコメントし、timezone 変更
↓
php_value[date.timezone] = Asia/Tokyo

'-------------------
```

■zabbix.conf.phpの作成
初期設定ウィザードを出したくないので以下をべた貼り

```php5

# cd /etc/zabbix/web
# vi zabbix.conf.php

------------------------------------
<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = 'localhost';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = '<zabbixDBのパスワード>';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';

$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
?>
------------------------------------
```

■ファイル権限変更

```
# chown apache:apache zabbix.conf.php
```

■apache と php-fpmの起動

```
# systemctl start httpd && systemctl enable httpd
# systemctl start php-fpm && systemctl enable php-fpm
```

##8. SNMPTT 連携設定

■SNMPTT 用に不足してるパッケージを入れる

```
# dnf -y install perl-5.26.3-416.el8
```

■SNMPTT 展開と初期設定

```
# cd /usr/src/
# wget https://sourceforge.net/projects/snmptt/files/snmptt/snmptt_1.4/snmptt_1.4.tgz/download
# tar xvfz download
# rm -fr download
# useradd -s /sbin/nologin snmptt
# chown -R snmptt. snmptt_1.4
# cd snmptt_1.4

# cp snmptt snmptthandler snmptthandler-embedded snmpttconvertmib /usr/sbin
# cp snmptt.ini /etc/snmp/

# chmod 755 /usr/sbin/snmptt
# chmod 755 /usr/sbin/snmptthandler
# chmod 755 /usr/sbin/snmptthandler-embedded
# chmod 755 /usr/sbin/snmpttconvertmib

# mkdir /var/log/snmptt
# chown snmptt:snmptt /var/log/snmptt
# mkdir /var/spool/snmptt/
# chown snmptt:snmptt /var/spool/snmptt/
```

■systemctl マニュフェストファイルのサンプル配布と反映

```
# cd /usr/lib/systemd/system
# touch snmptt.service
# vi snmptt.service
---- 以下な感じで貼りつけ ---------------  
[Unit]
Description=SNMP Trap Translator
Wants=network-online.target
After=syslog.target network-online.target

[Service]
Environment="CONFIG=/etc/snmp/snmptt.ini"
ExecStart=/usr/sbin/snmptt -c ${CONFIG}
ExecReload=/bin/kill -HUP ${MAINPID}
Type=forking
PIDFile=/var/run/snmptt.pid
Restart=always
TimeoutStopSec=320s
KillMode=process
RestartSec=5s

[Install]
WantedBy=multi-user.target
----------------------------------------

# systemctl daemon-reload
```

■ logrotate 用ファイルも編集しておく

```
# cd /usr/src/snmptt_1.4
# cp snmptt.logrotate /etc/logrotate.d/snmptt
# vi /etc/logrotate.d/snmptt
'------------------
/var/log/snmptt/snmptt*.log /var/log/snmptt/snmptthandler.debug {
    weekly
    notifempty
    missingok
}

/var/log/snmptt/snmptt.debug {
    weekly
    notifempty
    missingok
    postrotate
        /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true
        ↓
        /usr/bin/systemctl/snmptt reload >/dev/null 2>/dev/null
    endscript
}
'------------------
```

■snmptt.ini を編集

```
# cd /etc/snmp/
# vi snmptt.ini

---- 以下の様に編集 ※自身の環境に合わせてカスタマイズしてね -----------
mode = standalone
↓
mode = daemon

net_snmp_perl_enable = 0
↓
net_snmp_perl_enable = 1

net_snmp_perl_best_guess = 0
↓ 
net_snmp_perl_best_guess = 2

translate_log_trap_oid = 0
↓
translate_log_trap_oid = 1

#date_time_format =
↓ 
date_time_format = %Y/%m/%d %H:%M:%S

#syslog_enable = 1
syslog_enable = 0
---------------------------------------------------------------
```

■Mib変換ファイルの保管場所の設定

```
# cd /etc/snmp
# mkdir snmptt_mibs
# cd snmptt_mibs/
# vi snmptt.conf
'-------------------
EVENT general .* "LOGONLY" Normal
FORMAT ZBXTRAP $aA $ar ReceivedUnknownTrap $-*
'-------------------

# cd ..
# vi snmptt.ini
------------
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
END
↓
snmptt_conf_files = <<END
/etc/snmp/snmptt_mibs/snmptt.conf
END
------------
```

■ログ出力準備をする

```
# cd /var/log/snmptt/
# touch snmptt.log
# chown snmptt:snmptt snmptt.log
```

■snmpttサービスを起動 

```
# systemctl start snmptt && systemctl enable snmptt
```

##9. 再度、snmptrap設定
■snmptrapdの起動オプション設定を変更

```
# cd /etc/sysconfig/
# vi snmptrapd
 
---- 以下の様に編集 ---------------------------------------------------- 
OPTIONS="-m +ALL -On"
------------------------------------------------------------------------ 
```

■snmptrapd / snmpttサービスを再起動

```
# systemctl restart snmptrapd
# systemctl restart snmptt
```

##おしまい
本手順を元にした自動構築用のAnsible Playbook 書いてます。
https://github.com/Magoshin/Ansible-Playbook/tree/master/zabbix/roles/zabbix-server_ver40_rhel8