サーバの監視を始めるために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)
また、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対応は後でやります)
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の初期設定を進めていきます。
Time zone for PHP is not set (configuration parameter "date.timezone").
Zabbixの画面でこのメッセージが出ました。 PHPのタイムゾーンの設定が必要みたいです。
php-fpmの設定をAsia/Tokyo
に変更します。
php_value[date.timezone] = Asia/Tokyo
サーバとMySQLの設定
▼ ここでしたMySQLの設定を記入します。
▼ ホスト名とポートを設定する(これであっているか自信ない)。
進めていくと設定ファイルを吐き出そうとします。
ディレクトリの権限がないと保存できず進めないため/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
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
再起動。