Observability:添加免费和开放的 Elastic APM 作为 Elastic 可观察性部署的一部分 - 8.x

news/2024/4/26 3:48:50/文章来源:https://blog.csdn.net/UbuntuTouch/article/details/130343442

作者:David Hope

在最近的一篇博文中,我们向你展示了如何开始使用 Elastic 可观察性的免费开放层。 下面,我们将介绍你需要做些什么来扩展你的部署,这样你就可以开始免费从应用程序性能监控(APM)或跟踪集群中的数据中收集指标。

APM 是什么?

应用程序性能监控让你可以了解你的应用程序将时间花在哪里、它们在做什么、它们正在调用哪些其他应用程序或服务,以及它们遇到了哪些错误或异常。

 此外,APM 还可以让你查看关键性能指标的历史和趋势,例如延迟和吞吐量,以及 transaction 和依赖信息:

无论你是要设置 SLA 违规警报、尝试衡量最新版本的影响,还是决定在何处进行下一次改进,APM 都可以帮助你进行根本原因分析,从而帮助改善用户体验并提高你的平均水平 解决时间(MTTR)趋近于零。

有关 Elastic APM 的更多介绍,请阅读文章 “Observability:应用程序性能监控/管理(APM)实践”。

逻辑架构

Elastic APM 依赖于 Elastic Agent 内部的 APM 集成,它将应用程序跟踪和指标数据从使用 APM 代理检测的应用程序转发到 Elastic 可观察性集群。 Elastic APM 支持多种代理风格:

  • 原生 Elastic APM 代理,支持多种语言,包括 Java、.NET、Go、Ruby、Python、Node.js、PHP 和客户端 JavaScript
  • 使用 OpenTelemetry 检测的代码
  • 使用 OpenTracing 检测的代码
  • 使用 Jaeger 检测的代码

 

在此博客中,我们将提供一个快速示例,说明如何使用本机 Elastic APM Python 代理检测代码,但总体步骤与其他语言类似。

请注意,Elastic APM Agent 和 Elastic Agent 之间有很大的区别。 正如你在上图中所见,这些是非常不同的组件,所以不要混淆它们很重要。

安装弹性代理

第一步是安装 Elastic Agent。 你需要先安装 Fleet,或者你可以独立安装 Elastic Agent。 按照本指南在某处安装 Elastic Agent。 这将为你提供一个可以访问的 APM 集成端点。 请注意,此步骤在 Elastic Cloud 中不是必需的,因为我们为你托管了 APM 集成。 通过运行检查 Elastic Agent 是否已启动:

curl <ELASTIC_AGENT_HOSTNAME>:8200

使用 Elastic APM 代理检测示例代码

各种语言代理的指令因编程语言而异,但在较高层次上它们具有相似的流程。 首先,你在语言的本机规范中添加代理的依赖项,然后配置代理以让它知道如何找到 APM 集成。

你可以尝试任何你喜欢的风格,但我将使用我创建的这个 Python 示例来浏览 Python 指令。

获取示例代码(或使用你自己的代码)

首先,我克隆 GitHub 存储库,然后切换到目录:

git clone https://github.com/davidgeorgehope/PythonElasticAPMExample
cd PythonElasticAPMExample

如何添加依赖

添加 Elastic APM 依赖项很简单 —— 检查 github 存储库中的 app.py 文件,你会注意到以下代码行。

import elasticapm
from elasticapm import Clientapp = Flask(__name__)
app.config["ELASTIC_APM"] = {    "SERVICE_NAME": os.environ.get("APM_SERVICE_NAME", "flask-app"),    "SECRET_TOKEN": os.environ.get("APM_SECRET_TOKEN", ""),    "SERVER_URL": os.environ.get("APM_SERVER_URL", "http://localhost:8200"),}
elasticapm.instrumentation.control.instrument()
client = Client(app.config["ELASTIC_APM"])

Flask 的 Python 库能够自动检测 transactions,但你也可以按照以下代码在代码中启动 transactions,就像我们在本例中所做的那样:

@app.route("/")
def hello():client.begin_transaction('demo-transaction')client.end_transaction('demo-transaction', 'success')

配置代理

代理需要将应用程序跟踪数据发送到 APM 集成,为此它必须是可访问的。 我将 Elastic Agent 配置为侦听本地主机的 IP,因此子网中的任何内容都可以向它发送数据。 从下面的代码可以看出,我们使用 docker-compose.yml 通过环境变量传入配置。 请为你自己的 Elastic 安装编辑这些变量。

# docker-compose.yml
version: "3.9"
services:flask_app:build: .ports:- "5001:5001"environment:- PORT=5001- APM_SERVICE_NAME=flask-app- APM_SECRET_TOKEN=your_secret_token- APM_SERVER_URL=http://host.docker.internal:8200

