本文是Azure Application Insights REST API的简单介绍,并会包含一个通过Python消费API的示例/小工具。

新加入的team中的一项工作是制作日常的运维报表,制作方式是手工前往portal.azure.com,在网页中多次执行不同的查询语句、导出excel,之后再人工进行合并、分组、汇总、分析等等。这是一个繁琐的过程,其中大部分步骤其实不值得花费人工,应该交给程序。为了自动化这一过程,降低报表的制作成本,我尝试使用了Azure Application Insights REST API查询数据,使用python客户端进行处理、输出。下面把相关的一些知识和经验写在这里。

本文链接:https://www.cnblogs.com/hhelibeb/p/11543295.html

原创内容,转载请注明

Application Insights

Application Insights是Azure平台的监控功能的一部分,用于收集、分析和处理来自Azure或其它本地环境的遥测数据。它包含强有力的分析工具,可以帮助你发现问题、诊断问题、理解用户在app上的行为,可以支持你持续地改进应用的性能和可用性。它可以和DevOps过程集成,和很多开发工具有连接点。

它支持多种语言和框架,比如.NET, Java, 和Node.js等。

更多信息,参考:What is Application Insights?

Application Insights REST API

除了在Azure中使用外,Application Insights收集的数据也可以通过REST API获取,这使得你可以用自己的其它应用来使用相关数据。API可以分为3种:

  1. Metrics: 用于查询聚合结果,比如一定时间范围内的系统异常总数量。

  2. Events: 使用OData语法访问event数据,支持$filter, $orderBy, $search, $apply, $top, $skip and $format,可以返回单独的event数据或者event集的聚合数据。

  3. Query: 允许用户发送和在Application Insights Analytics中一样的Query查询数据,返回数据的同时也会返回数据的schema。这是我用到的类型。

格式

API的格式如下,

    https://{hostname}/{api-version}/apps/{resource}/{area}/[path]?[parameters]

其中,

  1. hostname: api.applicationinsights.io
  2. resource: Application ID ,也就是你的Application Insights app的唯一标识符,可以在app的API Access选项中看到,见下图。(注意:这不是Instrumentation Key,不要用错)
  3. api-version: 路径中需要包含API versions,Beta或v1。
  4. area: 3中查询类型之一metrics, events或query。
  5. path: 查询的详细信息,比如要查询哪个metric。
  6. parameters: 和path相关的具体参数。

