;数据源;Azure监控

Azure Monitor数据源

Grafana包括对Azure Monitor的内置支持,该Azure服务可以最大化您的应用程序和服务在Azure云中的可用性和性能。Azure Monitor数据源支持可视化来自三个Azure服务的数据:

  • Azure Monitor指标从Azure帐户中的资源中收集数字数据。
  • Azure Monitor日志从您的Azure帐户收集日志和性能数据,并使用强大的Kusto语言进行查询。
  • Azure资源图通过订阅快速查询您的Azure资源。

本主题解释特定于Azure Monitor数据源的配置、查询和其他选项。指添加数据源以获取如何向Grafana添加数据源的说明。

Azure Monitor配置

要访问Azure Monitor配置,请将鼠标悬停在配置(齿轮)图标,点击数据源,然后选择Azure Monitor数据源。如果你还没有,你需要去做添加Azure Monitor数据源

您必须在Azure AD中创建一个应用程序注册和服务主体来验证数据源。有关更多信息,请参见Azure的文档详细配置。您创建的应用程序注册将需要有读者在订阅上分配的角色。有关更多信息,请参见用于角色分配的Azure文档

另外,如果您在Azure中托管Grafana(例如在App Service或Azure虚拟机中),您可以配置Azure Monitor数据源,以使用托管身份安全地进行身份验证,而无需向Grafana输入凭证。指使用托管标识进行配置获取详细信息。

的名字 描述
身份验证 启用托管标识。选择Managed Identity将隐藏下面的许多字段。看到使用托管标识进行配置了解更多细节。
Azure云 Azure帐户的国家云。对于大多数用户来说,这是默认的“Azure”。有关更多信息,请参见Azure文档。
目录(租户)ID Azure AD应用程序注册用于身份验证的目录/租户ID。看到获取用于登录的租户和应用程序ID值来自Azure文档。
应用程序(客户端)ID Azure AD应用程序注册用于身份验证的应用程序/客户端ID。
客户的秘密 Azure AD应用程序注册用于身份验证的应用程序客户机秘密。看到创建一个新的应用程序秘密来自Azure文档。
默认的订阅 (可选)为要使用的模板变量设置默认订阅
默认的工作空间 (可选)为要使用的基于日志分析的模板变量查询设置默认工作区

Azure Monitor查询编辑器

根据您希望查询的Azure服务,Azure Monitor数据源有三种不同的模式:

查询Azure Monitor指标

Azure Monitor Metrics收集数字数据支持资源并允许您查询它们,以调查资源的运行状况和利用率,以最大化可用性和性能。

指标是一种轻量级格式,仅在特定结构中存储简单的数值数据。Metrics能够支持接近实时的场景,这使得它对于快速检测问题非常有用。Azure Monitor Logs可以存储各种不同的数据类型,每种数据类型都有自己的结构。

Azure Logs度量示例查询可视化CPU百分比随时间的变化
Azure Logs度量示例查询可视化CPU百分比随时间的变化

您的第一个Azure Monitor Metrics查询

  1. 选择Metrics服务
  2. 选择要使用订阅、资源组、资源类型和资源字段提取指标的资源。
  3. 一些资源,例如存储帐户,在多个指标名称空间下组织指标。Grafana将选择一个默认名称空间,但是要更改该名称空间以查看有哪些其他指标可用。
  4. 从metric字段中选择一个度量。

您还可以应用进一步的聚合或按维度筛选以进行进一步分析。

  1. 将聚合从默认平均值更改为显示最小值、最大值或总价值。
  2. 设置特定的自定义时间粒度。默认情况下,Grafana会根据您所选的时间范围自动选择时间粒度间隔。
  3. 对于具有多个维度的指标,您可以进一步分离和筛选返回的指标。例如,Application Insights依赖项调用度量支持为成功调用和不成功调用返回多个时间序列。
Azure Monitor Metrics截图显示尺寸
Azure Monitor Metrics截图显示尺寸

可用的选项将根据与所选指标最相关的内容而变化。

图例别名格式

Metrics的图例标签可以使用别名更改。在Legend Format字段中,你可以以任何你想要的方式组合下面定义的别名

  • Blob类型:{{blobtype}}就变成了Blob类型:PageBlobBlob类型:BlockBlob
  • {{resourcegroup}} - {{resourcename}}就变成了生产—web_server
别名模式 描述
{{resourcegroup}} 替换为资源组
{{namespace}} 替换为资源类型/命名空间(例如Microsoft.Compute/virtualMachines)
{{resourcename}} 已用资源名替换
{{metric}} 用度量名称替换(例如CPU百分比)
{{arbitrary维度id}} 用指定维度的值替换。(例如{{blobtype}}变成BlockBlob)
{{维度名称}} (向后兼容的遗留问题)替换为第一个维度的名称
{{维度值}} (向后兼容的遗留问题)替换为第一个维度的值

有些指标具有附加的元数据相关的维度。维度表示为分配给每个度量值的键-值对。Grafana允许根据维度值显示和过滤指标。

支持多个操作符(详见在这里) -=不等于,开始于操作符。

