Hitachi

Hitachi Microservices Platform - Paxos Commit Transaction Orchestrator ユーザーズガイド


9.5.3 情報の管理方法

HMP-PCTOがElasticsearchに出力する情報はindexとして格納されます。これらのindexには、次のライフサイクルが設定されています。

表9‒49 Elasticsearchのindexのライフサイクルポリシー

項番

Elasticsearchのindex名のプレフィックス

indexのライフサイクルポリシー

Elasticsearch

ILMポリシー名

ポリシーの内容

1

「logstash」

「logstash-policy」

Elasticsearch ILMによって、次のポリシーが設定されます。

  • 作成されてから30日が経過したとき、または50Gバイトを超えたときに、indexがロールオーバーされ、新たなindexが作成されて使用される。indexは自動的に削除されない。

2

「jaeger」

(なし)

作成されてから1日が経過したときに、indexがロールオーバーされ、新たなindexが作成されて使用される。indexは自動的に削除されない。

3

「metricbeat」

「metricbeat」

Elasticsearch ILMによって、次のポリシーが設定されます。

  • 作成されてから30日が経過したとき、または50Gバイトを超えたときに、indexがロールオーバーされ、新たなindexが作成されて使用される。indexは自動的に削除されない。

〈この項の構成〉

(1) 情報の確認方法

indexの一覧とボリューム使用量を確認する方法を次に示します。

Kubernetesコントロールプレーン上で、REST APIのGETメソッドを使用して、「IPアドレス:ポート番号/」のあとに「_cat/indices」を指定することでindexの一覧とボリューム使用量が表示されます。

次にコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XGET 'localhost:30202/_cat/indices?v&s=index'

<コマンドの実行結果の例>

[図データ]

(2) 情報のロールオーバー設定の変更方法

標準出力の情報およびメトリクスの情報は、それぞれ「logstash-policy」「metricbeat」という名前のElasticsearch ILMポリシーが設定されています。これらのILMポリシーにはロールオーバーする日数・上限サイズがあらかじめ設定されています。

まず、現在のILMポリシーの内容を確認します。

Kubernetesコントロールプレーン上で、REST APIのGETメソッドを使用して、「IPアドレス:ポート番号/_ilm/policy/」のあとにILMポリシー名を指定することで指定したILMポリシーを表示できます。

次にコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XGET 'localhost:30202/_ilm/policy/logstash-policy?pretty'

<コマンドの実行結果の例>

{
  "logstash-policy" : {
(略)
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "50gb", …1
              "max_age" : "30d"
            }
          }
        }
      }
    },
(略)
  }
}

記述例の番号1は、説明の番号1.と対応しています。

<説明>

  1. ロールオーバーする上限のindexのサイズ(max_size)および日数(max_age)

    上記の「policy」で表示されたポリシーのうち、変更したい部分だけを置き換えて、他の部分は表示された値のままで設定します。Kubernetesコントロールプレーン上で、REST APIのPUTメソッドを使用して、「IPアドレス:ポート番号/_ilm/policy/」のあとにILMポリシー名を指定し、後続に「policy」配下の設定をすべて記載することで、ILMポリシーの値を変更できます。

重要

ILMポリシー変更時の注意事項

必ずILMポリシーの「policy」以下のうち、変更したい部分だけを置き換えて、他の部分は表示された値をそのまま設定してください。もし他の部分を記載しなかった場合、記載しなかった部分は以前の設定から消えてしまいます。

次に、ロールオーバーする上限のindexのサイズ(max_size)を10Gバイトに、日数(max_age)を1日に変更する場合のコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XPUT 'localhost:30202/_ilm/policy/logstash-policy' \
-H 'Content-Type: application/json; charset=utf-8' \
--data-binary @- << EOF
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "10gb",
              "max_age" : "1d"
            }
          }
        }
      }
    }
}
EOF

<コマンドの実行結果の例>

{"acknowledged":true}

(3) 情報の削除方法

デフォルトのポリシーでは、Elasticsearchのボリューム使用量が増加し続けるため、不要なindexは削除してください。

indexを削除する方法を次に示します。

