elasticsearch教程

news2024/11/15 8:45:09

1. 单点部署(rpm):

#提前关闭firewalld,否则无法组建集群
#1. 下载ES rpm包
]# https://www.elastic.co/cn/downloads
#2. 安装es
]# rpm -ivh elasticsearch-7.17.5-x86_64.rpm 
#3. 调整内核参数(太低的话es会启动报错)
echo "vm.max_map_count=655360
fs.file-max = 655350
fs.nr_open = 655350" > /etc/sysctl.d/es.conf
sysctl -f  /etc/sysctl.d/es.conf

ulimit -n 655350
ulimit -u 655350
echo "* soft nofile 655350
* hard nofile 655350
* soft nproc 655350 
* hard nproc 655350" > /etc/security/limits.d/es7.conf

#4. 修改es的配置文件--------------------------------------------------
]# vim /etc/elasticsearch/elasticsearch.yml 
...
#ES服务监听对外暴露服务的地址
network.host: 0.0.0.0
# 指定ES集群的节点IP
discovery.seed_hosts: ["10.0.0.101"]
# 指定参与master选举的节点
cluster.initial_master_nodes: ["10.0.0.101"]
#----------------------------------------------------------------
#5. 启动ES服务
]# systemctl enable --now elasticsearch

#6. 验证节点是否正常工作
]# ss -taunlp|grep java
tcp    LISTEN     0      128    [::]:9200      [::]:*  users:(("java",pid=4192,fd=302))
tcp    LISTEN     0      128    [::]:9300      [::]:*  users:(("java",pid=4192,fd=287))                 users:(("java",pid=2813,fd=287))
#9200端口作用: 对ES集群外部提供http/https服务。可以理解为对客户端提供服务。
#9300端口作用:	对ES集群内部进行数据通信传输端口。走的时候tcp协议。

#7.客户端验证
]# curl 10.0.0.101:9200
{
  "name" : "elk1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "V_9NnNDdSDOy-OcrZBTFFA",
  "version" : {
    "number" : "7.17.5",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "8d61b4f7ddf931f219e3745f295ed2bbc50c8e84",
    "build_date" : "2022-06-23T21:57:28.736740635Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

2. 集群部署(rpm)

集群节点:10.0.0.101,10.0.0.102,10.0.0.103

#提前关闭firewalld,否则无法组建集群
#1. 所有节点下载ES软件包
]# https://www.elastic.co/cn/downloads
#2. 所有节点安装es
]# rpm -ivh elasticsearch-7.17.5-x86_64.rpm 
#3. 调整内核参数(太低的话es会启动报错)
echo "vm.max_map_count=655360
fs.file-max = 655350
fs.nr_open = 655350" > /etc/sysctl.d/es.conf
sysctl -f  /etc/sysctl.d/es.conf

ulimit -n 655350
ulimit -u 655350
echo "* soft nofile 655350
* hard nofile 655350
* soft nproc 655350 
* hard nproc 655350" > /etc/security/limits.d/es7.conf
#4. 101修改es的配置文件--------------------------------------------------
]# vim /etc/elasticsearch/elasticsearch.yml 
...
#集群名称
cluster.name: ES-CLUSTER1

#ES服务监听对外暴露服务的地址
network.host: 0.0.0.0
# 指定ES集群的节点IP
discovery.seed_hosts: ["10.0.0.101","10.0.0.102","10.0.0.103"]
# 指定参与master选举的节点
cluster.initial_master_nodes: ["10.0.0.101","10.0.0.102","10.0.0.103"]
#----------------------------------------------------------------

#5. 在101上把配置文件拷贝到102,103上
]# scp /etc/elasticsearch/elasticsearch.yml root@10.0.0.102:/etc/elasticsearch/
]# scp /etc/elasticsearch/elasticsearch.yml root@10.0.0.103:/etc/elasticsearch/

#6. 所有节点启动ES服务
]# systemctl enable --now elasticsearch

#7. 三个节点,验证节点是否正常工作
]# ss -taunlp|grep java
tcp    LISTEN     0      128    [::]:9200      [::]:*  users:(("java",pid=4192,fd=302))
tcp    LISTEN     0      128    [::]:9300      [::]:*  users:(("java",pid=4192,fd=287))                users:(("java",pid=2813,fd=287))
#9200端口作用: 对ES集群外部提供http/https服务。可以理解为对客户端提供服务。
#9300端口作用:	对ES集群内部进行数据通信传输端口。走的时候tcp协议。

#8.验证ES集群节点是否正常工作
]# curl 10.0.0.101:9200/_cat/nodes
10.0.0.103  9 79 0 0.06 0.13 0.14 cdfhilmrstw - elk3
10.0.0.101 15 79 0 0.01 0.15 0.18 cdfhilmrstw - elk1
10.0.0.102 11 80 2 0.02 0.16 0.18 cdfhilmrstw * elk2

]# curl 10.0.0.101:9200/_cat/nodes?v
ip         heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
10.0.0.103            9          79   0    0.03    0.12     0.14 cdfhilmrstw -      elk3
10.0.0.101           16          79   0    0.16    0.17     0.18 cdfhilmrstw -      elk1
10.0.0.102           11          80   0    0.01    0.15     0.18 cdfhilmrstw *      elk2
]# curl 10.0.0.101:9200/_cluster/health?pretty
{
  "cluster_name" : "tom-es",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 3,
  "active_shards" : 6,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
#集群必须保证半数以上的节点存活,集群才能正常

3. 基于二进制部署ElasticSearch集群

集群节点:10.0.0.101,10.0.0.102,10.0.0.103

下载二进制压缩包
#1. 10.0.0.101 下载ES二进制压缩包
]# https://www.elastic.co/cn/downloads

2.10.0.0.101解压缩
mkdir -p /data/{tools,logs,data}/es
tar -xvf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /data/tools/es

3.编辑配置文件
cp /data/tools/es/elasticsearch-7.17.5/config/elasticsearch.yml{,.back}
cat > /data/tools/es/elasticsearch-7.17.5/config/elasticsearch.yml <<EOF
cluster.name: ES-CLUTER2
path.data: /data/data/es/
path.logs: /data/logs/es/
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.101", "10.0.0.102","10.0.0.103"]
cluster.initial_master_nodes: ["10.0.0.101", "10.0.0.102","10.0.0.103"]
EOF
4.使用systemctl管理ES服务
cat > /usr/lib/systemd/system/elasticsearch.service <<EOF
[Unit]
Description=es
After=network.target

[Service]
Type=simple
ExecStart=/data/tools/es/elasticsearch-7.17.5/bin/elasticsearch
User=elastic
LimitNOFILE=131070

[Install]
WantedBy=multi-user.target
EOF

