schedule2021-01-17

Zabbixのインストール@CentOS7

サーバの監視を始めるためにZabbixを導入しました。 Zabbix + CentOS7 + Nginx + MySQLの構成です。 意外とつまずいたので手順を残す。

ZabbixについてはZabbixのコンセプトを読みました。

Table of Contents

環境とバージョン

zabbixダウンロードページでバージョンと環境を選ぶとそれに沿ったインストール手順を示してくれます。

以前作ったさくらのVPSの環境に合わせて選択しました。

  • ZABBIXバージョン: 5.0 LTS
  • OSディストリビューション: CentOS
  • OSバージョン: 7
  • データベース: MySQL (8.0)
  • WEB SERVER: Nnginx (1.19.6)

ver

また、zabbix-server(管理画面)はPHPで動くため rh-php72-php-fpm (php v7.2)もインストールされます。

MySQLを準備する

MySQLがない場合は手戻りが発生するため先にインストールしておきます。 バージョンはMySQL 8.0です。

前にブログに書いたのでそちらの手順でインストールします。 後でZabbix用のDBとユーザを作ります。

公式ではこちらでyumリポジトリからのインストールする手順が載ってます。

※ 先にZabbixのインストールを進めていると、MariaDBを削除した際にzabbix-server-mysqlが消されます。一緒にpostfixも消えた。

Removed:
  mariadb-libs.x86_64 1:5.5.68-1.el7

Dependency Removed:
  postfix.x86_64 2:2.10.1-9.el7         zabbix-server-mysql.x86_64 0:5.0.7-1.el7

消しちゃった場合は▼でインストールし直すことができます。

$ sudo yum install -y zabbix-server-mysql postfix

Zabbix インストール

Zabbixをインストールします。 サーバにSSHしてコマンドを実行していきます。

a. Install Zabbix repository

RPMのパッケージをアップグレードします。 そのあとキャシュを消します。

# RPMのパッケージをアップグレード
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
Retrieving https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
warning: /var/tmp/rpm-tmp.jVb3gM: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-release-5.0-1.el7         ################################# [100%]

# キャシュクリーン
$ sudo yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: base epel extras nginx-mainline nginx-stable updates zabbix
              : zabbix-non-supported
Cleaning up list of fastest mirrors
オプション 説明
U パッケージをアップグレードする
v 情報表示を増やす
h インストール時の経過を「#」マークで表示する

b. Install Zabbix server and agent

Zabbixサーバとエージェントをインストールします。

$ sudo yum install zabbix-server-mysql zabbix-agent -y

c. Install Zabbix frontend

Zabbixの管理画面をインストールするためにRed Hat Software Collectionsを有効化します。

$ sudo yum install centos-release-scl

/etc/yum.repos.d/zabbix.repoを編集してzabbix-frontendのリポジトリを有効化します。

$ sudo vi /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...

zabbix-frontendのパッケージをインストールする。

$ sudo yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl

d. Create initial database

Zabbix用のデータベースとユーザを作成します。 ユーザはローカルホストからのみアクセス出来るようにする。

$ mysql -uroot -p
password
# データベースを作成して文字コードをUTF-8にセット
mysql> create database zabbix character set utf8 collate utf8_bin;
# ユーザを追加
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;

# zabbix ユーザが追加できた
mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| zabbix           | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql> quit;

Zabbixサーバーホストで初期スキーマとデータをインポートします。 新しく作成したパスワードを入力するように求められます。

$ sudo zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

e. Configure the database for Zabbix server

Zabbixサーバー用にデータベースを設定します。 ファイル/etc/zabbix/zabbix_server.confを編集する。

$ sudo vi /etc/zabbix/zabbix_server.conf
...
# パスワードをセット
DBPassword=your-password

f. Configure PHP for Zabbix frontend

Zabbixフロントエンドをインストールする中でNginxとPHP-fpmもインストールされてます。 今回はNginxはインストール済のモノを使うため、その設定をします。 php-fpmはそのまま利用します。

# zabbix.confをインストール済のNginxのディレクトリにコピー
$ sudo cp /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf /etc/nginx/conf.d/
# ホスト名にリネーム
$ sudo mv /etc/nginx/conf.d/zabbix.conf /etc/nginx/conf.d/zabbix.suzu6.net.conf 
$ ls /etc/nginx/conf.d/
default.conf     nuxt-content-sample.suzu6.net.conf  www.suzu6.net.conf
https.conf.back  suzu6.net.conf                      zabbix.suzu6.net.conf

