ELK Stack基础教程(2)ElasticSearch索引与集群管理命令
一、如何调用ES
对于ES数据的管理可以通过代码去调用ES自身的API接口来实现,也可以通过浏览器请求、crul命令或者Postman发送请求等。通过调用ES的API就可以实现集群节点状态查看、索引状态查看、集群节点和索引元数据管理、数据增删改查等操作
curl命令与Elasticsearch交互语法
curl -X<VERB>'<PROTOCAL>://<HOST>/<PATH>?<QUERY_STRING>'-d'<BODY>'
<VERB>:HTTP方法,如GET,POST,PUT
<PROTOCAL>:http或者https协议,ES前面有https代理时可用
<HOST>:集群中节点地址
<QUERY_STRING>:可选的查询请求参数,例如?pretty将请求返回更美观易读的JSON数据
<BODY>:JSON格式的请求主体
二、ES集群或数据的日常管理命令
1、创建ES索引
索引需要为Json格式,和关系型数据库对比的话索引就类似于库的概念。索引无需提前创建,在插入数据的时候就会自动完成索引的创建,如果对已存在的索引进行操作则会进行覆盖
curl -XPUT http://127.0.0.1:9200/linuxe{ "acknowledged": true, #true为成功,同时日志中也会有相关create信息 "shards_acknowledged": true, #分片结果 "index": "shopping" #索引名称 }
2、查看ES索引
curl http://127.0.0.1:9200/_cat/indices?v
health字段:当前服务器的健康状态,green代表主分片与副本分片都正常、yellow代表仅主分片正常,有副本分片未正常分配、red则代表主分片未分配,需要立即处理
status字段:索引打开、关闭状态
index字段:索引名
uuid字段:索引编号
pri字段:主分片数量
rep字段:副本分片数量
docs.count字段:可用文档数量
docs.deleted字段:文档删除状态(逻辑删除)
store.size字段:主分片和副分片整体占空间大小
pri.store.size字段:主分片占空间大小
3、删除ES索引,支持使用通配符批量删除
curl -XDELETE http://127.0.0.1:9200/linuxe curl -XDELETE http://127.0.0.1:9200/nginx_web_log.2019.03.*
4、插入数据到ES索引中
索引创建好以后就可以创建文档并添加数据了,这里的文档可以类比为关系型数据库中的表数据,格式需为JSON,如果是对已有数据进行操作则属于update操作而非create
#新增两条记录,指定type为article,ID为2和3 curl -XPOST -H "Content-Type: application/json" 'localhost:9201/linuxe/article/2?pretty' -d ' { "title": "test", "content":"testsfsdfdsfdsf", "PV":10 }' curl -XPOST -H "Content-Type: application/json" 'localhost:9201/blog/article/3?pretty' -d ' { "title": "test", "content":"testsfsdfdsfdsf", "PV":23 }'
5、查看ES数据,加?v会显示详细说明信息。ES采用JSON结构化文档作为数据模型,其中元数据使用_作为前缀,如_id、_type
curl -XGET http://ip:9200/nginx_web_log.2019.03.01/users/1 #返回结果中的_source就是ES里的数据 curl -XGET http://ip:9200/nginx_web_log.2019.03.01/_search #查看索引下所有数据
6、ES的分片和副本
索引创建好了后是不能修改分片数的,但是可以修改副本数,注意副本数需要是节点数-1,否则集群状态会一直是yellow状态,因为没有节点存放多出来的一个副本
#创建一个索引,分片数为2、副本数为1 put /linuxe { "settings": { "number_of_shards" : 2, "number_of_replicas" :1 } }
7、ES的索引模板
如果每次创建索引都要单独设置分片和副本数的话相对比较麻烦,通过索引模板就可以针对一批索引同时设置分片和副本数
#创建一个模板 PUT _template/linuxe_temp { "index_patterns": ["linuxe*"], "settings": { "number_of_shards" : 2, "number_of_replicas" :1 } #使用模板,只要匹配模板命名条件的都会使用模板中的分片和副本数 POST /linuxe1/_doc { "name":"linuxe1", } POST /linuxe2/_doc { "name":"linuxe1", }
——————————————————————————————————————————
cluster API日常用法
1、_cluster/health显示集群状态
curl -X GET "http://10.0.140.84:9200/_cluster/health curl -X GET "http://10.0.140.84:9200/_cluster/health?pretty" #加上?pretty会让显示结果更易读
2、_cluster/state API 查看状态
curl -XGET "http://10.0.140.84:9200/_cluster/state/nodes?pretty"
3、_cluster/stats API(统计)统计数据,主要来查看索引、分片等
curl -XGET "http://10.0.140.84:9200/_cluster/stats?pretty"
可以看出使用curl命令交互的确比较麻烦,所以通常使用插件实现WEB化管理,比如head插件。head安装方法很简单,使用Elasticsearch目录中的plugins脚本即可,插件安装后也不需要重启服务(注意这里是ES2.x的方式,5.x后方式会有不同)。
./bin/plugins install mobz/elasticsearch-head #install后的信息通常是插件开发者的github地址
1、打印指定API下所有功能
直接调用API可以打印出该API下的所有功能,比如图中的indices就是一个用于检查所有索引的功能、health用于检查集群状态
2、查看ES集群健康状态
使用_cluster/health API可以打印出集群当前状态信息。green代表主分片与副本分片都分配正常;yellow代表主分片正常,有副本分片未正常分配;red代表有主分片未分配 。如果集群成为red状态,需要检查是否有集群离线(如果是离线节点,一般通过重启可以恢复。如果是索引问题,则需要删除错误索引)。
http://localhost:9200/_cluster/health #如果状态非green,可以关注unassigned_shard查看未分配的分片数 http://localhost:9200/_cluster/health?pretty #加上pretty会将内容格式化再输出,更美观 http://localhost:9200/_cat/health http://localhost:9200/_cat/health?v #?v可以让显示信息更详尽 http://localhost:9200/_cluster/state?pretty #可以看主节点信息等 GET /_cluster/allocation/explain #集群red的原因
3、查询Elasticsearch所有节点列表
curl http://localhost:9200/_cat/nodes?v
4、ES数据备份与迁移
elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=settings elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=mapping elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=data
评论