5.把相关目录传到102,103上
scp  -r /data/  root@10.0.0.102:/
scp  -r /data/  root@10.0.0.103:/
scp /usr/lib/systemd/system/elasticsearch.service root@10.0.0.102:/usr/lib/systemd/system/elasticsearch.service
scp /usr/lib/systemd/system/elasticsearch.service root@10.0.0.103:/usr/lib/systemd/system/elasticsearch.service

6.101,102,103
#上创建es配置目录软连接
ln -s /data/tools/es/elasticsearch-7.17.5/config/ /etc/elasticsearch
#创建elastic用户
useradd elastic
#修改目录归属
chown -R elastic.elastic /data/tools/es/ /data/logs/es/ /data/data/es/
#加载服务
systemctl daemon-reload

7.调整内核参数(太低的话es会启动报错)
echo "vm.max_map_count=655360
fs.file-max = 655350
fs.nr_open = 655350" > /etc/sysctl.d/es.conf
sysctl -f  /etc/sysctl.d/es.conf

ulimit -n 655350
ulimit -u 655350
echo "* soft nofile 655350
* hard nofile 655350
* soft nproc 655350 
* hard nproc 655350" > /etc/security/limits.d/es7.conf
8.#启动elasticsearch
systemctl enable elasticsearch.service --now

9.检查集群状态
]# curl 10.0.0.101:9200/_cluster/health?pretty
{
  "cluster_name" : "ES-CLUTER",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 3,
  "active_shards" : 6,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

4. 堆内存设置

背景说明:es堆内存默认设置为主机内存的一半,如果主机内存大于64G,则需要手动设置堆内存最大为32G

设置方式为:vim /etc/elasticsearch/jvm.options

-Xms32g

-Xmx32g

5. swapping是性能的坟墓

禁用swapping

#临时禁用
swapoff -a
#永久禁用,需要注释掉 /etc/fstab中/dev/mapper/centos-swap开头的行

如果由于其他原因不能禁用的,可以进行如下操作

echo "vm.swappiness = 1" >> /etc/sysctl.d/es.conf
sysctl -f  /etc/sysctl.d/es.conf

6. ES的常见术语:

索引(index):     用户写入ES集群的逻辑单元。
分片(shard):      一个索引最少一个分片。作用为将索引的数据分布式的存储在ES集群。
副本(replica):    一个分片可以有0个或多个副本。作用为同一个分片数据提供数据冗余。
文档(docment):    实际存储数据的媒介。这些文档存储在分片中。
主分片和副本分片的区别:  主分片可以用于读写操作(rw)。副本分片仅能用于读取操作(ro)。
集群的颜色:
- green  表示所有的主分片和副本分片均正常工作。
- yellow 表示有部分副本分片不正常工作。
- red    表示有部分主分片不正常工作。

7. ES的API

安装postman,用于api测试

7.1. 索引管理API:

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html
-1. 查看索引
  (1)查看所有的索引
curl -X GET 10.0.0.101:9200/_cat/indices
--------------------------------------------------------------------------
-2. 创建索引
	(1)创建默认索引,默认是一个分片和一个副本
curl -XPUT 10.0.0.101:9200/tom1
  (2)创建指定的分片
curl -XPUT 10.0.0.101:9200/tom2
{
    "settings":{
        "number_of_shards": 3
    }
}
	(3)创建指定的分片和副本
curl -XPUT 10.0.0.101:9200/tom3
{
    "settings":{
        "number_of_shards": 3,
        "number_of_replicas":2
    }
}
--------------------------------------------------------------------------
-3. 修改索引
	(1)修改副本
curl -XPUT 10.0.0.101:9200/tom3/_settings
{
    "number_of_replicas": 1
}
  (2)修改分片,不能修改,会报错
curl -XPUT 10.0.0.101:9200/tom3/_settings
{
    "number_of_shards": 10
}
--------------------------------------------------------------------------
-4 删除索引
	(1)删除单个索引
curl -XDELETE 10.0.0.101:9200/tom1

	(2)基于通配符删除多个索引
curl -XDELETE 10.0.0.101:9200/tom*
--------------------------------------------------------------------------
-5 索引别名
	(1)添加索引别名
curl -XPOST http://10.0.0.101:9200/_aliases
{
    "actions": [
        {
            "add": {
                "index": "tom1",
                "alias": "2024"
            }
        },
        {
            "add": {
                "index": "tom1",
                "alias": "DBA"
            }
        },
         {
            "add": {
                "index": "tom2",
                "alias": "2024"
            }
        },
        {
            "add": {
                "index": "tom2",
                "alias": "DBA"
            }
        }
    ]
}
	(2)查看索引别名
curl -XGET http://10.0.0.101:9200/_aliases
	(3)修改索引别名
curl -XPOST http://10.0.0.101:9200/_aliases
{
    "actions": [
        {
            "remove": {
                "index": "tom2",
                "alias": "DBA"
            }
        },
         {
            "add": {
                "index": "tom2",
                "alias": "数据库"
            }
        }
    ]
}
	(4)删除索引别名
curl -XPOST http://10.0.0.101:9200/_aliases
{
    "actions": [
        {
            "remove": {
                "index": "tom2",
                "alias": "数据库"
            }
        }
    ]
}
curl -XDELETE http://10.0.0.101:9200/tom1/_alias/DBA
--------------------------------------------------------------------------
-6 打开关闭索引 
(1)关闭索引:
curl -XPOST 10.0.0.101:9200/tom3/_close
(2)打开索引:
curl -XPOST 10.0.0.101:9200/tom3/_open
--------------------------------------------------------------------------
-7 创建索引的规范:
1.索引名称不要以"."",""_"开头
2.索引名称不能出现大写,必须小写
3.生产环境中尽量避免使用通配符,尤其是删除操作

7.2. 文档管理API:

- 文档的基础操作
	1.创建文档
		1.1 不指定文档ID
POST 10.0.0.101:9200/student/_doc
{
    "name": "tom",
    "hobby": ["唱K","泡妞","rap"]
}

		1.2 指定文档ID(ID相同,名字不同的,会覆盖)
POST 10.0.0.101:9200/student/_doc/100
{
    "name": "jack",
    "hobby": ["篮球","足球","乒乓球"]
}
----------------------------------------------------------------		
	2.文档修改
		2.1 全量更新
POST 10.0.0.101:9200/student/_doc/100
{
    "name": "jack"
}

		2.2 局部更新
POST 10.0.0.101:9200/student/_doc/100/_update
{
    "doc":{
        "age":20,
        "hobby":["抽烟","喝酒","烫头"]
    }
}
----------------------------------------------------------------		
	3.文档的查看
GET 10.0.0.101:9200/student/_search
----------------------------------------------------------------
	4.删除文档
DELTE 10.0.0.101:9200/student/_doc/100
----------------------------------------------------------------
-5 文档的批量操作
	(1)批量创建
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "elk"} }
{ "name": "tom","hobby":["bas","foot"] }
{ "create": { "_index": "elk" }
{ "name": "jack","hobby":["rap","ktv"] }
	(2)批量修改
POST 10.0.0.101:9200/_bulk
{ "update" : {"_id" : "J9My45ABMF1IlwvY5XsY", "_index" : "elk"} }
{ "doc" : {"name" : "tom1"} }
{ "update" : {"_id" : "KNMy45ABMF1IlwvY5XsY", "_index" : "elk"} }
{ "doc" : {"name" : "jack1"} }
  (3)查询文档
POST 10.0.0.101:9200/_mget
{
    "docs": [
        {
            "_index": "elk",
            "_id": "J9My45ABMF1IlwvY5XsY"
        },
        {
            "_index": "elk",
            "_id": "KNMy45ABMF1IlwvY5XsY"
        }
    ]
}
	(4)批量删除
POST 10.0.0.101:9200/_bulk
{ "delete" : { "_index" : "elk", "_id" : "J9My45ABMF1IlwvY5XsY" } }
{ "delete" : { "_index" : "elk", "_id" : "KNMy45ABMF1IlwvY5XsY" } }

7.3. 使用mapping自定义数据类型

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
1. IP案例:
	(1)创建索引时指定映射关系
PUT 10.0.0.101:9200/ip
{
  "mappings": {
    "properties": {
      "ip_add": {
        "type":   "ip"  
      }
    }
  }
}
	(2)查看索引的映射关系
GET 10.0.0.101:9200/ip
	(3)创建测试数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "ip"} }
{ "name": "tom","ip_add": "192.168.1.4" }
{ "create": { "_index": "ip"} }
{ "name": "jack","ip_add": "192.168.1.10" }
{ "create": { "_index": "ip"} }
{ "name": "lucy","ip_add": "10.168.1.10" }
	(4)查看数据
