问题描述

近日好消息,如果是一个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. CentOS7配置kdump

    CentOS7配置kdump 简单生活,简单爱 2020-10-27 16:29:56  56  收藏 1 分类专栏: Linux实际开发总结 版权 文章目录 1.kdump简介 2.配置kdump ...

  2. vipivp常用linux命令

    基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号   # 查看某一 ...

  3. VBA绘制Excel图表

    VBA调试运行进入: 几个例子: 删除工作表内所有图表 录制一个宏 简化宏再使用 大量图表可采用for循环 CSDN上用积分下载的一个例子 VBA数组 VBA调试运行进入: 右键Excel的Sheet ...

  4. SSH自动断开连接的原因-20200323

    SSH自动断开连接的原因   方法一: 用putty/SecureCRT连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦. 在网上查了很多资料, 发现原因有多种, 环境变量TMOUT ...

  5. VIM 三种模式和常用命令

    引言 大数据开发工作中,周围的同事不是用 VIM 就是 Emacs,你要是用 UltraEdit 或 notepad++ 都不好意思跟人家打招呼...什么插件呀.语法高亮呀.拼写检查呀,能给它开的都给 ...

  6. 链路追踪_SkyWalking的部署及使用

    关于链路追踪,目前比较主流是Cat,Zipkin,SkyWalking等这些工具.这篇文章主要介绍关于SkyWalking工具的. 为什么用SkyWalking,因为它基本没有代码侵入,只这一点就足够 ...

  7. mysql的日志文件及其作用

    MySQL中有七种日志文件,分别是: 重做日志(redo log) 回滚日志(undo log) 二进制日志(binlog) 中继日志(relay log) 错误日志(errorlog) 慢查询日志( ...

  8. SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解

    SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...

  9. python 获取当天和前几天时间数据

    python 获取当天和前几天时间数据 import datetime from datetime import datetime, date, timedelta def dayDateRange( ...

  10. Java设计模式(2:单一职责原则和依赖倒置原则详解)

    一.单一职责原则 不要存在多于一个导致类变更的原因.简单来说,就是一个Class/Interface/Method只负责一项职责. 这句话最为重要的就是这一段:一个Class/Interface/Me ...