X-Pack 配置

1. 激活 X-Pack 试用功能

Kibana WEB 页面 -> Management

默认 30 天试用。

2. 配置 Elasticsearch

//176和177两个节点都开启

1
2
3
4
5
6
$ vim /etc/elasticsearch/elasticsearch.yml
...
xpack.security.enabled: true

$ systemctl restart elasticsearch
$ /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

//修改kibana,添加以下两个选项

1
2
3
4
5
$ vim /etc/kibana/kibana.yml
...
elasticsearch.username: "kibana"
elasticsearch.password: "xiodi.cn123"
...

3. 测试

kibana web 登陆测试

X-Pack 用户管理

1. 用户认证

X-Pack 安全模块提供多种用户认证方式,基本分为两种类型:

  • 内部领域:native 和 file,默认是 native
  • 外部领域:ldap、AD、PKI

可以同时定义多种类型验证,根据定义的顺序逐个查询每个领域,直到认证成功为止。一旦其中一个领域成功验证了请求,则认为验证成功。如果所有领域都不能对用户进行身份验证,则认为该身份验证不成功,并且将向呼叫者返回身份验证错误(HTTP 401)。默认领域链由内部领域类型组成,即 native 和 file。

2. 用户授权

X-Pack 安全性通过给角色授权,并把角色绑定到用户来实现。一个用户可以拥有一个或多个角色,即用户拥有的权限的集合实际就是多个角色的联合。如下图:

  • X-Pack安全模块提供三种类型的权限:

    • 群集权限:针对群集的操作
    • all:执行群集管理操作设置,以及更新,重新路由或管理用户及角色。
    • monitor:群集只读操作,如获取群集状态。
    • manage:执行群集管理操作设置,以及更新,重新路由。
  • 索引权限:对索引的操作

    • all:对索引的任何操作
    • read:对索引的只读操作,比如 search,get等
    • create_index:创建新索引
    • create:允许将新文档放入索引
  • 运行身份权限:用户模仿权限,也就是说,它允许经过身份验证的用户在不知道其凭据的情况下测试其他用户的访问权限。

完整的权限列表参考:https://www.elastic.co/guide/en/elastic-stack-overview/7.3/security-privileges.html

3. 用户创建实例

创建用户时,不要与默认保留的几个用户重名。

(1)创建用户

kibana web 创建用户:user1 和 user2 ,不赋予任何角色。

//测试

1
2
3
$ curl -s -H "Content-Type: application/json" -u user1:xiodi.cn123 -XGET http://192.168.20.175:9200

{"error":{"root_cause":[{"type":"security_exception","reason":"action [cluster:monitor/main] is unauthorized for user [user2]"}],"type":"security_exception","reason":"action [cluster:monitor/main] is unauthorized for user [user2]"},"status":403}

(2)创建角色

X-Pack 内置很多角色,一般就能满足需要了,当然也可以自定义角色。

内置角色参考:https://www.elastic.co/guide/en/elastic-stack-overview/7.3/built-in-roles.html

  • 创建角色:name: monitor_role , Cluster privileges:monitor
  • 修改 user1 绑定 monitor_role

//验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ curl -s -H "Content-Type: application/json" -u user1:xiodi.cn123 -XGET http://192.168.20.176:9200
$ curl -s -H "Content-Type: application/json" -u user1:xiodi.cn123 -XGET http://192.168.20.176:9200/_cluster/health?pretty
{
"cluster_name" : "aishangwei-test",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 25,
"active_shards" : 49,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 6,
"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" : 89.0909090909091
}

$ curl -s -H "Content-Type: application/json" -u user2:xiodi.cn123 -XGET http://192.168.20.176:9200/_cluster/health?pretty # 403

(3)文档级权限

1)例1 字段级别权限
  • 创建一个文档级别权限的角色:amazon
  • user2 赋予该角色权限

//测试

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
26
27
28
 curl -s -u user2:xiodi.cn123 -XGET http://192.168.20.176:9200/amazon/_search?pretty

{
"took" : 25,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1363,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "amazon",
"_type" : "_doc",
"_id" : "QVdniGwBKl1dQYvhGUiX",
"_score" : 1.0,
"_source" : {
"description" : "tlc...",
"title" : "tlc dr. seuss reading learning system 2008"
}
},

只显示自己有权限看的字段。

2)指定字段级别的特定内容

需求:user1 只允许查看 特定厂商所生产的产品

//验证

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
26
27
28
29
30
31
32
$ curl -s -u user1:xiodi.cn123 -XGET http://192.168.20.176:9200/amazon/_search?pretty

{
"took" : 16,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 62,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "amazon",
"_type" : "_doc",
"_id" : "QVdniGwBKl1dQYvhGUiX",
"_score" : 1.0,
"_source" : {
"description" : ...",
"price" : "19.99",
"id" : "b000ozhfsq",
"title" : "tlc dr. seuss reading learning system 2008",
"manufacturer" : "encore"
}
},
...

只显示 encore 厂商的产品。

(4)X-Pack API 管理用户

X-Pack 安全 API 是 REST API ,用于用户/角色管理,角色映射到用户,执行身份验证以及检查经过身份验证的用户是否已指定权限列表。这些API在 native 领域上执行操作。Kibana UI 在内部使用这些 API 进行用户/角色管理。为了执行这些API,用户应具有superuser或具有最新manage_security权限。

1)用户管理API

常用的 API 列表:

