OpenSearchのカスタマイズ

OpenSearchクラスタ構成のカスタマイズ

Verrazzanoは、OpenSearchクラスタの2つのクラスタ・トポロジをサポートしています:

  • 単一ノード・クラスタ: 単一ノードによって実行されるマスター・ロール、取込みロールおよびデータ・ロール。
  • 個別のマスター・ノード、データ・ノードおよび取込みノードを含むマルチノード・クラスタ構成。

Verrazzanoによって提供されるデフォルトのOpenSearchクラスタ構成の詳細は、「インストール・プロファイル」を参照してください。

クラスタ・トポロジの計画

ハードウェア・ニーズの初期見積りから開始します。次の推奨事項は、初期の経験に基づく見積りを提供しますが、理想的なサイズにするには、代表的なワークロードでテストし、パフォーマンスをモニターしてから繰り返す必要があります。

ストレージ要件

入力 説明
\(s\) GiB単位の格納されたデータ・サイズ(1日当たりのログ・サイズ * 保持する日数)。 ユーザー定義
\(sr\) 索引当たりのシャード・レプリカ数。 ユーザー定義
\(o\) 全体のオーバーヘッド。これは一定です。 1.45

最小ストレージ要件= \( ( s * ( 1 + sr ) ) * o \)

\(s\) = 66 GiB (1日当たりのログ・サイズである6 GiB * 保持する日数である11)の場合、索引ごとに1つのシャード・レプリカを選択すると、\(sr\) = 1になります

最小ストレージ要件 = \((66 * (1 + 1) ) * 1.45\) = 192 GiB

前の表で定義したオーバーヘッドは、さらに次のように説明できます。

入力 説明
\(io\) 索引作成オーバーヘッド: 実際のデータ以外に使用される余分な領域で、通常は索引サイズの10% ( 0.1 )です。 1 + 0.1 = 1.1
\(lrs\) Linux予約済領域: Linuxでは、一部のOS操作用にファイル・システムの5%がrootユーザー用に予約されています。 1- 0.05 = .95
\(oo\) OpenSearchオーバーヘッド: OpenSearchは、セグメントのマージ、ログおよびその他の内部操作について、インスタンスの最大20%を保持します。 1- 0.2 = 0.8

全体のオーバーヘッド\(o\) = \( io / lrs / oo \) = 1.45

メモリー

ストレージ要件の100 GiBごとに、8 GiBのメモリーが必要です。

「例」を参照してください:

ストレージ要件が192 GiBの場合は、16 GiBのメモリーが必要です。

データ・ノードの数

入力 説明
\(ts\) 合計ストレージ(GiB単位)。 ユーザー定義
\(mem\) データ・ノード当たりのメモリー(GiB単位)。 ユーザー定義
\(md\) メモリー:データ比率(1:30の比率は、ノード上のストレージがRAMよりも30倍多いことを意味します。使用される値は30です)。 ユーザー定義
\(fc\) フェイルオーバー容量用の1つのデータ・ノード。これは定数です。 1

ROUNDUP \(ts / mem / md + fc\)

「例」を参照してください:

\(ts\) = 192 GiB、\(mem\) = 8 GiB、\(md\) = 1:10、\(fc\) = 1

データ・ノードの数 = ROUNDUP \( 192 / 8 / 10 + 1 \) = 3

JVMヒープ・メモリー

ヒープ・サイズは、OpenSearchノードのJVMに割り当てられるRAMの量です。OpenSearchプロセスはメモリーに非常に負荷がかかるため、ノードで使用可能なメモリーの50%近くをJVMに割り当てる必要があります。JVMマシンは、索引付けおよび検索操作にメモリーを使用します。その他の50%は、メモリーで定期的にアクセスされるデータを保持するファイル・システム・キャッシュに必要です。原則として、-Xms-Xmxを同じ値(使用可能なRAMの合計の50%)に設定する必要があり、(おおよその)最大値は31 GiBになります。

CPU

