问题描述

近日好消息,如果是一个Java Spring Cloud的项目,想使用Azure Applicaiton Insights来收集日志及一些应用程序见解。但是有不愿意集成SDK来修改代码或者配置,有没有一种更好的办法呢? 答案是有。

在2020年,微软推出了“Java 无代码应用程序监视 Azure Monitor Application Insights” 代理工具 Application Insights Agent 3.x 无需更改代码,只需更改几个配置即可启用 Java 代理。官方的宣传语为:

Java 代理可在任何环境中正常工作,并允许你监视所有 Java 应用程序。 换句话说,无论你是在 VM 上、本地、AKS 中还是在 Windows、Linux 上运行 Java 应用,不管什么位置,Java 3.0 代理都可以监视你的应用。

不再需要将 Application Insights Java SDK 添加到你的应用程序,因为 3.0 代理会自动收集请求、依赖项并自行记录所有内容。

你仍可以从应用程序发送自定义遥测。 3.0 代理会跟踪它并将它与所有自动收集的遥测数据相关联。

3.0 代理支持 Java 8 及更高版本。

使用方法也非常的简单,三个步骤:下载代理到本地项目配置Application Insights连接字符串在java启动命令中添加代理参数( -javaagent:agent/applicationinsights-agent-3.1.0.jar )

快速启用Java Agent:

1.下载代理 applicationinsights-agent-3.1.0.jar

2.将 JVM 指向该代理,将 -javaagent:path/to/applicationinsights-agent-3.1.0.jar 添加到应用程序的 JVM 参数。如

java  -javaagent:agent/applicationinsights-agent-3.1.0.jar -jar target/spring-boot-0.0.1-snapshot.jar

3.将代理指向 Application Insights 资源

通过设置环境变量,将代理指向 Application Insights 资源:APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...

另一种方法是创建一个名为 applicationinsights.json 的配置文件,并将其置于 applicationinsights-agent-3.1.0.jar 所在的目录中,该文件包含以下内容:

{
"connectionString": "InstrumentationKey=..."
}

可以在 Application Insights 资源中找到连接字符串:

4.就这么简单!

现在启动应用程序,并访问 Azure 门户中的 Application Insights 资源以查看监视数据。

 备注:监视数据可能需要几分钟时间才能在门户中显示。

效果展示:

以上展示成功的采集到Java应用的所有请求及请求所产生的两个外部依赖,一个访问azure blob文件,一个是请求博客园文章地址。

但是,当站点的请求量巨大时候,Agent也将发送大量的请求,日志,依赖等等监控数据。 那是不是有什么方便的办法来解决数据量问题呢?是的。同样可以通过采样率(sampling)设置来实现这个目的。

Sampling有两种方式:一种是应用的所有请求采样率都下降,不要100%采集。 修改方式为在 applicationinsights.json 文件中设置sampling的值。如下修改采样率为50%.

{
"connectionString": "InstrumentationKey=xxxxxxxxxxxxxx;EndpointSuffix=applicationinsights.azure.cn;IngestionEndpoint=https://xxxxxxxx.in.applicationinsights.azure.cn/",
"role": {
"name": "my test 3"
},
"sampling": {
"percentage": 50
}
}

第二种方式,就是本文中将介绍的。采用指定特定的URL来修改次采样率。

问题解决

使用Agent 3.0.3版本之后才支持的采样代替(sampling overrides)功能。采样替代允许替代默认采样百分比,例如:

  • 将采样百分比设置为 0(或某个小的值)以进行干扰状况检查。
  • 将采样百分比设置为 0(或某个小的值)以进行干扰依赖项调用。
  • 针对重要请求类型(例如,/login),将采样百分比设置为 100,即使将默认采样配置为低于此值也是如此。

采样代替的作用范围为:

  • 传入的请求。
  • 传出的依赖项(例如,对另一个服务的远程调用)。
  • 进程内依赖项(例如,服务的子组件所做的工作)。

对于采样替代而言,属性是一个非常重要的概念,它表示给定请求或依赖项的标准属性和自定义属性。对于一个URL请求而言,可以用以下的属性值来作为配置条件:

HTTP 范围

