[comment]: # ({47c25517-4ff8e217})
# 8 Elasticsearchのセットアップ

::: noteimportant
 Elasticsearchのサポートは実験的機能です！

:::

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

::: notewarning
1\. すべての履歴データがElasticsearchに保存される場合、トレンドは計算もデータベースへの保存も**されません**。トレンドが計算・保存されない場合、履歴の保存期間を延長する必要があることがあります。<br>
2\. Elasticsearchを使用する場合、データベースから値を取得する範囲クエリは、データ保存期間のタイムスタンプによって制限されます。
:::

[comment]: # ({/47c25517-4ff8e217})

[comment]: # ({0b6587bd-0b6587bd})
#### 設定

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

[comment]: # ({/0b6587bd-0b6587bd})

[comment]: # ({293ef64c-293ef64c})
##### 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に`Text`、` Character`、および`Log`の履歴値が強制的に保存されます。

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

    // Zabbix GUI configuration file.
    global $DB, $HISTORY;

[comment]: # ({/293ef64c-293ef64c})

[comment]: # ({000d1106-e9a9c5bd})
##### Elasticsearchのインストールとマッピングの作成

動作させるための最後の2つの手順は、Elasticsearch自体をインストールし、マッピング処理を作成することです。

Elasticsearchをインストールするには、[Elasticsearch installation
guide](https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html)を参照してください。

::: noteclassic
マッピングはElasticsearch内のデータ構造です（データベースの
テーブルに似ています）。すべての履歴データ型のマッピングは
`database/elasticsearch/elasticsearch.map`で利用できます。
:::

::: notewarning
マッピングの作成は必須です。手順に従って
マッピングが作成されていない場合、一部の機能は
正常に動作しません。
:::

`text`型のマッピングを作成するには、Elasticsearchに対して次のリクエストを送信します。

``` {.java}
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`
履歴値のマッピングも作成する必要があります。

::: noteclassic
Elasticsearchを使用するには、追加情報について[Requirements](/manual/installation/requirements#serverproxy)を参照してください。
:::

::: noteclassic
[Housekeeper](/manual/web_interface/frontend_sections/administration/housekeeping)
はElasticsearchからデータを削除しません。
:::

[comment]: # ({/000d1106-e9a9c5bd})

[comment]: # ({8451a0a2-8451a0a2})
#### 複数の日付ベースのインデックスに履歴データを保存する

このセクションでは、パイプラインと取り込みノードを操作するために必要な追加の手順について説明します。

まず、インデックスのテンプレートを作成する必要があります。

次の例は、uintテンプレートを作成するためのリクエストです：

``` {.java}
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から取得できる有効なマッピングを設定する必要があります。

たとえば、次のコマンドを使用して、テキストインデックスのテンプレートを作成できます。

``` {.java}
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インデックスのパイプライン：

``` {.java}
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ドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/master/date-index-name-processor.html)も参照してください

さらに、履歴データを複数の日付ベースのインデックスに保存することも、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

[comment]: # ({/8451a0a2-8451a0a2})

[comment]: # ({52123e63-5c4a5e3c})
#### トラブルシューティング

次の手順はElasticsearchのセットアップに関する問題のトラブルシューティングに役立つ場合があります。

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

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

[comment]: # ({/52123e63-5c4a5e3c})
