劔"Tsurugi"をZabbixで監視する

# 劔"Tsurugi"をZabbixで監視する

## 背景

劔"Tsurugi"は、NEDOとNEC、ノーチラス・テクノロジーズが開発した次世代RDBです。2024年9月にGA版がリリースされました。
その後もDB本体の開発はオープンソースで進んでいるものの、残念ながら運用支援ツールは[サポート契約しないと使えません。](https://www.tsurugidb.com/support.html)
劔はオンメモリDBのため、メモリの利用状況を監視しないで使うのは不安です。そこで、[Zabbix](https://www.zabbix.com/)から最低限の監視を行えるよう設定してみました。

## 方針

劔は現時点で最新の1.1.0を使います。劔の本体は[公式の手順](https://github.com/project-tsurugi/tsurugidb/blob/master/docs/getting-started_ja.md)に沿ってビルドしておきます。以下の例でホスト名はtsurugi1としています。

Zabbixは現時点で最新の7.2を使います。こちらも[公式の手順](https://www.zabbix.com/documentation/current/en/manual/installation/install_from_packages/debian_ubuntu)でインストールしておきます。以下の例でホスト名はzabbix1としています。Zabbixの構成は以下の通りです。
    * ZABBIX VERSION: **7.2**
    * OS DISTRIBUTION: **Ubuntu**
    * OS VERSION: **22.04 Jammy**
    * ZABBIX COMPONENT: **Server, Frontend, Agent**
    * DATABASE: **PostgreSQL**
    * WEB SERVER: **Nginx**

環境はAWS EC2のc5.xlargeインスタンスに作ります。OSはUbuntu 22.04です。

Zabbixから劔のインスタンスの死活監視、メモリ使用量、CPU使用率、ディスク使用量、ネットワーク使用量を監視できるように設定することがゴールです。

## 設定手順

### 1. TsurugiホストにZabbix Agent2をインストール

以下の手順でTsurugiホストにAgent2をインストールします。

1. 公式の[Downloadページ](https://www.zabbix.com/download)で以下のようにパラメータを設定し、Agent2のインストール手順を確認します。
    * ZABBIX VERSION: **7.2**
    * OS DISTRIBUTION: **Ubuntu**
    * OS VERSION: **22.04 Jammy**
    * ZABBIX COMPONENT: **Agent2**

2. 表示された手順でAgent2をインストールします。
    ```sh
    tsurugi1$ wget https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.2+ubuntu22.04_all.deb
    tsurugi1$ sudo dpkg -i zabbix-release_latest_7.2+ubuntu22.04_all.deb
    tsurugi1$ sudo apt update
    tsurugi1$ sudo apt install zabbix-agent2 zabbix-agent2-plugin-*
    ```
3. Agent2の設定ファイルを編集し、zabbixサーバからの監視を受け入れられるように設定します。**Server=127.0.0.1**という箇所をzabbixサーバのアドレスで設定します。
    ```sh
    tsurugi1$ sudo vi /etc/zabbix/zabbix_agent2.conf
    ```

4. Agent2を起動します。
    ```sh
    tsurugi1$ sudo systemctl restart zabbix-agent2
    tsurugi1$ sudo systemctl enable zabbix-agent2
    ```

### 2. ZabbixにTsurugiホストを登録

以下の手順でTsurugiホストを登録します。

1. zabbixにログインします。設定変更していなければポートは8080、初期アカウントはAdmin / zabbixです。
2. 左のメニューからData collection/Hostsを選択します。
3. Create hostをクリックし、Tsurugiノードを登録します。必要な登録内容は以下の通りです。
    * Host name: **tsurugi1**
    * Templates: **Linux by Zabbix agent**
    * Host groups: **database**
    * Interfaces: **TsurugiホストのIPアドレスかホスト名を指定します。ポートの初期値は10050です。**
4. Createボタンで登録してしばらく待つと一覧の表示がAvailableになります。ならなければAvailability列をクリックするとエラー内容が表示されるので、それに沿って対処します。

### 3. TsurugiDBテンプレートを追加

以下の手順でTsurugiDBテンプレートを追加します。

1. 左のメニューからData collection/Templatesを選択します。
2. Create templateをクリックし、Templateを登録します。必要な登録内容は以下の通りです。
    * Template name: **Tsurugi server health**
    * Template group: **Templates/Databases**
    * Tags: **class=software, target=server, target=tsurugi**
3. Createボタンを登録した後、Items、Create Itemの順にクリックしてItemを登録します。
4. 以下の内容でtsurugidb.proc_memアイテムを作成します。
    * Name: **tsurugidb.proc_mem**
    * Type: **Zabbix agent**
    * Key: **proc.mem[tsurugidb]**
    * Type of information: **Numeric(unsigned)**
    * Update interval: **1m**
5. 同様にtsurugidb.proc_numアイテムを作成します。
    * Name: **tsurugidb.proc_num**
    * Type: **Zabbix agent**
    * Key: **proc.num[tsurugidb]**
    * Type of information: **Numeric(unsigned)**
    * Update interval: **1m**
5. Data collection/Hosts画面からTsurugiノードを選択し、Templatesに**Tsurugi server health**を追加します。

### 4. ダッシュボードにウィジェットを追加

以下の手順でダッシュボードにウィジェットを追加します。

1. 左のメニューからDashboardsを選択します。
2. Edit dashboardボタンで編集モードに遷移します。
3. ダッシュボードの適当な場所をクリックしてAdd widgetダイアログを開いてメモリ使用率のグラフを設定します。
    * Type: **Graph**
    * Name: **Tsuguri Memory utilization**
    * Refresh interval: **Default(1 minute)**
    * Data set #1
        * host patterns: **tsurugi1**
        * item patterns: **Available memory**
    * Data set #2
        * host patterns: **tsurugi1**
        * item patterns: **tsurugidb.proc_mem**
    ![tsurugi_zabbix_mem.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/b2e76709-3f72-8e72-531b-de8196eb3eb1.png)

4. 同様にAdd widgetダイアログを開いてCPU使用率のグラフを設定します。
    * Type: **Graph**
    * Name: **Tsurugi CPU utilization**
    * Refresh interval: **Default(1 minute)**
    * Data set #1
        * host patterns: **tsurugi1**
        * item patterns: **CPU utilization**
    ![tsurugi_zabbix_cpu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/c25b718d-f65c-5084-cc15-caa4fb8907a8.png)

5. 同様にAdd widgetダイアログを開いてディスク使用量のグラフを設定します。
    * Type: **Graph**
    * Name: **Tsurugi FS[/] Used**
    * Refresh interval: **Default(1 minute)**
    * Data set #1
        * host patterns: **tsurugi1**
        * item patterns: **FS[/]: Space: Total**
    * Data set #2
        * host patterns: **tsurugi1**
        * item patterns: **FS[/]: Space: Used**
    ![tsurugi_zabbix_disk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/39dc42c7-052c-0612-422c-8bb1e0d887c5.png)

6. 同様にAdd widgetダイアログを開いてネットワーク使用量のグラフを設定します。
    * Type: **Graph**
    * Name: **Tsurugi Network utilization**
    * Refresh interval: **Default(1 minute)**
    * Data set #1
        * host patterns: **tsurugi1**
        * item patterns: **Interface enx5: Bits received**
    * Data set #2
        * host patterns: **tsurugi1**
        * item patterns: **Interface enx5: Bits sent**
    ![tsurugi_zabbix_net.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/6d0ddfce-e848-9bb6-17a7-32fe06788559.png)

7. 同様にAdd widgetダイアログを開いてプロセス数を設定します。
    * Type: **Item value**
    * Name: **TsurugiDB stats**
    * Refresh interval: **Default(1 minute)**
    * Item: **tsurugi1: tsuruguidb.proc_num**
    * Show: **Description, Value, Change indicator**
    * Description: *TsurugiDBインスタンス数*
    ![tsurugi_zabbix_proc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/b265bd07-971c-4a44-dc73-7d3f869dec0b.png)
    
8. ダッシュボード画面は以下のようになります。これでTsurugiDBの状態を監視できるようになりました。
    ![tsurugi_zabbix_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542190/07dbb3e6-8350-5888-45ae-787859cb25e8.png)

## 今後

まだ劔を使い始めたばかりなので勘所が掴めていませんが、各種閾値が分かってきたらAlertを仕掛けて自動監視したいと思います。