关于多维度量的进一步文档是可用的在这里,以及有关过滤的文件在这里

支持的Azure Monitor指标

并非Azure Monitor metrics API返回的所有指标都有值。为了使您在构建查询时更容易,Grafana数据源有一个受支持的度量列表,并忽略永远不会有值的度量。随着新的服务和指标被添加到Azure云,这个列表会定期更新。有关指标列表的更多信息,请参见当前支持的名称空间

查询Azure Monitor日志

Azure Monitor Logs收集和组织日志和性能数据支持资源并使许多数据源可与复杂的一起查询库斯托查询语言(KQL)

Azure Monitor Metrics只存储简化的数值数据,而Logs可以存储不同的数据类型,每种数据类型都有自己的结构,并可以使用KQL执行复杂的数据分析。

Azure Monitor日志示例查询比较成功的请求和失败的请求
Azure Monitor日志示例查询比较成功的请求和失败的请求

您的第一个Azure Monitor Logs查询

  1. 选择日志服务
  2. 选择需要查询的资源。您也可以动态查询单个资源组或订阅下的所有资源。
  3. 输入您的KQL查询。参见下面的例子。
Kusto查询语言

Azure Monitor Logs查询是使用Kusto查询语言(KQL)编写的,KQL是一种丰富的语言,易于读写,熟悉SQL的人应该熟悉这种语言。Azure文档中有很多资源可以帮助您学习KQL:

下面是一个示例查询,它返回一个虚拟机的CPU性能,平均超过5m个时间粒

$__timeFilter是一个特殊的Grafana宏,它过滤仪表板时间范围的结果|其中$__timeFilter(TimeGenerated) |其中CounterName == "% Processor time " | summary avg(CounterValue) by bin(TimeGenerated, 5m),计算机| order by TimeGenerated asc

时间序列查询用于随时间变化的值,通常用于时间序列面板等图形可视化。每个查询应该至少返回一个datetime列和一个数值列。结果还必须按datetime列升序排序。

查询还可以有一个或多个非数字/非日期时间列,这些列被认为是维度,并成为响应中的标签。例如,返回按小时、计算机和计数器名分组的聚合计数的查询:

执行| where $__timeFilter(TimeGenerated) | summary count() by bin(TimeGenerated, 1h), Computer, CounterName | order by TimeGenerated asc

您还可以选择其他数字值列(包含多维或不包含多维)。例如,按小时、计算机、CounterName和InstanceName获取计数和平均值:

Perf | where $__timeFilter(TimeGenerated) | summarize Samples=count(), ["Avg Value"]= Avg (CounterValue) by bin(TimeGenerated, $__interval), Computer, CounterName, InstanceName | order by TimeGenerated asc

表查询主要在Table面板中使用,显示列和行列表。这个示例查询返回包含6个指定列的行:

AzureActivity | where $__timeFilter() |项目TimeGenerated, ResourceGroup, Category, OperationName, ActivityStatus, Caller | order by TimeGenerated desc
日志宏

为了使编写查询更容易,可以在查询的where子句中使用几个Grafana宏:

描述
$ __timeFilter () 用于将结果筛选到仪表板的时间范围。
例子:TimeGenerated >= datetime(2018-06-05T18:09:58.907Z)和TimeGenerated <= datetime(2018-06-05T20:09:58.907Z)
__timeFilter美元(datetimeColumn) 就像$ __timeFilter (),但指定要筛选的自定义字段。
$ __timeFrom () 展开到指示板时间范围的开始。
例子:datetime (2018 - 06 - 05 - t18:09:58.907z)
$ __timeTo () 扩展到仪表板时间范围的末尾。
例子:datetime (2018 - 06 - 05 - t20:09:58.907z)
__escapeMulti美元($ myVar) 与包含非法字符的多值模板变量一起使用。
如果$ myVar是否有以下两个值作为字符串\ \ grafana-vm \网络(eth0)总额\ ',' \ \ hello !”,然后它扩展到@ \ \ grafana-vm \网络(eth0)总额\ ',@ \ \你好!”

如果使用单值变量,则不需要使用此宏,只需将变量内联转义为-@“\ $ myVar”
__contains美元($ myVar colName) 与多值模板变量一起使用。
如果$ myVar有价值“value1”、“value2的,它扩展到:colName in ('value1','value2')

如果使用所有选项,然后检查包括所有选项复选框,并在自定义所有值值中的字段类型所有.如果$ myVar是有价值的所有然后宏将扩展为1 == 1.对于有很多选项的模板变量,这将通过不构建一个大的“where..”来提高查询性能。”条款。

此外,Grafana有内置__interval美元

查询Azure资源图

Azure Resource Graph (ARG)是Azure中的一项服务,旨在通过提供高效和高性能的资源探索来扩展Azure资源管理,并能够跨给定的订阅集进行大规模查询,从而有效地管理您的环境。通过查询ARG,您可以使用复杂的过滤查询资源,根据治理需求迭代地探索资源,并评估在广阔的云环境中应用策略的影响。

Azure Resource Graph示例查询,列出帐户上的虚拟机
Azure Resource Graph示例查询,列出帐户上的虚拟机

您的第一个Azure资源图查询

