zoukankan      html  css  js  c++  java
  • 集中式日志分析平台

    96 
    大数据之心 
     0.6 2017.02.22 15:36* 字数 2158 阅读 16457评论 7

    简介

    X-Pack 已经作为 Elastic 公司单独的产品线,前身是 ShieldWatcherMarvelGraph, 和 reporting,先来说说这几个爸爸是做什么的吧:

    • Shield: 提供对数据的 Password-Protect,以及加密通信、基于角色的权限控制,IP 过滤,审计,可以有效地:
      • 防止未授权的访问:基于 Password-Protect,基于角色的权限控制,IP过滤;
      • 保证数据的完整性:基于消息认证和 TLS/SSL 加密;
      • 审计跟踪:可以知道谁在什么时候对数据做了什么;
    • Watcher: 提供对数据操作的变更的监控和报警。
    • Marvel: 基于 Kibana 的插件,主要用于监控 ES 集群。可以看到集群的健康状况、实时的性能指标,分析历史集群、索引、节点的指标等。
    • Graph: 用于分析数据间的关系。
    • Reporting: 用于快速生成 Kibana Visualization 和 Dashboard 的报表,可以对生成的时间定制计划,并且可以由某些特定条件触发。

    再来看看我们的儿子 X-Pack 是做啥的,哦,他就是他们的儿子,一个大合集,便于安装、不用为版本兼容性犯愁,可以灵活 disable / enable 其中的各个组件。他还多干了一件事儿,可以监控 Logstash。

    关于免费和收费版本,版本功能比较可以查看:https://www.elastic.co/subscriptions

    免费版本注册地址:https://register.elastic.co/xpack_register

    付费版本(分为黄金、白金级别)购买地址:https://www.elastic.co/subscriptions/xpack

    默认的免费版本有一个月的 trial 试用期。免费版本试用期只包含 ES 集群监控、图分析和可视化,基于角色的 ES 权限控制和搜索用户信息的功能。不包含:

    • 安全组件 Shield:
      • TLS/SSL加密;
      • LDAP的整合;
      • 日志审计;
      • 第三方的认证域整合;
    • 报警组件 Watcher;
    • 报表组件 Reporting;

    总的来说免费版本对于安全组件这块什么都不支持。

     
    呵呵呵呵

    安装

    安装 X-Pack 前必须安装 ES 和 Kibana ,我们使用的是 5.2.1 版本 集中式日志分析平台 - ELK Stack - 部署篇。X-Pack 我们也使用 5.2.1,我们来讲讲如何离线安装吧。

    Step1. 下载 X-Pack Zip 文件:https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.2.1.zip (sha1),尼玛有119MB那么大。

    Step2. 上传 zip 文件至服务器 /tmp 目录;

    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
    

    功能开关

    我们可以通过以下配置进行功能开关:

    SettingDescription
    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

    Graph 可以根据实时查询,对给定的 field 得到图视角的关联关系,笔者以一个快速发现集群中哪台 host 有明显 ERROR 为例讲解下如何使用。Index Pattern 我们选择 filebeat-*,我们添加 两个 filed:host log_level,然后在我们的搜索框添加 hour:14 AND minute: [20 TO 37] ,得到以下绘图:

     
    Graph

    可以直观的看到我们的两台被采集机器和日志级别的关系,v134003.yn1 INFO 日志较多,v134008.yn1 ERROR 日志较多。点击灰色的边,我们可以看到这个 Link 的概况:

     
    Link Summary

    有一个直观的包含交集图,还有3个数字,分别表示:

    • 1022 个文本中包含了 v134003.yn1 这个 term;
    • 986 个文本中同时包含了 v134003.yn1 和 INFO 这2个 term;
    • 2013 个文本中包含了 INFO 这个 term;

    Monitoring(免费版本只支持单 ES 集群)

    查看 ES 集群的 health:

     
    ES Cluster Health
    • 集群级别:
      • Uptime : 集群运行时间;
    • 节点级别:
      • Disk Available:可用磁盘;
      • JVM Heap: JVM 使用情况;
    • 索引级别:
      • Indices:索引数量,相当于数据库数;
      • Documents:文档数量,相当于记录数;
      • Disk Usage:磁盘使用情况;
      • Primary Shards:分片数;
      • Replica Shards:冗余分片数;
    Overview

    相较于集群健康视图,这里的指标更多:

    • Serach Rate (/s):近1小时的查询速率,QPS;
    • Search Latency (ms):近1小时的查询延迟;
    • Index Rate (/s):近1小时的索引速率,IPS;
    • Index Latency (ms):近1小时的索引延迟;
    • Shard Activity:对于 Shard 的操作历史;
    Indices

    索引视角的监控视图,包含以下指标:

    • 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:分片状态图谱,分为 PrimaryReplica,Relocating,Initializing,Unassigned Primary,Unassigned Replica 多个状态。

    点击 Advanced 可以看到高级监控页面,请读者自己去感受下。

    Nodes

    节点监控,首先看到的是概述指标:

    • 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:分片状态图谱, PrimaryReplica,Relocating,Initializing多个状态。

    基于角色的权限控制

    该功能的入口在 Management -> Users/RolesUsers 可以方便的管理用户并且对其赋予角色,角色和权限挂钩。Roles 可以方便的管理角色,对其进行赋权。Role 是 Permission 的集合,Permission 是 Privilege 的集合,下面来说说权限:

    • 集群权限(Cluster Privilege);
    • Run As Privileges:可以使得新建角色拥有所选用户集的权限;
    • 索引权限(Index Privilege):
      • Indices:指定在哪些索引上赋权;
      • Privileges:指定赋予哪些权限;
      • Granted Documents Query(可选):指定在哪些 Query 上赋权;
      • Granted Fields(可选):指定在哪些 fields 上赋权;

    其中,集群权限和索引权限的详细细分权限如下:

    Cluster Privileges

    权限类型权限描述
    all 所有群集管理操作,如快照,节点关闭/重新启动,设置更新,重新路由或管理用户和角色。
    monitor 所有集群只读操作,如集群健康状态,热线程,节点信息,节点和集群统计信息,快照/恢复状态,挂起集群任务。
    manage 构建在监视器上,并添加可更改集群中值的集群操作。这包括快照,已检查的设置和重新路由。此权限不包括管理安全性的能力。
    manage_security 所有与安全性相关的操作,如对用户和角色的CRUD操作以及缓存清除。
    manage_index_templates 对索引模板的所有操作。
    manage_pipeline 对管道的所有操作。
    transport_client 传输客户端连接所需的所有权限。

    Indices Privileges

    权限类型权限描述
    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&A

    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
  • 相关阅读:
    神经网络梯度下降的推导
    在虚拟环境里安装TensorFlow-cpu完成Ng作业
    利用anaconda配置虚拟环境
    Java基础(三)面向对象(下)
    Java基础(二)面向对象(上)
    Java基础(一)
    《深入理解计算机系统》阅读笔记--程序的机器级表示(上)
    《深入理解计算机系统》阅读笔记--信息的表示和处理(下)
    《深入理解计算机系统》阅读笔记--信息的表示和处理(上)
    《深入理解计算机系统》阅读笔记--计算机系统漫游
  • 原文地址:https://www.cnblogs.com/larry-luo/p/11133468.html
Copyright © 2011-2022 走看看