GET 10.0.0.101:9200/ip/_search
POST 10.0.0.101:9200/ip/_search
{
    "query":{
        "match":{
            "ip_add": "192.168.0.0/16"
        }
    }
}
  (5)删除数据
DELETE 10.0.0.101:9200/ip/_doc/KtNV45ABMF1IlwvYAXsz
-----------------------------------------------------------------------------
2. date案例:
	(1)创建索引时指定映射关系
PUT http://10.0.0.101:9200/date
{
  "mappings": {
    "properties": {
      "birthday": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}
	(2)查看索引的映射关系
GET http://10.0.0.101:9200/date
	(3)创建测试数据
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "date"} }
{ "name": "tom","birthday": "2002-10-01" }
{ "create": { "_index": "date"} }
{ "name": "jack","birthday": "1996-05-01" }
	(4)查看数据
GET 10.0.0.101:9200/date/_search

  (5)删除数据
DELETE 10.0.0.101:9200/date/_doc/KtNV45ABMF1IlwvYAXsz
---------------------------------------------------------------------------------
-3 综合案例
	(1)创建索引
PUT http://10.0.0.101:9200/elk1
	(2)查看索引信息
GET http://10.0.0.101:9200/elk1
	(3)为已创建的索引修改数据类型
PUT http://10.0.0.101:9200/elk1/_mapping
{
    "properties": {
        "name": {
            "type": "text",
            "index": true
        },
        "gender": {
            "type": "keyword",
            "index": true
        },
		"province": {
		    "type": "keyword",
			"index": true
		},
        "city": {
            "type": "keyword",
            "index": false
        },
        "email": {
            "type": "keyword"
        },
        "ip_addr": {
            "type": "ip"
        },
		"birthday": {
			"type":   "date",
			"format": "yyyy-MM-dd"
		}
    }
}

	(4)添加测试数据
POST http://10.0.0.101:9200/_bulk
{ "create": { "_index": "elk1"}}
{ "name": "tom","gender":"男性的","telephone":"1111111111","province":"广西","city":"北海市","email":"tom@qq.com","ip_addr":"192.168.25.201","birthday":"1999-04-05"}
{ "create": { "_index": "elk1"}}
{ "name": "jack","gender":"女性的","telephone":"222222222","province":"河南","city":"濮阳市","email":"jack@qq.com","ip_addr":"192.168.15.31","birthday":"2003-09-05","hobby":["抽烟","喝酒","烫头","足疗"]}

  (5)查看数据-基于gender-匹配keyword类型
GET http://10.0.0.101:9200/elk1/_search
{
    "query":{
        "match":{
            "gender": "女"
        }
    }
}

	(6)查看数据-基于name字段搜索-匹配text类型
GET http://10.0.0.101:9200/elk1/_search
{
    "query":{
        "match":{
            "name": "吴"
        }
    }
}

	(7)查看数据-基于email字段搜索-匹配keyword类型
GET http://10.0.0.101:9200/elk1/_search
{
    "query":{
        "match":{
            "email": "jack@qq.com"
        }
    }
}

	(8)查看数据-基于ip_addr字段搜索-匹配ip类型
GET http://10.0.0.101:9200/elk1/_search
{
    "query": {
        "match" : {
            "ip_addr": "192.168.15.0/24"
        }
    }
}

	(9)查看数据-基于city字段搜索,无法完成,该字段无法被检索
GET http://10.0.0.101:9200/elk1/_search
{
    "query":{
        "match":{
            "city": "濮阳市"
        }
    }
}

7.4. 分词器:

注意:所有ES节点都要安装

1.内置的标准分词器-分析英文
GET http://10.0.0.101:9200/_analyze
{
    "analyzer": "standard",
    "text": "My name is Jason Yin,  and I'm 18 years old !"
}
温馨提示:标准分词器模式使用空格和符号进行切割分词的。

2.内置的标准分词器-分析中文并不友好
GET http://10.0.0.101:9200/_analyze
{
    "analyzer": "standard",
    "text": "我爱北京天安门!"
}

3.安装IK分词器		
	  3.1 在线安装方式:
	  ]# /data/tools/es/elasticsearch-7.17.5/bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.5

    3.2 离线安装方式:
     #创建IK分词器目录
     mkdir /data/tools/es/elasticsearch-7.17.5/plugins/ik
  	 #下载安装包到ik目录
     https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.5.zip
     #解压软件包
     cd /data/tools/es/elasticsearch-7.17.5/plugins/ik
     unzip elasticsearch-analysis-ik-7.17.5.zip
     rm -f elasticsearch-analysis-ik-7.17.5.zip		
4. 重启服务
systemctl restart elasticsearch.service

5. 测试IK中文分词器
	5.1 测试IK中文分词器-细粒度拆分