ハードウェア要件はワークロードによって大きく異なりますが、通常は、ストレージ要件の100 GiBごとに2つのvCPUコアで十分です。

「例」を参照してください:

192 GiBのストレージの場合、必要なvCPUコアは4つです。

シャード・サイズ

ロギングの場合は、一般に10 GiBから50 GiBのシャード・サイズがパフォーマンスに優れています。検索集中型操作の場合は、一般に10から25 GiBが適切なシャード・サイズです。全体として、単一のシャードの場合、OpenSearchシャード・サイズが50GiBを超えないようにすることをお薦めします。シャードが50 GiBを超える場合は、データの索引を再作成する必要があります。

プライマリ・シャード数

入力 説明
\(s\) GiB単位の格納されたデータ・サイズ(1日当たりのログ・サイズ * 保持する日数)。 ユーザー定義
\(sh\) 必要なシャード・サイズ(GiB単位)。 ユーザー定義
\(io\) 索引作成オーバーヘッド: 実際のデータ以外に使用される余分な領域で、通常は索引サイズの10%です。 0.1

プライマリ・シャード = \( ( s * (1 + io) ) / sh \)

「例」を参照してください:

\(s\) = 66 GiBで、シャード・サイズ\(sh\) = 30 GiBを選択した場合

プライマリ・シャード数 = \( ( 66 * 1.1 )/ 30 \) = 2

PrometheusをカスタマイズしてAlertmanagerを有効にし、推奨アラームを構成(アラート・ルールを追加)して、OpenSearchクラスタに関するインサイトを取得し、いくつかのアクションをプロアクティブに実行できます。

OSDataNodeFilesystemSpaceFillingUpアラートを使用して、OpenSearchの平均ディスク使用量が指定したしきい値を超えたことを示します。必要に応じてアラートしきい値を調整します。

kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    release: prometheus-operator
  name: prometheus-operator-os
  namespace: verrazzano-monitoring
spec:
  groups:
    - name: os
      rules:
        - alert: OSDataNodeFilesystemSpaceFillingUp
          annotations:
            runbook_url: <link to runbook>
            summary: Opensearch average disk usage exceeded 75%.
          expr: |-
                        1 - (es_fs_total_available_bytes{node=~".*data.*"}/ es_fs_total_total_bytes) > .75
          for: 30m
          labels:
            severity: warning
  EOF

クラスタ・トポロジの構成

Verrazzanoカスタム・リソースのspec.components.opensearch.nodesフィールドを使用して、OpenSearchクラスタのノード特性をカスタマイズできます。Verrazzanoをインストールまたはアップグレードするときに、このフィールドを使用すると、ノード・グループを使用してOpenSearchクラスタを定義できます。

次の例は、devインストール・プロファイルのOpenSearch構成(1Giのメモリーおよびエフェメラル・ストレージを含む単一ノード・クラスタ)をオーバーライドして、永続ストレージを含むマルチノード・クラスタ(3つのマスター・ノードおよび3つのデータ/取込み組合せノード)を使用するようになります。

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-opensearch-example
spec:
  profile: dev
  components:
    opensearch:
      nodes:
        - name: master
          replicas: 3
          roles:
            - master
          storage:
            size: 50Gi
          resources:
            requests:
              memory: 1.5Gi
        - name: data-ingest
          replicas: 3
          roles:
            - data
            - ingest
          storage:
            size: 100Gi
          resources:
            requests:
              memory: 1Gi
        # Override the default node groups because we are providing our own topology.
        - name: es-master
          replicas: 0
        - name: es-data
          replicas: 0
        - name: es-ingest
          replicas: 0

