如何使用 Java 代理插件在不更改应用程序代码的情况下捕获自定义指标

news2024/11/26 11:40:19

作者:Jack Shirazi

Elastic APM Java 代理会自动跟踪许多指标,包括通过 Micrometer 或 OpenTelemetry Metrics API 生成的指标。 因此,如果你的应用程序(或其包含的库)已公开来自这些 API 之一的指标,则安装 Elastic APM Java 代理是捕获它们所需的唯一步骤。 你将能够可视化和配置阈值、警报和异常检测 -- 以及你想要将它们用于任何其他用途!

下一个最简单的选项是直接从代码生成自定义指标(例如,通过使用 OpenTelemetry Metrics API 直接将代码添加到应用程序中)。 该方法的主要缺点是它需要修改应用程序,因此如果你不能或不想这样做,你可以通过插件向 Elastic APM Java 代理添加检测来轻松生成所需的自定义指标。

本文讨论的情况是,你正在监视的应用程序没有发出你想要的自定义指标,并且你无法直接更改代码或配置以使其这样做。 相反,你可以使用插件通过 Elastic APM Java 代理自动检测应用程序,这将使应用程序发出你想要的自定义指标。

使用 Elastic Kibana Lens 分析各种措施的 APM telemery

 

插件基础知识

“使用 Java 代理插件创建你自己的检测” 一 文详细介绍了 Elastic APM Java 代理的基础知识以及如何轻松插入检测。 从插件生成指标只是另一种类型的检测,引用的文章提供了详细的分步说明以及如何使用自定义检测创建插件的工作示例。

对于本文,我假设你了解如何根据上一篇文章以及我们的插件示例存储库中的示例应用程序(一个简单的网络服务器 ExampleBasicHttpServer)创建具有自定义检测的插件。

自定义指标

对于我们的示例应用程序,它是一个 HTTP 服务器 (ExampleBasicHttpServer),我们希望添加一个自定义指标 “page_views”,该指标在每次 ExampleBasicHttpServer 应用程序处理任何请求时都会递增。 这意味着我们将添加的检测将由 “使用 Java 代理插件创建您自己的检测” 中使用的相同的 ExampleBasicHttpServer.handleRequest() 方法触发。

使用 Elastic APM 对 page_views 指标进行 15 分钟的线路可视化

 

使用插件/OpenTelemetry API

本质上,与该文章的唯一区别是,对于指标,我们将使用 OpenTelemetry metrics API,而不是 OpenTelemetry tracing API。

特别是对于指标,handleRequest() 方法的建议方法是以下代码:

if (pageViewCounter == null) {
    pageViewCounter = GlobalOpenTelemetry
        .getMeter("ExampleHttpServer")
        .counterBuilder("page_views")
        .setDescription("Page view count")
        .build();
}
pageViewCounter.add(1);

也就是说,在第一次需要时延迟创建计量器,然后在每次调用 ExampleBasicHttpServer.handleRequest() 方法时增加 page view 计数器。

其他一切 -- 设置检测、查找检测方法、构建插件 -- 与文章 “使用 Java 代理插件创建你自己的检测” 中的相同。

完整的指标示例在插件示例存储库中实现,实际的完整指标检测实现是 ExampleMetricsInstrumentation。

使用 Elastic APM 对 page_views 指标进行 15 分钟条形图可视化

试试看!

就是这样! 要使用插件运行代理,只需按照 “使用 Java 代理插件创建你自己的检测” 中所述构建并包含 jar,并将其包含在由 plugins_dir 配置选项指定的目录中。 插件示例存储库提供了经过全面测试的实现 -- 只需克隆它并 mvn install 即可查看它的工作情况。

开始使用 Elastic APM 的最佳位置是在云中。 立即开始免费试用 Elastic Cloud!

原文:How to capture custom metrics without app code changes using the Java Agent Plugin | Elastic Blog

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

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

相关文章