GET http://10.0.0.101:9200/_analyze
{
    "analyzer": "ik_max_word",
    "text": "我爱北京天安门!"
}

	5.2 测试IK中文分词器-粗粒度拆分
GET http://10.0.0.101:9200/_analyze
{
    "analyzer": "ik_smart",
    "text": "我爱北京天安门!"
}
----------------------------------------------------------------
6. 自定义IK分词器的字典
	(1)进入到IK分词器的插件安装目录
cd /data/tools/es/elasticsearch-7.17.5/plugins/ik/config

	(2)自定义字典
cat > tom.dic <<'EOF'
德玛西亚
艾欧尼亚
亚索
上号
带你飞
贼6
EOF

	(3)加载自定义字典
vim IKAnalyzer.cfg.xml
...
<entry key="ext_dict">tom.dic</entry>

	(4)重启ES集群
systemctl restart  elasticsearch.service

	(5)测试分词器
GET http://10.0.0.101:9200/_analyze 
{
    "analyzer": "ik_smart",
    "text": "嗨,哥们! 上号,我德玛西亚和艾欧尼亚都有号! 我亚索贼6,肯定能带你飞!!!"
}
 (6)使用分词器
 #创建索引mnapping
POST 10.0.0.101:9200/tom4/
{
     "mappings":{
        "properties": {
            "content": {
                "type": "text",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_smart"
            }
        }
     }
}
#创建文档
POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "tom4"} }
{ "content": "美国留给伊拉克的是个烂摊子吗" }
{ "create": { "_index": "tom4"} }
{ "content": "公安部:各地校车将享最高路权" }
{ "create": { "_index": "tom4"} }
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
#查询文档
GET 10.0.0.101:9200/tom4/_search
{
    "query" : { 
       "match" : { 
         "content" : "中国" 
         }
    }
}

7.5. 索引模板

什么是索引模板:	索引可使用预定义的模板进行创建,这个模板称作Index templates。
模板设置包括设置和映射,通过模式匹配的方式使得多个索引重用一个模板。
 
1.查看索引模板
	(1)查看所有的索引模板
GET http://10.0.0.103:9200/_template

	(2)查看单个索引模板 
GET http://10.0.0.103:9200/_template/.monitoring-es
	
2.创建/修改索引模板
POST http://10.0.0.103:9200/_template/java
{
    "aliases": {
        "DBA": {},
        "SRE": {},
        "K8S": {}
    },
    "index_patterns": [
        "java*"
    ],
    "settings": {
        "index": {
            "number_of_shards": 3,
            "number_of_replicas": 1
        }
    },
    "mappings": {
        "properties":{
            "ip_addr": {
                "type": "ip"
            },
            "access_time": {
                "type": "date"
            },
            "address": {
                "type" :"text"
            },
            "name": {
                "type": "keyword"
            }
        }
    }
}

3.删除索引模板:
DELETE http://10.0.0.103:9200/_template/java

7.6. DSL语句查询(运维开发或者DBA重点掌握)

什么是DSL:Elasticsearch 提供了基于JSON的完整 Query DSL(领域特定语言)来定义查询。

下面的请求url都为 POST 10.0.0.101:9200/shopping/_search
全文检索-match查询:
	(1)查询tom收集的数据
{
    "query":{
        "match":{
            "auther":"tom"
        }
    }
}

精确匹配-match_phrase查询
	(1)查询tom的数据
{
    "query":{
        "match_phrase":{
            "auther":"tom"
        }
    }
}
 
全量查询-match_all查询(查询所有结果)
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------------------------------------------------
分页查询
(1)每页显示3条数据,查询第四页
{
    "query":{
        "match_phrase":{
            "auther":"tom"
        }
    },
    "size": 3,
    "from":9
}	
	
	(2)查询第六组数据,每页显示7条数据,查询第9页
{
    "query":{
        "match":{
            "group":6
        }
    },
    "size":7,
    "from": 56
}

相关参数说明:
	size:
		指定每页显示多少条数据,默认值为10.
		
	from:
		指定跳过数据偏移量的大小,默认值为0,即默认看第一页。
		查询指定页码的from值 = "(页码 - 1) * 每页数据大小(size)"
		
温馨提示:
	生产环境中,不建议深度分页,百度的页码数量控制在76页左右。
--------------------------------------------------------------------------
使用"_source"查看的指定字段
{
    "query":{
        "match_phrase":{
            "auther":"tom"
        }
    },
    "_source":["title","auther","price"]
}
---------------------------------------------------------------------------
查询存在某个字段的文档-exists
{
    "query": {
        "exists" : {
            "field": "hobby"
        }
    }
}
---------------------------------------------------------------------------
语法高亮
{
    "query": {
        "match_phrase": {
            "title": "孙子兵法"
        }
    },
    "highlight": {
        "pre_tags": [
            "<span style='color:red;'>"
        ],
        "post_tags": [
            "</span>"
        ],
        "fields": {
            "title": {}
        }
    }
}
参数说明:
highlight: 设置高亮
fields: 指定对哪个字段进行语法高亮
pre_tags: 自定义高亮的前缀标签
post_tags: 自定义高亮的后缀标签
------------------------------------------------------------------------------
排序查询:
	01-升序查询最便宜商品及价格
{
    "query":{
        "match_phrase":{
            "auther":"tom"
        }
    },
    "sort":{
        "price":{
            "order": "asc"
        }
    },
    "size":1
}

	02-降序查询最贵的商品及价格
{
    "query":{
        "match_phrase":{
            "auther":"tom"
        }
    },
    "sort":{
        "price":{
            "order": "desc"
        }
    },
    "size":1
}
相关字段说明:
sort:	 基于指定的字段进行排序。此处为指定的是"price"
order: 指定排序的规则,分为"asc"(升序)和"desc"(降序)。
----------------------------------------------------------------
多条件查询-bool
	01-查看作者是tom且商品价格为24.90(bool,must)
{
    "query": {
        "bool": {
            "must": [
                {
                    "match_phrase": {
                        "auther": "tom"
                    }
                },
                {
                    "match": {
                        "price": 24.90
                    }
                }
            ]
        }
    }
}
02-查看作者是tom或者是jack的商品并降序排序(bool,should)
{
    "query": {
        "bool": {
            "should": [
                {
                    "match_phrase": {
                        "auther": "tom"
                    }
                },
                {
                    "match_phrase": {
                        "auther": "jack"
                    }
                }
            ]
        }
    },
    "sort":{
        "price":{
            "order": "desc"
        }
    }
}
03-查看作者是tom或者是jack且商品价格为168或者198
{
    "query": {
        "bool": {
            "should": [
                {
                    "match_phrase": {
                        "auther": "于萌"
                    }
                },
                {
                    "match_phrase": {
                        "auther": "高超"
                    }
                },
                {
                    "match": {
                        "price": 168.00
                    }
                },
                {
                    "match": {
                        "price": 198.00
                    }
                }
            ],
            "minimum_should_match": "60%"
        }
    }
}
	04-查看作者不是tom或者是jack且商品价格为168或者198的商品
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match_phrase": {
                        "auther": "tom"
                    }
                },
                {
                    "match_phrase": {
                        "auther": "jack"
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "price": 168.00
                    }
                },
                {
                    "match": {
                        "price": 198.00
                    }
                }
            ],
            "minimum_should_match": 1
        }
    }
}
	05-综合案例
