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

news2024/11/25 15:39:12

作者: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 Client

app = 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}
do
  curl -s -o /dev/null $url
  sleep 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.coloradmin.cn/o/456638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我国直播电商行业市场增速下降 核心竞争力发生转变 新一轮洗牌变革步伐将加快

1、直播电商概念及其产业链图解 直播电商是属于网络直播的一个分支&#xff0c;属于一种泛娱乐类直播&#xff0c;电商店铺的店家或模特主播在直播间通过借助视频录制工具&#xff0c;将店铺所售的商品展示给用户&#xff0c;并为用户答疑解惑&#xff0c;提供实时的客服服务&…

【JavaEE初阶】多线程(二)线程状态以及多线程安全问题

摄影分享~~ 文章目录 线程的状态多线程带来的风险线程安全线程安全的原因解决线程不安全问题&#xff08;加锁&#xff09;synchronized关键字-监视器锁monitor locksynchronized的特性 java中的死锁问题死锁死锁的三个典型情况死锁的四个必要条件如何避免死锁&#xff1f; J…

家用洗地机怎么选?2023高性价比家用洗地机推荐

相信大家和我一样是妥妥的“懒人一族”了&#xff0c;不喜欢做家务、不喜欢碰脏水、不喜欢花费过多的时间在家务上&#xff0c;但是却想有一个整洁干净的家居环境。而作为家务清洁中面积最大、耗时耗力最多的就是扫地拖地了。传统的地面清洁方式&#xff0c;要先用扫把扫一遍&a…

Git上传本地代码到Github

参考 https://zhuanlan.zhihu.com/p/138305054 文章目录 上传本地代码到github仓库&#xff08;1&#xff09;创建一个空文件夹&#xff0c;在该文件夹下右键&#xff0c;Git bash here&#xff08;2&#xff09;初始化仓库&#xff08;3&#xff09; 建立本地与github上项目的…

ChatGPT 速通手册——让 ChatGPT 来写正则表达式

regex 生成 正则表达式可谓是一门让广大程序员们又爱又恨的技术。它易学难精&#xff0c;而且可维护性又差&#xff0c;别说交接给其他同事&#xff0c;同一个人写的正则表达式&#xff0c;三个月后回头再看&#xff0c;也可能完全不知所云。 因此&#xff0c;让 ChatGPT 来写…

【计网 从头自己构建协议】一、libpcap 介绍 手撕以太网帧

上一篇&#xff1a;IndexError: list index out of range 下一篇&#xff1a;[【计网 从头自己构建协议】二、收发 ARP 请求帧与响应帧] 介绍 理论的学习总是枯燥的&#xff0c;想要加深对理论的理解&#xff0c;最好的方法就是自己实践一遍。 想要亲手实现各种协议&#xf…

通讯方式连接成功,其他原因导致的连接失败解决方案

一、电脑中有其他品牌visa导致的冲突&#xff08;以tekvisa为例&#xff09; 1、删除tekvisa 2、下载一个NI Package Manager&#xff0c;卸载里面所有NI的东西 &#xff08;https://www.ni.com/zh-cn/support/downloads/software-products/download.package-manager.html#32…

❀五一劳动节来啦❀

今年“五一”&#xff0c;4月29日至5月3日放假调休&#xff0c;共5天。 如果你在5月4日到5月6日请假3天&#xff0c;加上5月7日周日&#xff0c;就可以形成9天的假期。 一&#xff0c;五一劳动节的由来⭐ 国际劳动节又称“五一国际劳动节”“国际示威游行日”&#xff08;英语…

人生中最好的等待叫做来日可期,社科院与杜兰大学金融管理硕士等你惊艳岁月

有句话说&#xff1a;“去日不可追&#xff0c;来日犹可期”。过去的已经过去&#xff0c;不管好的、坏的都已成为我们的回忆。人生中最好的等待就是未来可期。别辜负现在的好时光&#xff0c;努力做想做的事。社科院与杜兰大学金融管理硕士项目等你惊艳时光。 所有出众者的背…

