8.6. Elasticsearch データのキュレーション

Elasticsearch Curator ツールは、グローバルに、またはプロジェクトごとにスケジュールされたメンテナンス操作を実行します。Curator はその設定に基づいて動作を実行します。

Cluster Logging Operator は Curator とその設定をインストールします。Curator cron スケジュール は、クラスターロギングのカスタムリソースを使用して設定でき、追加の設定オプションは openshift-logging プロジェクトの Curator ConfigMap、curator にあります。これには、Curator 設定ファイル curator5.yaml および OpenShift Container Platform カスタム設定ファイル config.yamlが組み込まれています。

OpenShift Container Platform は config.yaml を内部で使用し、Curator の Action ファイル を生成します。

オプションで、action ファイルを直接使用できます。このファイルを編集すると、定期的に実行できるように Curator で利用できるアクションを使用できます。ただし、これによりファイルの変更によりクラスターに破壊的な影響が及ぶ可能性があり、必要なインデックス/設定が Elasticsearch から削除される可能性があるため、上級ユーザーのみがこれを実行することが推奨されます。ほとんどのユーザーは Curator 設定マップのみを変更するだけでよく、action ファイルを編集することはできません。

8.6.1. Curator スケジュールの設定

クラスターロギングインストールで作成されたクラスターロギングのカスタムリソースを使用して、Curator のスケジュールを指定できます。

前提条件

  • クラスターロギングおよび Elasticsearch がインストールされていること。

手順

Curator スケジュールを設定するには、以下を実行します。

  1. openshift-logging プロジェクトでクラスターロギングのカスタムリソースを編集します。

    $ oc edit clusterlogging instance
    apiVersion: "logging.openshift.io/v1"
    kind: "ClusterLogging"
    metadata:
      name: "instance"
    
    ...
    
      curation:
        curator:
          schedule: 30 3 * * * 1
        type: curator
    1
    Curator のスケジュールを cron 形式 で指定します。
    注記

    タイムゾーンは Curator Pod が実行されるホストノードに基づいて設定されます。

8.6.2. Curator インデックス削除の設定

Curator を、保持設定に基づいて Elasticsearch データを削除するように設定できます。プロジェクトごとの設定およびグローバル設定を行うことができます。グローバル設定は、指定されていないプロジェクトに適用されます。プロジェクトごとの設定はグローバル設定を上書きします。

前提条件

  • クラスターロギングがインストールされている必要があります。

手順

インデックスを削除するには、以下を実行します。

  1. OpenShift Container Platform カスタム Curator 設定ファイルを編集します。

    $ oc edit configmap/curator
  2. 必要に応じて以下のパラメーターを設定します。

    config.yaml: |
      project_name:
        action
          unit:value

    利用可能なパラメーターを以下に示します。

    表8.1 プロジェクトオプション

    変数名説明

    project_name

    プロジェクトの実際の名前 (myapp-devel など)。OpenShift Container Platform の操作ログについては、名前 .operations をプロジェクト名として使用します。

    action

    実行するアクション。現在許可されているのは delete のみです。

    unit

    削除に使用する期間 (daysweeks、または months)。

    value

    単位数。

    表8.2 フィルターオプション

    変数名説明

    .defaults

    .defaultsproject_name として使用し、指定されていないプロジェクトのデフォルトを設定します。

    .regex

    プロジェクト名に一致する正規表現の一覧。

    pattern

    適切にエスケープされた有効な正規表現パターン。一重引用符で囲まれています。

たとえば、以下のように Curator を設定します。

  • 1 day を経過した myapp-dev プロジェクトのインデックスを削除する
  • 1 week を経過した myapp-qe プロジェクトのインデックスを削除する
  • 8 weeks を経過した operations ログを削除する
  • 31 days を経過したその他すべてのプロジェクトのインデックスを削除する
  • ^project\..+\-dev.*$ 正規表現と一致する、1 日を経過したインデックスを削除する
  • ^project\..+\-test.*$ 正規表現と一致する、2 日を経過したインデックスを削除する