的变体中编写ARG查询Kusto查询语言,但并不是所有的库斯托语言功能都在ARG中可用。Azure Resource Graph查询被格式化为表数据。

如果您的凭证允许您访问多个订阅,那么您可以在输入查询之前选择多个订阅。

按资源属性对结果排序

下面是一个示例查询,它返回所选订阅中的所有资源,但只返回名称、类型和位置属性:

资源|项目名称、类型、位置|按名称顺序asc

查询使用命令来对属性进行排序的名字升序(asc)秩序。您可以更改要排序的属性和顺序(ascdesc).查询使用项目只显示结果中列出的属性。您可以添加或删除属性。

查询过滤复杂的资源

筛选标记名为的Azure资源环境它们的值是内部.您可以将它们更改为任何所需的标记键和值。的= ~类型match告诉资源图不区分大小写。您可以通过其他属性进行投影,或者添加/删除更多属性。

例如,返回资源列表的查询环境标签值内部

资源| where标签。环境= ~'internal' | project name

按属性对值进行分组和聚合

你也可以用总结而且定义如何按属性对值进行分组和聚合。例如,每个建议的正常、不正常和不适用资源返回计数:

Securityresources | where type == 'microsoft. 'security/assessments' | extend resourceId=id,建议书id =name,建议书类型=type,建议书名称=properties。displayName, = properties.resourceDetails来源。源,recommendationState = properties.status。code, description=properties.metadata.description, assessmentType=properties.metadata. description。assessmentType remediationDescription = properties.metadata。remediationDescription policyDefinitionId = properties.metadata。policyDefinitionId implementationEffort = properties.metadata。implementationEffort recommendationSeverity = properties.metadata。严重程度、类别= properties.metadata。类别,userImpact = properties.metadata。= properties.metadata userImpact,威胁。威胁,portalLink = properties.links。azurePortal | summary numberOfResources=count(resourceId) by tostring(建议书名称),tostring(建议书状态)

在Azure资源图中,许多嵌套属性(properties.displayName)是属于动态类型,并应强制转换为具有的字符串tostring ()给他们做手术。

Azure文档也有宿主许多示例查询帮助你开始

Azure资源图宏

您可以在构造查询时使用Grafana宏。在查询的where子句中使用宏:

  • $ __timeFilter ()-扩展至timestamp≥datetime(2018-06-05T18:09:58.907Z)和timestamp≤datetime(2018-06-05T20:09:58.907Z)其中from和to日期时间来自Grafana时间选择器。

  • __timeFilter美元(datetimeColumn)-扩展至datetimeColumn≥datetime(2018-06-05T18:09:58.907Z)和datetimeColumn≤datetime(2018-06-05T20:09:58.907Z)其中from和to日期时间来自Grafana时间选择器。

  • $ __timeFrom ()-从Grafana选择器返回From datetime。例子:datetime (2018 - 06 - 05 - t18:09:58.907z)

  • $ __timeTo ()-从Grafana选择器返回To datetime。例子:datetime (2018 - 06 - 05 - t20:09:58.907z)

  • __escapeMulti美元($ myVar)—使用包含非法字符的多值模板变量。如果$ myVar是否有两个值作为字符串\ \ grafana-vm \网络(eth0)总额\ ',' \ \ hello !”,然后展开为:@ \ \ grafana-vm \网络(eth0)总额\ ',@ \ \你好!”.如果使用单值变量,则不需要使用此宏,只需将变量内联转义为-@“\ $ myVar”

  • __contains美元($ myVar colName)-使用多值模板变量。如果$ myVar有价值“value1”、“value2的,则展开为:colName in ('value1','value2')

    如果使用所有选项,然后检查包括所有选项复选框,并在自定义所有值字段类型:所有.如果$ myVar是有价值的所有然后宏将扩展为1 == 1.对于有很多选项的模板变量,这将通过不构建一个大的“where..”来提高查询性能。”条款。

使用大型Azure资源数据集

如果请求超过允许记录的最大值,对结果进行分页,并且只返回结果的第一页。您可以使用过滤器来减少在该值下返回的记录数量。

Azure Monitor更进一步

参见以下主题了解更多关于Azure Monitor数据源的信息:

使用托管标识进行配置

在Azure中托管Grafana(例如应用程序服务、Azure虚拟机)并在其VM上启用了托管标识的客户,现在将能够使用托管标识在Grafana中配置Azure Monitor。这将简化数据源配置,需要对数据源进行安全的身份验证,而不必通过Azure AD App Registrations为每个数据源手动配置凭据。有关Azure托管身份的更多详细信息,请参阅Azure的文档

若要为Grafana启用托管标识,请设置managed_identity_enabled旗帜在(azure)部份Grafana服务器配置

[azure] managed_identity_enabled = true

然后,在Azure Monitor数据源配置中将身份验证设置为托管身份。目录ID、应用程序ID和客户端机密字段将被隐藏,数据源将使用托管标识对Azure Monitor Metrics、Logs和Azure Resource Graph进行身份验证。

Azure Monitor Metrics截图显示尺寸
Azure Monitor Metrics截图显示尺寸