X-Pack 已经做为 Elastic 公司单独的产品线,前身是 Shield, Watcher, Marvel, Graph, 和 reporting,先来讲说这几个爸爸是作什么的吧:javascript
再来看看咱们的儿子 X-Pack 是作啥的,哦,他就是他们的儿子,一个大合集,便于安装、不用为版本兼容性犯愁,能够灵活 disable / enable 其中的各个组件。他还多干了一件事儿,能够监控 Logstash。html
关于免费和收费版本,版本功能比较能够查看:https://www.elastic.co/subscriptionsjava
免费版本注册地址:https://register.elastic.co/xpack_registershell
付费版本(分为黄金、白金级别)购买地址:https://www.elastic.co/subscriptions/xpack数据库
默认的免费版本有一个月的 trial 试用期。免费版本试用期只包含 ES 集群监控、图分析和可视化,基于角色的 ES 权限控制和搜索用户信息的功能。不包含:缓存
总的来讲免费版本对于安全组件这块什么都不支持。安全
安装 X-Pack 前必须安装 ES 和 Kibana ,咱们使用的是 5.2.1 版本 集中式日志分析平台 - ELK Stack - 部署篇。X-Pack 咱们也使用 5.2.1,咱们来说讲如何离线安装吧。bash
Step1. 下载 X-Pack Zip 文件:https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.1.zip
(sha1),尼玛有119MB那么大。服务器
Step2. 上传 zip 文件至服务器 /tmp
目录;oracle
Step3. 在 ES 安装目录运行 bin/elasticsearch-plugin install
命令 :
bin/elasticsearch-plugin install file:/tmp/x-pack-5.2.1.zip
如下输出表示安装成功:
-> Downloading file:/home/admin/x-pack-5.2.1.zip [=================================================] 100% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries * java.lang.RuntimePermission getClassLoader * java.lang.RuntimePermission setContextClassLoader * java.lang.RuntimePermission setFactory * java.security.SecurityPermission createPolicy.JavaPolicy * java.security.SecurityPermission getPolicy * java.security.SecurityPermission putProviderProperty.BC * java.security.SecurityPermission setPolicy * java.util.PropertyPermission * read,write * java.util.PropertyPermission sun.nio.ch.bugLevel write * javax.net.ssl.SSLPermission setHostnameVerifier See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissions allow and the associated risks. Continue with installation? [y/N]y -> Installed x-pack
Step4. 在 Kibana 安装目录运行 bin/kibana-plugin install
命令安装:
bin/kibana-plugin install file:/tmp/x-pack-5.2.1.zip
如下输出表示安装成功:
Attempting to transfer from file:/home/admin/x-pack-5.2.1.zip Transferring 124956667 bytes.................... Transfer complete Retrieving metadata from plugin archive Extracting plugin archive Extraction complete Optimizing and caching browser bundles... Plugin installation complete
Step5. 在 Logstash 安装目录运行 bin/logstash-plugin install
命令安装:
bin/logstash-plugin install file:/tmp/x-pack-5.2.1.zip
如下输出表示安装成功:
Installing file: /home/admin/x-pack-5.2.1.zip Install successful
咱们能够经过如下配置进行功能开关:
Setting | Description |
---|---|
xpack.security.enabled |
设置为 false 能够关闭 X-Pack security 功能。须要在 elasticsearch.yml 和 kibana.yml 同时配置。 |
xpack.monitoring.enabled |
设置为 false 能够关闭 X-Pack monitoring 功能。 须要在elasticsearch.yml 和 kibana.yml 同时配置。 |
xpack.graph.enabled |
设置为 false 能够关闭 X-Pack graph 功能。 须要在elasticsearch.yml 和 kibana.yml 同时配置。 |
xpack.watcher.enabled |
设置为 false 能够关闭 Watcher 功能。 只须要在 elasticsearch.yml 配置。 |
xpack.reporting.enabled |
设置为 false 能够关闭 reporting 功能。 只须要在 kibana.yml 配置。 |
咱们须要重启三个服务:
./bin/logstash -f config/logstash.conf 2>&1 & /home/admin/soft/elasticsearch-5.2.1/bin/elasticsearch & ./bin/kibana --verbose > kibana.log 2>&1 &
重启后发现日志数据没法上传到 ES,filebeat 报错:
2017-02-22T14:01:27+08:00 ERR Failed to publish events caused by: read tcp 172.16.134.3:56109->172.16.134.2:5044: i/o timeout
logstash 的 5044 端口能够访问,查看 logstash 日志:
[2017-02-22T14:02:21,705][WARN ][logstash.outputs.elasticsearch] UNEXPECTED POOL ERROR {:e=>#<LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError: No Available connections>} [2017-02-22T14:02:21,705][ERROR][logstash.outputs.elasticsearch] Attempted to send a bulk request to elasticsearch, but no there are no living connections in the connection pool. Perhaps Elasticsearch is unreachable or down? {:error_message=>"No Available connections", :class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError", :will_retry_in_seconds=>64}
调用 ES 服务 curl http://172.16.134.2:9200
:
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication token for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
发现是出现了认证失败,笔者推算和 logstash 访问 ES 未以受权方式进行致使,修改 logstash.conf
在 output
段里添加:
user => 'elastic' password => 'changeme'
修改 logstash.yml
,添加:
xpack.monitoring.elasticsearch.url: "http://172.16.134.2:9200" xpack.monitoring.elasticsearch.username: "logstash_system" xpack.monitoring.elasticsearch.password: "changeme"
重启服务后OK。
打开 Kibana 页面,笔者很尴尬,根本不知道用户名和密码是啥,OK 万能的谷歌告诉咱们了:
username: elastic password: changeme
Kibana 的界面多了以下几个功能跳转:Graph
Monitoring
elastic
Logout
。
Graph 能够根据实时查询,对给定的 field 获得图视角的关联关系,笔者以一个快速发现集群中哪台 host 有明显 ERROR 为例讲解下如何使用。Index Pattern
咱们选择 filebeat-*
,咱们添加 两个 filed:host
log_level
,而后在咱们的搜索框添加 hour:14 AND minute: [20 TO 37]
,获得如下绘图:
能够直观的看到咱们的两台被采集机器和日志级别的关系,v134003.yn1 INFO 日志较多,v134008.yn1 ERROR 日志较多。点击灰色的边,咱们能够看到这个 Link 的概况:
有一个直观的包含交集图,还有3个数字,分别表示:
查看 ES 集群的 health:
Uptime
: 集群运行时间;Disk Available
:可用磁盘;JVM Heap
: JVM 使用状况;Indices
:索引数量,至关于数据库数;Documents
:文档数量,至关于记录数;Disk Usage
:磁盘使用状况;Primary Shards
:分片数;Replica Shards
:冗余分片数;相较于集群健康视图,这里的指标更多:
Serach Rate (/s)
:近1小时的查询速率,QPS;Search Latency (ms)
:近1小时的查询延迟;Index Rate (/s)
:近1小时的索引速率,IPS;Index Latency (ms)
:近1小时的索引延迟;Shard Activity
:对于 Shard 的操做历史;索引视角的监控视图,包含如下指标:
Document Count
:文档数;Data
:数据量;Index Rate
:索引速率;Search Rate
:查询速率;Unassigned Shards
:未分配的分片数;点击 Index Name 能够进入查看对于索引的详细基础监控:
Index Memory (KB)
:索引内存使用,分为 Lucene、Term、Points;Index Size (MB)
:索引大小;Search Rate (/s)
:查询速率;Indexing Rate (/s)
:索引速率;Segment Count
:段数;Document Count
:文档数;Shard Legend
:分片状态图谱,分为 Primary
, Replica
,Relocating
,Initializing
,Unassigned Primary
,Unassigned Replica
多个状态。点击 Advanced
能够看到高级监控页面,请读者本身去感觉下。
节点监控,首先看到的是概述指标:
CPU Usage
: CPU 使用率;Load Average
:CPU 平均负载;JVM Memory
:JVM 使用状况;Disk Free Space
:磁盘空闲空间;Shards
:分片数;点击某个节点咱们能够看到详细基础监控:
JVM Heap (GB)
:JVM 使用状况;Index Memory (KB)
:索引占用内存;CPU Utilization (%)
:CPU 使用率;System Load
:系统负载;Latency (ms)
:延迟,分为索引和查询;Segment Count
:段数量;Shard Legend
:分片状态图谱, Primary
, Replica
,Relocating
,Initializing
多个状态。该功能的入口在 Management
-> Users
/Roles
。Users
能够方便的管理用户而且对其赋予角色,角色和权限挂钩。Roles
能够方便的管理角色,对其进行赋权。Role
是 Permission
的集合,Permission
是 Privilege
的集合,下面来讲说权限:
其中,集群权限和索引权限的详细细分权限以下:
权限类型 | 权限描述 |
---|---|
all |
全部群集管理操做,如快照,节点关闭/从新启动,设置更新,从新路由或管理用户和角色。 |
monitor |
全部集群只读操做,如集群健康状态,热线程,节点信息,节点和集群统计信息,快照/恢复状态,挂起集群任务。 |
manage |
构建在监视器上,并添加可更改集群中值的集群操做。这包括快照,已检查的设置和从新路由。此权限不包括管理安全性的能力。 |
manage_security |
全部与安全性相关的操做,如对用户和角色的CRUD操做以及缓存清除。 |
manage_index_templates |
对索引模板的全部操做。 |
manage_pipeline |
对管道的全部操做。 |
transport_client |
传输客户端链接所需的全部权限。 |
权限类型 | 权限描述 |
---|---|
all | 全部索引操做权限。 |
monitor |
监控(恢复,细分信息,索引统计信息和状态)所需的全部操做。 |
manage |
全部监视器权限和索引管理( aliases, analyze, cache clear, close, delete, exists, flush, mapping, open, force merge, refresh, settings, search shards, templates, validate |
view_index_metadata |
只读访问索引元数据(aliases, aliases exists, get index, exists, field mappings, mappings, search shards, type exists, validate, warmers, settings)。此权限主要供Kibana用户使用。 |
read |
只读访问操做(count, explain, get, mget, get indexed scripts, more like this, multi percolate/search/termvector, percolate, scroll, clear_scroll, search, suggest, tv)。还授予对更新映射操做的访问权限。 |
index |
索引和更新文档的权限。还授予对更新映射操做的访问权限。 |
create |
索引文档的权限。还授予对更新映射操做的访问权限。 |
delete |
删除文档的权限。 |
write |
对文档执行全部写操做的权限,包括对文档进行索引,更新和删除以及执行批量操做的权限。还授予对更新映射操做的访问权限。 |
delete_index |
删除索引的权限。 |
create_index |
建立索引的权限。建立索引请求可能包含在建立后添加到索引的别名。在这种状况下,请求还要求在索引和别名名称上具备manage特权。 |
具体的 Privilege 能够参看:https://www.elastic.co/guide/en/x-pack/current/security-privileges.html。
本文主要介绍了安全解决方案 X-Pack 的概况、免费和收费版本的区别、部署步骤以及基本免费功能的使用。基于此,咱们的结论是,对于企业级安全解决方案来讲,免费版本的 X-Pack 的确力不从心,须要购买或者结合第三方免费插件进行安全方案升级。
Q: 打开 Kibana 遇到 Login is disabled because your license has expired. Please extend your license or disable Security in Elasticsearch.
A: 说明体验的 x-pack 功能证书过时,须要 disable 以后才能够恢复使用,在 elasticsearch.yml 中添加:
xpack.security.enabled: false