ELK系列(五)、ElasticSearch常用命令
|字数总计:2.8k|阅读时长:12分钟|阅读量:|
前言
上篇文章末尾ES集群开启x-pack权限认证后,采用Restful的方式进行了集群简单的验增删改查操作。现在基于Kibana已安装完成的基础上,采用Dev-tools工具进行实战,开发环节中也建议采用这种方式,原因有下:
1)kibana 自带的 dev-tools 工具具有良好的提示功能
2)dev-tools 工具中开发方便快捷,具有较高的效率
3)最终要的一点是不容易出错
那么,此处呢就主要以 Kibana Dev-tools 工具为主,采用DSL语言进行讲述ElasticSearch中常用的的一些命令。
常用命令汇总
索引维护
查看所有索引
创建索引(并且指定分片数量)
1 2 3 4 5 6 7 8 9 10 11
| PUT test { "settings": { "number_of_shards": 2, "number_of_replicas": 2 } }
# 或者直接创建
PUT test
|
查看某个索引信息
添加数据(自定义ID)
1 2 3 4 5 6
| PUT test/_doc/1 { "name":"测试1", "opercation":1, "location":"ad1,ad2,ad3" }
|
添加数据(自动生成ID)
1 2 3 4
| POST test/_doc { "name":"test2" }
|
批量插入数据
1 2 3 4 5
| POST _bulk {"index":{"_index":"tb_user","_id":1}} {"user":"张三","addres":"广州"} {"index":{"_index":"tb_user","_id":2}} {"user":"李四","addres":"北京"}
|
批量查询多个索引
1 2 3 4 5 6 7 8 9 10 11 12 13
| GET _mget { "docs": [ { "_index": "test", "_id": 1 }, { "_index": "tb_user", "_id": 1 } ] }
|
查询索引中多行数据
1 2 3 4
| GET /tb_user/_doc/_mget { "ids":["1","2"] }
|
给索引添加字段
1 2 3 4
| POST /tb_user/_doc/_update { "field1":"广州市天河区" }
|
设置字段类型
1 2 3 4 5 6 7 8 9 10
| POST /tb_user/_mapping/_doc { "properties": { "field1": { "type": "long" }, "field2": { "type": "keyword" } }
|
更新某条数据值
1 2 3 4 5 6
| POST /test/_update/2 { "doc":{ "age":40 } }
|
更新字段值(根据条件查询后更新)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| POST /myindex/_update_by_query { "script": { "source": "ctx._source.name=params.name; ctx._source.city=params.city", "long": "painless", "params": { "name": "test-name", "city": "北京" }, "query": { "match": { "age": 40 } } } }
|
索引的关闭和打开
1 2
| POST /tb_user/_close POST /tb_user/_open
|
删除索引
1 2
| DELETE testindex DELETE myindex/_doc/2
|
根据查询条件进行删除
1 2 3 4 5 6 7 8
| POST myindex/_delete_by_query { "query":{ "match":{ "name":"张三" } } }
|
索引搜索
查询记录是否存在
查询数量
查询最新数据记录(默认10条)
查询指定字段
1 2 3 4
| GET tb_user/_search { "_source": ["user","addres"] }
|
查询最新1条数据记录
1
| GET tb_user/_search?size=1
|
搜索(分页)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| GET tb_user/_search { "size": 20, "from": 1 } 或 GET tb_user/_search { "size": 20, "from": 1, "query": { "match_all": {} } }
|
搜索(根据条件分页)
1 2 3 4 5 6 7 8
| GET tb_user/_search { "query": { "match": { "user": "李四" } } }
|
搜索(根据条件查询[全词匹配])
1 2 3 4 5 6 7 8
| GET tb_user/_search { "query": { "match": { "user.keyword": "李四" } } }
|
搜索(复合查询:根据多个条件(must and must查询))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| GET tb_user/_search { "query": { "bool": { "must": [ { "match": { "addres": "广州" } }, { "match": { "user": "test1" } } ] } } }
|
搜索(复合查询:根据多个条件(must or should查询))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| GET tb_user/_search { "query": { "bool": { "must": [ { "match": { "addres": "广州" } } ], "should": [ { "match": { "user": "赵六" } } ], "minimum_should_match": 1 } } }
|
主要参数:
must:文档必须匹配这些条件才能被包含进来。
must_not:文档必须不匹配这些条件才能被包含就来。
should:如果满足这些语句中的任意语句,将增加_score,否则无任何影响,主要用于修正每个文档的相关性得分。
filter:必须匹配,但他以不评分、过滤模式来进行,这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
搜索(仅仅根据条件刷选数据(不做打分处理))
1 2 3 4 5 6 7 8 9 10 11 12
| GET tb_user/_search { "query": { "bool": { "filter": { "term": { "addres.keyword": "北京" } } } } }
|
搜索(范围查询)
1 2 3 4 5 6 7 8 9 10 11
| GET myindex/_search { "query": { "range": { "age": { "gte": 40, "lte": 30 } } } }
|
搜索(查询是否存在该字段值的数据)
1 2 3 4 5 6 7 8
| GET myindex/_search { "query": { "exists": { "field": "location" } } }
|
搜索(多个索引通配符查询)
搜索(批量查询)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| GET /_msearch {"index" : "myindex"} {"query" : {"match_all" : {}}, "from" : 0, "size" : 10} {"index" : "tb_user"} {"query" : {"match_all" : {}}} {"index" : "tb_car"} {"query" : {"match_all" : {}}}
或者(当指定索引名称myindex时,查询条件可以直接使用{}表示默认索引)
GET myindex/_msearch {} {"query" : {"match_all" : {}}, "from" : 0, "size" : 10} {"index" : "tb_user"} {"query" : {"match_all" : {}}} {} {"query" : {"match_all" : {}}}
|
搜索(聚合分组范围统计)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| GET myindex/_search { "size": 0, "aggs": { "age_aggs_XXX": { "range": { "field": "age", "ranges": [ { "from": 0, "to": 10 }, { "from": 20, "to": 30 }, { "from": 30, "to": 60 } ] } } } }
|
搜索(聚合分组统计)
1 2 3 4 5 6 7 8 9 10 11 12
| GET myindex/_search { "size": 0, "aggs": { "city_agges_nameXXX": { "terms": { "field": "age", "size": 5 } } } }
|
搜索(根据条件查询后聚合统计)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| GET myindex/_search { "size": 0, "query": { "match": { "name": "test-name" } }, "aggs": { "city_agges_xxx": { "terms": { "field": "city", "size": 5 } } } }
|
搜索(聚合统计个数)
1 2 3 4 5 6 7 8 9 10 11
| GET myindex/_search { "size": 0, "aggs": { "city_agges_xxx": { "cardinality": { "field": "city" } } } }
|
搜索(多层聚合统计)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| GET myindex/_search { "size": 0, "aggs": { "city_agges_nameXXX": { "terms": { "field": "city", "size": 5 }, "aggs": { "avg_nameXXX": { "avg": { "field": "age" } } } } } }
|
搜索(聚合统计函数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| GET myindex/_search { "size": 0, "aggs": { "avg_nameXXX": { "avg": { "field": "age" } } } } GET myindex/_search { "size": 0, "aggs": { "avg_nameXXX": { "percentiles": { "field": "age", "percents": [10,30,50,80,100] } } } }
|
状态 & 统计相关命令清单
获取版本和集群名称等信息
获取集群健康状态等信息
包括集群名称、节点数、数据节点数、分片等的一些统计信息
获取节点列表信息
显示了堆内存、磁盘使用情况,CPU 、负载和主机角色。
用途:用来监视负载和磁盘使用情况以及主机角色。
1
| GET /_cat/nodes?v&h=heap.percent,diskUsedPercent,cpu,load_1m,master,name&s=name
|
Index Level 索引层面健康
1
| GET /_cluster/health?level=indices&pretty
|
Shard Level 分片层面健康
1
| GET /_cluster/health?level=shards&pretty
|
获取集群统计状态信息
用途:有助于基本故障排除。
获取节点级别的统计信息
包括堆使用情况等
线程相关状态&统计命令清单
线程队列视图
1
| GET /_cat/thread_pool?v&h=node_name,name,type,active,size,queue,queue_size,rejected,largest,completed,min,max&s=node_name,name
|
查看热点线程,用于排查CPU资源占用
1
| GET /_nodes/hot_threads/
|
快速获取索引模式
例如:所有这些logstash *前缀索引的文档总数的方法。
1
| GET /_cat/count/logstash*?v
|
索引相关状态&统计命令清单
通配符索引列表获取
包含:大小,文档计数,状态等。
1
| GET /_cat/indices/logstash*?v
|
找到size 最大的索引
1
| GET /_cat/indices/logstash-*?v&h=index,ss&s=ss:desc
|
获取状态为黄色的索引
1
| GET /_cat/indices?v&health=yellow
|
红色 red:至少一个主分片不可用。
黄色 yellow:至少一个副本分片不可用。
绿色 green:集群主、副本分片都可用,集群健康。
设置相关清单
Elasticsearch中有许多设置,但最常见的是“集群”和“索引”级别。
集群设置
最基本的集群设置视图-显示非默认的持久性和瞬态设置信息。
更大的列表视图-包括所有默认值,并使用平面视图使其更易于阅读。
1
| GET /_cluster/settings?include_defaults=true&flat_settings=true
|
索引设置
获取指定索引的设置列表信息。
1
| GET /logstash-cron-2020.08.03/_settings
|
获取索引的元信息、设置信息以及Mapping信息。
1
| GET /logstash-cron-2020.08.03
|
关闭&删除索引
关闭索引
支持单个或者模糊匹配多个索引。
1
| POST /logstash-*-2020.03.*/_close
|
删除索引
支持单个或者模糊匹配多个
1
| DELETE /logstash-*-2020.04.*
|
故障排查清单
获取已分配和未分配的分片。
1
| GET /_cat/shards?v&h=n,index,shard,prirep,state,sto,sc,unassigned.reason,unassigned.details&s=sto,index
|
查看未分配的分片及原因
1
| GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason&s=state
|
查看未分配的细节说明信息
1
| GET /_cluster/allocation/explain
|
查看指定分片未分配的细节
1 2
| GET /_cluster/alloGET /_cluster/allocation/explain { "index": "logstash-cloudtrail-2019.10.16", "shard": 0, "primary": true} cation/explain { "index": "logstash-cloudtrail-2019.10.16", "shard": 0, "primary": true}
|
下线节点
1 2 3 4 5 6
| PUT _cluster/settings?pretty { "transient": { "cluster.routing.allocation.exclude._ip": "10.0.0.1" } }
|
模板清单
列举已定义的所有模板
1
| GET /_cat/templates?v&s=order,name
|
列举指定名称的模板信息
快照&恢复
列出系统中配置的快照存储库
大多数其他API调用都需要这些名称。
获取任何正在运行的快照的状态和统计信息
获取快照的有用信息
1
| GET /_cat/snapshots/my_repository?v&h=id,status,start_time,duration,indicies,successful_shards,failed_shards,total_shards
|
分片分配与恢复清单
分片分配查看
分片恢复查看
运行任务查看
1
| GET /_cat/pending_tasks?v
|
清理缓存
结语
以上命令清单由基础到高阶再到运维相关,较为全面,建议收藏,作为整个知识体系的完善与加固。另外强烈建议通过官网进行学习,熟悉官网的目录结构,以便在需要的时候可以快速定位找到自己想要的答案,毕竟官网才是最具权威的。
参考资料:
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
https://www.elastic.co/guide/index.html
部分内容转载于腾讯云社区:铭毅天下