属性 类型 说明
http.method string HTTP 请求方法。
http.url string 完整的 HTTP 请求 URL(采用 scheme://host[:port]/path?query[#fragment] 格式)。 例如:http://localhost:8080/out
http.status_code 数值 HTTP 响应状态代码
http.flavor string HTTP 协议类型。
http.user_agent string 客户端发送的 HTTP User-Agent 标头的值。

在本示例中,本Java应用有三个请求。http://localhost:8080, http://localhost:8080/blob 和http://localhost:8080/out。 三个请求的依赖项如下图:

为了把blob的请求以及它的依赖的所有请求都排除在请求之外。使用采样代替功能,可以参考如下设置:

{
"connectionString":"InstrumentationKey=xxxxxxxxxxxxxx;EndpointSuffix=applicationinsights.azure.cn;IngestionEndpoint=https://xxxxxxxx.in.applicationinsights.azure.cn/",
"role": {
"name": "my test 3"
},
"preview": {
"sampling": {
"overrides": [
{
"attributes": [
{
"key": "http.url",
"value": "https?://[^/]+/blob",
"matchType": "regexp"
}
],
"percentage": 0
}
]
}
}
}

修改完 applicationinsights.json 文件后,重启应用。验证结果:

附件一:如果需要对多个请求URL进行采样率修改。在节点overrides中的数组中不停加入attributes内容即可。如:

{
"connectionString":"InstrumentationKey=xxxxxxxxxxxxxx;EndpointSuffix=applicationinsights.azure.cn;IngestionEndpoint=https://xxxxxxxx.in.applicationinsights.azure.cn/",
"role": {
"name": "my test 3"
},
"preview": {
"sampling": {
"overrides": [
{
"attributes": [
{
"key": "http.url",
"value": "https?://[^/]+/blob",
"matchType": "regexp"
}
],
"percentage": 0
},
{
"attributes": [
{
"key": "http.url",
"value": "https?://[^/]+/lulight/",
"matchType": "regexp"
}
],
"percentage": 0
}
]
}
}
}

参考资料

Java 无代码应用程序监视 Azure Monitor Application Insights:https://docs.azure.cn/zh-cn/azure-monitor/app/java-in-process-agent

采样替代(预览版)- 适用于 Java 的 Azure Monitor Application Insights:https://docs.azure.cn/zh-cn/azure-monitor/app/java-standalone-sampling-overrides

【完】

【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集的更多相关文章

  1. 【应用程序见解 Application Insights】Application Insights 使用 Application Maps 构建请求链路视图

    Applicaotn  Insigths 使用 Application Maps 构建请求链路视图 构建系统时,请求的逻辑操作大多数情况下都需要在不同的服务,或接口中完成整个请求链路.一个请求可以经历 ...

  2. 【应用程序见解 Application Insights】使用Azure Monitor Application Insights Agent获取Azure VM中监控数据及IIS请求指标等信息

    问题情形 为了使用Application Insights也可以监控Azure VM中的相关性能数据,如CPU, Memory,IIS Reuqest等信息,可以在VM中开始一个一个扩展插件: Azu ...

  3. 【应用程序见解 Application Insights】在Application Insights中通过自定义查询结果定义指标并显示在Dashboard中

    问题情形 通过Application Insights收集到指标数据后,如Request,Trace,Exception.但是默认的Insights图表不能满足业务的需求,需要自定义相应的类SQL语句 ...

  4. 【Azure 应用程序见解】 Application Insights 对App Service的支持问题

    问题描述 Web App 发布后, Application Insights 收集不到数据了 问题分析 在应用服务(App Service)中收集应用的监控数据(如Request,Exception, ...

  5. 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中

    问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...

  6. java agent技术原理及简单实现

    注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...

  7. Azure Application Insights REST API使用教程

    本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具. 新加入的team中的一项工作是制作日常的运维报表,制作方 ...

  8. Azure Monitor(一)Application Insights

    一,引言 Azure Monitor 是 Azure 中的一项完整堆栈监视服务,是一种收集和分析遥测数据的服务.它提供了一组完整的功能来监视 Azure 资源以及其他云中和本地的资源.Azure Mo ...

  9. 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》

    Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...

随机推荐

  1. GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充

    中文编码:GB2312编码.GBK编码.GB18030编码 2016-09-01 0 By ADMIN 一.GB 2312编码 中华人民共和国国家标准简体中文字符集,全称<信息交换用汉字编码字符 ...

  2. 从CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程

    一.基础概念 Cent0S 7默认启用LVM2(Logical Volume Manager),把机器的一块硬盘分为两个区sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间:sda ...

  3. linux基础之基础命令一

    本节内容: 1. ls:列出当前目录下的文件和目录 -l: 长输出,显示文件的详细信息(-普通文本,d目录) -a: 显示所有文件,包括隐藏文件 -h: 人类易读(-lh) -d: 显示目录信息(-l ...

  4. HDFS 的内存存储是什么?

    引言 HDFS 的定位就是一个文件系统,用于存储文件,而 HDFS 对于文件的存储方式有两种: 内存存储 异构存储 内存存储 什么是内存存储? 首先,我们来了解一下到底什么是 "内存存储&q ...

  5. Lua _G

    1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local. 这个神秘的全局变量,其实本质上也是一个table,它把我们创建的全局变量都保存到一个table里了 ...

  6. Python数模笔记-StatsModels 统计回归(1)简介

    1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 2.文档 ...

  7. CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台

    CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心) Consul + Sky = CoSky CoSky 是一个轻量级.低成本的服务注册.服务发现. 配置服务 SDK ...

  8. 微星msi B450M+i5-8500+1060成功黑苹果

    经过几天的努力,终于成功装上黑苹果! N卡1060目前只能装10.13.6(17G65),10.14版本N卡是没有驱动的,即便装上后也是8M的显存 详细教程网上一大堆,我就不做一份了.推荐大家看一下黑 ...

  9. Go语言协程并发---生产者消费者实例

    package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...

  10. 将TVM集成到PyTorch

    将TVM集成到PyTorch 随着TVM不断展示出对深度学习执行效率的改进,很明显PyTorch将从直接利用编译器堆栈中受益.PyTorch的主要宗旨是提供无缝且强大的集成,而这不会妨碍用户.PyTo ...