1. ElasticSearch监控recovery的命令
- cat/recovery API:
- 命令:
curl -XGET 'http://localhost:9200/_cat/recovery?v'
- 作用:提供关于分片恢复的详细信息,包括索引、分片、节点、类型(如初始恢复、重新平衡等)、恢复进度等。
- cluster/stats API:
- 命令:
curl -XGET 'http://localhost:9200/_cluster/stats?filter_path=indices.recovery'
- 作用:获取集群的统计信息,通过
filter_path
可以只关注索引恢复相关的部分,能得到诸如正在恢复的分片总数、已完成恢复的分片总数等信息。
- indices/stats API:
- 命令:
curl -XGET 'http://localhost:9200/_all/_stats/recovery'
- 作用:获取所有索引的恢复统计信息,包括已恢复的文档数、正在恢复的文档数等。
2. 自动化分析脚本示例
Shell脚本示例
#!/bin/bash
# 使用_cat/recovery API获取恢复信息
recovery_info=$(curl -s 'http://localhost:9200/_cat/recovery?v')
# 提取已恢复的分片数量
completed_shards=$(echo "$recovery_info" | grep -v '^index' | grep 'done' | wc -l)
echo "已恢复的分片数量: $completed_shards"
# 提取正在恢复的分片状态
in_progress_status=$(echo "$recovery_info" | grep -v '^index' | grep -v 'done' | awk '{print $5}')
echo "正在恢复的分片状态: $in_progress_status"
Python脚本示例
import requests
# 使用_cat/recovery API获取恢复信息
response = requests.get('http://localhost:9200/_cat/recovery?v')
recovery_info = response.text
completed_shards = 0
in_progress_status = []
lines = recovery_info.split('\n')
for line in lines[1:]:
if line:
parts = line.split()
if parts[5] == 'done':
completed_shards += 1
else:
in_progress_status.append(parts[5])
print(f"已恢复的分片数量: {completed_shards}")
print(f"正在恢复的分片状态: {in_progress_status}")