零食商品,作者不是tom和jack的,价格168.00或者9.9或19.9的,
且只看title,price,auther,按照价格降序,标题高亮,
{
    "query": {
        "bool": {
            "must": [
                {
                    "match_phrase": {
                        "title": "零食"
                    }
                }
            ],
            "must_not": [
                {
                    "match_phrase": {
                        "auther": "tom"
                    }
                },
                {
                    "match_phrase": {
                        "auther": "jack"
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "price": 168.00
                    }
                },
                {
                    "match": {
                        "price": 9.9
                    }
                },
                {
                    "match": {
                        "price": 19.9
                    }
                }
            ],
            "minimum_should_match": 1
        }
    },
    "highlight": {
        "pre_tags": [
            "<span style='color:red;'>"
        ],
        "post_tags": [
            "</span>"
        ],
        "fields": {
            "title": {}
        }
    },
    "_source": [
        "title",
        "price",
        "auther"
    ],
    "sort": {
        "price": {
            "order": "desc"
        }
    }
}
---------------------------------------------------------------------------
过滤查询:
01-查询3组成员产品价格3599到10500的商品的最便宜的3个
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "group": 3
                    }
                }
            ],
            "filter": {
                "range": {
                    "price": {
                        "gte": 3599,
                        "lte": 10500
                    }
                }
            }
        }
    },
    "sort": {
        "price": {
            "order": "asc"
        }
    },
    "size": 3
}

02-查询2,4,6这3个组的最贵的3个产品且不包含酒的商品
{
    "query":{
        "bool":{
            "must_not":[
                {
                    "match":{
                        "title": "酒"
                    }
                }
            ],
            "should": [
                {
                    "match":{
                        "group":2
                    }
                },
                 {
                    "match":{
                        "group":4
                    }
                },
                 {
                    "match":{
                        "group":6
                    }
                }
            ]
        }
    },
    "sort":{
        "price":{
            "order": "desc"
        }
    },
    "size":3
}
----------------------------------------------------------------------------
精确匹配多个值-terms:
01-查询商品价格为9.9和19.8的商品
{
    "query": {
        "terms": {
            "price": [
                9.9,
                19.9
            ]
        }
    }
}
---------------------------------------------------------------------------
多词搜索:
01-多词搜索包含"小面包"关键字的所有商品
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "title": {
                            "query": "小面包",
                            "operator": "and"
                        }
                    }
                }
            ]
        }
    },
    "highlight": {
        "pre_tags": [
            "<h1>"
        ],
        "post_tags": [
            "</h1>"
        ],
        "fields": {
            "title": {}
        }
    }
}
参数说明:
operator: 为and表示查询query中的词必须连续,为or表示query中的词可以分开,默认是or
-------------------------------------------------------------------------------
聚合查询
	01-统计每个组收集的商品数量
{    
    "aggs": {
        "group": {
            "terms":{
                "field": "group"
            }
        }
    },
    "size": 0
}

	02-统计2组最贵的商品
{
    "query": {
        "match": {
            "group": 2
        }
    },
    "aggs": {
        "max_shopping": {
            "max": {
                "field": "price"
            }
        }
    },
    "sort":{
        "price":{
            "order":"desc"
        }
    },
    "size": 1   
}

	03-统计3组最便宜的商品
{
    "query": {
        "match": {
            "group": 3
        }
    },
    "aggs": {
        "min_shopping": {
            "min": {
                "field": "price"
            }
        }
    },
    "sort":{
        "price":{
            "order": "asc"
        }
    },
    "size": 1
}

	04-统计4组商品的平均价格
{
    "query": {
        "match": {
            "group": 4
        }
    },
    "aggs": {
        "avg_shopping": {
            "avg": {
                "field": "price"
            }
        }
    },
    "size": 0
}
	
	05-统计买下5组所有商品要多少钱
{
    "query": {
        "match": {
            "group":5
        }
    },
    "aggs": {
        "sum_shopping": {
            "sum": {
                "field": "price"
            }
        }
    },
    "size": 0
}

7.7. 集群迁移实战

Reindex API | Elasticsearch Guide [8.14] | Elastic

7.7.1. 搭建2套ES集群

[root@elk1 data]# curl 10.0.0.101:19200/_cat/nodes
10.0.0.103 66 96 1 0.19 0.42 0.30 cdfhilmrstw - elk3
10.0.0.101 66 96 3 0.41 0.45 0.41 cdfhilmrstw - elk1
10.0.0.102 54 96 1 0.14 0.44 0.36 cdfhilmrstw * elk2
[root@elk1 data]# curl 10.0.0.101:9200/_cat/nodes
10.0.0.102 63 96 5 0.14 0.44 0.36 cdfhilmrstw - elk2
10.0.0.103 36 96 9 0.17 0.42 0.30 cdfhilmrstw * elk3
10.0.0.101 69 96 7 0.38 0.44 0.41 cdfhilmrstw - elk1

7.7.2. 同一个集群内部迁移数据

POST http://10.0.0.101:9200/_reindex
{
    "source": {
        "index": "student"
    },
    "dest": {
        "index": "student-new"
    }
}

7.7.3. 不同集群迁移

把9200的数据迁移到19200集群上
    3.1 修改所有19200端口的配置文件
vim /data/tools/es2/elasticsearch-7.17.5/config/elasticsearch.yml
...
# 添加如下一行代码,表示添加远程主机的白名单,用于数据迁移信任的主机。
reindex.remote.whitelist: "10.0.0.*:9200"

		3.3 重启所有节点19200的ES服务
systemctl restart elastic2.service

		3.4 迁移数据
POST http://10.0.0.101:19200/_reindex
{
    "source": {
        "index": "student",
        "remote": {
            "host": "http://10.0.0.101:9200"
        }       
    },
    "dest": {
        "index": "student"
    }
}

		3.5 验证数据
GET 10.0.0.101:19200/student/_search

说明:reindex时,可以使用DSL语句来对源数据进行过滤

7.8. 集群常用的API

