Azure Application Insights REST API使用教程

本文是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工具

因为程序可能需要对不同的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的全部,可以参考微软文档以获取更多信息。

原文地址:https://www.cnblogs.com/hhelibeb/p/11543295.html

时间: 2024-10-08 19:24:30

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

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

学习内容: 如何通过 Visual Studio 2015 中的内置工具在 Azure 应用服务中创建和部署 API 应用. 如何使用 Swashbuckle NuGet 包动态生成 Swagger API 元数据,以便自动进行 API 发现. 如何使用 Swagger API 元数据自动生成 API 应用的客户端代码. Note 若要将 Visual Studio 连接到 Azure 中国区,可按使用 Visual Studio 2015 连接中国区 Azure中的说明操作. 如果使用的是 V

asp.net core下的使用Application Insights

在Visudio Studio中,新建asp.net core可以内置Application Insights.Application Insights可以帮助我们分应web应用的性能,以至于我们来优化我们的应用,本文是step by step篇. 代码端 新建 asp.net core项目(asp.net core 1.1版本) 第三步配置设置,可以选择自己azure上的资源组. (注:目前asp.net core新建项目是1.0版本,可以在nuget中升级成1.1版本) 设置Starup.c

ASP.NET Web API系列教程(目录)(转)

注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP.NET Web API.这是一个用来在.NET平台上建立HTTP服务的Web API框架,是微软的又一项令人振奋的技术.目前,国内对此关注的人似乎还不多,有关ASP.NET Web API的文章也不多见.为此,本人打算对微软ASP.NET Web API官方网站上的一些教程进行翻译,以期让更多的国人了解.学习和使用这项ASP.NET Web API. ASP.NET Web API系列教程目录 Introduction:Wha

ASP.NET Web API系列教程目录

ASP.NET Web API系列教程目录 Introduction:What's This New Web API?引子:新的Web API是什么? Chapter 1: Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 Your First Web API (C#)第一个Web API(C#) Deep Dive into Web API深入探讨Web API(这是一个视频教程,本翻译系列略) Pro ASP.NET Web

Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/3490137.html)来演示OData服务,因此我们可以直接使用之前建好的数据访问层.但是不是说一定要看到之前的所有内容,我们只是借用数据库访问层,对于数据库的模型构建移步(使用Entity Framework Code First构建数据库模型). 有了数据访问的基础,我们可以开始构建OData服

使用Application Insights监控网站可用性

在评价网站的诸多指标中,可用性肯定是最重要的.一个网站首先要可用才能对其他方面进行评价.网站不可用不能单靠自己人发现或者等用户投诉,需要配备主动手段进行监控.那么我们今天要和大家聊的就是Azure Monitor下面两大服务之一的Application Insights.使用Application Insights我们可以在多个区域,每时每刻都对网站发起访问,当可用性不良时立马告警提醒相关人员进行排查.有了比老板更敏锐的告警,从此晚上可以安心睡觉. Application Insights是Az

使用Application Insights监控应用程序性能

前面的博文中给大家介绍了什么是Application Insights,以及如何使用Application Insights监控网站的可用性.那么在今天我们讲和大家讨论如何使用Application Insights中的Application Performance Monitoring(APM)功能来对应用程序的性能进行监控.与之前和大家介绍的网站可用性监控不同,APM可以对运行在云和本地数据中心的应用程序进行监控,只要应用程序可以使用HTTP将数据发送到Application Insight

圆通快递单号查询接口物流路由跟踪信息快递鸟api对接教程

看完快递鸟api对接教程这篇文章,然后把源码复制到你的项目上,就能快速完成圆通快递接口对接.更适合刚入门的菜鸟,调用快递鸟的圆通快递查询API接口,能查询到圆通快递单号从收件.运输,到转运中心,派送到签收等各个环节的物流发货状态.快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用.下面具体讲解实现过程. 1.完成前期准备工作 1.1,去快递鸟官网免费注册一个账号 1.2,免费获得一个apiKey(接口权限验证需要), 获取用户ID和Api

中通快递-单号查询接口-物流路由跟踪信息快递鸟api对接教程

前言 看完快递鸟api对接教程这篇文章,然后把源码复制到你的项目上,就能快速完成中通快递接口对接.更适合刚入门的菜鸟,调用快递鸟的中通快递查询API接口,能查询到中通快递单号从收件.运输,到转运中心,派送到签收等各个环节的物流发货状态.快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用.下面具体讲解实现过程. 目录 1.完成前期准备工作 2.API接口 3.请求参数(Headers) 4.请求参数(Body) 5.返回参数(Return)