7 TimescaleDBのセットアップ
概要
Zabbixは、スケール時のパフォーマンス向上をサポートするために、データを自動的に時間ベースのチャンクにパーティション分割するPostgreSQLベースのデータベースソリューションであるTimescaleDBをサポートしています。
現在、ZabbixプロキシではTimescaleDBはサポートされていません。
このページの手順は、以下のシナリオで使用できます。
- TimescaleDBデータベースの作成、または既存のPostgreSQLテーブルからTimescaleDBへの移行(設定を参照)。
- Zabbixのアップグレード時に既存のTimescaleDBデータベーススキーマをアップグレードする(TimescaleDBスキーマのアップグレードを参照)。
設定
前提条件: データベースサーバーに、サポート対象バージョンの TimescaleDB 拡張機能がインストールされていること。 インストール手順については、TimescaleDB documentation を参照してください。
TimescaleDB をインストールする前に、official PostgreSQL リポジトリからサポート対象の PostgreSQL リリースをインストールしてください。
次を実行して、特定のデータベースに対して TimescaleDB 拡張機能を有効にします。
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
このコマンドの実行には、データベース管理者権限が必要です。
'public' 以外のデータベーススキーマを使用している場合は、上記のコマンドに SCHEMA 句を追加する必要があります。
例:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix
次に、postgresql/timescaledb/schema.sql スクリプトを実行します。
新規インストールの場合、このスクリプトは通常の PostgreSQL データベースが初期スキーマ/データで作成された後に実行する必要があります(database creation を参照)。
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
TimescaleDB バージョン 2.9.0 以降で schema.sql スクリプトを実行する際に、ベストプラクティスに従っていないことを示す警告メッセージが表示されても無視してください。
この警告にかかわらず、設定は正常に完了します。
既存の履歴、トレンド、および監査ログデータの移行には、かなりの時間がかかる場合があります。 移行期間中は、Zabbix サーバーおよび Webインターフェースを停止しておく必要があります。
schema.sql スクリプトは、次のハウスキーピングパラメータを設定します。
- アイテムの履歴保存期間を上書き
- アイテムのトレンド保存期間を上書き
履歴およびトレンドに対してパーティション化されたハウスキーピングを使用するには、これら両方のオプションを有効にする必要があります。 また、履歴のみ、またはトレンドのみのいずれかについて、個別に上書きを有効にすることも可能です。
PostgreSQL および TimescaleDB では、postgresql/timescaledb/schema.sql スクリプトにより、さらに次の 2 つのパラメータが設定されます。
- 圧縮を有効化
- 7 日より古いレコードを圧縮
ハウスキーパーによって圧縮データを正常に削除するには、アイテムの履歴保存期間を上書きとアイテムのトレンド保存期間を上書きの両方のオプションを有効にする必要があります。 上書きが無効で、テーブルに圧縮チャンクがある場合、ハウスキーパーはこれらのテーブルからデータを削除せず、ハウスキーピングおよびシステム情報セクションに不正な設定に関する警告が表示されます。
これらのパラメータはすべて、インストール後に 管理 > ハウスキーピング で変更できます。
postgresql.conf のPostgreSQL構成パラメータを最適化するために、TimescaleDBが提供するtimescaledb-tuneツールを実行することをお勧めします。
TimescaleDBスキーマのアップグレード
新しいTimescaleDBハイパーテーブルを含むバージョンにZabbixをアップグレードする場合、Zabbixサーバーはそれらのハイパーテーブルを自動的に設定しません(例えば、Zabbix 6.4から8.0にアップグレードする場合、バージョン7.0.0および7.0.2で新しいハイパーテーブルが導入されています)。
新しいTimescaleDBハイパーテーブルを設定するには、以下の手順に従ってください。
- Zabbixサーバーを起動します。これにより既存のデータベースがアップグレードされます。
- サーバーログファイルでデータベースのアップグレードが完了したことを確認し、完了したらZabbixサーバーを停止します。 サーバーがハイパーテーブルでないテーブルに対して圧縮を有効にしようとした場合、サーバーログに警告が記録されることに注意してください。
postgresql/timescaledb/schema.sqlスクリプトを実行します。これにより新しいTimescaleDBハイパーテーブルが設定されます。 Zabbix 7.0.0以降、スクリプトの場所と名前がpostgresql/timescaledb.sqlからpostgresql/timescaledb/schema.sqlに変更されていることに注意してください。
TimescaleDBバージョン2.9.0以降でschema.sqlスクリプトを実行する際に、ベストプラクティスに従っていないことを通知する警告メッセージは無視してください。
この警告に関係なく、設定は正常に完了します。
TimescaleDB圧縮
TimescaleDBのネイティブ圧縮は、TimescaleDBハイパーテーブルであるすべてのZabbixテーブルでサポートされています。
TimescaleDBへのアップグレードまたは移行時には、大きなテーブルの初期圧縮にかなりの時間がかかる場合があります。
圧縮は「timescale」Timescale Communityライセンスではサポートされていますが、「apache」Apache 2.0ライセンスではサポートされていないことに注意してください。
Zabbixが圧縮をサポートしていないことを検出すると、警告メッセージがZabbixサーバーログに書き込まれ、ユーザーはWebインターフェースで圧縮を有効にできません。
圧縮を使用する前に、TimescaleDB documentationで圧縮について理解しておくことを推奨します。
圧縮には、特に次のような制限があることに注意してください。
- 圧縮済みチャンクの変更(挿入、削除、更新)は許可されません
- 圧縮済みテーブルのスキーマ変更は許可されません。
圧縮設定は、Zabbix Webインターフェースの Administration > Housekeeping セクションにある History, trends and audit log compression ブロックで変更できます。
| Parameter | Default | Comments |
|---|---|---|
| Enable compression | Enabled | チェックボックスをオンまたはオフにしても、圧縮は直ちに有効化/無効化されません。圧縮はHousekeeperによって処理されるため、変更は最大で HousekeepingFrequency 時間の2倍後に反映されます(zabbix_server.confで設定)。圧縮を無効にした後は、圧縮期間に入る新しいチャンクは圧縮されません。ただし、これまでに圧縮されたデータは圧縮されたまま残ります。以前に圧縮されたチャンクを非圧縮にするには、TimescaleDB documentationの手順に従ってください。 TimescaleDB対応の古いバージョンのZabbixからアップグレードする場合、圧縮はデフォルトでは有効になりません。 |
| Compress records older than | 7d | このパラメーターは7日未満には設定できません。 圧縮済みチャンクは不変であるため、この値より古い遅延データ(たとえばプロキシによって遅延したデータ)はすべて破棄されます。 |
:::note
トレンドの更新性能を向上させるため、trends および trends_uint テーブルの "chunk_time_interval" を、アイテムがトレンドをどの程度使用しているかに応じて、30日から7日以下に短縮するとよい場合があります。
この設定の目的は、TimescaleDBのベストプラクティスに従い、チャンクサイズがシステムの利用可能なリソース内に収まるようにすることです。
:::