亚马逊AWS官方博客

利用 Open Distro for Elasticsearch 中的 Performance Analyzer 和 PerfTop 进行轻量级调试

当您想监控 Elasticsearch 集群或调试问题时,可以获得多个选择。您可以使用 various _cat 和 stats API 从该集群中获取信息。您可以监控 JVM 自身并对其进行性能分析。这些选项可能冗长并缺少视觉显示。当您可通过 push _cat 和 stats 将数据恢复到 Elasticsearch 中并通过 Kibana 显示时,您也可能会希望使用更加轻量级的方法。

Open Distro for Elasticsearch 提供的两个组件可结合起来为您提供所需的轻量级工具以快速检索并显示核心指标。Performance Analyzer 是一种代理和 REST API,可供您查询集群的多种性能指标,包括这些指标的聚合,而与 Java 虚拟机 (JVM) 无关。Performance Analyzer 在您用于运行 Elasticsearch 的相同节点上运行,并从这些节点收集指标。PerfTop 是仿照 Linux 的 top 命令构建的轻量级命令行工具。您可使用简单 JSON 定义控制面板;PerfTop 将这些控制面板显示在您收藏的终端应用中。

设置

Performance Analyzer 是 Open Distro for Elasticsearch 的二进制分发的组成部分。您在运行 Open Distro 时运行它。我编写了一些使 Docker for Mac OS 保持正常运行的简单指令。您可以采用这些指令,也可以将 Open Distro for Elasticsearch 文档中更加详细的指令用于 .rpm 或 Docker 安装。

您可以在我们的下载页面上找到适合您的 Linux 或 Mac 操作系统的 PerfTop 二进制文件。

运行

Open Distro for Elasticsearch 组件 Performance Analyzer 和 PerfTop 的数据流程图PerfTop 是一种 Javascript 应用程序,它轮询 Performance Analyzer 的 API 以抽取指标并将其显示在 Graphs 中 — 这种微件显示涉及其一个或多个 dimensionsmetrics。您可指定通过提供 dashboard 配置显示哪些指标和图表 PerfTop。您的配置定义了一个包含行和列的网格。您将图表放在此网格上,通过行数和列数调节其大小。

指标

Performance Analyzer 提供超过 75 个指标的数据,涵盖从网络到磁盘再到垃圾收集器之类的内部模块。部分更令人感兴趣的指标类别如下:

    • Paging_*Sched_*:涵盖低层操作系统指标,将可帮助您了解操作系统如何运行作业及其如何缓存 Lucene 的基础数据结构
    • IO_*:监控 I/O 操作的需要和性能。这对于验证磁盘能够提供工作负荷所需的读写速率尤其重要。
    • Cache_*:Elasticsearch 在内部缓存各种数据。您可以使用这些指标查找其缓存的效率。
    • Refresh_*、Flush_* 和 Merge_*:使用这些指标监控写入操作的效率。如果您在刷新、更新和合并时用的时间太长,则升高 refresh_interval
    • *_Memory:探究 JVM 内存的利用率。利用这些指标,您可以发现映射或分片策略的系统问题。
    • Disk_*、Net_*:揭示您的磁盘和网络的基础利用率。
    • Threadpool_*:检查在集群内如何分配工作。通过查找哪些数据正在排队寻找资源效率不足之处。

维度

根据指标,Performance Analyzer 揭示该指示的一个或多个维度。例如,Threadpool_* 指标全都有单维度 ThreadPoolType。当您将线程池指标之一添加到图表时,它将显示该图表中的每个维度值(单个线程池队列),直至达到它在网格上的分配空间。

如果指标拥有多个维度,您可以将多个维度在同一个图表中。您可在配置中指定逗号分隔字符串。请参阅下文。

聚合

您可以采用普通方式聚合指标/维度的基础数据—sum、avg、min 和 max。

定义控制面板

PerfTop 包括四个控制面板。您可以通过使用它们获得使用 PerfTop 的感觉,并根据自己的用途对它们进行自定义。本文向您介绍控制面板文件的结构和内容。请继续关注更深入的探究。

您可以创建 JSON 文件,然后当您运行 PerfTop 时在命令行中指定该文件,以定义控制面板。控制面板的初始部分中包含 Performance Analyzer 的 endpoint 以及网格尺寸,后面是 graphs 的集合。您可以在 graphs 部分中指定零或多个 tableslinesbars

{
  "endpoint": "localhost:9600",
  "gridOptions": {
    "rows": 12,
    "cols": 12
  },
  "graphs": {
    "tables": [],
    "lines": [],
    "bars": []
  }
}

当您定义 table、line 和 bar 图表时,您可以指定该图表的指标、维度和聚合。您还可以指定控制图表显示的参数,包括图表的网格大小以及该图表类型的可选参数。

显示 Elasticsearch 指标的表单的 Open Distro for Elasticsearch PerfTop Elasticsearch

上面的表单来自 ClusterOverview.json 控制面板,它显示了三个指标:CPU_UtilizationIO_ReadThroughputIO_WriteThroughput。它的 JSON 描述使用包含这些指标的逗号分隔字符串。每个指标都显示三个维度:OperationIndexNameShardID,在所案例中都通过 sum 聚合。当您显示多个维度时,您提供的聚合和维度都是逗号分隔的字符串,且必须长度相同,每次一个维度和一个聚合从左到右解析和解读:

    "tables": [
      {
        "queryParams" : {
          "metrics": "CPU_Utilization,IO_ReadThroughput,IO_WriteThroughput",
          "dimensions": "Operation,IndexName,ShardID",
          "aggregates": "sum,sum,sum",
          "sortBy": "CPU_Utilization"
        },
        "options": {
          "gridPosition": {
            "row": 0,
            "col": 0,
            "rowSpan": 4,
            "colSpan": 7
          },
          "label": "Resource Metrics",
          "keys": false,
          "fg": "green",
          "selectedFg": "green",
          "selectedBg": " ",
          "columnSpacing": 1,
          "refreshInterval": 5000
        }
      },…

小结

本文旨在帮助您开始试用 Open Distro for Elasticsearch 的 Performance Analyzer 和 PerfTop。我们现在只是粗略地了解了 Performance Analyzer 中可用的指标。您可以且应当探究到基础磁盘、网络、cpu 和进程利用率,以监控并纠正您的 Open Distro for Elasticsearch 集群中的资源瓶颈。您可以将 PerfTop 用作轻量级控制面板和调试工具,以快速识别和纠正集群中的问题。

有问题或疑问? 希望参与讨论? 您可以在我们的论坛上获得帮助并讨论 Open Distro for Elasticsearch。您可以在这里提出问题

本篇作者

Jon Handler

Jon Handler

Jon Handler (@_searchgeek) 是总部位于加利福尼亚州帕罗奥图市的 Amazon Web Services 的首席解决方案架构师。Jon 与 CloudSearch 和 Elasticsearch 团队密切合作,为想要将搜索工作负载迁移到 AWS 云的广大客户提供帮助和指导。在加入 AWS 之前,Jon 作为一名软件开发人员,曾为某个大型电子商务搜索引擎编写代码长达四年。Jon 拥有宾夕法尼亚大学的文学学士学位,以及西北大学计算机科学和人工智能理学硕士和博士学位。