【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
问题描述
近日好消息,如果是一个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的采样率来减少请求及依赖项的数据采集的更多相关文章
- 【应用程序见解 Application Insights】Application Insights 使用 Application Maps 构建请求链路视图
Applicaotn Insigths 使用 Application Maps 构建请求链路视图 构建系统时,请求的逻辑操作大多数情况下都需要在不同的服务,或接口中完成整个请求链路.一个请求可以经历 ...
- 【应用程序见解 Application Insights】使用Azure Monitor Application Insights Agent获取Azure VM中监控数据及IIS请求指标等信息
问题情形 为了使用Application Insights也可以监控Azure VM中的相关性能数据,如CPU, Memory,IIS Reuqest等信息,可以在VM中开始一个一个扩展插件: Azu ...
- 【应用程序见解 Application Insights】在Application Insights中通过自定义查询结果定义指标并显示在Dashboard中
问题情形 通过Application Insights收集到指标数据后,如Request,Trace,Exception.但是默认的Insights图表不能满足业务的需求,需要自定义相应的类SQL语句 ...
- 【Azure 应用程序见解】 Application Insights 对App Service的支持问题
问题描述 Web App 发布后, Application Insights 收集不到数据了 问题分析 在应用服务(App Service)中收集应用的监控数据(如Request,Exception, ...
- 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中
问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...
- java agent技术原理及简单实现
注:本文定义-在函数执行前后增加对应的逻辑的操作统称为MOCK 1.引子 在某天与QA同学进行沟通时,发现QA同学有针对某个方法调用时,有让该方法停止一段时间的需求,我对这部分的功能实现非常好奇,因此 ...
- Azure Application Insights REST API使用教程
本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具. 新加入的team中的一项工作是制作日常的运维报表,制作方 ...
- Azure Monitor(一)Application Insights
一,引言 Azure Monitor 是 Azure 中的一项完整堆栈监视服务,是一种收集和分析遥测数据的服务.它提供了一组完整的功能来监视 Azure 资源以及其他云中和本地的资源.Azure Mo ...
- 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》
Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...
随机推荐
- 从CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
一.基础概念 Cent0S 7默认启用LVM2(Logical Volume Manager),把机器的一块硬盘分为两个区sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间:sda ...
- ubuntu查看已安装软件包信息的方法
ubuntu查看已安装软件包信息的方法原创fang141x 最后发布于2019-04-15 10:41:34 阅读数 2802 收藏展开简介ubuntu下面是使用dpkg来管理和安装软件包的,对应ce ...
- 利用stat指令查看文件创建时间
-shroot@test-W330-C30:/# stat * 文件:'b' 大小:4096 块:8 IO 块:4096 目录设备:802h/2050d Inode:5636097 硬链接:2权限:( ...
- Hive 安装和配置
环境准备 已安装 HDFS 和 Yarn 集群环境 Windows 已安装 MySQL 8 (开启远程连接用户权限) 安装步骤 1. 上传并解压 Hive 安装文件 将 apache-hive-3.1 ...
- Linux中级之ansible概念及hoc命令行调用模式
一.Ansible简介 ansible是新出现的开源的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统 ...
- MyBatis 动态 SQL 语句中出现 '<' 的问题
问题描述 映射接口方法如下: /** * 根据姓名和年龄查询用户信息 * @param name 姓名 * @param user 获取年龄 * @return */ public List<U ...
- Kubernetes-3.3:ETCD集群搭建及使用(https认证+数据备份恢复)
etcd集群搭建 环境介绍 基于CentOS Linux release 7.9.2009 (Core) ip hostname role 172.17.0.4 cd782d0a790b etcd1 ...
- 域名更换为itwxe.com
域名 uukongjian.com 更换为 itwxe.com,笔名 SunnyBear 更改为 IT王小二. 一.前言 4 月 21 号域名备案通过,开始折腾新买的服务器,本来这篇文章在 5 月 1 ...
- js发送请求给服务端
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- GO语言基础---值传递与引用传递
package main import ( "fmt" ) /* 值传递 函数的[形式参数]是对[实际参数]的值拷贝 所有对地址中内容的修改都与外界的实际参数无关 所有基本数据类型 ...