【Zabbix7.0】ブラウザアイテムを試してみた

# はじめに
こんにちは！登山大好き 7Mountains です！
今回は Zabbix7.0 で追加された ブラウザアイテム についての記事です。
Zabbix の公式ドキュメントには Docker を使用する手順が書かれていますが、この記事では Selenium Server を Standalone で起動して検証を行います。

# 検証環境
今回の検証環境は下記の通り
Zabbix Server はすでに構築済み（まだの方は [こちら](https://qiita.com/7mountain/items/c9de52dc247043a6df13) の記事を参照してください）で、Selenium Server は別サーバで構築しています
|項目|バージョン|備考|
|:-:|:-:|:-|
|OS|Almalinux 9.5|Selenium Server用のOS|
|Java|21|Selenium Server の起動に必要|
|Selenium Server|4.31|最新版をダウンロード|

# やってみた
### java のインストール
Seleniun Server を動作させるために必要な java をインストールします
```console:javaのインストール
[root@Almalinux002 ~]# dnf -y install opejava-21-openjdk
Last metadata expiration check: 0:22:07 ago on Wed 23 Apr 2025 01:04:31 PM JST.
Dependencies resolved.
=====================================================================================================================
 Package                            Architecture     Version                               Repository           Size
=====================================================================================================================
Installing:
 java-21-openjdk                    x86_64           1:21.0.7.0.6-1.el9.alma.1             appstream           453 k
Installing dependencies:
 copy-jdk-configs                   noarch           4.0-3.el9                             appstream            27 k
 java-21-openjdk-headless           x86_64           1:21.0.7.0.6-1.el9.alma.1             appstream            48 M
 javapackages-filesystem            noarch           6.0.0-7.el9_5                         appstream           9.8 k
 lksctp-tools                       x86_64           1.0.19-3.el9_4                        baseos               96 k
 lua                                x86_64           5.4.4-4.el9                           appstream           187 k
 lua-posix                          x86_64           35.0-8.el9                            appstream           131 k
 mkfontscale                        x86_64           1.2.1-3.el9                           appstream            31 k
 ttmkfdir                           x86_64           3.0.9-65.el9                          appstream            52 k
 tzdata-java                        noarch           2025b-1.el9                           appstream           145 k
 xorg-x11-fonts-Type1               noarch           7.5-33.el9                            appstream           499 k

Transaction Summary
=====================================================================================================================
----------省略----------
```

### Selenium Server のダウンロード
Selenium-Server をダウンロードします
```console:Download Selenium-Server
[root@Almalinux002 ~]# wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.31.0/selenium-server-4.31.0.jar
--2025-04-23 13:57:28--  https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.31.0/selenium-server-4.31.0.jar
Resolving github.com (github.com)... 20.27.177.113
Connecting to github.com (github.com)|20.27.177.113|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/7613257/8451ec4d-15eb-4256-8e37-306715886e9f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250423%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250423T054600Z&X-Amz-Expires=300&X-Amz-Signature=b0ff12854fc8b7c48970687db7db97aa1d68636b424d4aa802ab89f19ceca98e&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dselenium-server-4.31.0.jar&response-content-type=application%2Foctet-stream [following]
--2025-04-23 13:57:29--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/7613257/8451ec4d-15eb-4256-8e37-306715886e9f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250423%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250423T054600Z&X-Amz-Expires=300&X-Amz-Signature=b0ff12854fc8b7c48970687db7db97aa1d68636b424d4aa802ab89f19ceca98e&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dselenium-server-4.31.0.jar&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
----------省略----------
```

## Selenium Server の起動
Selenium Server を <font color="Red">**root 以外**</font>のユーザで起動します
オプション --selenium-manager true を付けてコマンドを実行することで、各ブラウザのドライバーを自動ダウンロードできます
また、Selenium Server 実行中はプロンプトが返ってきません、終了する場合は Ctrl+C で Selenium Server を終了します
```console:java -jar selenium-server-4.31.0.jar standalone --selenium-manager true
[alma@Almalinux002 ~]# java -jar selenium-server-4.31.0.jar standalone --selenium-manager true
13:58:46.332 INFO [LoggingOptions.configureLogEncoding] - Using the system default encoding
13:58:46.340 INFO [OpenTelemetryTracer.createTracer] - Using OpenTelemetry for tracing
13:58:47.401 INFO [NodeOptions.getSessionFactories] - Detected 2 available processors
14:00:49.763 INFO [NodeOptions.report] - Adding Edge for {"browserName": "MicrosoftEdge","platformName": "linux"} 2 times
14:00:49.764 INFO [NodeOptions.report] - Adding Chrome for {"browserName": "chrome","platformName": "linux"} 2 times
14:00:49.766 INFO [NodeOptions.report] - Adding Firefox for {"browserName": "firefox","platformName": "linux"} 2 times
14:00:49.779 INFO [Node.<init>] - Binding additional locator mechanisms: relative
14:00:49.799 INFO [GridModel.setAvailability] - Switching Node ca006ca8-4862-474f-b29b-789d763f66f3 (uri: http://192.168.1.179:4444) from DOWN to UP
14:00:49.800 INFO [LocalDistributor.add] - Added node ca006ca8-4862-474f-b29b-789d763f66f3 at http://192.168.1.179:4444. Health check every 120s
14:00:49.905 INFO [Standalone.execute] - Started Selenium Standalone 4.31.0 (revision 4ae8fc9f8a): http://192.168.1.179:4444
```

:::note alert
**ご注意ください**
Selenium Server を root で実行しないでください
Selenium Server は起動しますが、ブラウザアイテムでデータを取得する際に下記エラーが発生します
ここではまりました...、原因調査に2日かかった...(´;ω;｀)

{"duration":325.04118061065674,"error":{"http_status":500,"code":"unknown error","message":"cannot open url: Unable to execute request for an existing session: java.util.concurrent.TimeoutException\nBuild info: version: '4.31.0', revision: '4ae8fc9f8a'\nSystem info: os.name: 'Linux', os.arch: 'amd64', os.version: '5.14.0-503.38.1.el9_5.x86_64', java.version: '21.0.7'\nDriver info: driver.version: unknown"}}

:::

## Zabbix Server 設定
Zabbix Server の zabbix_server.conf の以下項目を修正します
WebDriverURL は Selenium Server の URL を（Selenium Server を起動したときに表示されるURL http:\//Selenium Server のIPアドレス:4444）を、StartBrowserPollers は 1 以上を設定します
```console:/etc/zabbix/zabbix_server.conf
WebDriverURL=http://192.168.1.179:4444
StartBrowserPollers=5
```
/etc/zabbix/zabbix_server.conf を編集後は Zabbix Server を再起動します
```console:systemctl restart zabbix-server.service
[root@AlmaLinux001 ~]# systemctl restart zabbix-server.service
[root@AlmaLinux001 ~]#
[root@AlmaLinux001 ~]# systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server
     Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled; preset: disabled)
     Active: active (running) since Mon 2025-04-28 13:35:43 JST; 9s ago
    Process: 13302 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
   Main PID: 13304 (zabbix_server)
----------省略----------
```

### ホストの登録
Zabbix Server のフロントエンドより、ホストを登録します
特に注意事項はありませんが、インターフェースの登録は不要です
|項目|設定値|補足|
|:-:|:-:|:-|
|ホスト名|Web.Browser|任意のホスト名を入力|
|表示名|Web.Browser|表示名を指定したい場合に入力<br>デフォルトはホスト名が表示名となる|
|テンプレート|未指定|テンプレートをリンクさせる場合に指定<br>今回は未指定|
|ホストグループ|Linux servers|今回は Linux servers を指定|
|インターフェース|未指定|ホストのインターフェースを指定<br>ブラウザアイテムにインターフェースは不要なので今回は未指定|
|説明|未指定|ホストの説明を入力|
|監視するもの|サーバー|サーバー、プロキシ、プロキシグループから選択する|
|有効|有効|ホストの有効・無効を指定|

![WS000000-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/1e741d79-0b9d-4098-8f15-b8fb81c448de.jpeg)

## ブラウザアイテムの追加
先ほど登録したホストに、ブラウザアイテムを登録します

|項目|設定値|補足|
|:-:|:-:|:-|
|名前|Browser Monitoring|アイテムの名前を指定|
|タイプ|ブラウザ|ブラウザを指定|
|キー|test.browser|キーはホストで一意となるように指定|
|データ型|テキスト|テキストを指定|
|パラメータ|未指定|スクリプトに渡す変数を、属性と値のペアとして指定|
|スクリプト|後述|JavaScriptコードを入力|
|監視間隔|5m|監視間隔を指定|
|監視間隔のカスタマイズ|未指定|監視間隔をカスタマイズする場合に指定|
|タイムアウト|グローバル|JavaScript実行タイムアウト|
|ヒストリ|保存期間:31d|収集したデータの保存期間を指定|
|ホストインベントリフィールドの自動設定|なし|アイテムの値を入力するホストインベントリフィールドを指定|
|説明|未指定|アイテムの説明を入力|
|有効|有効|アイテムの有効・無効を指定|

![WS000001-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/78360c10-ee12-4284-a0e5-db2cdefc09c5.jpeg)

スクリプトには JavaScript で以下の様に入力します（Zabbix公式ドキュメントより）
今回は Zabbix Japan のホームページを指定しています
```console:Browser Item
var browser = new Browser(Browser.chromeOptions());
try {
    browser.navigate("https://www.zabbix.com/jp");
    browser.collectPerfEntries();
}
finally {
    return JSON.stringify(browser.getResult());
}
```

![WS000002-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/3bcfee65-8121-4804-bbd6-6651544b5e44.jpeg)


### ブラウザアイテムで取得したデータ
ブラウザアイテムで取得したデータはJson形式で表示されます

```json:Browser Item
{"duration":4.645546913146973,"performance_data":{"details":[{"navigation":{"entry_type":"navigation","dom_content_loaded_event_start":1.4224000000003725,"domain_lookup_start":0.001,"tls_negotiation_time":0.026200000001117607,"request_start":0.49840000000037255,"redirect_start":0,"load_event_start":4.6135,"name":"https://www.zabbix.com/jp","connect_end":0.49819999999925496,"dom_content_loaded_event_end":1.432,"critical_ch_restart":0,"decoded_body_size":235057,"response_end":0.7785,"final_response_headers_start":675.6999999992549,"secure_connection_start":0.47219999999925494,"initiator_type":"navigation","encoded_body_size":54888,"render_blocking_status":"non-blocking","not_restored_reasons":null,"worker_start":0,"unload_event_start":0,"response_status":200,"dom_interactive":1.4224000000003725,"start_time":0,"fetch_start":0.0006999999992549419,"activation_start":0,"redirect_end":0,"unload_event_end":0,"first_interim_response_start":0,"next_hop_protocol":"h2","delivery_type":"","load_event_end":4.62,"response_start":0.6756999999992549,"domain_lookup_end":0.45509999999962747,"redirect_count":0,"transfer_size":55188,"dom_complete":4.6134000000003725,"connect_start":0.45509999999962747,"duration":4.62,"type":"navigate"},"resource":{"dom_content_loading_time":0,"load_event_handler_time":0,"unload_event_handler_time":0,"response_time":107.03179999997279,"encoded_size":42,"load_finished":0,"redirect_count":0,"redirect_time":0,"total_size":42,"tcp_handshake_time":0.07680000000074472,"count":63,"transferred_size":342,"dns_lookup_time":0.7352999999988827,"resource_fetch_time":45.66559999999777,"request_time":0.05900000000000016,"min_protocol":""}}],"summary":{"navigation":{"dom_content_loading_time":0.009599999999627462,"load_event_handler_time":0.00649999999999995,"unload_event_handler_time":0,"response_time":0.10280000000074507,"encoded_size":54888,"load_finished":4.62,"redirect_count":0,"redirect_time":0,"total_size":235057,"tcp_handshake_time":0.04309999999962749,"tls_negotiation_time":0.026200000001117607,"count":1,"transferred_size":55188,"dns_lookup_time":0.45409999999962747,"resource_fetch_time":0.777800000000745,"request_time":0.17729999999888235,"min_protocol":"h2"},"resource":{"dom_content_loading_time":0,"load_event_handler_time":0,"unload_event_handler_time":0,"response_time":107.03179999997279,"encoded_size":42,"load_finished":0,"redirect_count":0,"redirect_time":0,"total_size":42,"tcp_handshake_time":0.07680000000074472,"count":63,"transferred_size":342,"dns_lookup_time":0.7352999999988827,"resource_fetch_time":45.66559999999777,"request_time":0.05900000000000016,"min_protocol":""}},"marks":[]}}
```

![WS000003-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/f6d7281b-459f-4207-b70d-f70c68c0b198.jpeg)


### テンプレートの追加
Zabbix 公式ドキュメントに記載されているテンプレート Website by Browser をホストにリンクすると、様々なデータの取得ができます

![WS000004-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/30169ea3-0376-4a7d-9c00-475b83efaa01.jpeg)

テンプレートから継承したマクロとホストマクロの下記２つの値を編集します
|マクロ名|値|補足|
|:-:|:-:|:-|
|{$WEBSITE.DOMAIN}|www\.zabbix.com|対象URLのドメイン名を指定|
|{$WEBSITE.GET.DATA.INTERVAL}|5m|データ取得の更新間隔を指定|

![WS000005-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/c3ac80dc-7da0-4d46-8f84-5d2e4efa24a2.jpeg)


### 取得データの確認
監視データ - ホスト - ダッシュボード の順クリックしていくと、テンプレート Website by Browser で取得したデータを視覚的に確認することができます

![WS000006-1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050162/053bc4fb-31df-4965-a67c-3d8370c84444.jpeg)


# Selenium Server のサービス化
ここからは Selenium Server のサービス化のお話です！
java コマンドで Selenium Server を起動すると、Java コマンドを終了したり、SSH 接続を切断してしまうと Selenium Server が停止します
常に Selenium Server を起動するように、サービス化してしまいましょう！

### 起動バッチの作成
Selenium Server を起動するバッチを作成します
vi start.sh
```console:start.sh
# !/bin/bash
cd /home/alma/selenium/
nohup /usr/bin/java -jar /home/alma/selenium/selenium-server-4.31.0.jar standalone --selenium-manager true &
pid=$!
touch $pid.pid
```

:::note
**Tips**
java コマンドも jar ファイルもフルパスで指定してください（which java コマンドでフルパスがわかります）
コマンドの先頭に nohup を、最後に & を追加することで、Selenium Server をバックグラウンドで実行しています
:::

### 停止バッチの作成
Selenium Server を停止するバッチを作成します
vi stop.sh
```console:stop.sh
# !/bin/bash
cd /home/alma/selenium/
pidFile=`ls *.pid`
pid=${pidFile%.*}
echo $pid stop server
kill $pid
rm -rf $pidFile
```

### Unit ファイルの作成
/usr/lib/systemd/system/ に Selenium Server 用の Unit ファイル（selenium-server.service）を作成します
サービスの実行ユーザも <font color="Red">**root 以外**</font>を指定してください
起動・停止バッチは実行ユーザの home ディレクトリ（\/home\/alma\/selenium）に異動しました
vi /usr/lib/systemd/system/selenium-server.service
```console:/usr/lib/systemd/system/selenium-server.service
[Unit]
Description = Selenium server process
After = syslog.target

[Service]
User = alma
WorkingDirectory = /home/alma/selenium/
ExecStart = /bin/bash /home/alma/selenium/start.sh
ExecStop = /bin/bash /home/alma/selenium/stop.sh
Restart = always
Type = forking

[Install]
WantedBy = multi-user.targe
```

:::note
**Tips**
起動・停止バッチのパスを指定している ExecStart と ExecStop は、先頭に /bin/bash をお忘れなく！
バッチのフルパスだけだとエラーが発生して Selenium Server の起動に失敗します

systemd[23720]: selenium-server.service: Failed at step EXEC spawning /home/alma/selenium/start.sh: Exec format error
systemd[1]: selenium-server.service: Control process exited, code=exited, status=203/EXEC
systemd[1]: selenium-server.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Selenium server process.
systemd[1]: selenium-server.service: Scheduled restart job, restart counter is at 6.
systemd[1]: Stopped Selenium server process.
systemd[1]: selenium-server.service: Start request repeated too quickly.
systemd[1]: selenium-server.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Selenium server process.

:::

### 設定の反映とサービス起動
systemctl daemon-reload コマンドで設定を反映させ、
systemctl enable --now selenium-server.service で Selenium Server の起動と、自動起動を設定します
```console:設定反映
[root@Almalinux002 ~]# systemctl daemon-reload
[root@Almalinux002 ~]#
[root@Almalinux002 ~]# systemctl enable --now selenium-server.service
Created symlink /etc/systemd/system/multi-user.target.wants/selenium-server.service → /usr/lib/systemd/system/selenium-server.service.
[root@Almalinux002 ~]#
[root@Almalinux002 ~]# systemctl status selenium-server.service
● selenium-server.service - Selenium server process
     Loaded: loaded (/usr/lib/systemd/system/selenium-server.service; enabled; preset: disabled)
     Active: active (running) since Wed 2025-04-30 13:08:49 JST; 8s ago
    Process: 26607 ExecStart=/bin/bash /home/alma/selenium/start.sh (code=exited, status=0/SUCCESS)
   Main PID: 26608 (java)
----------省略----------
[root@Almalinux002 ~]# ps -ef | grep java
alma       23864       1 20 12:39 ?        00:00:01 /usr/bin/java -jar /home/alma/selenium/selenium-server-4.31.0.jar standalone --selenium-manager true
root       23937    5887  0 12:39 pts/0    00:00:00 grep --color=auto java
[root@Almalinux002 ~]#
```

# さいごに
Docker で実装する手順はたくさん公開されていたけど、Standalone でSelenium Server を起動する手順が少なかったので、自分なりに検証した結果を記事にしました。


# 参考文献
https://blog.usize-tech.com/zabbix-7-0-browser-monitoring/
https://www.zabbix.com/documentation/7.0/jp/manual/guides/monitor_browser
https://qiita.com/OmeletteCurry19/items/ca87ce4f85729c1e4457