Verrazzanoをインストールまたはアップグレードした後に、デフォルトのノード・トポロジを変更するには、次の2つのステップを使用します。

  1. 新しいノード・ポッドを追加します。
    apiVersion: install.verrazzano.io/v1beta1
    kind: Verrazzano
    metadata:
      name: custom-opensearch-example
    spec:
      profile: prod
      components:
        opensearch:
          nodes:
            - name: master
              replicas: 3
              roles:
                - master
              storage:
                size: 50Gi
              resources:
                requests:
                  memory: 1.5Gi
            - name: data-ingest
              replicas: 3
              roles:
                - data
                - ingest
              storage:
                size: 100Gi
              resources:
                requests:
                  memory: 1Gi
    
  2. 独自のトポロジを指定するので、デフォルトのノード・プール・レプリカをゼロに設定します。
    apiVersion: install.verrazzano.io/v1beta1
    kind: Verrazzano
    metadata:
      name: custom-opensearch-example
    spec:
      profile: dev
      components:
        opensearch:
          nodes:
            - name: master
              replicas: 3
              roles:
                - master
              storage:
                size: 50Gi
              resources:
                requests:
                  memory: 1.5Gi
            - name: data-ingest
              replicas: 3
              roles:
                - data
                - ingest
              storage:
                size: 100Gi
              resources:
                requests:
                  memory: 1Gi
            # Override the default node groups because we are providing our own topology.
            - name: es-master
              replicas: 0
            - name: es-data
              replicas: 0
            - name: es-ingest
              replicas: 0
    

前述の構成のverrazzano-loggingネームスペースにあるポッドと永続ボリュームをリストすると、必要なノードが適切なデータ・ボリュームで実行されていることを確認できます。

$ kubectl get pvc,pod -l opster.io/opensearch-cluster=opensearch -n verrazzano-logging

# Sample output
NAME                                                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/data-opensearch-master-0                   Bound    pvc-9ace042a-dd68-4975-816d-f2ca0dc4d9d8   50Gi       RWO            standard       5m22s
persistentvolumeclaim/data-opensearch-master-1                   Bound    pvc-8bf68c2c-235e-4bd5-8741-5a5cd3453934   50Gi       RWO            standard       5m21s
persistentvolumeclaim/data-opensearch-master-2                   Bound    pvc-da8a48b1-5762-4669-98f0-8479f30043fc   50Gi       RWO            standard       5m21s
persistentvolumeclaim/data-opensearch-data-ingest-0              Bound    pvc-7ad9f275-632b-4aac-b7bf-c5115215937c   100Gi      RWO            standard       5m23s
persistentvolumeclaim/data-opensearch-data-ingest-1              Bound    pvc-8a293e51-2c20-4cae-916b-1ce46a780403   100Gi      RWO            standard       5m23s
persistentvolumeclaim/data-opensearch-data-ingest-2              Bound    pvc-0025fcef-1d8c-4307-977c-3921545c6730   100Gi      RWO            standard       5m22s

NAME                                                   READY   STATUS     RESTARTS   AGE
pod/opensearch-data-ingest-0                           2/2     Running    0          5m21s
pod/opensearch-data-ingest-1                           2/2     Running    1          5m21s
pod/opensearch-data-ingest-2                           2/2     Running    0          5m21s
pod/opensearch-dashboards-56d845466c-9xsrv             2/2     Running    0          5m21s
pod/opensearch-master-0                                2/2     Running    0          5m21s
pod/opensearch-master-1                                2/2     Running    0          5m21s
pod/opensearch-master-2                                2/2     Running    0          5m21s

コマンドkubectl describe pod -n verrazzano-logging opensearch-data-ingest-0を実行すると、リクエストしたメモリー量が表示されます。

Containers:
  opensearch:
    ...
    Requests:
      memory:   1Gi

デフォルトの索引状態管理ポリシー

索引状態管理(ISM)ポリシーは、索引内のデータを管理するようにOpenSearchを構成します。ポリシーを使用すると、古いデータを自動的にロールオーバーおよびプルーニングして、OpenSearchクラスタでのディスク領域の不足を防ぐことができます。