7.8.1. 集群健康状态API

]# curl 10.0.0.101:9200/_cluster/health?pretty
{
  "cluster_name" : "ES-CLUTER",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 28,
  "active_shards" : 56,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

相关参数说明:
    cluster_name        集群的名称。

    status 集群的健康状态,基于其主分片和副本分片的状态。
    ES集群有以下三种状态:
      green  所有分片都已分配。
      yellow 所有主分片都已分配,但一个或多个副本分片未分配。
             如果集群中的某个节点发生故障,则在修复该节点之前,某些数据可能不可用。
      red    一个或多个主分片未分配,因此某些数据不可用。
             这可能会在集群启动期间短暂发生,因为分配了主分片。

    timed_out   是否在参数false指定的时间段内返回响应(默认情况下30秒)。
    number_of_nodes  集群内的节点数。
    number_of_data_nodes  作为专用数据节点的节点数。
    active_primary_shards   可用主分片的数量。
    active_shards      可用主分片和副本分片的总数。
    relocating_shards   正在重定位的分片数。
    initializing_shards 正在初始化的分片数。
    unassigned_shards   未分配的分片数。
    delayed_unassigned_shards  分配因超时设置而延迟的分片数。
    number_of_pending_tasks      尚未执行的集群级别更改的数量。
    number_of_in_flight_fetch     未完成的提取次数。
    task_max_waiting_in_queue_millis  自最早启动的任务等待执行以来的时间(以毫秒为单位)。
    active_shards_percent_as_number    集群中活动分片的比率,以百分比表示。

#要想获取某项的值,可以通过jq命令(yum -y install jq)
]# curl 10.0.0.101:9200/_cluster/health?pretty 2>/dev/null|jq .status
"green"

7.8.2. ES集群的设置及优先级(settings)

如果您使用多种方法配置相同的设置,Elasticsearch 会按以下优先顺序应用这些设置:
	(1)Transient setting(临时配置,集群重启后失效)
	(2)Persistent setting(持久化配置,集群重启后依旧生效)
	(3)elasticsearch.yml setting(配置文件)
	(4)Default setting value(默认设置值)

(1)查询集群的所有配置信息
GET http://10.0.0.103:9200/_cluster/settings?include_defaults=true&flat_settings=true 

(2)修改集群的配置信息
PUT http://10.0.0.103:9200/_cluster/settings
{
    "transient": {
        "cluster.routing.allocation.enable": "none"
    }
}

相关参数说明:
"cluster.routing.allocation.enable":
	"all":		允许所有分片类型进行分配。
	"primaries"		仅允许分配主分片。
	"new_primaries"		仅允许新创建索引分配主分片。
	"none":		不允许分配任何类型的分配。
		
参考链接:
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-get-settings.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-update-settings.html

7.8.3. 集群状态API

集群状态是一种内部数据结构,它跟踪每个节点所需的各种信息,包括:
	(1)集群中其他节点的身份和属性
	(2)集群范围的设置
	(3)索引元数据,包括每个索引的映射和设置
	(4)集群中每个分片副本的位置和状态
(1)查看集群的状态信息
GET http://10.0.0.103:9200/_cluster/state

(2)只查看节点信息。
GET http://10.0.0.103:9200/_cluster/state/nodes

(3)查看nodes,version,routing_table这些信息,并且查看以"oldboyedu*"开头的所有索引
http://10.0.0.103:9200/_cluster/state/nodes,version,routing_table/oldboyedu*

推荐阅读:	https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-state.html

7.8.4. 集群统计API

Cluster Stats API 允许从集群范围的角度检索统计信息。
返回基本索引指标(分片数量、存储大小、内存使用情况)和
有关构成集群的当前节点的信息(数量、角色、操作系统、jvm 版本、内存使用情况、cpu 和已安装的插件)。

(1)查看统计信息
GET http://10.0.0.103:9200/_cluster/stats

推荐阅读:	https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-stats.html

7.8.5. 查看集群的分片分配情况(allocation)

集群分配解释API的目的是为集群中的分片分配提供解释。
对于未分配的分片,解释 API 提供了有关未分配分片的原因的解释。
对于分配的分片,解释 API 解释了为什么分片保留在其当前节点上并且没有移动或重新平衡到另一个节点。
当您尝试诊断分片未分配的原因或分片继续保留在其当前节点上的原因时,
此 API 可能非常有用,而您可能会对此有所期待。

(1)分析teacher索引的0号分片未分配的原因。
GET http://10.0.0.101:9200/_cluster/allocation/explain
{
  "index": "teacher",
  "shard": 0,
  "primary": true
}
推荐阅读:	https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-allocation-explain.html

7.8.6. 集群分片重路由API(reroute)

reroute 命令允许手动更改集群中各个分片的分配。
例如,可以将分片从一个节点显式移动到另一个节点,可以取消分配,
并且可以将未分配的分片显式分配给特定节点。

	(1)将"student"索引的0号分片从elk102节点移动到elk101节点。
POST http://10.0.0.101:9200/_cluster/reroute
{
    "commands": [
        {
            "move": {
                "index": "student",
                "shard": 0,
                "from_node": "elk102",
                "to_node": "elk101"
            }
        }
    ]
}

	(2)取消当前已在某个节点上的副本分片,其副本会重新初始化分配。
POST http://10.0.0.101:9200/_cluster/reroute
{
    "commands": [
        {
            "cancel": {
                "index": "student",
                "shard": 0,
                "node": "elk103"
            }
        }
    ]
}

推荐阅读:
	https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-reroute.html

8. ES文档写入和读取流程

8.1. ES文档写入流程

ES文档写入流程
第一步:客户端写请求给协调节点(ES的所有节点都是协调节点)
第二步:协调节点会把写请求转发给master节点
第三步:master通过分片路由计算,得出数据节点,然后就把数据写到数据节点上。
第四步:副本分片同步主分片的数据,写入成功的依据是 (主分片+副本分片)/2+1的分片数写入成功了,就算成功
第五步:数据写入成功后,通知master数据写入成功
第六步:master通知协调节点数据写入成功
第七步:协调节点通知客户端数据写入成功

8.2. ES文档读取流程(单文档)

ES文档读取流程(单个文档):
第一步:客户端发送请求到协调节点。
第二步:节点通过分片路由计算,将请求路由到包含数据的主分片或者副本分片上
第三步:目标节点上的分片执行读取操作,并将数据返回给原节点。
第四步:原节点将数据返回给客户端。

8.3. ES文档读取流程(全)

ES文档读取流程(全量查询):
第一步:客户端发送请求到协调节点。
第二步:搜索阶段(query):协调节点从各个分片上查询到的查询到的文档id,保存到一个队列
第三步:取回阶段(fetch):协调节点对返回的数据进行全局排序,根据id取出数据
第四步:协调节点将数据返回给客户端。

9. ES集群TSL认证设置