【计算机网络:自顶向下方法】(三) 运输层 (TCP | UDP | 复用 | 传输原理rdt)

【计算机网络&#xff1a;自顶向下方法】 3.1 概述 传输层协议是在端系统中实现的传输层将发送的应用程序进程接受到的报文转换成传输层分组 (运输层报文段)实现的方法/过程 &#xff1a; 将应用报文划分为较小的块&#xff0c;并为每块加上传输层首部以生成传输层报文段ff。I…

【C++】类和对象(中篇)—— 默认成员函数,const成员函数,运算符重载

前言 类和对象没有技巧&#xff0c;只有多加练习&#xff0c;多多尝试自己完成代码&#xff0c;例如各种运算符的重载&#xff0c;或是实现一个自己的日期类 目录 一、类的六个默认成员函数 二、构造函数 2.1 概念 2.2 特点 2.3 默认无参的构造函数 三、析构函数 3.1 概…

ORB305与CISCO路由器构建L2TP over IPSec VPN操作手册

1、网络拓扑在思科路由器与ORB305之间建立一个安全隧道&#xff0c;对客户路由器端设备子网&#xff0c;与思科路由器端服务器子网之间的数据流进行安全保护&#xff0c;组网拓扑图如图所示。 2、思科路由器端配置指导(此处以多数客户使用专线上网形式为例)Cisco&#xff08;AR…

90年三本程序员,8年5跳,年薪4万变92万……

很多时候&#xff0c;虽然跳槽可能带来降薪的结果&#xff0c;但依然有很多人认为跳槽可以涨薪。近日&#xff0c;看到一则帖子。 发帖的楼主表示&#xff0c;自己8年5跳&#xff0c;年薪4万到92万&#xff0c;现在环沪上海各一套房&#xff0c;再干5年码农&#xff0c;就可以…

2022年NOC大赛创客智慧编程赛道图形化scratch初赛题,包含答案解析

目录 一、单选题 二、多选题 三、判断题 下载打印文档做题: 一、单选题

项目干系人是什么?如何有效管理项目干系人?

项目干系人是指对项目具有利益关系或影响力的个人、团体或组织。他们可能会对项目的目标、范围、进度、成本、质量等方面产生影响&#xff0c;因此&#xff0c;有效地管理项目干系人是项目管理成功的关键之一。 一、干系人识别和分类 项目经理应该首先识别和分类所有与项目有关…

STM32模数转换器(ADC)

1.ADC的简要 我们首先说一下ADC的转换过程&#xff0c;然后说一下原理&#xff0c;当然如果嫌啰嗦可以直接跳过。 ADC是英文Analog-to-Digital Converter缩写&#xff0c;翻译过来就是模数转换器&#xff0c;是指将连续变化的模拟信号转换为离散的数字信号的器件。A/D转换的作…

DiffusionDet源码阅读(1)

本文仅仅适用于已经通读过全文的小伙伴 本文代码节选自 mmdet 中的 DiffusionDet 代码&#xff0c;目前该代码还处于 Development 阶段&#xff0c;所以我博客里写的代码和之后的稳定版本可能稍有不同&#xff0c;不过不用担心&#xff0c;我们只看最关键的部分 DDPM中扩散部…

mybatis中大数据量foreach插入效率对比

1.controller代码 RequestMapping("/testInsert")public String testInsert(Integer sum){testService.testInsert(sum);return "发送成功";}2.service代码 Overridepublic void testInsert(Integer sum) {long start System.currentTimeMillis();List<…

LightGBM面试题

1.偏差 vs 方差? 偏差是指由有所采样得到的大小为m的训练数据集&#xff0c;训练出的所有模型的输出的平均值和真实模型输出之间的偏差。 通常是由对学习算法做了错误的假设导致的描述模型输出结果的期望与样本真实结果的差距。分类器表达能力有限导致的系统性错误&#xff0c…

基于AT89C52单片机的温度检测报警设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87708680?spm1001.2014.3001.5503 源码获取 主要内容&#xff1a; 本系统的设计主要是了解了单片机微型计算机&#xff0c;根据现实生活的需要以及已掌握的理论知识…