以下を使用します。

  config.yaml: |
    .defaults:
      delete:
        days: 31

    .operations:
      delete:
        weeks: 8

    myapp-dev:
      delete:
        days: 1

    myapp-qe:
      delete:
        weeks: 1

    .regex:
      - pattern: '^project\..+\-dev\..*$'
        delete:
          days: 1
      - pattern: '^project\..+\-test\..*$'
        delete:
          days: 2
重要

months を操作の $UNIT として使用する場合、Curator は今月の当日ではなく、今月の最初の日からカウントを開始します。たとえば、今日が 4 月 15 日であり、現時点で 2 カ月を経過したインデックスを削除する場合 (delete: months: 2)、Curator は 2 月 15 日より古い日付のインデックスを削除するのではなく、2 月 1 日より古いインデックスを削除します。つまり、今月の最初の日付まで遡り、そこから 2 カ月遡ります。Curator で厳密な設定をする必要がある場合、最も適切な方法として日数 (例: delete: days: 30) を使用することができます。

8.6.3. Curator のトラブルシューティング

本セクションの情報を使用して Curator のデバッグを実行できます。たとえば、Curator が失敗状態にあり、ログメッセージで理由が示されていない場合、次にスケジュールされている cron ジョブの実行を待機する代わりに、ログレベルを引き上げ、新規ジョブをトリガーできます。

前提条件

クラスターロギングおよび Elasticsearch がインストールされていること。

手順

Curator のデバッグログを有効にし、次の Curator の反復を手動でトリガーします。

  1. Curator のデバッグログを有効にします。

    $ oc set env cronjob/curator CURATOR_LOG_LEVEL=DEBUG CURATOR_SCRIPT_LOG_LEVEL=DEBUG

    ログレベルを指定します。

    • CRITICAL。Curator は重大なメッセージのみを表示します。
    • ERROR。Curator はエラーおよび重大なメッセージのみを表示します。
    • WARNING。Curator はエラー、警告、および重大なメッセージのみを表示します。
    • INFO。Curator は情報、エラー、警告、および重大なメッセージのみを表示します。
    • DEBUG。Curator は上記のすべてに加えてデバッグメッセージのみを表示します。

      デフォルト値は INFO です。

注記

クラスターロギングは、OpenShift Container Platform ラッパースクリプト (run.sh および convert.py) で OpenShift Container Platform カスタム環境変数 CURATOR_SCRIPT_LOG_LEVEL を使用します。この環境変数は、必要に応じてスクリプトのデバッグ用に CURATOR_LOG_LEVEL と同じ値を取ります。

  1. 次の Curator の反復をトリガーします。

    $ oc create job --from=cronjob/curator <job_name>
  2. 以下のコマンドを使用して CronJob を制御します。

    • CronJob を一時停止します。

      $ oc patch cronjob curator -p '{"spec":{"suspend":true}}'
    • CronJob を再開します。

      $ oc patch cronjob curator -p '{"spec":{"suspend":false}}'
    • CronJob スケジュールを変更します。

      $ oc patch cronjob curator -p '{"spec":{"schedule":"0 0 * * *"}}' 1
      1
      schedule オプションは、cron 形式のスケジュールを受け入れます。

8.6.4. スクリプト化されたデプロイメントでの Curator の設定

Curator をスクリプト化されたデプロイメントで設定する必要がある場合に、本セクションの情報を使用します。

前提条件

  • クラスターロギングおよび Elasticsearch がインストールされていること。
  • クラスターロギングを管理外の状態に設定する。

手順

