8 Elasticsearchのセットアップ
Elasticsearchのサポートは実験的機能です!
Zabbixは、データベースの代わりにElasticsearchを使用して履歴データを保存することをサポートしています。ユーザーは、履歴データの保存先として、互換性のあるデータベースとElasticsearchのいずれかを選択できます。このセクションで説明するセットアップ手順は、Elasticsearchバージョン7.Xに適用されます。これより前または後のバージョンのElasticsearchを使用する場合、一部の機能が意図したとおりに動作しない可能性があります。
1. すべての履歴データがElasticsearchに保存される場合、トレンドは計算もデータベースへの保存もされません。トレンドが計算・保存されない場合、履歴の保存期間を延長する必要があることがあります。
2. Elasticsearchを使用する場合、データベースから値を取得する範囲クエリは、データ保存期間のタイムスタンプによって制限されます。
設定
関連するすべての要素間の適切な通信を確保するには、サーバー構成ファイルとフロントエンド構成ファイルのパラメーターが適切に構成されていることを確認してください。
Zabbix サーバーと Webインターフェース
更新するパラメータを含む Zabbix サーバー設定ファイルのドラフト:
### Option: HistoryStorageURL
# 履歴ストレージの HTTP(S) URL。
#
# Mandatory: no
# Default:
# HistoryStorageURL=
### Option: HistoryStorageTypes
# 履歴ストレージに送信する値のタイプをカンマ区切りで指定したリスト。
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text
Zabbix サーバー設定ファイルに入力するパラメータ値の例:
HistoryStorageURL=http://test.elasticsearch.lan:9200
HistoryStorageTypes=str,log,text
この設定により、Zabbix サーバーは数値タイプの履歴値を対応するデータベースに保存し、テキスト形式の履歴データを Elasticsearch に保存します。
Elasticsearch は次のアイテムタイプをサポートします:
uint,dbl,str,log,text
サポートされるアイテムタイプの説明:
| アイテム値のタイプ | データベーステーブル | Elasticsearch のタイプ |
| 数値(符号なし) | history_uint | uint |
| 数値(浮動小数点) | history | dbl |
| 文字 | history_str | str |
| ログ | history_log | log |
| テキスト | history_text | text |
更新するパラメータを含む Zabbix Webインターフェース設定ファイル(conf/zabbix.conf.php)のドラフト:
// Elasticsearch の URL(すべてのタイプで同じ URL を使用する場合は文字列で指定できます)。
$HISTORY['url'] = [
'uint' => 'http://localhost:9200',
'text' => 'http://localhost:9200'
];
// Elasticsearch に保存する値のタイプ。
$HISTORY['types'] = ['uint', 'text'];
Zabbix Webインターフェース設定ファイルに入力するパラメータ値の例:
$HISTORY['url'] = 'http://test.elasticsearch.lan:9200';
$HISTORY['types'] = ['str', 'text', 'log'];
この設定により、Text、Character、Log の履歴値が Elasticsearch に保存されます。
正常に動作するように、conf/zabbix.conf.php で $HISTORY をグローバル変数にする必要もあります(方法については conf/zabbix.conf.php.example を参照してください):
// Zabbix GUI 設定ファイル。
global $DB, $HISTORY;
Elasticsearchのインストールとマッピングの作成
動作させるための最後の2つの手順は、Elasticsearch自体をインストールし、マッピング処理を作成することです。
Elasticsearchをインストールするには、Elasticsearch installation guideを参照してください。
マッピングはElasticsearch内のデータ構造です(データベースの
テーブルに似ています)。すべての履歴データ型のマッピングは
database/elasticsearch/elasticsearch.mapで利用できます。
マッピングの作成は必須です。手順に従って マッピングが作成されていない場合、一部の機能は 正常に動作しません。
text型のマッピングを作成するには、Elasticsearchに対して次のリクエストを送信します。
curl -X PUT \
http://your-elasticsearch.here:9200/text \
-H 'content-type:application/json' \
-d '{
"settings": {
"index": {
"number_of_replicas": 1,
"number_of_shards": 5
}
},
"mappings": {
"properties": {
"itemid": {
"type": "long"
},
"clock": {
"format": "epoch_second",
"type": "date"
},
"value": {
"fields": {
"analyzed": {
"index": true,
"type": "text",
"analyzer": "standard"
}
},
"index": false,
"type": "text"
}
}
}
}'
同様のリクエストを実行して、対応する型を修正したCharacterおよびLog
履歴値のマッピングも作成する必要があります。
Elasticsearchを使用するには、追加情報についてRequirementsを参照してください。
Housekeeper はElasticsearchからデータを削除しません。
複数の日付ベースのインデックスに履歴データを保存する
このセクションでは、パイプラインと取り込みノードを操作するために必要な追加の手順について説明します。
まず、インデックスのテンプレートを作成する必要があります。
次の例は、uintテンプレートを作成するためのリクエストです:
curl -X PUT \
http://your-elasticsearch.here:9200/_template/uint_template \
-H 'content-type:application/json' \
-d '{
"index_patterns": [
"uint*"
],
"settings": {
"index": {
"number_of_replicas": 1,
"number_of_shards": 5
}
},
"mappings": {
"properties": {
"itemid": {
"type": "long"
},
"clock": {
"format": "epoch_second",
"type": "date"
},
"value": {
"type": "long"
}
}
}
}'
他のテンプレートを作成するには、URLを変更し(最後の部分はテンプレートの名前です)、「index_patterns」フィールドをインデックス名と一致するように変更して、データベース/elasticsearch/elasticsearch.mapから取得できる有効なマッピングを設定する必要があります。
たとえば、次のコマンドを使用して、テキストインデックスのテンプレートを作成できます。
curl -X PUT \
http://your-elasticsearch.here:9200/_template/text_template \
-H 'content-type:application/json' \
-d '{
"index_patterns": [
"text*"
],
"settings": {
"index": {
"number_of_replicas": 1,
"number_of_shards": 5
}
},
"mappings": {
"properties": {
"itemid": {
"type": "long"
},
"clock": {
"format": "epoch_second",
"type": "date"
},
"value": {
"fields": {
"analyzed": {
"index": true,
"type": "text",
"analyzer": "standard"
}
},
"index": false,
"type": "text"
}
}
}
}'
これは、Elasticsearchが自動的に作成されたインデックスに有効なマッピングを設定できるようにするために必要です。 次に、パイプライン定義を作成する必要があります。パイプラインは、データをインデックスに入れる前の、ある種のデータの前処理です。次のコマンドを使用して作成できます uintインデックスのパイプライン:
curl -X PUT \
http://your-elasticsearch.here:9200/_ingest/pipeline/uint-pipeline \
-H 'content-type:application/json' \
-d '{
"description": "daily uint index naming",
"processors": [
{
"date_index_name": {
"field": "clock",
"date_formats": [
"UNIX"
],
"index_name_prefix": "uint-",
"date_rounding": "d"
}
}
]
}'
ユーザーは、丸めパラメーター("date_rounding")を変更して、特定のインデックスローテーション期間を設定できます。他のパイプラインを作成するには、URL(最後の部分はパイプラインの名前)を変更し"index_name_prefix"フィールドをインデックス名と一致するように変更する必要があります。
Elasticsearchドキュメントも参照してください
さらに、履歴データを複数の日付ベースのインデックスに保存することも、Zabbixサーバー構成の新しいパラメーターで有効にする必要があります。
### Option: HistoryStorageDateIndex
# Enable preprocessing of history values in history storage to store values in different indices based on date.
# 0 - disable
# 1 - enable
#
# Mandatory: no
# Default:
# HistoryStorageDateIndex=0
トラブルシューティング
次の手順はElasticsearchのセットアップに関する問題のトラブルシューティングに役立つ場合があります。
- マッピングが正しいかどうかを確認します (
http://localhost:9 00/uintなどの必要なインデックスURLへのGETリクエスト)。 - シャードが失敗状態になっていないかどうかを確認します(Elasticsearchの再起動が役立つはずです)。
- Elasticsearchの設定を確認します。ZabbixフロントエンドホストとZabbixサーバーホストからのアクセスを許可する必要があります。
- Elasticsearchログを確認します。
LogSlowQueriesを使用して、ElasticSearchデータベースで遅いクエリを確認できます。
それでもインストールで問題が発生する場合は、このリストのすべての情報(マッピング、エラーログ、構成、バージョンなど)を含むバグレポートを作成してください。