Zabbixサーバを構築してみた
はじめに
前回作成したwordpressサーバーを監視するために、Zabbixサーバーを構築してみたので、その振り返りとなります。
これから構築する人の参考になれば嬉しいです。
構成図

事前準備
WordPressサーバーの作成を実施済みであること。
下記を参考にして下さい。
Zabbixサーバーの構築
1.作業用ユーザー作成
zabbixの導入に向けて作業をするユーザーを作成します。
workuser作成
$ sudo useradd -m -s /bin/bash workuser
$ cat /etc/passwd |grep workuser
workuserユーザロック状態を確認
$ sudo passwd -S workuser
$ sudo passwd workuser
NOPASSWORD設定
$ sudo EDITOR=vim visudo
以下を追加:
workuser ALL=(ALL) NOPASSWD:ALL
日本語ロケール追加
$ locale -a | grep jp_JP #もし導入済みであった場合、以下作業は不要です。
$ sudo apt update
$ sudo apt install -y language-pack-ja
$ sudo locale-gen ja_JP.UTF-8
2.SSH設定
ローカル端末 → Zabbixサーバー 間でSSH接続できるように設定します。
SSH鍵の作成
以下作業は、ローカル端末で実施して下さい。
$ ssh-keygen -t -rsa
SSH設定ファイルの修正
以下作業は、ローカル端末で実施して下さい。
$ sudo su - workuser
$ vi ~/.ssh/config
以下を追記:
Host wordpress
Hostname 192.168.50.8
user workuser
Port 22
IdentityFile ~/.ssh/id_rsa
sshd_configの修正
以下作業は、zabbixサーバーで実施して下さい。
$ sudo vi /etc/ssh/sshd_config
以下に修正:
Port 22
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
公開鍵の登録
以下作業は、zabbixサーバーで実施して下さい。
$ sudo su - workuser
$ mkdir -m 700 ~/.ssh
$ vi ~/.ssh/authorized_keys
ホスト側で作成したid_rsa.pubの内容を貼り付ける。
$ chmod 600 ~/.ssh/authorized_keys
設定反映
$ sudo systemctl restart sshd
3.HTTPS化の準備
mkcertを用いて、WordPressサーバーをHTTPS化します。
この記事ではmkcertにの使い方は解説しません。
下の記事を参考に、HTTPS化の準備を行って下さい。
4.前提パッケージのインストール
Zabbixを動かすためには、いくつかの前提パッケージが必要です。
詳細は公式ドキュメントを参照してください。
今回は、Webブラウザにnginx、DBにmysqlを利用することとします。
nginxのインストール
ZabbixのWebインターフェースを使うために、nginxをインストールします。
$ sudo apt update
$ sudo apt install -y nginx
$ sudo systemctl status nginx
nginxの設定ファイルを修正します。
$ sudo vi /etc/nginx/nginx.conf
以下に修正:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
include /etc/nginx/mime.types;
log_format custom_log "[nginx] time:$time_iso8601\t"
"server_addr:$server_addr\t"
"host:$host\t"
"method:$request_method\t"
"reqsize:$request_length\t"
"uri:$request_uri\t"
"query:$query_string\t"
"status:$status\t"
"size:$body_bytes_sent\t"
"referer:$http_referer\t"
"ua:$http_user_agent\t"
"forwardedfor:$http_x_forwarded_for\t"
"reqtime:$request_time\t"
"apptime:$upstream_response_time";
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
}
SSL証明書、秘密鍵を配置します。
sudo mkdir -m 700 /etc/nginx/ssl
sudo vi /etc/nginx/ssl/zabbix.techubull.cloud-key.pem
/etc/nginx/ssl/zabbix.techubull.cloud-key.pemに「3.HTTPS化の事前準備」で作成した秘密鍵の内容を記載して下さい。
sudo chmod 600 /etc/nginx/ssl/zabbix.techubull.cloud-key.pem
sudo vi /etc/nginx/ssl/zabbix.techubull.cloud.pem
/etc/nginx/ssl/zabbix.techubull.cloud.pemに「3.HTTPS化の事前準備」で作成したサーバー証明書の内容を記載して下さい。
php8.3の導入
ZabbixのWebインターフェースを動かすためにPHPと関連モジュールをインストールします。
$ sudo apt install -y software-properties-common
$ sudo add-apt-repository ppa:ondrej/php
$ sudo apt update
$ sudo apt install -y \
php8.3 php8.3-fpm php8.3-gd php8.3-bcmath php8.3-ctype \
php8.3-xml php8.3-xmlreader php8.3-xmlwriter \
php8.3-sockets php8.3-mbstring php8.3-gettext php8.3-mysql
$ sudo systemctl status php8.3-fpm
mysql8.0の導入
Zabbixのデータを保存するためにMySQLをインストールします。
$ sudo apt install -y mysql-server
$ sudo systemctl status mysql
Zabbixインストール
ダウンロードページから自分の環境にあったものを選択してインストールします。
私の使用PCがMacであるため、ubuntu(arm64)として以降は進めます。
rootユーザ移行
管理者権限で作業するため、rootシェルに移行します。
$ sudo -s
リポジトリの追加
Zabbixの公式リポジトリを追加します。
# wget https://repo.zabbix.com/zabbix/6.0/ubuntu-arm64/pool/main/z/zabbix-release/zabbix-release_latest_6.0+ubuntu22.04_all.deb
# dpkg -i zabbix-release_latest_6.0+ubuntu22.04_all.deb
# apt update
Zabbixインストール
サーバー、フロントエンド、エージェントをインストールします。
# apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
データベースの作成
Zabbixが利用するデータベースを作成します。
# mysql
mysql> alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password!1234';
mysql> FLUSH PRIVILEGES;
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'localhost' identified by 'Password!1234';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
初期スキーマのインポート
Zabbixが利用するテーブルやデータをインポートします。
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
Password!1234
設定の後処理
一時的に有効化したlog_bin_trust_function_creatorsを元に戻します。
# mysql -uroot -p
Password!1234
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
/etc/zabbix/zabbix_server.confの修正
zabbixサーバの設定を変更します。
# vi /etc/zabbix/zabbix_server.conf
以下に修正:
# 105行目 : DB 名確認
DBName=zabbix
# 121行目 : DB ユーザー名確認
DBUser=zabbix
# 130行目 : DB ユーザーのパスワードを追記
DBPassword=Password!1234
/etc/zabbix/nginx.confの修正
$ vi /etc/zabbix/nginx.conf
以下に修正:
server {
listen 80;
server_name zabbix.techbull.cloud;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name zabbix.techbull.cloud;
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 /vendor {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/run/php/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;
}
access_log /var/log/nginx/zabbix.techbull.cloud.log custom_log;
error_log /var/log/nginx/zabbix.techbull.cloud.error.log;
ssl_certificate /etc/nginx/ssl/zabbix.techbull.cloud.pem;
ssl_certificate_key /etc/nginx/ssl/zabbix.techbull.cloud-key.pem;
}
/etc/php/8.3/fpm/php.iniの修正
# vi /etc/php/8.3/fpm/php.ini
以下に修正:
# 419行目 : スクリプト実行最大時間
max_execution_time = 300
# 429行目 : 入力データ解析時間
max_input_time = 300
# 713行目 : POST データ最大サイズ
post_max_size = 16M.
各種プログラムの再起動
設置を反映させるため、サービスを再起動・自動起動設定します
# systemctl restart zabbix-server zabbix-agent nginx php8.3-fpm
# systemctl enable zabbix-server zabbix-agent
5.Zabbixエージェントインストール
Zabbix-agentを監視対象サーバー(wordpressサーバー)にインストールします。
ダウンロードページから自分環境にあったものを選択してインストールします。
私の使用PCがMacであるため、ubuntu(arm64)として以降は進めます。
rootユーザ移行
管理者権限で作業するため、rootシェルに移行します。
$ sudo -s
リポジトリの追加
Zabbixの公式リポジトリを追加します。
# wget https://repo.zabbix.com/zabbix/6.0/ubuntu-arm64/pool/main/z/zabbix-release/zabbix-release_latest_6.0+ubuntu22.04_all.deb
# dpkg -i zabbix-release_latest_6.0+ubuntu22.04_all.deb
# apt update
Zabbixエージェントインストール
サーバー、フロントエンド、エージェントをインストールします。
# apt install zabbix-agent
Zabbixエージェントの設定修正
エージェントの設定ファイルの詳細は公式ドキュメントを参照してください。
sudo vi /etc/zabbix/zabbix_agentd.conf
以下に修正:
# 117行目 : ZabbixサーバーのIP
Server=192.168.50.8
# 127行目 : ポート番号
ListenPort=10050
# 173行目 : アクティブチェックを取得するZabbixサーバーのIP
ServerActive=
# 184行目 : ホスト名
Hostname=dev.techbull.cloud
Zabbixエージェントの再起動
Zabbixエージェントを再起動・自動起動設定します
# systemctl restart zabbix-agent
# systemctl enable zabbix-agent
6.Zabbix初期セットアップ
https://zabbix.techbull.cloud にアクセスして初期セットアップを行います。
以下ドキュメントがわかりやすいためその通り実施してください。
7.管理者パスワード変更
セキュリティ上、デフォルトのパスワードは推奨されないため変更します。
以下ドキュメントがわかりやすいためその通り実施してください。
8.監視対象ホスト(WordPressサーバー)の追加
監視対象としてWordPressサーバーを追加します。
以下ドキュメントがわかりやすいため、参考に実施ください。
9.監視対象項目の追加
監視対象項目としてLinuxとMySQLのテンプレートを追加して下さい。
以下ドキュメントがわかりやすいため、参考に実施ください。
10.Zabbixエージェントの追加設定
「9.監視対象項目の追加」の手順でLinuxの監視は問題なく動作しているかと思います。
しかし、MySQLは監視ができていない状態だと思いますので、解消していきます。
詳細は公式ドキュメントを参照して下さい。
template_db_mysql.confの作成
$ sudo vi etc/zabbix/zabbix_agentd.d/template_db_mysql.conf
以下リポジトリの内容を貼り付けて下さい。
モニター用MySQLユーザー作成
$ sudo mysql -uroot -p
Password!1234
mysql> CREATE USER 'zabbix'@'%' IDENTIFIED BY 'Password!1234';
mysql>GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'%';
mysql> FLUSH PRIVILEGES;
.my.cnfの作成
$ sudo mkdir /var/lib/zabbix
$ sudo chown zabbix:zabbix /var/lib/zabbix
$ sudo touch /var/lib/zabbix/.my.cnf
$ sudo chown zabbix:zabbix /var/lib/zabbix/.my.cnf
$ sudo chmod 600 /var/lib/zabbix/.my.cnf
$ sudo vi /var/lib/zabbix/.my.cnf
以下を記載:
[client]
user='zabbix'
password='Password!1234'
socket=/var/run/mysqld/mysqld.sock
Zabbixエージェント再起動
$ sudo systemctl restart zabbix-agent
ここまで実施することで、MySQLテンプレートでの監視ができるようになるので、確認してみて下さい。
Discussion