在 SkyWalking 中如果 Elasticsearch 索引不存在

serviceErrors
Exception while fetching data (/services) : java.lang.RuntimeException: {“error”:{“root_cause”:[{“type”:“index_not_found_exception”,“reason”:“no such index [sw_service_traffic]”,“resource.type”:“index_or_alias”,“resource.id”:“sw_service_traffic”,“index_uuid”:“na”,“index”:“sw_service_traffic”}],“type”:“index_not_found_exception”,“reason”:“no such index [sw_service_traffic]”,“resource.type”:“index_or_alias”,“resource.id”:“sw_service_traffic”,“index_uuid”:“na”,“index”:“sw_service_traffic”},“status”:404}

遇到的这个异常表明在尝试访问 Elasticsearch 中一个不存在的索引 sw_service_traffic。这个问题通常发生在以下几个场景:

索引尚未创建:可能是因为配置错误或部署过程中的遗漏,导致索引没有被正确创建。
索引已被删除:可能是意外操作或维护过程中被删除了。
配置问题:应用程序和 Elasticsearch 实例之间的配置不匹配。
解决方案

1. 验证索引是否存在

首先,确认该索引是否确实不存在。你可以通过 Elasticsearch 的 API 来检查索引是否存在:

curl -X GET "http://localhost:9200/sw_service_traffic"
如果返回类似 {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [sw_service_traffic]"}],"type":"index_not_found_exception","reason":"no such index [sw_service_traffic]"}}, 那么索引确实不存在。

2. 创建索引

如果索引不存在,你需要创建它。这可以通过编写一个脚本或者使用 REST API 来完成。例如,可以使用以下命令来创建索引:

curl -X PUT "http://localhost:9200/sw_service_traffic" -H 'Content-Type: application/json' -d'
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}'

3. 在 SkyWalking 中如果 Elasticsearch 索引不存在

Apache SkyWalking 是一个应用性能监控 (APM) 工具,它可以自动检测、追踪和报告应用程序的性能数据。SkyWalking 使用 Elasticsearch 作为其默认的数据存储后端之一,用于存储追踪数据、度量指标等。

对于您提到的情况,在 SkyWalking 中如果 Elasticsearch 索引不存在,SkyWalking 通常不会自动创建这些索引。但是,您可以通过配置来实现自动创建索引的功能。

4.自动创建索引

使用 SkyWalking 的动态配置:
SkyWalking 支持通过配置文件自动创建 Elasticsearch 索引。您需要在 application.yml 或者 oap-server.yml 文件中设置相应的配置选项。例如:

深色版本
storage:
  elasticsearch:
    indices:
      auto-create: true

这个配置告诉 SkyWalking 在启动时检查所需的 Elasticsearch 索引,并在索引不存在时自动创建它们。
使用 Elasticsearch 的索引模板:
另一种方法是为 SkyWalking 的索引定义索引模板。Elasticsearch 索引模板允许您预先定义索引的设置和映射,当新的索引被创建时,这些设置会被自动应用。您可以在 Elasticsearch 中预先配置好索引模板。 例如,您可以使用以下命令创建一个索引模板:


curl -X PUT "http://localhost:9200/_template/skywalking" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["sw_*"],
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "timestamp": { "type": "date" },
      "serviceId": { "type": "long" },
      "serviceInstanceName": { "type": "keyword" }
    }
  }
}
'

这将为所有以 sw_ 开头的新索引应用相同的设置和映射。

-X PUT: 使用 HTTP PUT 方法发送请求。
"http://localhost:9200/_template/skywalking": 发送请求到 Elasticsearch 的 _template 路径,路径中的 skywalking 是模板的名字。
-H 'Content-Type: application/json': 设置请求头中的 Content-Type 为 application/json,表明发送的数据格式为 JSON。
-d: 指定请求体的内容。
JSON 内容解释
index_patterns: 定义此模板适用于哪些索引。这里的 "sw_*" 表示所有以 sw_ 开头的索引都会使用这个模板。
settings: 定义索引的设置。
"number_of_shards": 索引的分片数量。这里设置为 5,意味着索引将被分成 5 个主分片。
"number_of_replicas": 主分片的副本数量。这里设置为 1,意味着每个主分片都将有一个副本。
mappings: 定义索引的映射规则,即文档字段的类型和属性。
"dynamic": 控制是否允许自动创建未在映射中定义的字段。这里设置为 "strict" 表示不允许自动创建新字段。
"properties": 明确定义字段及其类型。
"timestamp": 字段类型为 date,表示这是一个日期类型字段。
"serviceId": 字段类型为 long,表示这是一个长整型数字字段。
"serviceInstanceName": 字段类型为 keyword,表示这是一个关键词类型字段,通常用于不需要分析的字符串,比如索引服务实例的名称。

