由于探针和 Skywalking OAP 存在注册的机制,如果清理了 Skywalking 所使用的 Elasticsearch 的数据,需要重新启动探针,让探针重新向 OAP 注册。重启探针是为了清理探针中自己缓存的元数据(ServiceId、ServiceInstanceId 等等)。
如果是使用新的 Elasticsearch 作为数据存储,则可以将旧 Elasticsearch 中关于探针元数据的迁移至新的 ES 索引中(该方式只迁移了元数据,因此会丢失指标数据)来避免探针重启,从而避免重启客户应用。
taskrabbit/elasticsearch-dump
镜像工具或者查看附件。$ docker pull taskrabbit/elasticsearch-dump
taskrabbit/elasticsearch-dump
工具从 旧 Elasticsearch 中导出来。此步骤需要停掉使用 旧 Elasticsearch 的 Skywaling OAP,防止产生新的元数据。或者导出数据期间不要接入新的探针。
将数据导出到 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
如果你的新的 Elasticsearch 中正在被新的 Skywalking OAP 写数据,请先停掉 OAP 并执行如下命令删除 新 Elasticsearch 的 文档:
此步骤需要停掉使用 新 Elasticsearch 的 Skywaling OAP,防止产生新的元数据。或者导入数据期间不要接入新的探针。
比如清理 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