在Elasticsearch中,TLS(传输层安全性)是一种加密数据传输的方法,可以提高集群的安全性。

配置ES集群TSL认证:
	(1)elk101节点生成证书文件
cd /data/tools/es/elasticsearch-7.17.5
./bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""  --days 36500

	(2)elk101节点同步证书文件到其他节点
scp config/elastic-certificates.p12 root@10.0.0.102:/data/tools/es/elasticsearch-7.17.5/config/
scp config/elastic-certificates.p12 root@10.0.0.103:/data/tools/es/elasticsearch-7.17.5/config/

	(3)所有节点为证书文件修改属主和属组
chown -R elastic.elastic /data/tools/es/elasticsearch-7.17.5/config/elastic-certificates.p12

	(4)elk101节点修改ES集群的配置文件
vim /oldboyedu/softwares/es7/elasticsearch-7.17.5/config/elasticsearch.yml 
...
cluster.name: oldboyedu-linux85-binary
path.data: /oldboyedu/data/es7
path.logs: /oldboyedu/logs/es7
network.host: 0.0.0.0
discovery.seed_hosts: ["elk101.oldboyedu.com","elk102.oldboyedu.com","elk103.oldboyedu.com"]
cluster.initial_master_nodes: ["elk103.oldboyedu.com"]
reindex.remote.whitelist: "10.0.0.*:19200"
node.data: true
node.master: true
# 在最后一行添加以下内容
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

	(5)elk101节点同步ES配置文件到其他节点
scp config/elasticsearch.yml root@10.0.0.102:/data/tools/es/elasticsearch-7.17.5/config/
scp config/elasticsearch.yml root@10.0.0.103:/data/tools/es/elasticsearch-7.17.5/config/

	(6)所有节点重启ES集群
systemctl restart es7

	(7)生成随机密码
[root@elk1 elasticsearch-7.17.5]# ./bin/elasticsearch-setup-passwords auto
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y

Changed password for user apm_system
PASSWORD apm_system = g1gZM89D5TRR5Ug5b0jf

Changed password for user kibana_system
PASSWORD kibana_system = 27uCGSOYM3iPC3CKLM3F

Changed password for user kibana
PASSWORD kibana = 27uCGSOYM3iPC3CKLM3F

Changed password for user logstash_system
PASSWORD logstash_system = cm7vkBpUETCNvspA5RSK

Changed password for user beats_system
PASSWORD beats_system = BnOxVmGyslw8K9kh4HG8

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = GalMty6IrqPn9xV3a2hD

Changed password for user elastic
PASSWORD elastic = JEVB5iv4SV4m2uerl8yN

(8)测试用户名密码:
[root@elk1]# curl -u elastic:JEVB5iv4SV4m2uerl8yN 10.0.0.101:9200/_cat/nodes
10.0.0.101 72 77 1 0.08 0.11 0.13 cdfhilmrstw - elk1
10.0.0.103 76 74 0 0.02 0.12 0.12 cdfhilmrstw - elk3
10.0.0.102 66 82 2 0.03 0.19 0.17 cdfhilmrstw * elk2

10. 使用kibana实现基于角色的权限控制

10.1. 给filebeat和logstash创建相对应的权限账户

给filebeat和logstash设置专门权限的用户写数据,不要用超级用户,否则有可能发生权限的泄露

10.1.1. 图形界面方式-创建filebeat和logstash的角色账户

10.1.2. 图形界面方式-创建filebeat账户,logstash账户

10.1.3. api接口方式-创建filebeat账户,logstash角色及用户

# 创建Filebeat角色,并授予相应的索引权限
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/role/filebeat-logstash-roles" -H "Content-Type: application/json" -d'
{
  "cluster" : ["manage_index_templates", "monitor"],
  "indices" : [ { "names" : [ "*" ], "privileges" : [ "write", "create" ] } ]
}'	

# 创建Filebeat用户
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/user/filebeat-user" -H "Content-Type: application/json" -d'
{
  "password" : "123456",
  "roles" : [ "filebeat-logstash-roles" ],
  "full_name" : "Filebeat User"
}'

# 创建logstash用户
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/user/logstash-user" -H "Content-Type: application/json" -d'
{
  "password" : "123456",
  "roles" : [ "filebeat-logstash-roles" ],
  "full_name" : "logstash User"
}'

#查看角色
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/role/filebeat-logstash-roles?pretty"
#查看用户
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/user/filebeat-user?pretty"

10.2. 创建区分开发和运维的账户

10.2.1. 图形界面方式-创建dev角色

10.2.2. 图形界面方式-创建dev用户

10.2.3. api接口方式-创建dev角色及用户

# 创建dev角色
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/role/dev-roles" -H "Content-Type: application/json" -d'
{  
  "indices" : [ { "names" : [ "*" ], "privileges" : [ "read" ] } ],
  "applications" : [
      {
        "application" : "kibana-.kibana",
        "privileges" : [
          "feature_discover.all",
          "feature_dashboard.all",
          "feature_dev_tools.all"
        ],
        "resources" : [
          "*"
        ]
      }
    ]
}'

# 创建dev用户
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/user/dev-jack" -H "Content-Type: application/json" -d'
{
  "password" : "123456",
  "roles" : [ "dev-roles" ],
  "full_name" : "dev-jack"
}'

#查看角色
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/role/dev-roles?pretty"
#查看用户
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/user/dev-jack?pretty"

10.2.4. 图形界面方式-创建运维权限角色

10.2.5. api接口方式-创建运维角色及用户

# 创建ops角色
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/role/ops-roles" -H "Content-Type: application/json" -d'
{  
  "cluster" : [ "all" ],
  "indices" : [ { "names" : [ "*" ], "privileges" : [ "all" ] } ],
  "applications" : [
      {
        "application" : "kibana-.kibana",
        "privileges" : [ "all" ],
        "resources" : [ "*" ]
      }
    ]
}' 

# 创建ops用户
curl -u elastic:123456 -XPOST "10.0.0.101:9200/_security/user/ops-jimy" -H "Content-Type: application/json" -d'
{
  "password" : "123456",
  "roles" : [ "ops-roles" ],
  "full_name" : "ops-jimy"
}'

#查看角色
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/role/ops-roles?pretty"
#查看用户
]# curl -u elastic:123456 -XGET "10.0.0.101:9200/_security/user/ops-jimy?pretty"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL1 DDL语言

安装与配置 官网&#xff1a; MySQL :: Download MySQL Installer 阿里云&#xff1a; MySQL8 https://www.alipan.com/s/auhN4pTqpRp 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速…

外卖项目day14(day11)---数据统计

