Zabbix 2.4 の構築から監視、メールの設定まで

#はじめに
諸事情あり、Zabbixの2.4.6を構築して一通りの監視業務を行おうということになった

2.4.6はすでにサポートが切れているバージョンであり、
今更誰得な情報なのかというところもあるが、
自分の作業記録と、
いつかの誰かの役に立てればと思い記録する

#使用するソフト
CentOS 6.8 :Zabbixを載せる用

Zabbix server 2.4.6: 監視用サーバー

Zabbix agent 2.4.6: 被監視用クライアント

Postfix 2.6.6 メール送信用サーバー

PHP 5.3.3

MySQL 5.1

#必要なパッケージのダウンロード
~~`Zabbix 2.4.6`はZabbix公式のページから取得することはすでにできない~~
※コメントをいただいて修正
インストールに必要なパッケージは公式リポジトリからも取得可能
[公式リポジトリ](http://repo.zabbix.com/zabbix/2.4/)

今回はZabbix-serverについては、Zabbixが用意しているソースをダウンロードし、
Zabbix-agentについてはリポジトリからインストールというやり方でやっていく

まずソースを取得するには[SourceForge.net](https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.6/)などからダウンロードまたはwgetする

```
zabbix-2.4.6.tar.gz
```

ダウンロードしたパッケージをCentOS上の好きなところに置き解凍する

```
$ tar -zxvf zabbix-2.4.6.tar.gz
```

#Zabbixユーザーの作成
```
$ groupadd zabbix
$ useradd -g zabbix zabbix
```
#Zabbix構築のための必要なソフトのインストール
Zabbixを構築するにはいくつか追加のインストールが必要

```
##gcc
$ yum -y groupinstall "Development tools"

##mysql
$ yum -y install mysql-server mysql-devel
$ chkconfig mysqld on
$ service mysqld start

##apache
$ yum -y install httpd php
$ chkconfig httpd on
$ service httpd start

##zabbixインストール時に利用
$ yum -y install libxml2 libxml2-devel net-snmp net-snmp-devel curl libcurl libcurl-devel
```

また、セキュリティはガバガバになるが、
SELINUXとfirewallを無効化する

このあたりは実際の運用にあわせて細かく設定を加えていくこと
今回はとりあえず動かすというのを目標にしている

```
$ iptables -F
$ setenforce 0
```

#Zabbix用データベースの作成
`zabbix-2.4.6.tar.gz`を解凍してできたディレクトリの中に`database`というディレクトリがあるはずで、
その中のmysql用のクエリを流し込む

```
##database作成
$mysql
mysql> create database zabbix character set utf8 collate utf8_bin;

$ mysql zabbix < ~/zabbix-2.4.6/database/mysql/schema.sql
$ mysql zabbix < ~/zabbix-2.4.6/database/mysql/images.sql
$ mysql zabbix < ~/zabbix-2.4.6/database/mysql/data.sql
```

#インストールファイルの作成
準備ができたらZabbixのインストールファイルを作成する

コマンドは`zabbix-2.4.6`直下のパスで行う

『./configure』のコマンドで何かしらパッケージが足りないといわれた際は、
参照先のページやgoogle先生に確認する

```
$ ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2

$ make install
```

#設定ファイルの確認
今回は内容を編集はしないが、ファイルの場所だけ確認しておく

```
##zabbiz serverファイル
/usr/local/etc/zabbix_server.conf

##zabbiz agentファイル
/usr/local/etc/zabbix_agent.conf
```

#Zabbixサービスの開始
今回のバージョンの場合は、serviceコマンドで操作ができないようである
サービスの開始は以下のコマンドのみで可能

コマンドの実行結果は何もなし

```
$ zabbix_server

$ zabbix_agentd
```

#Web用ファイルの用意
make installした際にできたファイルをWeb用パスに配置する

```
$ mkdir /var/www/html/zabbix
$ cd ~/zabbix-2.4.6/frontends/php/
$ cp -a . /var/www/html/zabbix/
$ chown -R apache:apache /var/www/html/zabbix/
```

Web画面を見るためにhttp://<サーバーのアドレス>/zabbixへアクセスする

#web画面にてログイン
スクショは割愛

ログイン途中でphpの設定が不備といわれた際は、
php用の設定をしてhttpdサービスの再起動

```
$ vi /var/www/html/zabbix/.htaccess

php_value post_max_size 16M
php_value max_execution_time 300
php_value max_input_time 300
php_value date.timezone Asia/Tokyo

$vi /etc/httpd/conf/httpd.conf
##ファイル内のAllowOverride部分をすべてAllに変える

##必要なソフトをインストール
$ yum -y install php-mysql php-bcmath php-mbstring gd gd-devel php-gd php-xml

$ service httpd restart
```

順調に進んだら
`User:Admin`
`pass:zabbix`
でログインする

ちなみに自分がやったときはZabbixサーバーのログは/tmp/以下に作られていた

#Zabbixのクライアントを追加
##Zabbix agentのインストール
監視対象となるマシンにZabbix agentをインストールする

```
$ rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-2.4.6-1.el6.x86_64.rpm
$ rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-agent-2.4.6-1.el6.x86_64.rpm

$ yum -y install zabbix-agent

##agentの設定を変更

$ vi /etc/zabbix/zabbix_agentd.conf

EnableRemotecommands = 1

Server = [サーバーのIPアドレス]

ListenPort = 10050

ServerActive = [サーバーのIPアドレス]

Hostname = [任意の名前]

AllowRoot = 1
```

続いてfirewallの設定

```
vi /etc/sysconfig/iptables \\下記追加

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10050 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10051 -j ACCEPT
```

agentのサービス開始

```
$ service iptables restart

$ service zabbix-agent start
$ chkconfig zabbix-agent on
```

##Zabbix serverに登録

Webコンソール画面から[設定]→[ホストグループ]にて[ホストグループの作成]を選択
`グループ名：任意`

[ホスト]ページにて、[ホストの作成]を選択
`名前：任意(agent側の設定と合わせる)`、`グループ：先ほど作ったグループを選択`、`エージェントのインターフェイス：該当のエージェントのアドレスを指定`

ステータスが有効になっていることや、エラーなどが出ていないことを確認

#メール設定
Zabbixに付き物のアラートメールを飛ばせるようにする

イメージとしてはPostfixでGamilのsmtpサーバーを利用し、
Zabbixでメールを飛ばすときにlocalhostのメールサーバーを使うようにする

##Gmailの設定
Zabbix専用のGmailアカウントを作ってもいいし、
普段自分の使ってるアカウントを使ってもいい

アカウントのセキュリティは下がるから、運用の上では注意して

メール送信に使用するGoogleアカウントのセキュリティページで、
『安全性の低いアプリのアクセス』をオンにする

![WS000018.JPG](https://qiita-image-store.s3.amazonaws.com/0/259343/19c85e4e-91e4-83c1-6eaa-b93e89e73bdd.jpeg)

#Postfixの設定
smtp認証用のソフトをインストール

```
$ yum -y install cyrus-sasl-plain cyrus-sasl-md5
```

設定ファイルを書き換える

```
$ vi /etc/postfix/main.cf

##デフォルトで書かれている部分を書き換える
myhostname = zabbix.example.com

mydomain = example.com

myorigin = $mydomain

inet_protocols = ipv4

mynetworks = 127.0.0.0/8

relayhost = [smtp.gmail.com]:587

##新規に追記
smtp_sasl_auth_enable  = yes
smtp_sasl_password_maps = hash:/etc/postfix/gmail
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_loglevel = 1
```

上記で追記したパスワードファイルを作成する

```
$ vi /etc/postfix/gmail

[smtp.gmail.com]:587 hogefuga@example.com:password
```

パスワードファイルを適用

```
$ postmap /etc/postfix/gmail
```

サービスの停止、開始

```
$ /etc/init.d/sendmail stop
$ chkconfig sendmail off
$ chkconfig postfix on
$ /etc/init.d/postfix restart
```

この段階でメールを飛ばすだけならできるはず

```
$ sendmail -f zabbix.example.com(送信者) -t hogefuga@example.com(受信者)
To: hogefuga@example.com　(あて先)
Subject: test (タイトル)
testtest (本文)
. (.で入力終了)
```

ちなみにメールのログには、Gmailのsmtpに認証できました、とかいうようなメッセージがあるはず

```
$ tail /var/log/maillog

Apr 10 09:33:58 zabbix postfix/smtp[2521]: setting up TLS connection to smtp.gmail.com[64.233.187.108]:587
Apr 10 09:33:58 zabbix postfix/smtp[2521]: certificate verification failed for smtp.gmail.com[64.233.187.108]:587: untrusted issuer /OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign
Apr 10 09:33:58 zabbix postfix/smtp[2521]: Untrusted TLS connection established to smtp.gmail.com[64.233.187.108]:587: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
```

#Zabbixの設定
Webコンソール画面上で[管理]→[メディアタイプ]→[Email]と移動する

下記のように自分のメールサーバーを見るように設定

```
名前：Email
タイプ：メール
SMTPサーバー：127.0.0.1
SMTP helo：127.0.0.1
送信元メールアドレス：zabbix.example.com
```

[管理]→[ユーザー]→[adminユーザー]に移動し、
メディアタブ内で「追加」を選択し、以下を設定「追加」で

```
タイプ：Email
送信先：[受信したいアドレス]
```

[設定]→[アクション]に移動し、「アクションの作成」を選択
以下のように設定

```
##アクションタブ
名前：任意
件名・メッセージを好きなように
有効：オン

##アクションの実行内容
[新規]を選択し、
ユーザー：追加で先ほどのユーザーを選択
次のメディアのみ使用：Email

最後に[追加]を選択
```

これで何か異常を検知したらメールを飛ばすはず

#監視の設定
ひとまず簡単にPingを使って死活監視をしてみる

Zabbixでping監視をするためにはfpingのインストールが必要

```
$ yum -y install epel-release
$ yum -y install fping
```

[設定]→[テンプレート]から[テンプレートの作成]を選択、以下を設定
`テンプレート名：ping`、`ホスト：任意のユーザー追加`

[アイテム]ページにて以下を設定
`名前：任意`、`タイプ：シンプルチェック`、`キー：icmpping[,5,5000,64,4000]`、`値のマッピングの使用：Service state`

[トリガー]ページにて以下を設定
`名前：ping`、`条件式：{ping-monitor:icmpping[,5,5000,64,4000].last()}=0`、`深刻度：任意`

これで完了

エージェントクライアントに対してあえて
ネットワークを切ったりしてエラーを起こさせるとメールが飛んでくるはず


#はまったところ
###Zabbixをインストールした後にWeb画面が真っ白である
mysqlの設定や/var/www/html/zabbix/のファイルなどを見返してみたが、
結局firewallをすべて無効化したら表示された

通常運用の時にはしっかりポートの設定をしておいたほうがいい

###サーバーからメールを飛ばすことはできるが、Zabbixエラー検知時にメールが飛ばない
メールアクションのログを確認した
コンソール画面上の[監視]→[イベント]→発生しているイベントの『時間』(アクション項目でエラーになっていた)→[message actions]の部分でエラー内容の確認 

またサーバーのログでも確認

両方共に以下のメッセージ出力

```
10493:20190410:101501.543 cannot connect to SMTP server "localhost": cannot connect to [[localhost]:25]: [111] Connection refused
```

これはIPv4とIPv6にかかわるエラー

最初はメディアタイプのEmailページで、

`SMTPサーバー：localhost`
`SMTP helo：localhost`

と設定しており、メールサーバー接続先が間違えていたよう、
IPv6を無効化するという解決方法もあるようだが、
今回は明示的にアドレス指定して解決となった

#参考ページ
[zabbix Document](https://www.zabbix.com/documentation/2.4/manual/installation/install)
[Zabbixをインストールして簡単に動作確認を行う](https://qiita.com/u6k/items/4e69df20d756f4159dea)
[PostfixからGmailへリレーする方法と受信したメールがSOFTFAILになる対策](https://mseeeen.msen.jp/how-to-relay-from-postfix-to-gmail/)
[Zabbixでメールを送信出来るようになるまで](http://blog.kzfmix.com/entry/1366712071)