# 設定を編集する
$ sudo vi etc/nginx/conf.d/zabbix.suzu6.net.conf
server {
#        listen          80;
        listen          80;
#        server_name     example.com;
        server_name     zabbix.suzu6.net;

私のルールとしてファイル名をホスト名で管理しているので、そのようにファイルをリネームした。 設定はポートとホスト名を変更しました。(SSL対応は後でやります)

/etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
server {
#        listen          80;
        listen          80;
#        server_name     example.com;
        server_name     zabbix.suzu6.net;

        root    /usr/share/zabbix;

        index   index.php;

        location = /favicon.ico {
                log_not_found   off;
        }

        location / {
                try_files       $uri $uri/ =404;
        }

        location /assets {
                access_log      off;
                expires         10d;
        }

        location ~ /\.ht {
                deny            all;
        }

        location ~ /(api\/|conf[^\.]|include|locale) {
                deny            all;
                return          404;
        }

        location ~ [^/]\.php(/|$) {
                fastcgi_pass    unix:/var/opt/rh/rh-php72/run/php-fpm/zabbix.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index   index.php;

                fastcgi_param   DOCUMENT_ROOT   /usr/share/zabbix;
                fastcgi_param   SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;        
                fastcgi_param   PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;        

                include fastcgi_params;
                fastcgi_param   QUERY_STRING    $query_string;
                fastcgi_param   REQUEST_METHOD  $request_method;
                fastcgi_param   CONTENT_TYPE    $content_type;
                fastcgi_param   CONTENT_LENGTH  $content_length;

                fastcgi_intercept_errors        on;
                fastcgi_ignore_client_abort     off;
                fastcgi_connect_timeout         60;
                fastcgi_send_timeout            180;
                fastcgi_read_timeout            180;
                fastcgi_buffer_size             128k;
                fastcgi_buffers                 4 256k;
                fastcgi_busy_buffers_size       256k;
                fastcgi_temp_file_write_size    256k;
        }
}

Zabbixを起動して自動起動も有効化する。

$ sudo systemctl restart zabbix-server zabbix-agent nginx rh-php72-php-fpm
$ sudo systemctl enable zabbix-server zabbix-agent nginx rh-php72-php-fpm

DNSの設定

zabbixがみられるように設定しにいきます。 Route53にドメインがありzabbix.suzu6.net としました。

Permission Errorを解決する

ここまで進めてZabbixのHTTPにアクセスすると502 Bad Gatewayが出ました。 出てない方は次へ進めてください。

このエラーの解決方法はこちらに詳しく書きました。 ここではコマンドと設定だけ載せます。

zabbix.confのユーザをnginxに変更します。

$ sudo vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
[zabbix]
# user = apache
# group = apache
user = nginx
group = nginx

listen = /var/opt/rh/rh-php72/run/php-fpm/zabbix.sock
# listen.acl_users = apache
listen.acl_users = nginx
listen.allowed_clients = 127.0.0.1

▼PHPの権限を変更します。

# 実行権限を与える
$ sudo chmod 755 -R /usr/share/zabbix
# Nginxユーザを設定
$ sudo chown -R root:nginx /usr/share/zabbix

# ライブラリもNginxユーザを設定
$ sudo chown -R root:nginx /var/opt/rh/rh-php72/lib/php/*

Zabbixを再起動する。

$ sudo systemctl restart zabbix-server zabbix-agent nginx rh-php72-php-fpm

Welcome Zabbixがでた!会いたかったよZabbix!

zabbix

Zabbixの初期設定

Zabbixの初期設定を進めていきます。

Time zone for PHP is not set (configuration parameter "date.timezone").

Zabbixの画面でこのメッセージが出ました。 PHPのタイムゾーンの設定が必要みたいです。

php-fpmの設定をAsia/Tokyoに変更します。

/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Tokyo

サーバとMySQLの設定

▼ ここでしたMySQLの設定を記入します。 mysql

▼ ホスト名とポートを設定する(これであっているか自信ない)。 server

進めていくと設定ファイルを吐き出そうとします。 ディレクトリの権限がないと保存できず進めないため/etc/zabbix/web/zabbix.conf.phpが保存できるよう権限を変更する。

その後セットアップが進んでログイン画面に行きます。

  • 初期ユーザ: Admin
  • 初期パスワード: zabbix

ログイン後は「管理」→「ユーザ」からパスワードと言語の変更をしました。

certbotでSSL化する(オプション)

certbotをインストールしていたのでこれでSSL対応します。

certbot --nginxで追加する。

# certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: suzu6.net
2: nuxt-content-sample.suzu6.net
3: www.suzu6.net
4: zabbix.suzu6.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input  
blank to select all options shown (Enter 'c' to cancel): 4
Requesting a certificate for zabbix.suzu6.net
Performing the following challenges:
http-01 challenge for zabbix.suzu6.net
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/zabbix.suzu6.net.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/zabbix.suzu6.net.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
Congratulations! You have successfully enabled https://zabbix.suzu6.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/zabbix.suzu6.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/zabbix.suzu6.net/privkey.pem
   Your certificate will expire on 2021-04-16. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
/etc/nginx/conf.d/zabbix.suzu6.net.conf
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/zabbix.suzu6.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/zabbix.suzu6.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

systemctl restart nginx再起動。