「Zabbix 立てたことある人いないの?」なんて会話がミーティングで出てきました。監視サーバーとしては大定番のものですね。私は立てたことない人なので立ててみます。
ついでに、Bicep での仮想マシンの立て方と、Linux の基本をお勉強。いつものことながら時系列で書いてます。失敗してます。
目標
RHEL 8.5 にZabbix 6.0をインストールする。できるだけZabbix 公式サイトの通りに進める。
Azure 上に立てたばかりのまっさらなRHEL を使う。
調べもの
リポジトリとは(自分流理解)
私のLinux 力はリポジトリってなんや?です。
調べたことを自分の言葉でまとめる
- アプリケーション(と呼んでいいのか不明、今は「Zabbixとかそういうの」くらいの意味で書いてます)が動くには他のアプリケーションが必要=「依存関係がある」と呼ぶ
- なんかその依存関係のあるアプリケーション同士を誰かがまとめてどっかに置いてくれていて、それをリポジトリと呼ぶ
- 当然、アプリケーションはダウンロード⇒インストールされる
- ダウンロードするにはリポジトリの位置をコマンドでOS に教える
- リポジトリにはたくさんの種類があり、一個のリポジトリにはたくさんのアプリケーションがある
- インストールしたいアプリケーションに必要なアプリケーションを全部持ってるリポジトリがわかれば、インストール作業が簡単になる
Zabbix の要件
公式のRequirementsに書かれたSoftware要件。
Zabbix 本体は公式リポジトリから落とすようです。今回の検証ではエージェントとサーバーの両方を一個のRHEL に入れます。
作業
RHEL 8.5 の仮想マシンをBicep で立てる
今回もBicep を使って立てます。自分の立て方を持っている人は飛ばしてください。
問題になったのは仮想マシンのイメージの指定方法です。
つまり、Bicep の構文におけるImageReference の部分です。Publisher, Offer, Sku ですね。
それらの記述方法は公式DOCに書いてあります。
今回使った値を先に抜き出しますと
- Publisher: RedHat
- Offer: RHEL
- Sku: 8.5
でした。
Publisher とOffer はすぐわかりますがSku に苦労しました(公式DOC ちゃんと読んでなかった)。
下記コマンドでSku の書き方を調べます。RHEL に限らず、いろんなOS に対しても使えるはずなので思い出せるようになっておきたい。
$skuName="<SKU>"
Get-AzVMImage -Location $locName -PublisherName $pubName -Offer $offerName -Sku $skuName | Select Version
適当に引数を渡すと今回は"8.5" でよいことがわかりました。
8.5 RHEL RedHat japaneast /Subscriptions/dxxxxxxxxxxxxx…
ネットワークの方は省略します。
RHEL の作業
公式が親切です!こんな感じで選択してスタート!
Zabbix インストール(手順2-a, b)
公式リポジトリをインストールし、server とfrontend とagent をインストールします。
MySQL インストールと設定(手順2-c の前に)
手順2-c はMySQL をインストールしてからです。
RedHat のページの通りやってみます。
# yum module install mysql:8.0/server
このままサービスを起動します。そしてOS 起動時に自動的にMySQL も起動されるように設定。
# systemctl start mysqld.service
# systemctl enable mysqld.service
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
先ほどのページに、mysql_secure_installation なる操作があります。軽く調べたところMySQL を使う上でのお作法のようです。とりあえずやっておきますがここでは省略。このページの通りにしました
やっと手順2-c
Zabbix 公式の手順に戻ります。
MySQL に入っていじります。ログインにはさっきのmysql_secure_installation で決めたroot のパスワードです。
公式のこの部分です。
# mysql -uroot -p
password
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.02 sec)
mysql> create user zabbix@localhost identified by 'password';
create user zabbix@localhost identified by xxxx
mysql> grant all privileges on zabbix.* to zabbix@localhost;
grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit;
'password' のところは適当に埋めてくださいね。あとで使います。
続いて「初期スキーマとデータのインポート」なる操作。
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
なにこれ、と思ったのでcopilot に聞いてみました。
このコマンド全体としては、Zabbixの初期設定に必要なSQLスクリプトを解凍し、その内容をzabbixデータベースにインポートする処理を行っています。
なるほどわからん
次の手順では再度MySQL に入ります。
# mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
データベース設定編集(手順2-d)
vi /etc/zabbix/zabbix_server.conf
で、下のようにいじりました。コメントアウトをはずしてパスワード入力。
zabbix 起動(手順2-e)
公式の手順のままです。
# systemctl restart zabbix-server zabbix-agent httpd php-fpm
# systemctl enable zabbix-server zabbix-agent httpd php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /usr/lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
zabbix にアクセス(手順2-f)
php の拡張機能を入れ忘れてます。先にインストールすべきだと思います。どのタイミングならば大丈夫かは未検証。
ブラウザで、http://<サーバのIPアドレス>/zabbix と打てばアクセスできるようです。
....アクセスできません。通信を拒否られてるっぽい。
ファイアーウォール空ける
この記事どおりに設定しました。
ただし試しにhttp だけを空けてみましょう。
# firewall-cmd --add-service=http --zone=public --permanent
success
# firewall-cmd --reload
success
これではアクセスできなかったので他のポートも空けました。
※そのあとNSG の設定漏れと気づいて解消しました。http だけでいけるっぽいです。
ついにZabbix 画面
Next step を押下します。
ここまでの手順ではすべてOK でした。Next step
zabbixpass を入れたらエラーが出ました。
そういやphp の拡張機能のことを忘れていましたがそれが原因でしょうか。
php インストール
手順は次のようになるらしいです。
- epel リポジトリインストール
- remi リポジトリインストール
- php インストール ここで拡張機能入れる
それぞれ次のような感じです。
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module reset php
# dnf module enable php:remi-8.0
# dnf install -y php php-bcmath php-mbstring php-ldap php-gd php-xml php-mysqlnd php-json php-zip php-ctype php-session php-sockets php-gettext
最後のコマンドはcopilot にzabbix の要件ページのurl を渡して「拡張機能全部入れるコマンドを教えて」って言えば用意してくれました。きもちい
しかしこれでも同じエラーが出ます。パスワードを確認しても合ってるしなぁ
OS 再起動でもあかん
ここらでスナップショットとりました。
データベース作り直してみる
データベースを削除して作り直そうとしたところ、mysql> create user を打つとエラーが発生。
mysql> create user zabbix@localhost identified by 'zabbixpass';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql>
パスワードポリシーに引っかかってますね。同じパスワードで設定しようとしているのに
はて、最初はできたはず、、、予行で検証した時も通ったのになぁ
強いパスワードを用意して(12字で大文字小文字、記号アリ)、再度データベースを作り、/etc/zabbix/zabbix_server.conf で同じパスワードにしたのち、zcat までやり直したところ先に進めました。
あとは適当に設定して、初期ID: Admin、pass: zabbix でログインするとダッシュボードが見えました!
今回はここまでにします。お疲れさまでした。
備忘録 パスワード変更で対処 (未解決)
以降の文章は、MySQL の理解が不十分で、ものすごく混乱しています。馬鹿なことやってんなぁという気持ちで読んでください。
スナップショットを復元して、データベースとユーザーを作り直さずにパスワード変更で通るかを見てみましょう。
スナップショットを復元しました。
以下コマンドでパスワード変更。これはデータベースのパスワード。
# vi /etc/zabbix/zabbix_server.conf
これだけだとデータベースにアクセスできない同じエラーが発生。
ユーザーのパスワードも変更しないと。mysql で、これまでの手順で作成したzabbix データベースのパスワードを変更します。
mysql> set password for zabbix@localhost = 'new_password';
ERROR 1133 (42000): Can't find any matching row in the user table
では以下のコマンドで作ります。
mysql> create user zabbix@localhost identified by 'new_password';
Query OK, 0 rows affected (0.21 sec)
これだとまだアクセスエラーが出ます(同じやつ)。スキーマのインポートとやらもやり直しましょうか。
# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
なぜか新しく付けたパスワードが通らない。。。
ユーザーとDB には同じパスワードを使っているんですが。