ディスク領域の不足などの問題を管理するために、デフォルトで次の2つのISMポリシーが作成されます:

  • vz-system: Verrazzanoシステム索引のデータを管理します。

  • vz-application: パターンverrazzano-application*を持つアプリケーション関連索引内のデータを管理します。

    vz-ism-policy

どちらのISMポリシーも同じ構成であり、2つの状態で構成されます:

  • ホット: これがデフォルトの状態です。プライマリ・シャード・サイズが5GBを超えるか、索引の経過時間が21日を超える場合、索引はロールオーバーされます。索引がロールオーバーされてから14日後、Delete状態に遷移します。
  • 削除: この状態では、索引は削除されます。ロールオーバーされてから14日後、索引はこの状態になります。

デフォルトのISMポリシーのオーバーライド

OpenSearchクラスタがデータを取り込む速度によっては、デフォルトのISMポリシーが適切ではないことがあります。そのため、要件を満たすためにデフォルトのISMポリシーのオーバーライドが必要になる場合があります。

vz-systemおよびvz-applicationポリシーは不変であり、これらのポリシーに対する変更は即時に元に戻されます。ただし、次の2つの方法によってこの動作がオーバーライドされます:

  • デフォルト・ポリシーの無効化: Verrazzano CRでフラグspec.components.opensearch.disableDefaultPolicytrueに設定して、デフォルト・ポリシーを無効にできます。これにより、デフォルトのISMポリシーが削除され、データを取り込んでいる索引からポリシーが削除されます。ただし、削除されたポリシーは古い索引から削除されません。古い索引からポリシーを手動で削除するには、「Remove policy from index」を参照してください。
  • デフォルト・ポリシーのオーバーライド: これらのデフォルト・ポリシーの優先度はどちらもゼロ(0)です。同じ索引パターンに対して0より大きいpolicy.ism_template.priorityを使用してポリシーを作成することで、デフォルトのポリシーをオーバーライドできます。独自のポリシーを構成するには、「ISMポリシーの構成」を参照してください。

ISMポリシーの構成

Verrazzanoでは、Verrazzanoカスタム・リソースを使用してOpenSearch ISMポリシーを構成できます。Verrazzanoによって作成されたISMポリシーには、取込みと削除の2つの状態が含まれます。取込み状態は、ロールオーバー・アクションに対してのみ構成できます。取込み状態のロールオーバー・アクションは、Verrazzanoカスタム・リソースで提供されるロールオーバー構成に基づいて構成されます。

次のポリシー例は、パターンmy-app-*に一致する索引を管理するようにOpenSearchを構成します。これらの索引のデータは14日ごとに自動的にプルーニングされ、索引が次の条件の少なくとも1つを満たすとロールオーバーされます:

  • 3日以上経過しています
  • 1,000件以上のドキュメントが含まれています
  • サイズが10GB以上です

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-opensearch-example
spec:
  profile: dev
  components:
    opensearch:
      policies:
        - policyName: my-app
          indexPattern: my-app-*
          minIndexAge: 14d
          rollover:
            minIndexAge: 3d
            minDocCount: 1000
            minSize: 10gb
以前のVerrazzanoカスタム・リソースは、次のISMポリシーを生成します。

{
  "_id" : "my-app",
  "_version" : 17,
  "_seq_no" : 16,
  "_primary_term" : 1,
  "policy" : {
    "policy_id" : "my-app",
    "description" : "__vmi-managed__",
    "last_updated_time" : 1671096525963,
    "schema_version" : 12,
    "error_notification" : null,
    "default_state" : "ingest",
    "states" : [
      {
        "name" : "ingest",
        "actions" : [
          {
            "rollover" : {
              "min_size" : "10gb",
              "min_doc_count" : 1000,
              "min_index_age" : "3d"
            }
          }
        ],
        "transitions" : [
          {
            "state_name" : "delete",
            "conditions" : {
              "min_index_age" : "14d"
            }
          }
        ]
      },
      {
        "name" : "delete",
        "actions" : [
          {
            "delete" : { }
          }
        ],
        "transitions" : [ ]
      }
    ],
    "ism_template" : [
      {
        "index_patterns" : [
          "my-app-*"
        ],
        "priority" : 1,
        "last_updated_time" : 1671096525963
      }
    ]
  }
}

