2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

在 Elasticsearch 中存储 Open Distro for Elasticsearch 的 Performance Analyzer 输出

  • 2019-09-29
  • 本文字数:4427 字

    阅读完需:约 15 分钟

在 Elasticsearch 中存储 Open Distro for Elasticsearch 的 Performance Analyzer 输出

Open Distro for Elasticsearch Performance Analyzer 插件显示从 Elasticsearch 集群返回指标的 REST API。要充分利用这些指标,您可以将它们存储在 Elasticsearch 中,并使用 Kibana 对其进行可视化。尽管您可以使用 Open Distro for Elasticsearch 的 PerfTop 来构建可视化效果,但 PerfTop 不会保留数据,这意味着它为轻量级。


在本博文中,我将通过一个代码示例探索 Performance Analyzer 的 API,该代码读取 Performance Analyzer 的指标并将其写入 Elasticsearch。您可能会想知道为什么 Performance Analyzer 还没有这样做(欢迎您发起 Pull Request!)。Performance Analyzer 设计为 Elasticsearch 的轻量级协同进程。如果您的 Elasticsearch 集群有问题,则它可能无法响应请求,并且 Kibana 可能无法正常工作。如果采用示例代码,建议将数据发送到不同的 Open Distro for Elasticsearch 集群以避免出现此问题。


您可以遵循我在 GitHub 社区存储库中发布的示例代码。当您克隆存储库时,代码位于 pa-to-es 文件夹中。有关其他代码示例的信息,请参阅往期博客文章。

代码概述

pa-to-es 文件夹包含三个 Python 文件(需要 Python 版本 3.x)和一个 Elasticsearch 模板,该模板将 @timestamp 字段的类型设置为 date。main.py 是一个应用程序,包含调用 Performance Analyzer 的无限循环,以进行提取指标、解析这些指标并将其发送到 Elasticsearch:


    while 1:        print('Gathering docs')        docs = MetricGatherer().get_all_metrics()        print('Sending docs: ', len(docs))        MetricWriter(get_args()).put_doc_batches(docs)
复制代码


如您所见,main.py 提供 MetricGatherer 和 MetricWriter 两个类别,以与 Elasticsearch 进行通信。MetricGatherer.get_all_metrics() 将遍历 metric_descriptions.py(每个都调用 get_metric())中的运行指标说明。


要获取指标,MetricGatherer 将生成表单的 URL:


http://localhost:9600/_opendistro/_performanceanalyzer/metrics?metrics=&dim=&agg=&nodes=all


(您可以在我们的文档中获取有关 Performance Analyzer API 的更多详细信息。) 指标说明是 namedtuple,提供指标/维度/聚合三元组。发送多个项目的效率会更高,但我发现解析结果要复杂得多,这使得任何性能提升都不那么重要。为了确定指标说明,我生成了指标/维度/聚合的所有可能组合,测试运行说明并将其保留在 metric_descriptions.py 中。比较好的做法是构建可显示有效组合的 API,而不是从静态描述集进行运行(正如我前面提到的,我们欢迎大家发起 Pull Request)。


MetricGatherer 使用 result_parse.ResultParser 解释对 Performance Analyzer 的调用的输出。输出 JSON 的每个节点包含一个元素。在该元素中,它返回 fields 列表,后跟一组 records:


{  "XU9kOXBBQbmFSvkGLv4iGw": {    "timestamp": 1558636900000,     "data": {      "fields":[        {          "name":"ShardID",          "type":"VARCHAR"        },        {          "name":"Latency",          "type":"DOUBLE"        },        {          "name":"CPU_Utilization",          "type":"DOUBLE"        }      ],      "records":[        [          null,          null,          0.016093937677199393        ]      ]    }  }, ...
复制代码


ResultParser 将分离的字段名称和值压缩在一起,生成一个 dict,跳过空值。records 生成器函数使用此 dict 作为其返回的基础,添加来自原始返回正文的时间戳。records 还将节点名称和聚合作为字段添加到 dict 中,以便在 Kibana 中可视化数据。


MetricWriter 关闭循环,同时收集 dict 并将其作为文档写入 Elasticsearch,构建 _bulk 正文,然后通过 POST 请求批量写入 Elasticsearch。编写时,代码为硬连线,以将 _bulk 发送至 https://localhost:9200。实际上,您需要更改输出以转到不同的 Elasticsearch 集群。POST 请求的身份验证为 admin:admin,请确保在更改 Open Distro for Elasticsearch 的密码时对其进行更改。

将模板添加到集群

您可以按如上所述方式运行代码,您将看到数据流入 Open Distro for Elasticsearch 集群。但是,Performance Analyzer 返回的时间戳是长整数,Elasticsearch 会将映射设置为 number,您将无法对索引使用 Kibana 基于时间的函数。我可以截取时间戳或重写时间戳,以便自动检测映射。我选择了设置模板。


以下模板(pa-to-es 文件夹中的 template.json)将 @timestamp 的字段类型设置为 date。在发送任何数据、自动创建索引之前,您需要将此模板发送到 Elasticsearch。(如果您已经运行了 pa-to-es,请不要担心,只需删除它创建的任何索引。) 您可以使用 Kibana 开发人员窗格将模板发送到 Elasticsearch。


导航至 https://localhost:5601。登录、关闭启动画面,然后选择 DevTools 选项卡。单击 Get to work。复制以下文本并粘贴到交互式窗格中,然后单击右侧的三角形。(根据您运行的 Elasticsearch 版本,您可能会收到有关类型删除的警告。您可以忽略此警告。)


POST _template/pa {    "index_patterns": ["pa-*"],    "settings": {        "number_of_shards": 1    },    "mappings": {        "log": {            "properties": {                "@timestamp": {                    "type": "date"                }            }        }    }}
复制代码

监控 Elasticsearch

我运行 esrally,通过 http_logs 跟踪我的 Open Distro for Elasticsearch,还运行 main.py 来收集指标。然后,我使用这些数据构建了一个 Kibana 控制面板,用于监控我的集群。



显示 Open Distro for Elasticsearch Performance Analyzer 插件收集的指标的 Kibana 控制面板

小结

Elasticsearch 文档中存储的指标具有单个指标/维度/聚合组合,让您可以自由地以最精细的粒度构建 Kibana 可视化效果。例如,我的控制面板将 CPU 利用率细化到 Elasticsearch 操作级别、每个节点上的磁盘等待时间,以及每个操作的读写吞吐量。在随后的博文中,我将深入探讨如何使用 Performance Analyzer 数据构建控制面板和其他可视化效果。


作者介绍:


Jon Handler


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


本文转载自 AWS 技术博客


文章链接:


https://amazonaws-china.com/cn/blogs/china/open-distro-for-elasticsearchs-performance-analyzer-kibana/


2019-09-29 16:29966
用户头像

发布了 1895 篇内容, 共 143.1 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

从模型到实际:人工智能项目落地的关键要素

天津汇柏科技有限公司

AI 人工智能

使用Python开发获取商品销量详情API接口

科普小能手

跨境电商 Python开发 API 接口 API 开发 淘宝商品销量接口

不愧是自媒体人的黑科技,融媒宝让内容一键发布到多平台

编程猫

SD-WAN企业智能物流网络解决方案

Ogcloud

SD-WAN 智能物流 SD-WAN组网 SD-WAN服务商 SD-WAN国际专线

破局沉寂的区块链市场:未来之路与战略思考

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

区块链钱包开发:全面功能设计方案解析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

认识Redis集群

不在线第一只蜗牛

数据库 redis Spring Boot

Java日志记录几种实现方案

不在线第一只蜗牛

Java Python

AWS数据合作伙伴|质变科技受邀分享Serverless AI-ready Data Cloud

AI数据云Relyt

Data Lake 云数据库 数据云 Data-Centric AI AI-ready Data Cloud

明道云在生态环境领域的应用

明道云

iCraft Editor - 助你轻松绘制出色的立体架构图

Favori

架构视图 画架构图 架构图 简易架构图 架构图工具

全链路解析如何构建数据资产管理框架及落地实践丨袋鼠云“数智基建+数智应用”赋能分享02期

袋鼠云数栈

2025年,Web3开发学习路线全指南

chainwiseweb3

区块链 去中心化 DAPP系统开发 交易所源码 加密货币钱包

【拆解篇】CTO眼里的数据治理,其实就这三点!

小鲸数据

#数据治理框架 #数据治理 #数据质量 #数据标准

华为云云日志服务 HarmonyOS NEXT采集最佳实践

华为云开发者联盟

sdk HarmonyOS 日志采集 ArkTS

一行代码都不改,Golang 应用链路指标日志全知道!

阿里巴巴云原生

阿里云 开源 云原生

加速数字化转型:运营商产品加载流程优化

鲸品堂

流程 运营商 优化工具 企业号 2024年12月PK榜

淘宝天猫API接口探秘:解锁店铺商品与拍立淘搜索的无限可能

代码忍者

API 接口 pinduoduo API

探索1688阿里巴巴API接口:关键字搜索与拍立淘图片搜索的无限可能

代码忍者

API 接口 pinduoduo API

SD-WAN为企业国际业务提供坚实网络支持

Ogcloud

SD-WAN SD-WAN组网 SD-WAN国际专线 海外网络专线 海外网络访问

在 Elasticsearch 中存储 Open Distro for Elasticsearch 的 Performance Analyzer 输出_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章