3Ds max无需插件创建逼真的草地

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 最终图像: 步骤-1 创建一个宽度 x 高度为 100100(我使用厘米)和 100100 段的平面。 步骤-2 将平面转换为“编辑多边形”并选择所有顶点(Ctrl A&#xff09…

AI Chat 设计模式:6. 装饰模式

本文是该系列的第六篇,内容采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的旁白。 问题列表 Q.1 你知道装饰模式吗A.1Q.2 详细说说装饰模式的组成角色A.2Q.3 举一个装饰模式的例子吧&#xf…

Threejs加载倾斜摄影OSGB数据

个人主页: 左本Web3D,更多案例预览请点击》 在线案例 个人简介:专注Web3D使用ThreeJS实现3D效果技巧和学习案例 💕 💕积跬步以至千里,致敬每个爱学习的你。获取模型或源码请点赞收藏加留言,有问…

数据库锁的12连问,抗住!

前言 金三银四很快就要来啦,准备了数据库锁的12连问,相信大家看完肯定会有帮助的。 1. 为什么需要加锁 在日常生活中,如果你心情不好想静静,不想被比别人打扰,你就可以把自己关进房间里,并且反锁。这就是生…

git基础教程(linux)

1.git简介 git 分布式版本控制 git两大特点: 版本控制:支持多人同时开发 分布式: 2.安装与配置 安装 sudo apt-get install git安装成功,运行如下命令: git3.创建一个版本库 (1)新建一个目录git_test&#xff0c…

网络编程7——IP协议(子网掩码,NAT机制,IPv6协议) + 以太网

文章目录 前言一、IP协议协议头格式认识IP地址格式组成子网掩码 地址管理1.动态分配2.NAT机制3.IPv6协议 路由选择 二、以太网以太网帧格式认识MTU 总结 前言 本人是一个普通程序猿!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果你也对编程感兴趣的话&#x…

第十六章 原理篇:DETR

脑子不好使啊!复习过的东西过几天就忘记了! 参考教程: 论文地址:[pdf]End-to-End Object Detection with Transformer 源码地址:https://github.com/facebookresearch/detr 文章目录 概述the DETR modelDETR architect…

springboot篮球论坛系统

篮球论坛管理方面的任务繁琐,以至于每年都在篮球论坛管理这方面投入较多的精力却效果甚微,篮球论坛系统的目标就是为了能够缓解篮球论坛管理工作方面面临的压力,让篮球论坛管理方面的工作变得更加高效准确。 本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL…

Git❀详细使用教程

Git❀详细使用教程 一、Git简介1.1 什么是Git?1.2 Git的特点1.3 集中式与分布式的区别?1.4 Git工作流程图 二、Git安装与常用命令2.1 Git环境配置2.1.1 下载与安装2.1.2 基本配置2.1.3 为常用指令设置别名(可选)2.1.4 解决GitBash…

ChatGPT炒股:从上市公司招股说明书中批量提取发明专利表格

上市公司招股说明书通常会详细列明公司的发明专利,而通过企业的发明专利可以了解企业未来的业务布局情况,怎么把这些发明专利列表都批量提取出来呢? 随机打开几个上市公司的招股说明书,可以看到发明专利这一内容,共同的特征是都有…

Python的面向对象从入门到精通(简单易懂)

目录 1 初识对象 2. 成员方法 3. 类和对象 4. 构造方法 5. 其它内置方法 6. 封装 7. 继承 8. 复写 9. 类型的注解 10. 多态 1 初识对象 1. 生活中或是程序中,我们都可以使用设计表格、生产表格、填写表格的形式组织数据 2. 进行对比,在程序中&a…

进程间通信-无名管道

#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <string.h> int main(int argc, char **argv) {int pfd[2];int ret;pid_t pid;char buf[20]{0};retpipe(pfd);//创建一个无名管道if(ret<0){perror("pipe");ret…

lombok和guava工具

写在前面 本文看下如何通过使用lombok和guava来提高生产力。 1&#xff1a;lombok 我们开发程序时&#xff0c;如read method&#xff0c;write method&#xff0c;tostring&#xff0c;构造函数等&#xff0c;其写法其实都是固定和重复的&#xff0c;因此就可以考虑使用程序…

如何操作MySQL数据库基本数据

目录 一、MySQL数据库概念 数据 表&#xff08;数据表&#xff09; 数据库 数据库管理系统 数据库的建立和维护功能 数据定义功能 数据操纵功能 数据库的运行管理功能 通信功能 数据流向 二、主流数据库分类 1.SQL Server 数据库 &#xff08;微软分公司产品&…

Linux网络第六章——PXE高效批量网络装机

高效&#xff1a;速度快 批量&#xff1a;多台同时安装 网络&#xff1a;必须在网络环境 PXE&#xff1a;自动装机 需要&#xff1a; 1、DHCP实现地址自动分配 2、FTP把安装文件传输给客户机 3、xinetd&#xff1a;新一代的网络守护进程服务程序&#xff0c;管理轻量级…

赎金信(力扣)思维 JAVA

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#xff1a; 输入&#xff…

请求响应-响应-案例

案例需求 加载并解析emp.xml文件中的数据&#xff0c;完成数据处理&#xff0c;并在页面展示 emp.xml文件代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <emps><emp><name>金毛狮王</name><age>5…

Leangoo领歌敏捷工具标签管理上线~

在Leangoo领歌中&#xff0c;标签通常用作对任务的分类&#xff0c;或任务的优先级区分。 每创建一个看板设置一次标签&#xff0c;有点繁琐&#xff0c;现在标签管理功能上线&#xff0c;可以统一设置标签&#xff0c;统一导入标签。 标签设置步骤&#xff1a; 第一步&…

机器人xacro文件转换成urdf文件方法,并在rviz可视化

一、进入工作空间&#xff0c;source一下 cd cat_ws source devel/setup.bash二、进入xacro所在的文件夹&#xff0c;完成xacro文件到urdf文件的转换 cd src/kinova-ros/kinova_description/urdf/然后执行下面命令 rosrun xacro xacro.py two_arm_robot_example_standalone.…

注解和反射04(Java)

#拓展 获取泛型信息 反射操作泛型&#xff1a; package reflection;import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map;//通过反射获取泛型 public class Test06{…