ノート: OpenSearchにポリシーが表示されるまでに数分かかる場合があります。

また、Verrazzanoカスタム・リソースを使用して作成されたISMポリシーには、最小限の構成セットが含まれています。より詳細なISMポリシーを作成するには、OpenSearch REST APIを使用できます。OpenSearch APIを使用してポリシーを作成するには、次を実行します:

$ PASS=$(kubectl get secret \
    --namespace verrazzano-system verrazzano \
    -o jsonpath={.data.password} | base64 \
    --decode; echo)

$ HOST=$(kubectl get ingress \
    -n verrazzano-system opensearch \
    -o jsonpath={.spec.rules[0].host})

$ curl -ik -X PUT --user verrazzano:$PASS https://$HOST/_plugins/_ism/policies/policy_3 \
    -H 'Content-Type: application/json' \
    --data-binary @- << EOF
{
  "policy": {
    "description": "ingesting logs",
    "default_state": "ingest",
    "states": [
      {
        "name": "ingest",
        "actions": [
          {
            "rollover": {
              "min_doc_count": 5
            }
          }
        ],
        "transitions": [
          {
            "state_name": "search"
          }
        ]
      },
      {
        "name": "search",
        "actions": [],
        "transitions": [
          {
            "state_name": "delete",
            "conditions": {
              "min_index_age": "5m"
            }
          }
        ]
      },
      {
        "name": "delete",
        "actions": [
          {
            "delete": {}
          }
        ],
        "transitions": []
      }
    ]
  }
}
EOF
既存のポリシーを表示するには、次を実行します:

$ curl -ik \
    --user verrazzano:$PASS https://$HOST/_plugins/_ism/policies

デフォルトの索引テンプレートのオーバーライド

Verrazzanoには、デフォルトの索引テンプレートverrazzano-data-streamが用意されています。索引を作成する場合、デフォルトの索引テンプレートには、シャードとレプリカの数やフィールドの動的マッピングなど、いくつかの事前定義済設定があります。ただし、デフォルトの索引テンプレートをオーバーライドして、独自の優先索引テンプレートを使用できます。

そのためには、デフォルトの索引テンプレートのコンテンツをコピーして、必要に応じて設定を変更してから、新しいテンプレートでデフォルトのテンプレートをオーバーライドするように、より優先度の高い索引テンプレートを作成する必要があります。

OpenSearch Dev Tools Consoleを使用して、特定の問合せをOpenSearchに送信できます。コンソールを開くには、OpenSearchダッシュボードのメイン・ページで「Dev Tools」を選択し、コンソールの左側にあるエディタ・ペインに問合せを記述します。

既存のデフォルト・テンプレートを取得するには:

$ GET /_index_template/verrazzano-data-stream

シャードおよびレプリカのデフォルト数のオーバーライド

初期のVerrazzano v1.5インストール(アップグレードではない)では、デフォルトの索引テンプレートによって、索引ごとに1つのシャードと1つのレプリカが作成されます。(以前のインストールとアップグレード・インストールでは、5つのシャードと1つのレプリカが作成されます)。シャードとレプリカのデフォルト数を変更するには、デフォルトの索引テンプレートを取得し、シャードとレプリカの数を必要な値に変更して、より優先度の高い新しい索引テンプレートを作成します。

次に、新しい索引テンプレートを作成してシャード数を3に、レプリカ数を2に変更する例を示します。

