此文档适用Apache Skywalking 6.3.0 之前,因为在6.3.0,官方提供了不重启探针的机制。
由于探针和Skywalking OAP 存在注册的机制,如果清理了 Skywalking 所使用的 Elasticsearch 的数据,需要重新启动探针,让探针重新向 OAP 注册。
如果是使用新的 Elasticsearch 作为数据存储,则可以将 旧 Elasticsearch 中关于探针元数据的迁移至新的 ES 索引中(该方式只迁移了元数据,因此会丢失指标数据)。
物料准备
-
拉取迁移 Elasticsearch 文档的
taskrabbit/elasticsearch-dump
镜像。$ docker pull taskrabbit/elasticsearch-dump
步骤说明
- 将 ES 元数据通过
taskrabbit/elasticsearch-dump
工具从 旧 Elasticsearch 中导出来。 - 将旧数据导入新的 Elasticsearch 中。
导出旧 Elasticsearch 的数据
将数据导出到 json
文件,需要导出数据的四个索引分别是:service_inventory
、service_instance_inventory
、endpoint_inventory
、network_address_inventory
注意⚠️: 这一步中链接的 Elasticsearch 地址为 旧 数据的地址.
- 导出
service_inventory
数据到skywalking_service_inventory.json
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--input=http://localhost:9200/service_inventory \
--output=/tmp/skywalking_service_inventory.json \
--type=data
- 导出
service_instance_inventory
数据到skywalking_service_instance_inventory.json
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--input=http://localhost:9200/service_instance_inventory \
--output=/tmp/skywalking_service_instance_inventory.json \
--type=data
- 导出
endpoint_inventory
数据到skywalking_endpoint_inventory.json
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--input=http://localhost:9200/endpoint_inventory \
--output=/tmp/skywalking_endpoint_inventory.json \
--type=data
- 导出
network_address_inventory
数据到skywalking_network_address_inventory.json
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--input=http://localhost:9200/network_address_inventory \
--output=/tmp/skywalking_network_address_inventory.json \
--type=data
将上面步骤导出的 json 文件导入到新的 Elasticsearch 中
如果你的新的 Elasticsearch 中正在被新的 Skywalking OAP 写数据,请先停掉 OAP 并执行如下命令删除 新 Elasticsearch 的 文档:
比如清理 service_inventory 的文档:
curl -XPOST "http://localhost:9200/service_inventory/_doc/_delete_by_query?conflicts=proceed" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": {}
}
}'
同理,清理其余 service_instance_inventory
、endpoint_inventory
、network_address_inventory
三个索引的文档。
注意⚠️: 这一步中链接的 Elasticsearch 地址为 新 数据的地址.
- 将
skywalking_service_inventory.json
导入到service_inventory
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--output=http://localhost:9200/service_inventory \
--input=/tmp/skywalking_service_inventory.json \
--type=data
- 将
skywalking_service_instance_inventory.json
导入到service_instance_inventory
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--output=http://localhost:9200/service_instance_inventory \
--input=/tmp/skywalking_service_instance_inventory.json \
--type=data
- 将
skywalking_endpoint_inventory.json
导入到endpoint_inventory
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--output=http://localhost:9200/endpoint_inventory \
--input=/tmp/skywalking_endpoint_inventory.json \
--type=data
- 将
skywalking_network_address_inventory.json
导入到network_address_inventory
:
docker run --rm -ti -v ~/Desktop:/tmp taskrabbit/elasticsearch-dump \
--output=http://localhost:9200/network_address_inventory \
--input=/tmp/skywalking_network_address_inventory.json \
--type=data
参考
文章首发在公众号:抠腚Coding笔记, 欢迎关注!
并由博客一文多发平台 OpenWrite 发布!