😽

Zabbixサーバを構築してみた

に公開

はじめに

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

構成図

事前準備

WordPressサーバーの作成を実施済みであること。
下記を参考にして下さい。
https://zenn.dev/moga0110/articles/0295ccaa316dca

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化の準備を行って下さい。
https://qiita.com/k_kind/items/b87777efa3d29dcc4467

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 にアクセスして初期セットアップを行います。
以下ドキュメントがわかりやすいためその通り実施してください。
https://www.server-world.info/query?os=Ubuntu_22.04&p=zabbix60&f=2

7.管理者パスワード変更

セキュリティ上、デフォルトのパスワードは推奨されないため変更します。
以下ドキュメントがわかりやすいためその通り実施してください。
https://www.server-world.info/query?os=Ubuntu_22.04&p=zabbix60&f=3

8.監視対象ホスト(WordPressサーバー)の追加

監視対象としてWordPressサーバーを追加します。
以下ドキュメントがわかりやすいため、参考に実施ください。
https://www.server-world.info/query?os=Ubuntu_22.04&p=zabbix60&f=7

9.監視対象項目の追加

監視対象項目としてLinuxとMySQLのテンプレートを追加して下さい。
以下ドキュメントがわかりやすいため、参考に実施ください。
https://www.server-world.info/query?os=Ubuntu_22.04&p=zabbix60&f=9

10.Zabbixエージェントの追加設定

「9.監視対象項目の追加」の手順でLinuxの監視は問題なく動作しているかと思います。
しかし、MySQLは監視ができていない状態だと思いますので、解消していきます。
詳細は公式ドキュメントを参照して下さい。

template_db_mysql.confの作成

$ sudo vi etc/zabbix/zabbix_agentd.d/template_db_mysql.conf

以下リポジトリの内容を貼り付けて下さい。
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/mysql_agent/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