Elasticsearch

简介

WARNING

支持的 ES 版本:8.x

Elasticsearch 版本会自动从 root/ping 端点获取。基于该版本,Jaeger 会使用兼容的索引映射和 Elasticsearch REST API。也可以通过 version: 配置属性显式指定版本。

除了安装并运行 Elasticsearch 之外,Elasticsearch 不需要其他初始化操作。运行起来后,将正确的配置值传递给 Jaeger。

配置

Jaeger 中使用 Elasticsearch 后端的示例配置可在 Jaeger 仓库中找到:config-elasticsearch.yaml。未来配置文档将根据 schema 自动生成。在此之前,请参考 config.go 作为权威来源。

分片和副本

分片和副本是需要特别注意的配置值,因为这些是在创建索引时决定的。本文 详细介绍了应如何选择分片数量以进行优化。

Index Rollover

Elasticsearch rollover 是一种索引管理策略,可优化分配给索引的资源使用。例如,不包含任何数据的索引仍会分配分片;相反,单个索引可能包含远多于其他索引的数据。可以通过 use_aliases: true 配置属性启用 rollover 功能。

Rollover 允许你根据以下一个或多个条件配置何时切换到新索引:

  • max_age - 索引的最大年龄。它使用 时间单位dhm
  • max_docs - 索引中的最大文档数。
  • max_primary_shard_size - 单个主分片的最大大小。它使用 字节大小单位 tbgbmb

要了解有关 Jaeger 中 rollover 索引管理的更多信息,请参阅这篇 文章

初始化

下面的命令会通过创建索引别名、索引和索引模板,为 rollover 部署准备 Elasticsearch:

nerdctl run -it --rm --net=host \
  build-harbor.alauda.cn/asm/jaeger-es-rollover:2.16.0-r1 \
  init http://localhost:9200

如果你需要初始化归档存储,请添加 -e ARCHIVE=true

初始化完成后,即可使用 use_aliases: true 部署 Jaeger。

ILM 支持

Elasticsearch ILM 会根据性能、可靠性和保留要求自动管理索引。

ILM 支持是手动 rollover + lookback + index-cleaner 工作流的替代方案。启用 ILM 后,Elasticsearch 会根据配置的策略自动管理 rollover 和保留。

例如:

  • 按大小(字节数或文档数)或按时间将数据 rollover 到新索引,并归档旧索引
  • 删除过期索引以满足数据保留标准

启用 ILM 支持

  1. 在 Elasticsearch 中创建一个名为 jaeger-ilm-policy 的 ILM 策略。

    例如,下面的策略会在“active”索引超过 1m 时执行 rollover,并删除超过 2m 的索引。

    curl -X PUT \
      http://localhost:9200/_ilm/policy/jaeger-ilm-policy \
      -H 'Content-Type: application/json; charset=utf-8' \
      --data-binary @- << EOF
    {
      "policy": {
        "phases": {
          "hot": {
            "min_age": "0ms",
            "actions": {
              "rollover": {
                "max_age": "1m"
              },
              "set_priority": {
                "priority": 100
              }
            }
          },
          "delete": {
            "min_age": "2m",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
    EOF
  2. 使用 ES_USE_ILM=true 运行 Elasticsearch 初始化程序:

    nerdctl run -it --rm --net=host \
      -e ES_USE_ILM=true \
      build-harbor.alauda.cn/asm/jaeger-es-rollover:2.16.0-r1 \
      init http://localhost:9200

    如果你需要初始化归档存储,请添加 -e ARCHIVE=true

    WARNING

    在启用 ILM 支持进行初始化时,请确保已提前在 Elasticsearch 中创建名为 jaeger-ilm-policy 的 ILM 策略(见上一步),否则会显示如下错误信息:

    "ILM policy jaeger-ilm-policy doesn't exist in Elasticsearch. Please create it and rerun init"

初始化完成后,使用 use_ilm: trueuse_aliases: true 部署 Jaeger。