6 Elasticsearch のセットアップ

Elasticsearchのサポートは試験的です

Zabbixはデータベースの代わりにElasticsearchを使用した履歴データの保存をサポートしています。ユーザーは、互換性のあるデータベースとElasticsearchの間で履歴データの保存場所を選択できます。このセクションで説明するセットアップ手順は、Elasticsearchバージョン7.Xに適用できます。以前のバージョンまたは新しいバージョンのElasticsearchを使用すると、一部の機能が意図したとおりに機能しない可能性があります。

すべての履歴データがElasticsearchに保存されている場合、トレンドは計算もデータベースにも保存されません。トレンドが計算および保存されていないため、履歴保存期間を延長する必要がある場合があります。

設定

関連するすべての要素間の適切な通信を確保するには、サーバー構成ファイルとフロントエンド構成ファイルのパラメーターが適切に構成されていることを確認してください。

Zabbixサーバーとフロントエンド

更新するパラメーターを含む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,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フロントエンド設定ファイル( 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フロントエンド設定ファイルに入力するパラメータ値の例:

$HISTORY['url']   = 'http://test.elasticsearch.lan:9200';
       $HISTORY['types'] = ['str', 'text', 'log'];

この設定により、ElasticsearchにTextCharacter、およびLogの履歴値が強制的に保存されます。

また、すべてが正しく機能するようにconf/zabbix.conf.phpで$HISTORYをグローバルにする必要があります。(方法についてはconf/zabbix.conf.php.exampleを参照してください)

// Zabbix GUI configuration file.
       global $DB, $HISTORY;
Elasticsearchのインストールとマッピングの作成

最後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のセットアップに関する問題のトラブルシューティングに役立つ場合があります。

  1. マッピングが正しいかどうかを確認します (http://localhost:9 00/uintなどの必要なインデックスURLへのGETリクエスト).
  2. シャードが失敗状態になっていないかどうかを確認します(Elasticsearchの再起動が役立つはずです).
  3. Elasticsearchの設定を確認します。ZabbixフロントエンドホストとZabbixサーバーホストからのアクセスを許可する必要があります。
  4. Elasticsearchログを確認します。

それでもインストールで問題が発生する場合は、このリストのすべての情報(マッピング、エラーログ、構成、バージョンなど)を含むバグレポートを作成してください。