对上面的一些解释:

  • service_name:如果你省略它,它将默认为应用程序的名称,但你可以在此处覆盖它。
  • secret_token:秘密 token 允许你授权对 APM 服务器的请求,但它们要求 APM 服务器设置有 SSL/TLS 并且已经设置了秘密 token。 我们没有在代理和 APM 服务器之间使用 HTTPS,因此我们将注释掉这一行。
  • server_url:这是代理可以访问 Elastic Agent 内部的 APM 集成的方式。 将其替换为运行 Elastic Agent 的主机的名称或 IP。

现在 Elastic APM 端的配置已经完成,我们只需按照 README 中的步骤启动即可。

docker-compose up --build -d

构建步骤将需要几分钟时间。

你可以通过访问 http://localhost:5001 导航到正在运行的示例应用程序。 样本内容不多,但它确实生成了一些 APM 数据。 要产生一点负载,你可以重新加载它们几次或运行一个快速的小脚本:

#!/bin/bash
# load_test.sh
url="http://localhost:5001"
for i in {1..1000}
docurl -s -o /dev/null $urlsleep 1
done

这只会每秒重新加载页面。

回到 Kibana,导航回 APM 应用程序(汉堡包图标,然后选择 APM),你应该会看到我们新的 flask-app 服务(我让我本地的部署运行,所以它显示了更多的历史记录):

服务概览页面在一个位置提供了服务运行状况的概览。 如果你是开发人员或 SRE,此页面将帮助你回答以下问题:

  • 新部署如何影响性能?
  • 受影响最大的 transaction 是什么?
  • 性能与底层基础设施有何关联?

此视图提供了在指定时间段(在本例中为过去 15 分钟)内已将应用程序跟踪数据发送到 Elastic APM 的所有应用程序的列表。 还有迷你图显示延迟、吞吐量和错误率的迷你图。 单击 flask-app 将我们带到 service overview 页面,该页面显示了服务中的各种 transaction(回想一下我的脚本正在访问 / 端点,如 Transactions 部分所示)。 我们得到了更大的延迟、吞吐量、错误和错误率图表。

当你在实际负载下检测真实应用程序时,你会看到更多的连接(和错误!)

单击交易视图中的 transaction,在本例中,我们的示例应用程序的 demo-transaction transaction,我们可以确切地看到调用了哪些操作:

这包括有关调用外部服务的详细信息,例如数据库查询:

 

下一步是什么?

现在你已经启动并运行了 Elastic 可观察性集群并收集了开箱即用的应用程序跟踪数据,探索应用程序使用的语言的公共 API,这使你可以将 APM 数据带到下一个等级。 这些 API 允许你添加自定义元数据、定义业务 transaction、创建自定义跨度(span)等。 你可以在 APM 代理文档页面上找到各种 APM 代理(例如 Java、Ruby、Python 等)的公共 API 规范。

如果你想了解有关 Elastic APM 的更多信息,请观看我们关于 Elastic APM 向云原生转变的网络研讨会,了解 Elastic APM 可以在你的生态系统中为你提供帮助的其他方式。

如果你决定宁愿让我们托管你的可观察性集群,你可以注册免费试用 Elastic Cloud 上的 Elasticsearch 服务,并更改你的代理以指向你的新集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102724.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力&#xff0c;终将成就无可替代的自己。 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半…

为什么你永远不应该在CSS中使用px来设置字体大小

代码部署后可能存在的BUG没法实时知道&#xff0c;事后为了解决这些BUG&#xff0c;花了大量的时间进行log 调试&#xff0c;这边顺便给大家推荐一个好用的BUG监控工具 Fundebug。 在Josh Collinsworth的博客文章“永远不要用px作为字体大小”中&#xff0c;作者讨论了为什么不…

Ceph入门到精通-Ceph 编排器简介

第 1 章 Ceph 编排器简介 作为存储管理员&#xff0c;您可以将 Ceph 编排器与 Cephadm 实用程序搭配使用&#xff0c;能够发现设备并在 Red Hat Ceph Storage 集群中创建服务。 1.1. 使用 Ceph Orchestrator Red Hat Ceph Storage Orchestrators 是经理模块&#xff0c;主要…

C语言函数大全-- o 开头的函数

C语言函数大全 本篇介绍C语言函数大全-- o 开头的函数 1. obstack_init&#xff0c;obstack_free&#xff0c;obstack_alloc&#xff0c;obstack_blank&#xff0c;obstack_grow 1.1 函数说明 函数声明函数功能void obstack_init(struct obstack *obstack_ptr);它是 POSIX …

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司&#xff1a;微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

美颜sdk开发实践:如何构建美颜sdk功能?

美颜功能是现今很多应用中必不可少的一项功能。而要实现美颜功能&#xff0c;除了自己编写美颜算法外&#xff0c;还可以使用美颜sdk来实现。本文将介绍如何从零开始构建美颜功能&#xff0c;利用美颜sdk实现美颜效果。 一、简介 美颜sdk可以向用户提供多种美颜效果&#xff…

大学生用什么蓝牙耳机好?2023好用的蓝牙耳机推荐

近几年&#xff0c;蓝牙耳机市场不断扩大&#xff0c;逐渐取代有线耳机成为最受人欢迎的数码产品之一。作为蓝牙耳机主要受众群的大学生&#xff0c;用什么蓝牙耳机比较好呢&#xff1f;下面&#xff0c;我来给大家推荐几款便宜好用的蓝牙耳机&#xff0c;一起来看看吧。 一、…