(a) indexを自動的に削除する方法

標準出力の情報およびメトリクスの情報は、それぞれ「logstash-policy」「metricbeat」という名前のElasticsearch ILMポリシーが設定されています。これらのILMポリシーに対して、削除のポリシーを追加します。

分散トレースの情報はElasticsearch ILMポリシーが設定されていないため、削除を実施するILMポリシーの設定と、ILMポリシーを適用するための設定を行います。

Logstash、Metricbeatのindexを自動的に削除する方法

まず、現在のILMポリシーの内容を確認します(確認の方法は「(2)情報のロールオーバー設定の変更方法」をご覧ください)。

自動的に削除するためには、ILMポリシーの「policy.phases」に「delete」配下を追加し、deleteの「min_age」に、削除するまでに保持する日数を記載します。そのほかの部分は上記の確認結果で表示された値のままで設定します。

Kubernetesコントロールプレーン上で、REST APIのPUTメソッドを使用して、「IPアドレス:ポート番号/_ilm/policy/」のあとにILMポリシー名を指定し、後続に「policy」配下の設定をすべて記載することで、ILMポリシーの値を変更できます。

重要

ILMポリシー変更時の注意事項

必ずILMポリシーの「policy」以下のうち、変更したい部分だけを置き換えて、他の部分は表示された値をそのまま設定してください。もし他の部分を記載しなかった場合、記載しなかった部分は以前の設定から消えてしまいます。

次に、「policy.phases」に7日経過したらindexを削除する場合のコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XPUT 'localhost:30202/_ilm/policy/logstash-policy' \
-H 'Content-Type: application/json; charset=utf-8' \
--data-binary @- << EOF
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
            "rollover" : {
              "max_size" : "10gb",
              "max_age" : "1d"
            }
          }
        },
        "delete" : {
          "min_age" : "7d",
          "actions" : {
            "delete" : {}
          }
        }
      }
    }
}
EOF

<コマンドの実行結果の例>

{"acknowledged":true}
jaegerのindexを自動的に削除する方法

分散トレースの情報はElasticsearch ILMポリシーが設定されていません。そのため、次の(i)(ii)の操作が必要になります。

(i)分散トレースのILMポリシーの追加

自動的に削除するためには、ILMポリシーの「policy.phases」配下に「hot」と「delete」配下を追加し、deleteの「min_age」に、削除するまでに保持する日数を記載します(「hot」の「min_age」には即時反映を示す0msを指定します)。

Kubernetesコントロールプレーン上で、REST APIのPUTメソッドを使用して、「IPアドレス:ポート番号/_ilm/policy/」のあとにILMポリシー名「jaeger-ilm-policy」を指定し、後続に「policy」配下の設定をすべて記載することで、ILMポリシーを作成できます。

次に、「policy.phases」に7日経過したらindexを削除する場合のコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XPUT 'localhost:30202/_ilm/policy/jaeger-ilm-policy' \
-H 'Content-Type: application/json; charset=utf-8' \
--data-binary @- << EOF
{
    "policy" : {
      "phases" : {
        "hot" : {
          "min_age" : "0ms",
          "actions" : {
          }
        },
        "delete" : {
          "min_age" : "7d",
          "actions" : {
            "delete" : {}
          }
        }
      }
    }
}
EOF

<コマンドの実行結果の例>

{"acknowledged":true}
(ii)分散トレースのindexのテンプレートの更新

新規に作成される分散トレースのindexに上記(i)で作成したILMポリシーを反映させるため、分散トレースの2つのindexテンプレート「jaeger-jaeger-service」「jaeger-jaeger-span」それぞれの設定に、(i)のILMポリシーを追加します。

まず、現在のindexテンプレートの内容を確認します。

Kubernetesコントロールプレーン上で、REST APIのGETメソッドを使用して、「IPアドレス:ポート番号/_template/」のあとにテンプレート名を指定することで指定したindexテンプレートを表示できます。

次にテンプレート名「jaeger-jaeger-service」を指定した場合のコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XGET 'localhost:30202/_template/jaeger-jaeger-service?pretty'

<コマンドの実行結果の例>

