7 TimescaleDBのセットアップ
概要
Zabbixは、スケール時のパフォーマンス向上をサポートするために、データを自動的に時間ベースのチャンクにパーティション分割するPostgreSQLベースのデータベースソリューションであるTimescaleDBをサポートしています。
現在、ZabbixプロキシではTimescaleDBはサポートされていません。
このページの手順は、以下のシナリオで使用できます。
- TimescaleDBデータベースの作成、または既存のPostgreSQLテーブルからTimescaleDBへの移行(設定を参照)。
- Zabbixのアップグレード時に既存のTimescaleDBデータベーススキーマをアップグレードする(TimescaleDBスキーマのアップグレードを参照)。
設定
前提条件: データベースサーバーにサポートされているバージョンのTimescaleDB拡張機能がインストールされていること。 インストール手順については、TimescaleDBドキュメントを参照してください。
TimescaleDBをインストールする前に、公式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データベースが初期スキーマ/データで作成された後にスクリプトを実行する必要があります(データベース作成を参照)。
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
TimescaleDBバージョン2.9.0以降でschema.sqlスクリプトを実行する際に、ベストプラクティスに従っていないことを通知する警告メッセージは無視してください。
この警告に関係なく、設定は正常に完了します。
既存の履歴、トレンド、監査ログデータの移行には多くの時間がかかる場合があります。 移行期間中はZabbixサーバーとフロントエンドを停止する必要があります。
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サーバーログに書き込まれ、ユーザーはフロントエンドで圧縮を有効にできません。
圧縮を使用する前に、TimescaleDBドキュメントで圧縮について理解することをお勧めします。
圧縮には特定の制限があることに注意してください。具体的には:
- 圧縮されたチャンクの変更(挿入、削除、更新)は許可されていません
- 圧縮されたテーブルのスキーマ変更は許可されていません。
圧縮設定は、Zabbixフロントエンドの管理 > ハウスキーピングセクションの履歴、トレンド、監査ログの圧縮ブロックで変更できます。
| パラメータ | デフォルト | コメント |
|---|---|---|
| 圧縮を有効にする | 有効 | チェックボックスのオン/オフは、圧縮を即座に有効/無効にするものではありません。圧縮はハウスキーパーによって処理されるため、変更は最大でHousekeepingFrequency時間(zabbix_server.confで設定)×2以内に反映されます。圧縮を無効にした後、圧縮期間に該当する新しいチャンクは圧縮されません。ただし、以前に圧縮されたすべてのデータは圧縮されたままです。以前に圧縮されたチャンクの圧縮を解除するには、TimescaleDBドキュメントの手順に従ってください。 TimescaleDBサポート付きの古いバージョンのZabbixからアップグレードする場合、デフォルトで圧縮は有効になりません。 |
| 指定日数より古いレコードを圧縮 | 7d | このパラメータは7日未満にはできません。 圧縮チャンクの不変性のため、すべての遅延データ(例: プロキシによって遅延したデータ)でこの値より古いものは破棄されます。 |
:::note
トレンドの更新パフォーマンスを向上させるために、trendsおよびtrends_uintテーブルの「chunk_time_interval」を30日から7日またはそれ以下に下げることをお勧めします(トレンドを使用するアイテム数に応じて調整)。
この設定の目的は、TimescaleDBのベストプラクティスに従い、チャンクサイズがシステムの利用可能なリソース内に収まるようにすることです。
:::