Elasticsearchのサポートは実験的なものです!
Zabbixは、データベースの代わりにElasticsearchを使用して履歴データを保存することをサポートしています。ユーザーは、互換性のあるデータベースとElasticsearchのどちらに履歴データを保存するかを選択できます。このセクションで説明するセットアップ手順は、Elasticsearchバージョン7.Xに適用されます。より古い、または新しいバージョンのElasticsearchを使用する場合、一部の機能が意図したとおりに動作しない可能性があります。
1.すべての履歴データがElasticsearchに保存されている場合、トレンドは計算も保存もされません。トレンドが計算・保存されない場合、履歴の保存期間を延長する必要があるかもしれません。
2. Elasticsearchを使用する場合、データベースから値を取得する範囲クエリは、データ保存期間のタイムスタンプによって制限されます。
関連するすべての要素間の適切な通信を確保するには、サーバー構成ファイルとフロントエンド構成ファイルのパラメーターが適切に構成されていることを確認してください。
更新するパラメーターを含むZabbixサーバー構成ファイルの草案:
### Option: HistoryStorageURL
# History storage HTTP[S] URL.
#
# Mandatory: no
# Default:
# HistoryStorageURL=
### Option: HistoryStorageTypes
# Comma separated list of value types to be sent to the history storage.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,textZabbixサーバー構成ファイルに入力するパラメーター値の例:
この設定により、Zabbixサーバーは数値タイプの履歴値を対応するデータベースに保存し、テキスト履歴データをElasticsearchに保存します。
Elasticsearchは次のアイテムタイプをサポートしています:
サポートされているアイテムタイプの説明:
| アイテム値のタイプ | データベーステーブル | Elasticsearchでのタイプ |
| 符号なし数値型 | history_uint | uint |
| 浮動小数点数型 | history | dbl |
| 固定長文字列 | history_str | str |
| ログ | history_log | log |
| テキスト | history_text | text |
更新するパラメータを含むZabbixフロントエンド設定ファイル( conf/zabbix.conf.php)の草案:
// Elasticsearch url (can be string if same url is used for all types).
$HISTORY['url'] = [
'uint' => 'http://localhost:9200',
'text' => 'http://localhost:9200'
];
// Value types stored in Elasticsearch.
$HISTORY['types'] = ['uint', 'text'];Zabbixフロントエンド設定ファイルに入力するパラメータ値の例:
この設定により、ElasticsearchにText、Character、およびLogの履歴値が強制的に保存されます。
また、すべてが正しく機能するようにconf/zabbix.conf.phpで$HISTORYをグローバルにする必要があります。(方法についてはconf/zabbix.conf.php.exampleを参照してください)
最後の2つのステップは、Elasticsearch自体のインストールとマッピングプロセスの作成です。
Elasticsearchのインストールについては、Elasticsearchインストールガイドを参照してください。
マッピングは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を使用する場合は、要件を参照してください。
ハウスキーパーは、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リクエスト)。LogSlowQueriesを使用して、ElasticSearchデータベースで遅いクエリを確認できます。それでもインストールで問題が発生する場合は、このリストのすべての情報(マッピング、エラーログ、構成、バージョンなど)を含むバグレポートを作成してください。