{
  "jaeger-jaeger-service" : {
    "order" : 0,
    "index_patterns" : [
      "*jaeger-jaeger-service-*"
    ],
    "settings" : {
      "index" : {
        "mapping" : {
          "nested_fields" : {
            "limit" : "50"
          }
        },
        "requests" : {
          "cache" : {
            "enable" : "true"
          }
        },
        "number_of_shards" : "5",
        "number_of_replicas" : "5"
      }
    },
    "mappings" : {
      "dynamic_templates" : [
        {
          "span_tags_map" : {
            "path_match" : "tag.*",
            "mapping" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          }
        },
        {
          "process_tags_map" : {
            "path_match" : "process.tag.*",
            "mapping" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          }
        }
      ],
      "properties" : {
        "operationName" : {
          "ignore_above" : 256,
          "type" : "keyword"
        },
        "serviceName" : {
          "ignore_above" : 256,
          "type" : "keyword"
        }
      }
    },
    "aliases" : { }
  }
}

indexテンプレートにILMポリシーを適用するためには、「settings.index」に「lifecycle」配下を追加し、「lifecycle.name」にILMポリシー名を記載します。そのほかの部分は上記の確認結果で表示された値のままで設定します。

Kubernetesコントロールプレーン上で、REST APIのPUTメソッドを使用して、「IPアドレス:ポート番号/_template/」のあとにindexテンプレート名を指定し、後続に「index_patterns」「settings」「mappings」「aliases」の設定をすべて記載することで、ILMポリシーを適用できます。

重要

indexテンプレート変更時の注意事項

必ずの「settings.index」に「lifecycle」配下を追加し、他の部分は表示された値をそのまま設定してください。もし他の部分を記載しなかった場合、記載しなかった部分は以前の設定から消えてしまいます。

次に、indexテンプレート「jaeger-jaeger-service」にILMポリシー「jaeger-ilm-policy」を適用する場合のコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XPUT 'localhost:30202/_template/jaeger-jaeger-service' \
-H 'Content-Type: application/json; charset=utf-8' \
--data-binary @- << EOF
{
    "index_patterns" : [
      "*jaeger-jaeger-service-*"
    ],
    "settings" : {
      "index" : {
        "lifecycle" : {
           "name": "jaeger-ilm-policy"
         },
        "mapping" : {
          "nested_fields" : {
            "limit" : "50"
          }
        },
        "requests" : {
          "cache" : {
            "enable" : "true"
          }
        },
        "number_of_shards" : "5",
        "number_of_replicas" : "5"
      }
    },
    "mappings" : {
      "dynamic_templates" : [
        {
          "span_tags_map" : {
            "path_match" : "tag.*",
            "mapping" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          }
        },
        {
          "process_tags_map" : {
            "path_match" : "process.tag.*",
            "mapping" : {
              "ignore_above" : 256,
              "type" : "keyword"
            }
          }
        }
      ],
      "properties" : {
        "operationName" : {
          "ignore_above" : 256,
          "type" : "keyword"
        },
        "serviceName" : {
          "ignore_above" : 256,
          "type" : "keyword"
        }
      }
    },
    "aliases" : { }
}
EOF

<コマンドの実行結果の例>

{"acknowledged":true}

分散トレースの2つのindexテンプレート「jaeger-jaeger-service」「jaeger-jaeger-span」それぞれに対して、ILMポリシーを適用してください。

(b) indexを手動で削除する方法

Kubernetesコントロールプレーン上で、REST APIのDELETEメソッドを使用して、「IPアドレス:ポート番号/」のあとに、index名を指定することで指定したindexを削除できます。

jaegerのindexは、同じ日付の名前を持つ「jaeger-jaeger-service XXXX-XX-XX」「jaeger-jaeger-span XXXX-XX-XX」の2種類があるため、同じ日付の名前のindexをペアで削除してください。

次にコマンド例を示します(Elasticsearchのhttp.portが30202の場合)。

# curl -XDELETE 'localhost:30202/metricbeat-X.XX.X-XXXX.XX.XX-XXXXXX'

<コマンドの実行結果の例>

{"acknowledged":true}