Apache ECharts 大家可以看我这篇文章&#xff1a; Apache ECharts-CSDN博客 营业额统计 产品原型 接口设计 新建admin/ReportController /*** 数据统计相关接口*/ RestController RequestMapping("/admin/report") Api(tags "数据统计相关接口") Slf…

快速解密哈希算法利器Hasher:解密MD5、SHA256、SHA512、RIPEMD160等最佳工具

文章目录 一、工具概述1.1主要功能点1.2 支持多种哈希算法 二、安装方法三、使用教程四、结语 一、工具概述 Hasher 是一个哈希破解工具,支持多达 7 种类型的哈希算法,包括 MD4、MD5、SHA1、SHA224、SHA256、SHA384、SHA512 等。它具有自动检测哈希类型、支持 Windows 和 Linux…

浙大阿里联合开源AudioLCM,在通用音频合成领域实现潜在一致性模型的新突破...

文本到通用音频生成&#xff08;Text-to-Audio Generation&#xff0c;简称 TTA&#xff09;作为生成任务的一个子领域&#xff0c;涵盖了音效创作、音乐创作和合成语音&#xff0c;具有广泛的应用潜力。在此前的神经 TTA 模型中&#xff0c;潜在扩散模型&#xff08;Latent Di…

【RHEL7】无人值守安装系统

目录 一、kickstart服务 1.下载kickstart 2.启动图形制作工具 3.选择设置 4.查看生成的文件 5.修改ks.cfg文件 二、HTTP服务 1.下载HTTP服务 2.启动HTTP服务 3.将挂载文件和ks.cfg放在HTTP默认目录下 4.测试HTTP服务 三、PXE 1.查看pxe需要安装什么 2.安装 四、…

批量按照原图片名排序修改图片格式为00000001.png(附代码)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

ARMxy工控机使用Node-Red教程:安装工具和依赖(2)

2.3 工具安装 Node-Red 安装过程需要用到网络。请通过网线将设备千兆网口 ETH1 连接至互联网&#xff0c;确保可正常访问互联网。 Node-Red 是一个基于Node的可视化编程工具&#xff0c;因此需要先安装Node。为了便于测试&#xff0c;我司提供的 node-v16.14.0-linux-arm64.t…

原神升级计划数据表:4个倒计时可以修改提示信息和时间,可以点击等级、命座、天赋、备注进行修改。

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>原神倒计时</title><style>* {margin: 0;padding: 0;box-sizing: border-box;body {background: #0b1b2c;}}header {width: 100vw;heigh…

「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)

概述 队列&#xff0c;是一种基本的数据结构&#xff0c;也是一种数据适配器。它在底层上以链表方法实现。 队列的显著特点是他的添加元素与删除元素操作&#xff1a;先加入的元素总是被先弹出。 一个队列应该应该是这样的&#xff1a; --------------QUEUE-------------——…

大数据资源平台建设可行性研究方案(58页PPT)

方案介绍: 在当今信息化高速发展的时代&#xff0c;大数据已成为推动各行各业创新与转型的关键力量。为了充分利用大数据的潜在价值&#xff0c;构建一个高效、安全、可扩展的大数据资源平台显得尤为重要。通过本方案的实施企业可以显著提升数据处理能力、优化资源配置、促进业…

SQL注入实例(sqli-labs/less-8)

0、初始页面 1、确定闭合字符 ?id1 and 11 ?id1 and 12 ?id1 ?id1 and 11 -- ?id1 and 12 -- 确定闭合字符为单引号&#xff0c;并且正确页面与错误页面的显示不同 2、爆库名 使用python脚本 def inject_database1(url):name for i in range(1, 20):low 32high 1…

【大模型从入门到精通5】openAI API高级内容审核-1

这里写目录标题 高级内容审核利用 OpenAI 内容审核 API 的高级内容审核技术整合与实施使用自定义规则增强审核综合示例防止提示注入的策略使用分隔符隔离命令理解分隔符使用分隔符实现命令隔离 高级内容审核 利用 OpenAI 内容审核 API 的高级内容审核技术 OpenAI 内容审核 AP…

SQL注入漏洞复现1

一、靶场信息 sqli-labs下载&#xff1a;https://github.com/Audi-1/sqli-labs phpstudy下载地址&#xff1a;http://down.php.cn/PhpStudy20180211.zip 我是在本地安装小皮搭建环境&#xff0c;相比于在服务器上搭建环境&#xff0c;更加简单 二、注入实操 Less-1 爆库名…

搭建高可用OpenStack(Queen版)集群(三)之部署认证管理服务(Keystone)控制节点集群

一、搭建高可用OpenStack&#xff08;Queen版&#xff09;集群之部署认证服务&#xff08;Keystone&#xff09;控制节点集群 一、Identity 服务简介 1、Identity概述 Identity为认证管理&#xff0c;授权管理和服务目录服务管理提供单点整合。其它Openstack服务将身份认证服务…

常用的图像增强操作

我们将介绍如何用PIL库实现一些简单的图像增强方法。 [!NOTE] 初始化配置 import numpy as np from PIL import Image, ImageOps, ImageEnhance import warningswarnings.filterwarnings(ignore) IMAGE_SIZE 640[!important] 辅助函数 主要用于控制增强幅度 def int_param…

centos7.9升级rocky

ELevate Quickstart Guide | AlmaLinux Wiki 将 CentOS 7 升级到 AlmaLinux 9 由于 Leapp 工具设计为执行一步升级&#xff0c;为了将您的 CentOS 7 机器升级到 AlmaLinux 9&#xff0c;您需要拆分升级过程&#xff1a; CentOS 7 到 AlmaLinux 8AlmaLinux 8 到 AlmaLinux 9 …

Chainlit快速实现AI对话应用1 分钟内实现聊天数据的持久化保存

概述 默认情况下&#xff0c;Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新&#xff0c;所有的聊天记录&#xff0c;页面上的所有聊天记录都会消失。但是&#xff0c;存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 一旦启用&#xff0c;数据持久性…

3d模型贴图后有部分阴影怎么解决?---模大狮模型网

在展览3D模型设计行业中&#xff0c;贴图是使展品栩栩如生的关键步骤之一。然而&#xff0c;有时在贴图后可能会出现一些意外的阴影&#xff0c;影响了展品的逼真度和视觉效果。本文将探讨在3D模型贴图后出现部分阴影的原因及解决方法&#xff0c;帮助设计师有效应对这一常见问…

Transwarp Data Studio 4.0 :适应AI新时代实现三大能力提升

企业数据资产管理能力建设需要经历资源化、资产化和资本化三个阶段&#xff0c;对应数据底座建设、资产管理平台建设、流通运营平台建设三大任务。星环科技大数据开发工具 Transwarp Data Studio&#xff0c;在此过程中发挥着承上启下的关键作用。近日&#xff0c;星环科技重磅…