(这里是有关Public API format的部分,此外还有Azure API format

认证

需要使用上文提到的Application ID和下面提到的API Key来访问API,否则调用接口会失败,返回认证错误的消息,比如,

AuthorizationRequiredError:"Valid authentication was not provided"。
 

在API Access选项下选择Create API key,填写描述并勾选"Read telemetry"。

点击Generate key,会得到一个key字符串。注意,在这里必须保存key,因为关闭页面之后,无法通过任何方式再查询到生成的key。如果key丢失,只能重建另一个key。

访问

有了Application ID和API key,就可以访问API了。

这个页面有一个很好的例子,可以参考:

GET/Query

可以用postman之类的工具测试http请求。

限制

注意,query中使用的Kusto查询引擎是一个即席查询引擎(ad-hoc query engine),它会尝试在内存中保存全部相关数据来满足查询,这导致查询可能会无限制地占用服务资源,带来风险。因此,Kusto提供了一些内置的查询限制以避免风险。比如,单次查询的结果大小不可以超过64MB。

更多限制,请参考:Query limits

自己写的query工具

因为程序可能需要对不同的Application Insight的不同的API执行不同的Query,因此,基本的处理思路是在配置文件中配置相关信息,程序从配置文件中读取需要执行的全部query,逐一查询后,返回结果列表。

下面是json格式的配置文件(profile.json)和python代码。

配置文件

{
"application_insight": {
"host": "api.applicationinsights.io",
"apps": {
"my-app-insights": {
"id": "d1e9f429-c437-6034b32df878",
"description": "it is an example",
"apis": {
"exception_monitor": {
"description": "daily report",
"key": "01234qwerrttyypolmknbshjdfggu",
"version": "v1"
}
}
}
},
"queries": [
{
"name": "query1",
"app": "my-app-insights",
"api": "exception_monitor",
"statement": "exceptions | where operation_Name == \"\"",
"time_field_name": "timestamp"
},
{
"name": "query2",
"app": "my-app-insights",
"api": "exception_monitor",
"statement": "exceptions | where operation_Name contains \"AdapterV1\"",
"time_field_name": "timestamp"
}
],
"default_filter": {
"time_range": "between( endofday( now(), -8) .. endofday( now(), -1) )"
}
}
}

说明,

  • host:固定值http://api.applicationinsights.io
  • apps:Application Insight相关数据。
  • apis:Api相关数据。
  • queries:需要执行的query。
  • default_filter:默认的查询条件,目前只有默认时间功能,例子里的条件是最近7个整天。

查询

查询代码如下:

import requests
import json
import asyncio async def request_get(url, headers, name):
return {name: json.loads(requests.get(url, headers=headers).text)} async def __execute_query(config): default_filter = config["default_filter"]
http_requests = []
for query in config["queries"]:
app = config["apps"][query["app"]]
api = app["apis"][query["api"]]
query_url = f'''https://{config["host"]}/{api["version"]}/apps/{app["id"]}/query?query={query["statement"]}'''
if query["time_field_name"] and default_filter["time_range"]:
query_url = query_url + f''' and {query["time_field_name"]} {default_filter["time_range"]} '''
headers = {'X-Api-Key': api["key"]}
http_requests.append(request_get(query_url, headers, query["name"])) return await asyncio.gather(*http_requests) def execute_query(): with open('profile.json', 'r') as config_file:
query_config = json.load(config_file)["application_insight"] return asyncio.run(__execute_query(query_config))

基本思路是从配置文件加载queries,逐个放入任务列表中,最后统一并发执行、获取结果。

其中使用了request发送http请求、asyncio实现并发。

总结

本文是我关于Azure Application Insights REST API的知识和实践的总结。这不是Azure Application Insights REST API的全部,可以参考微软文档以获取更多信息。

Azure Application Insights REST API使用教程的更多相关文章

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

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

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

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

  3. Azure Monitor(一)Application Insights

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

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

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

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

    问题描述 近日好消息,如果是一个Java Spring Cloud的项目,想使用Azure Applicaiton Insights来收集日志及一些应用程序见解.但是有不愿意集成SDK来修改代码或者配 ...

  6. Azure 应用服务中的 API 应用、ASP.NET 和 Swagger 入门

    学习内容: 如何通过 Visual Studio 2015 中的内置工具在 Azure 应用服务中创建和部署 API 应用. 如何使用 Swashbuckle NuGet 包动态生成 Swagger ...

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

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

  8. 使用Application Insights 做分析

    Application Insights on Windows Desktop apps, services and worker roles : https://azure.microsoft.co ...

  9. 关于Application Insights遥测功能使用【遇到问题】

    简介:Application Insights是微软发布的一个在线服务,可以监测自己的网站应用,进行性能管理以及使用分析. Application Insights功能一开始是出现在Visualstu ...

随机推荐

  1. ubuntu下部署mongodb以及设置允许远程连接

    最近因为项目原因需要在阿里云服务器上部署mongodb,网上查阅了一些资料,特此记录一下步骤 1.运行apt-get install mongodb命令安装mongodb服务(如果提示找不到该pack ...

  2. Zabbix遇到的问题集锦

    一.Web界面上显示Zabbix server is not running 二.Zabbix显示中文字体 三.利用Python发送告警注意细节 四.zabbix上发告警信息不发恢复信息 五.Agen ...

  3. hbase rowkey 设计

    HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应.然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点.当大量client的请求 ...

  4. ZooKeeper 相关概念以及使用小结

    Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 ...

  5. Redis集群环境下的键值空间监听事件实现方案

    一直想记录工作中遇到的问题和解决的方法,奈何没有找到一方乐土,最近经常反思,是否需要记录平时的点滴,后台还是决定下定决心记录一些,以便以后用到的时候找不着,实现这样的一个功能主要也是业务所需要的. 需 ...

  6. mac下面有epoll?

    没有的,但是mac下面有kqueue,跟epoll原理是差不多的. 这个是没办法的,如果实在需要,就用Ubuntu吧,这个也可以无缝迁移. 更多资源,更多文章由小白技术社提供(是我啦)

  7. Spring Boot集成quartz实现定时任务并支持切换任务数据源

    org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...

  8. CSS 锚点 :target属性 制作选项卡

    .pic img:first-of-type{display: block;} .pic img:target{display: block;}

  9. 给 asp.net core 写个中间件来记录接口耗时

    给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...

  10. 如何使用 Skywalking Agent ?

    如何使用 Skywalking Agent ? 如果你还不知道 Skywalking agent 是什么,请点击这里查看 Probe 或者这里查看快速了解agent,由于我这边大部分都是 JAVA 服 ...