ES故障排查命令
# 🟢 Elasticsearch 基础概念介绍
# 1️⃣ Elasticsearch 是什么?
- Elasticsearch 是一个基于 Apache Lucene 的分布式搜索引擎。
- 适用于全文搜索、结构化搜索、分析大数据。
- 特点:
- 分布式、高可用、可水平扩展
- 实时索引和搜索
- 支持复杂查询、聚合和分析
- RESTful API 访问
# 2️⃣ 核心术语
| 概念 | 说明 |
|---|---|
| Cluster(集群) | 一组 Elasticsearch 节点共同工作形成的集群,由 cluster.name 标识。 |
| Node(节点) | 集群中的单个 Elasticsearch 实例。每个节点有角色(master、data、ingest、coordinating)。 |
| Index(索引) | 类似数据库中的“库”,存储文档的逻辑集合,每个索引有配置的主分片和副本分片。 |
| Document(文档) | 索引中的一条记录,JSON 格式。 |
| Field(字段) | 文档中的键值对,可用作搜索和分析。 |
| Shard(分片) | 索引被切分成的基本存储单元。主分片(primary)存储原始数据,副本分片(replica)用于备份和负载均衡。 |
| Replica(副本) | 主分片的复制,用于容错和高可用。 |
| Mapping(映射) | 定义文档字段类型和索引规则。 |
| Analyzer(分析器) | 将文本拆分为可搜索的词条,用于全文搜索。 |
| Cluster State(集群状态) | 集群元信息,包括索引、分片、节点、路由信息。 |
# 3️⃣ 节点角色
| 角色 | 功能 |
|---|---|
| Master Node(主节点) | 管理集群元数据、节点加入、索引创建、分片分配。 |
| Data Node(数据节点) | 存储数据和执行搜索、聚合操作。 |
| Ingest Node(预处理节点) | 可对文档执行 pipeline 处理(例如解析、修改字段)。 |
| Coordinating Node(协调节点) | 接收请求,分发到数据节点,汇总结果(所有节点默认兼任协调节点)。 |
| ML / Voting / Frozen Nodes | 可选节点角色,用于机器学习、投票、冷数据存储。 |
# 4️⃣ 数据存储和查询
- 分片机制
- 索引 → 主分片 + 副本分片
- 支持水平扩展,大数据量分布在多个节点
- 倒排索引
- 核心搜索机制,将文档拆分成词条 → 生成倒排索引
- 查询速度非常快
- 全文搜索
- 支持 match、multi_match、bool 查询
- 支持高亮、排序、分页、聚合
# 5️⃣ 高可用与扩展
- 节点故障时:
- 副本分片自动提升为主分片
- 分片重新分配保证数据安全
- 扩展:
- 增加节点 → 分片重新均衡
- 索引分片可通过
number_of_shards/number_of_replicas配置
# 6️⃣ 常用 API 分类
| 类型 | 常用 API |
|---|---|
| 集群管理 | _cluster/health, _cluster/state, _cat/nodes |
| 索引管理 | _cat/indices, _stats, _mapping, _settings |
| 文档操作 | GET /index/_doc/id, POST /index/_doc, DELETE /index/_doc/id |
| 搜索 | _search, _msearch, _count, _termvectors |
| 分片 / 副本 | _cat/shards, _cluster/reroute, _recovery |
# 🔹 总结
- Elasticsearch 是 分布式搜索与分析平台,通过 集群 → 节点 → 索引 → 分片 → 文档 的层级管理数据。
- 主分片和副本分片是保证高可用和可扩展的核心机制。
- 节点角色不同,功能不同,企业部署中通常 Master + Data + Ingest 分开。
- 熟悉
_cat系列 API 和_clusterAPI 是运维和排障的基础。
# 🟢 Elasticsearch 7.17 企业级运维一页表
| 模块 | 命令 / URL | 说明 | 建议阈值 / 注意事项 |
|---|---|---|---|
| 集群健康 | _cluster/health?pretty | 查看集群状态、节点数、分片活跃度 | status=green,active_shards_percent_as_number>99% |
| 节点列表 | _cat/nodes?v | 查看每个节点资源、角色、负载 | heap.percent < 75%,ram.percent < 80% |
| 主节点 | _cat/master?v | 当前 master 节点信息 | 避免单 master 单点故障 |
| 索引列表 | _cat/indices?v | 查看索引状态、主副本、文档数、存储量 | pri/rep 合理配置,store.size < 磁盘总量 80% |
| 分片状态 | _cat/shards?v | 查看分片分布及状态 | 所有分片状态应为 STARTED,UNASSIGNED 需关注 |
| 节点统计 | _nodes/stats?pretty | 节点 CPU、内存、磁盘、线程池详细信息 | 重点监控 JVM 堆、磁盘空间、线程池队列 |
| JVM 监控 | _nodes/stats/jvm?pretty | 查看堆内存、GC 次数和时间 | JVM 堆使用 < 75%,GC频繁需排查 |
| 线程池监控 | _cat/thread_pool?v | 查看索引、搜索、bulk 等线程池使用情况 | 队列长度高说明瓶颈 |
| 慢查询 | _cat/slowlog?v | 查看慢查询记录 | 定期优化查询或增加索引 |
| 索引分片配置 | _stats / 创建索引时指定 shards/replicas | 查看索引主副本、文档数量、存储大小 | 主分片数量与数据量匹配,副本数≥1 |
| 重新分片 | _cluster/reroute | 手动分片迁移 | 分片均衡、避免节点磁盘满 |
| 删除索引 | DELETE /index-name | 删除历史索引 | 可结合 ILM 自动管理 |
| 日志路径 | /var/log/elasticsearch/ | 查看 elasticsearch.log / gc.log | 关注 GC、错误和警告 |
| 集群排障流程 | 1. _cluster/health → 2. _cat/nodes → 3. _cat/shards → 4. 查看日志/线程池/JVM → 5. 调整分片/节点 | 遇到集群红色或节点异常快速定位 | 优先保证 master 节点健康 |
# 🔹 运维小技巧
- 应用配置:
- 至少配置 2~3 个节点 IP 或 VIP 连接 ES,保证 failover。
- 分片管理:
- 数据量大,索引分片数量按 30~50GB/主分片配置。
- 性能监控:
- JVM Heap、CPU、磁盘、线程池队列需定期监控。
- 自动化管理:
- 使用 ILM 管理索引生命周期(滚动、删除、迁移)。
- 日志分析:
- 定期分析 slowlog、elasticsearch.log、gc.log,排查慢查询、OOM、节点离线。
# 🟢 1️⃣ 查看索引中的数据(最常用)
# ✔ 查询全部数据(类似 select *)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_search?pretty
1
示例返回:
{
"hits": {
"total": { "value": 100 },
"hits": [
{
"_index": "my-index",
"_source": {
"name": "张三",
"age": 18
}
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
👉 _source 就是你的数据
# ✔ 只查前 N 条(避免数据过多)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_search -H 'Content-Type: application/json' -d '
{
"size": 10
}'
1
2
3
4
2
3
4
# ✔ 条件查询(类似 where)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_search -H 'Content-Type: application/json' -d '
{
"query": {
"match": {
"name": "张三"
}
}
}'
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 🟢 2️⃣ 查询指定一条数据(根据ID)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_doc/ID?pretty
1
👉 类似:
select * from table where id=xxx
1
# 🟢 3️⃣ 查看索引有多少数据(count)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_count?pretty
1
返回:
{
"count": 1000
}
1
2
3
2
3
# 🟢 4️⃣ 查看索引结构(字段)
curl -u 用户:密码 -k https://ES地址:9200/索引名/_mapping?pretty
1
👉 用于:
- 看字段类型(text / keyword / date)
- 排查查询问题
# 🟢 5️⃣ 查看索引统计(数据量、大小)
curl -u 用户:密码 -k https://ES地址:9200/_cat/indices?v
1
示例:
index docs.count store.size
my-index 100000 500mb
1
2
2
# 🟢 6️⃣ 企业排查常用组合(重点)
如果你线上排问题,一般这样查👇
# ✔ 看有没有数据
/_count
1
# ✔ 看数据结构
/_mapping
1
# ✔ 抽样数据
/_search?size=5
1
# 🔥 运维经验
# ❗ 不要直接查全量数据
/_search
1
👉 默认只返回 10 条,但如果你:
"size": 100000
1
👉 会拖垮 ES(非常常见事故)
# ✔ Kibana 更方便(推荐)
如果你有 Kibana:
- Discover 页面直接看数据
- 类似 SQL 查询体验
上次更新: 2026/06/22, 04:35:42
|