以下のスニペットを使用し、スクリプトで Curator を設定します。

  • スクリプト化されたデプロイメントの場合

    1. 設定を作成し、変更します。

      1. Curator 設定ファイルおよび OpenShift Container Platform カスタム設定ファイルを Curator 設定マップからコピーし、それぞれについて別個のファイルをマップし、作成します。

        $ oc extract configmap/curator --keys=curator5.yaml,config.yaml --to=/my/config
      2. /my/config/curator5.yaml および /my/config/config.yaml ファイルを編集します。
    2. 既存の Curator 設定マップを削除し、編集された YAML ファイルを新規の Curator 設定マップに追加します。

      $ oc delete configmap curator ; sleep 1
      $ oc create configmap curator \
          --from-file=curator5.yaml=/my/config/curator5.yaml \
          --from-file=config.yaml=/my/config/config.yaml \
          ; sleep 1

      次の反復でこの設定を使用します。

  • action ファイルを使用している場合

    1. 設定を作成し、変更します。

      1. Curator 設定ファイルおよび action ファイルを Curator 設定マップからコピーし、それぞれについて別個のファイルをマップし、作成します。

        $ oc extract configmap/curator --keys=curator5.yaml,actions.yaml --to=/my/config
      2. /my/config/curator5.yaml および /my/config/actions.yaml ファイルを編集します。
    2. 既存の Curator 設定マップを削除し、編集された YAML ファイルを新規の Curator 設定マップに追加します。

      $ oc delete configmap curator ; sleep 1
      $ oc create configmap curator \
          --from-file=curator5.yaml=/my/config/curator5.yaml \
          --from-file=actions.yaml=/my/config/actions.yaml \
          ; sleep 1

      次の反復でこの設定を使用します。

8.6.5. Curator Action ファイルの使用

openshift-logging プロジェクトの Curator ConfigMap には、Curator Action ファイル が含まれます。このファイルで、Curator Action が定期的に実行されるように設定します。

ただし、action ファイルを使用する場合、OpenShift Container Platform は、重要な内部インデックスが間違って削除されないように設定されている curator ConfigMap の config.yaml セクションを無視します。action ファイルを使用するには、除外ルールを設定に加えてこれらのインデックスを保持する必要があります。さらに、本トピックの手順に従う他のすべてのパターンも手動で追加する必要があります。

重要

actions および config.yaml は相互に排他的な設定ファイルです。actions ファイルがある場合、OpenShift Container Platform は config.yaml ファイルを無視します。action ファイルの使用は、クラスターに破壊的な影響を与え、必要なインデックス/設定が Elasticsearch から削除される可能性があるために、状況ユーザーのみがこれを実行することが推奨されます。

前提条件

  • クラスターロギングおよび Elasticsearch がインストールされていること。
  • クラスターロギングを管理外の状態に設定する。管理外の状態の Operator はサポートされず、クラスター管理者は個々のコンポーネント設定およびアップグレードを完全に制御していることを前提としています。

手順

Curator をインデックスを削除するように設定するには、以下を実行します。

  1. Curator ConfigMap を編集します。

    oc edit cm/curator -n openshift-logging
  2. action ファイルに以下の変更を加えます。

    actions:
    1:
          action: delete_indices 1
          description: >-
            Delete .operations indices older than 30 days.
            Ignore the error if the filter does not
            result in an actionable list of indices (ignore_empty_list).
            See https://www.elastic.co/guide/en/elasticsearch/client/curator/5.2/ex_delete_indices.html
          options:
            # Swallow curator.exception.NoIndices exception
            ignore_empty_list: True
            # In seconds, default is 300
            timeout_override: ${CURATOR_TIMEOUT}
            # Don't swallow any other exceptions
            continue_if_exception: False
            # Optionally disable action, useful for debugging
            disable_action: False
          # All filters are bound by logical AND
          filters:            2
          - filtertype: pattern
            kind: regex
            value: '^\.operations\..*$'
            exclude: False    3
          - filtertype: age
            # Parse timestamp from index name
            source: name
            direction: older
            timestring: '%Y.%m.%d'
            unit: days
            unit_count: 30
            exclude: False
    1
    delete_indices を指定して指定されたインデックスを削除します。
    2
    filers パラメーターを使用して削除されるインデックスを指定します。これらのパラメーターについての詳細は Elastic Search Curator のドキュメント を参照してください。
    3
    インデックスが削除されるように false を指定します。