ELK Stack基础教程(2)ElasticSearch索引与集群管理命令

TangLu 未命名 2022-10-18 2214 0

一、如何调用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字段:主分片占空间大小

es_index.png


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用于检查集群状态

catapi1.png


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


评论