1
2
3
4
5
6
7
8
GET /_security/user                             //显示所有用户
GET /_security/user/<username> //显示指定用户详情
DELETE /_security/user/<username> //删除用户
POST /_security/user/<username> //创建用户
PUT /_security/user/<username> //更新已存在的用户
PUT /_security/user/<username>/_disable //禁用已存在的用户
PUT /_security/user/<username>/_enable //启用已存在的用户
PUT /_security/user/<username>/_password //更改用户密码

//例1:创建新用户 user3

1
2
3
$ curl -H "content-type: application/json" -XPOST http://192.168.20.176:9200/_security/user/user3 -u elastic:xiodi.cn123 -d '{ "username": "user3", "roles": [ "monitor_role" ], "password": "xiodi.cn123"}'

{"created":true}

//显示所有用户

1
$ curl -XGET http://192.168.20.176:9200/_security/user?pretty -u elastic:xiodi.cn123

//更改密码

1
$ curl -XPUT http://192.168.20.176:9200/_security/user/user3/_password -H "content-type: application/json" -u elastic:xiodi.cn123 -d'{ "password": "xiodi.cn"}'

//删除用户

1
2
$ curl -XDELETE http://192.168.20.176:9200/_security/user/user3 -u elastic:xiodi.cn123
{"found":true}
2)角色管理 API

常用的 API 列表:

1
2
3
4
5
GET /_security/role                               //获取所有角色
GET /_security/role/<rolename> //查看指定角色详情
POST /_security/role/<rolename>/_clear_cache //清除角色缓存
POST /_security/role/<rolename> //创建新角色
PUT /_security/role/<rolename> //更新已存在的角色

//创建一个角色

1
2
3
4
5
6
7
8
9
$ curl -XPOST http://192.168.20.176:9200/_security/role/amazon_read_new -H 'content-type: application/json' -u elastic:xiodi.cn123 -d '{
"indices": [
{
"names": [ "amazon" ],
"privileges": [ "read" ],
"field_security": {"grant": [ "*" ],"except": ["id","title","man*"]}
}
]
}'

//查看角色的详细信息

1
$ curl -XGET http://192.168.20.176:9200/_security/role/amazon_read_new?pretty -u elastic:xiodi.cn123

//删除角色

1
$ curl -XDELETE http://192.168.20.176:9200/_security/role/amazon_read_new -u elastic:xiodi.cn123

用户管理API:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/security-api-users.html
角色映射API:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/security-api-role-mapping.html

Elastaticsearch 监控

1. 监控介绍

Elasticsearch 内置了丰富的 stats API 用于监视 Elasticsearch 集群、节点和索引状态。

1
2
3
_cluster/stats
_nodes/stats
indexname/_stats

这种通过API获取状态信息,如果实时进行监控访问,将变得比较困难,而X-Pack 监控组件提供了更加友好的 UI 界面。他通过监视代理程序,定期收集运行状况和性能指标并为其编制成索引。Kibana的监控UI带有预定于的仪表板,可以轻松查看和分析实时和过去的性能数据。

默认情况下,X-Pack收集的度量值存储在当前群集种的索引中。但是,在生产中,强烈建议使用单独的专用群集来存储这些指标。

专用的监控集群具有以下优势:

  • 允许您从中心位置监控多个集群
  • 减少了生产集群上的负载和存储
  • 某个群集故障,也不影响监控
  • 监视和生产群集的权限隔离

2. 监控 UI

登陆 kibana UI ,开启监控:Turn on monitoring

//验证

1
$ curl -XGET http://192.168.20.176:9200/_cluster/settings?pretty -u elastic:xiodi.cn123

Elasticsearch 监控设置:https://www.elastic.co/guide/en/elasticsearch/reference/7.3/monitoring-settings.html

启用数据收集后,Kibana UI 提供了三个主菜单:Overview、Nodes、Indices

(1)Overview

该选项提供了 Elasticsearch 集群的整体运行状况:

  • Memory:每个节点的平均内存,我们更应该到每个节点关注真正的内存使用
  • Search Rate:搜索每秒需要多少个碎片(暂时这么理解,没确定)
  • Search Latency:搜索延迟
  • Indexing Rate:索引每秒多少个碎片,主碎片多少个
  • Indexing Latency:索引延迟

Recent Log Entries : 显示此集群的最新日志条目,最多10个日志条目。
Shard Activity:最近活动的碎片

(2)Nodes


字段解释:

  • Documents:文档总数,2m (应该是2000 千个,具体没确定)
  • Segment Count:段的总数

[success]Segment 参考:https://blog.csdn.net/baichoufei90/article/details/82901270

高级部分

GC Count:Old 和 Young 垃圾回收统计
GC Duration:Old 和 Young 垃圾回收持续的时间

Index Memory-Lucene 1
Lucene Total:Lucene用于当前索引的总堆内存。
Stored Fields:存储字段使用的堆内存。
Doc Values:文档值使用的堆内存。
Norms:查询时间、文本评分的标准化 使用的堆内存

Index Memory-Lucene 2
Terms:术语查询使用的堆内存
Points:Points(Number,IPS,geodata) 使用的堆内存

Index Memory-Lucene 3
Fixed Bitsets:这个我也不知道干啥的
Term Vectors:词向量使用的堆内存
Version Map:版本控制使用堆内存

Index Memory-Elasticsearch
Query Cache:查询缓存(e.g 过滤缓存)使用的堆内存
Request cache:请求缓存(e.g 瞬间聚合)使用的堆内存
Fielddata:字段数据(文本字段上的全局序号或显式启用的字段数据)使用的堆内存
Index Writer:索引写入使用的堆内存

Indexing Time
Index Time:用于索引操作的时间
Index Throtting Time:索引节流所花费的时间,这表示节点上的磁盘速度较慢

Request Rate
Search Total:搜索操作数量(每片)