stm32读写内部Flash

stm32内部flash地址架构映射 因为我的stm32f407的内部flash是1M的所以块2不存在&#xff0c;但他的地址仍然存在&#xff0c;只是没有作用&#xff0c;这是stm32的整体框架。 主存储器 一般我们说 STM32 内部 FLASH 的时候&#xff0c;都是指这个主存储器区域&#xff0c;它…

生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例

在计算机网络中&#xff0c;为了保证网络拓扑结构的稳定性和可靠性&#xff0c;需要采用一些协议进行网络的管理和控制。其中&#xff0c;STP、RSTP 和 MSTP 是三种常用的网络管理协议。本文将分别介绍这三种协议&#xff0c;并且使用华为、思科两家厂商作为案例给出相应的命令…

数据库之约束、索引和事务

一、约束 约束,顾名思义就是数据库对数据库中的数据所给出的一组检验规则.负责判断元素是否符合数据库要求.其目的就是为了提高效率以及准确性. 1.not null - > 数据元素非空 表示如果插入数据,则当前数据不能为空. //创建一张学生表,其班级id和年级id不为空 create …

【嵌入式笔/面试】嵌入式软件基础题和真题总结——网络相关

在学习的时候找到几个十分好的工程和个人博客&#xff0c;先码一下&#xff0c;内容都摘自其中&#xff0c;有些重难点做了补充&#xff01; 才鲸 / 嵌入式软件笔试题汇总 嵌入式与Linux那些事 阿秀的学习笔记 小林coding 百问网linux 嵌入式软件面试合集 2022年春招实习十四面…

unity3d---物体加点击事件

目录 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 4.物体单独响应点击事件 5.控制脚本实现各物体的点击事件 6.点击ui时屏蔽 物体点击事件 1.给需要点击点物体加collider 2.层级面板加EventSystem 3. 相机加Physics Raycaster 2d…

6. 树的入门

6. 树的入门 之前我们实现的符号表中&#xff0c;不难看出&#xff0c;符号表的增删查操作&#xff0c;随着元素个数N的增多&#xff0c;其耗时也是线性增多的&#xff0c;时间复杂度都是O(n),为了提高运算效率&#xff0c;接下来我们学习树这种数据结构。 6.1 树的基本定义 …

PerformanceTest, monitoring command

PerformanceTest, monitoring command 1、数据库 #查看最大连接数 show variables like max_connections; #例如:查看mysql连接数 show status like Threads%; 说明: threads_cached //查看线程缓存内的线程的数量 threads_connected //查看当前打开的连接的数量(打开的…

Pytorch的几种常用优化器

文章目录 AdagradSGDRMSpropAdamAdamW Adagrad Adagrad是一种可以自动调节每个参数更新的梯度的优化器&#xff0c;也可以做到在梯度平缓时走的步长大&#xff0c;在梯度小时走的步长小&#xff0c;从而防止loss出现剧烈震荡的情况。这里默认你已知道了他的原理了&#xff0c;…

离散数学-考纲版-01-命题逻辑

文章目录 1. 命题逻辑的等值演算与推理演算参考1.1 命题1.2 常用联结词1.3 命题公式命题公式的分类-重言式-矛盾式-可满足式等价关系式-逻辑等价 logically equivalent 1.4 命题的等值演算与推理基本等价式逻辑蕴涵重言式 logically implication重言蕴涵推到归结法 1.5 命题公式…

机器学习——SVM的易错题型

问&#xff1a;支持向量机仅可以用于处理二分类任务 答&#xff1a;错误。支持向量机可以用于处理多分类任务&#xff0c;通过使用一对多或一对一的方法&#xff0c;将多个类别分别与其他类别做二分类。也可以使用多类支持向量机算法&#xff0c;直接将多个类别一起纳入训练和…

3、Typescript中补充的六个类型

1、元组 元组可以看做是数组的拓展&#xff0c;它表示已知元素数量和类型的数组。确切地说&#xff0c;是已知数组中每一个位置上的元素的 类型&#xff0c;来看例子&#xff1a; let tuple: [string, number, boolean]; tuple ["a", 2, false]; tuple [2, "…

网络设备发现工具

什么是网络设备发现 网络设备发现是识别和映射网络基础架构&#xff08;如路由器、交换机、集线器、防火墙、无线接入点、服务器、虚拟机等&#xff09;中存在的设备和接口的过程。网络发现是网络管理的第一步&#xff0c;也是成功监控解决方案的关键。该过程不仅涉及发现网络…

LINUX SVN 新建项目

从第三方代码创建代码库&#xff1a; 1、通过客户端进入服务端 2、在对应的目录创建新的项目/目录 在对应的目录右击 &#xff1a;creat folder... 例&#xff1a;创建testSvn 3、在客户端checkout(co) testSvn 4、将第三方源码(srcTest)拷贝到客户端下的对应路径 防止L…