$ PUT _index_template/my-template
    {
        "index_patterns" : [
          "verrazzano-application-myapp*"
        ],
        "template" : {
          "settings" : {
            "index" : {
              "mapping" : {
                "total_fields" : {
                  "limit" : "2000"
                }
              },
              "refresh_interval" : "5s",
              "number_of_shards" : "3",
              "auto_expand_replicas" : "0-1",
              "number_of_replicas" : "2"
            }
          },
          "mappings" : {
            "dynamic_templates" : [
              {
                "message_field" : {
                  "path_match" : "message",
                  "mapping" : {
                    "norms" : false,
                    "type" : "text"
                  },
                  "match_mapping_type" : "string"
                }
              },
              {
                "object_fields" : {
                  "mapping" : {
                    "type" : "object"
                  },
                  "match_mapping_type" : "object",
                  "match" : "*"
                }
              },
              {
                "all_non_object_fields" : {
                  "mapping" : {
                    "norms" : false,
                    "type" : "text",
                    "fields" : {
                      "keyword" : {
                        "ignore_above" : 256,
                        "type" : "keyword"
                      }
                    }
                  },
                  "match" : "*"
                }
              }
            ],
            "properties" : {
              "@timestamp" : {
                "format" : "strict_date_time||strict_date_optional_time||epoch_millis",
                "type" : "date"
              }
            }
          }
        },
        "priority" : 201,
        "data_stream" : {
          "timestamp_field" : {
            "name" : "@timestamp"
          }
        }
}
この例では、verrazzano-application-myapp*索引パターンに一致する新しい索引が3つのシャードと2つのレプリカで作成され、一致しない他の索引は引き続きデフォルトのシャードとレプリカの数で作成されます。詳細は、OpenSearchドキュメントの「Index templates」を参照してください。

デフォルトのマッピングおよびフィールド・タイプのオーバーライド

デフォルトの索引テンプレートでは、動的マッピングを使用して、すべてのフィールドをtextおよびkeywordとして格納します。アプリケーションで、フィールドを別のタイプとして格納する場合は、デフォルトの索引テンプレートを取得し、目的のフィールドのマッピングを変更してから、より優先度の高い新しい索引テンプレートを作成します。

次に、myapp*ネームスペース内のアプリケーションについて、新しい索引テンプレートを作成する例を示します。この例では、すべての長いフィールドを整数に動的にマップし、ageおよびip_addressフィールドをそれぞれintegerおよびipとして明示的にマップします。

$ PUT _index_template/my-template
    {
        "index_patterns" : [
          "verrazzano-application-myapp*"
        ],
        "template" : {
          "settings" : {
            "index" : {
              "mapping" : {
                "total_fields" : {
                  "limit" : "2000"
                }
              },
              "refresh_interval" : "5s",
              "number_of_shards" : "1",
              "auto_expand_replicas" : "0-1",
              "number_of_replicas" : "0"
            }
          },
          "mappings" : {
            "dynamic_templates" : [
              {
                "long_as_int" : {
                  "mapping" : {
                    "type" : "integer"
                  },
                  "match_mapping_type" : "long"
                }
              },
              {
                "message_field" : {
                  "path_match" : "message",
                  "mapping" : {
                    "norms" : false,
                    "type" : "text"
                  },
                  "match_mapping_type" : "string"
                }
              },
              {
                "object_fields" : {
                  "mapping" : {
                    "type" : "object"
                  },
                  "match_mapping_type" : "object",
                  "match" : "*"
                }
              },
              {
                "all_non_object_fields" : {
                  "mapping" : {
                    "norms" : false,
                    "type" : "text",
                    "fields" : {
                      "keyword" : {
                        "ignore_above" : 256,
                        "type" : "keyword"
                      }
                    }
                  },
                  "match" : "*"
                }
              }
            ],
            "properties" : {
              "@timestamp" : {
                "format" : "strict_date_time||strict_date_optional_time||epoch_millis",
                "type" : "date"
              },
              "age" : {
                "type" : "integer"
              },
              "ip_address" : {
                "type" : "ip",
                "ignore_malformed" : true
              }
            }
          }
        },
        "priority" : 201,
        "data_stream" : {
          "timestamp_field" : {
            "name" : "@timestamp"
          }
        }
}
この例では、verrazzano-application-myapp*索引パターンに一致する新しい索引は、ageおよびip_addressフィールドをtextではなくintegerおよびipとして格納します。また、長いデータ・フィールドはintegerとして格納されます。詳細は、OpenSearchドキュメントの「Mappings and field types」を参照してください。