总结
这段命令将会向 Elasticsearch 发送一个请求,创建一个名为 skywalking 的索引模板。这个模板将应用于所有以 sw_ 开头的索引,并且会为这些索引定义指定的设置和映射规则。这意味着每当一个新的索引被创建并且符合这个模式时,Elasticsearch 将自动应用上述定义的设置和映射。

这样设置可以简化索引管理和确保所有相关的索引都有一致的结构。

5.手动创建索引:

如果您希望手动控制索引的创建,您可以在 SkyWalking 启动前使用 Elasticsearch 的 REST API 或者管理工具来创建所需的索引。例如,如果您知道 SkyWalking 会使用特定的索引名(如 sw_service_traffic),那么您可以提前创建该索引。
注意事项

当使用自动创建索引的功能时,请确保您理解 Elasticsearch 索引的生命周期管理策略,以及这些索引将如何影响您的存储空间和性能。

确保在生产环境中对自动创建索引的行为进行适当的限制,以避免不必要的索引创建。
如果您使用的是较旧版本的 SkyWalking 或者遇到了兼容性问题,您可能需要查看官方文档以获得更详细的指导。

请检查您的 SkyWalking 版本,并参考官方文档来确定最适合您的配置方式。如果您需要进一步的帮助,包括具体的配置示例或其他细节,请告诉我您的 SkyWalking 版本和其他相关信息。

6.配置了之后如何查看索引创建情况

1. 查看索引列表

首先,您可以列出所有现有的索引,看看是否已经创建了 sw_* 索引。使用以下命令:

深色版本
curl -X GET "http://localhost:9200/_cat/indices?v=true&pretty"

这将返回所有索引的列表,包括它们的状态、UUID、优先级、主分片数、副本分片数、文档数、存储大小等信息。您可以在输出中查找以 sw_ 开头的索引。

2. 检查特定索引

如果您想检查某个具体索引的状态和设置,可以使用以下命令:

深色版本
curl -X GET "http://localhost:9200/sw_service_traffic?pretty"

这将返回索引的详细信息,包括设置和映射。

3. 检查索引的设置

如果您想查看特定索引的设置,可以使用以下命令:

深色版本
curl -X GET "http://localhost:9200/sw_service_traffic/_settings?pretty"

这将显示索引的设置,包括主分片数 (number_of_shards) 和副本分片数 (number_of_replicas)。

4. 检查索引的映射

如果您想查看特定索引的映射,可以使用以下命令:

深色版本
curl -X GET "http://localhost:9200/sw_service_traffic/_mapping?pretty"

这将显示索引的映射信息,包括字段类型和其他映射配置。

5. 检查索引模板

如果您想查看索引模板是否已成功创建,可以使用以下命令:

深色版本
curl -X GET "http://localhost:9200/_templates/skywalking?pretty"

这将返回索引模板的信息,包括其设置和映射配置。

6. 监控集群健康状态

您还可以监控集群的整体健康状态,以确保索引的创建没有引起任何问题。使用以下命令:

深色版本
curl -X GET "http://localhost:9200/_cluster/health?pretty"

这将返回集群的健康状态,包括活跃的主分片数和副本分片数。

7. 检查日志

最后,检查 Elasticsearch 的日志文件也是一个好的习惯,特别是如果遇到任何问题。日志文件通常位于 $ES_HOME/logs 目录下。

示例输出
假设您使用了上面提供的命令创建了索引模板,并且 Elasticsearch 成功创建了一个以 sw_ 开头的索引,例如 sw_service_traffic,那么您可能会看到类似于下面的输出:

深色版本
$ curl -X GET "http://localhost:9200/sw_service_traffic?pretty"
{
  "sw_service_traffic" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "timestamp" : {
          "type" : "date"
        },
        "serviceId" : {
          "type" : "long"
        },
        "serviceInstanceName" : {
          "type" : "keyword"
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1696210222573",
        "number_of_shards" : "3",
        "number_of_replicas" : "1",
        "uuid" : "example-uuid",
        "version" : {
          "created" : "8000099"
        },
        "provided_name" : "sw_service_traffic"
      }
    }
  }
}

在这个例子中,sw_service_traffic 索引已经成功创建,并且具有正确的设置和映射。

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值