デフォルトの索引テンプレートをオーバーライドした後の既存の索引の構成

アプリケーションで、デフォルトの索引テンプレートに基づく索引がOpenSearchによってすでに作成されている場合は、次の項のステップを実行してそれらを構成します。

データ・ストリームのロールオーバー

既存の索引のマッピングは変更できないため、アプリケーションで索引を作成するには、データ・ストリームをロールオーバーする必要があります。その後、OpenSearchは、ユーザーが作成した新しいテンプレートに基づいてデータの索引付けを開始します。

データ・ストリームをロールオーバーするには:

POST /verrazzano-application-myapp/_rollover

ノート: Verrazzanoが提供するデフォルトのISMポリシーは、特定の条件が満たされると定期的に索引をロールオーバーするため、索引を手動でロールオーバーする必要はありません。

索引パターンのリフレッシュ

「Discover」ページにフィールドの更新されたマッピングを表示するには、アプリケーションの索引パターンをリフレッシュする必要があります。

索引パターンをリフレッシュするには:

  1. OpenSearchダッシュボードのメイン・ページの「Management」セクションで、ドックの「Stack Management」に移動します。
  2. 次に、「Index Pattern」>「verrazzano-application*」に移動します。アプリケーション用に個別の索引パターンを作成した場合は、それを選択します。
  3. ページの右上にある「Refresh field list」アイコンをクリックします。

refresh-field-list-icon

索引の再作成

フィールド・リストをリフレッシュした後に、マッピングの競合に関する警告が表示された場合は、以前の索引を再作成する必要があります。マッピングの競合が発生するのは、以前の索引のフィールドに対するマッピングが新しい索引と異なるためです(新しい索引は、マッピングが異なる新しい索引テンプレートに基づいて作成されています)。

以前の索引を再作成するには:

POST _reindex
{
  "conflicts" : "proceed",
   "source" : {
      "index" : [
         ".ds-verrazzano-application-myapp-000001"
      ]
   },
   "dest" : {
      "index" : "verrazzano-application-myapp",
      "op_type" : "create"
   }
}

sourceで、デフォルトの索引テンプレートに基づいて作成された以前の索引をすべてリストします。索引の再作成が完了したら、再度索引パターンをリフレッシュします。詳細は、OpenSearchドキュメントの「Reindex data」を参照してください。

OpenSearchおよびOpenSearchダッシュボードのプラグインのインストール

Verrazzanoは、Verrazzanoカスタム・リソースにプラグインを含めることで、OpenSearchおよびOpenSearchダッシュボードのプラグインのインストールをサポートしています。OpenSearchのプラグインをインストールするには、Verrazzanoカスタム・リソースでフィールドspec.components.opensearch.pluginsを定義します。

次のVerrazzanoカスタム・リソースの例では、OpenSearchのanalysis-stempelおよびopensearch-anomaly-detectionプラグインをインストールします:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-opensearch-example
spec:
  profile: dev
  components:
    opensearch:
      plugins:
        enabled: true
        installList:
          - analysis-stempel
          - https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-anomaly-detection/2.3.0.0/opensearch-anomaly-detection-2.3.0.0.zip

OpenSearchのビルド済プラグイン

OpenSearchイメージにバンドルされているビルド済プラグインを次にいくつか示します:

  • analysis-icu
  • analysis-kuromoji
  • analysis-phonetic
  • analysis-smartcn
  • ingest-attachment
  • mapper-murmur3
  • mapper-size
  • opensearch-alerting
  • opensearch-index-management
  • opensearch-job-scheduler
  • opensearch-notifications
  • opensearch-notifications-core
  • prometheus-exporter
  • repository-s3

plugins.installListでプラグインを指定するには、次の3つの方法があります:

  • プラグインを名前で指定します:

    名前でインストールできる唯一のプラグインであるビルド済の追加プラグインがいくつかあります。

    installList:
            - analysis-icu
    
  • リモートZIPファイルからプラグインを指定します:

    必要なプラグインを含むリモートZIPファイルへのURLを指定します。

    installList:
            - https://repo1.maven.org/maven2/org/opensearch/plugin/opensearch-anomaly-detection/2.2.0.0/opensearch-anomaly-detection-2.2.0.0.zip
    

  • Maven座標を使用してプラグインを指定します:

    Maven Centralでホストされている使用可能なアーティファクトおよびバージョンのMaven座標を指定します。

    installList:
            - org.opensearch.plugin:opensearch-anomaly-detection:2.2.0.0
    

OpenSearchダッシュボードでは、Verrazzanoカスタム・リソースでフィールドspec.components.opensearch-dashboards.pluginsを定義することで、プラグインを指定できます。

OpenSearchダッシュボードのビルド済プラグイン

次に、OpenSearchダッシュボード・イメージにバンドルされているビルド済プラグインを示します:

  • alertingDashboards
  • indexManagementDashboards
  • notificationsDashboards

OpenSearchダッシュボードのプラグインをインストールするVerrazzanoカスタム・リソースの例を次に示します:

apiVersion: install.verrazzano.io/v1beta1
kind: Verrazzano
metadata:
  name: custom-opensearch-example
spec:
  profile: dev
  components:
    opensearchDashboards:
      plugins:
        enabled: true
        installList:
          - <URL to OpenSearch Dashboards plug-in ZIP file>

OpenSearchユーザーの追加

デフォルトのOpenSearchユーザーの他に、追加でユーザーを作成する場合は、次の手順に従います。

  1. まず、まだユーザーが存在しないことを確認します。既存のユーザーを取得するには:

    $ GET _plugins/_security/api/internalusers/
    
  2. Keycloakで新しいユーザーとバックエンド・ロールを作成し、そのロールをユーザーに関連付けます。また、ロールvz_api_accessを新しく作成したユーザーに関連付けます。

  3. ステップ2で作成したユーザーに、新しいOpenSearchロールを作成します。次に、カスタム・ロールを作成するカスタム・リソースの例を示します。

    apiVersion: opensearch.opster.io/v1
    kind: OpensearchRole
    metadata:
      name: custom-role
      namespace: verrazzano-logging
    spec:
      opensearchCluster:
        name: opensearch
      clusterPermissions:
        - "cluster:monitor/main"
        - "cluster:monitor/health"
      indexPermissions:
      - indexPatterns:
        - verrazzano*
        allowedActions:
        - index
        - read
    

    設定できる権限については、OpenSearchの権限を参照してください。

  4. allowedActionsでactionGroupsを使用する場合は、次の例を参照してActionGroupカスタム・リソースを作成します。

    apiVersion: opensearch.opster.io/v1
    kind: OpensearchActionGroup
    metadata:
      name: custom-action-group
      namespace: verrazzano-logging
    spec:
      opensearchCluster:
        name: opensearch
      allowedActions:
        - index
        - read
      type: index
      description: Custom action group
    
  5. ユーザーとロールを作成したら、OpensearchUserRoleBindingカスタム・リソースを使用して、それらすべてをリンクします。次に示すのはRoleBindingを作成するカスタム・リソースの例で、ステップ2で作成したユーザーcustom-userとバックエンド・ロールcustom-role、およびステップ3で作成したOpenSearchロールcustom-roleをバインドします。

    apiVersion: opensearch.opster.io/v1
    kind: OpensearchUserRoleBinding
    metadata:
      name: custom-rb
      namespace: verrazzano-logging
    spec:
      opensearchCluster:
        name: opensearch
      users:
      - custom-user
      backendRoles:
      - custom-role
      roles:
      - custom-role