Azure 监控

本文的 Azure 监控主要描述 Azure 中国的监控方式,其他国家的 Azure 或者 Azure 全球可以参考,并且查询官方文档进行相应的配置更改。

采集组件采用 RobustPerception 的 azure_metrics_exporter ,这个 Exporter 也在持续维护中,维护者是 Prometheus 的作者 Brian Brazil ,也算是某种意义上的官方,比较靠谱。唯一的问题是已经有 1 年没有更新。GitHub 地址如下:

https://github.com/RobustPerception/azure_metrics_exporter

使用 Azure metrics exporter 来监控 Azure 需要准备如下步骤。

    1. 开通 Azure Monitor
    1. Azure 中注册应用
    1. 配置 Azure metrics exporter
    1. 配置 Prometheus
    1. Grafana 画图

开通 Azure Monitor

要监控 Azure 的云服务资源使用情况需要借助自身的云服务 Azure Monitor , Azure Monitor 是 Azure 中的一项完整的监视服务,提供了一整套用于监视 Azure 资源以及其他云和本地资源的功能。所以为了监控上边的运行的服务资源,我们需要打开 Azure Monitor 服务。详细的开通步骤可以参考官网,这里就不过多的描述了。

Azure 中注册应用

Azure Monitor 打开以后,我们可以在 Azure Monitor 中看到各个资源的监控指标,但是每次都只能在控制台上查看,我们需要把监控数据保存到我们的 Prometheus 中,在统一的监控系统里查看。

我们需要在 Azure 门户中注册一个应用,以便 Microsoft 标识平台可为该应用程序及其用户提供身份验证和授权服务。

注册应用程序会在应用与 Microsoft 标识平台之间建立信任关系。 信任是单向的:应用信任 Microsoft 标识平台,但标识平台并不信任应用。

Azure 里进行注册一个监控可以的应用主要是 2 部分,应用注册和授权。

应用注册

登陆 Azure 门户,进入控制台,如果可以看到多个账号,那么选择要注册应用的账号。

接下来在控制台页面寻找 Azure 活动目录(Azure Active Directory),打开进入。

在右侧管理栏下有一个应用注册(App registrations)的菜单,点击打开。

在页面的上方有一个注册新应用(New application registration)的按钮,点击按钮进行应用创建。

创建过程中需要输入如下内容:

名称(Name):应用的用户会看到这个名字,后期可以修改。 支持的账户类型(Supported account types):支持两种账户类型,分别是当前账户和全局账号,选择当前应用只能在这个账户中看到,选择全局账号任意账号都能看到这个应用。【PS:官方文档不这么说,但是是这个意思】 重定向 URI(Redirect URI):这个选项是可选的,我们这里不填,不填不会影响后续的使用。

填写好以后点击注册(Register)即可。

注册完成后,Azure 控制台页面会显示应用注册的 总览 页面。 在这个页面可以看到应用程序ID (Application ID / client ID),也被称为客户端 ID,它可唯一地标识 Microsoft 标识平台中的应用程序。

另外这个页面还可以看到 Directory ID 或者 tenant ID ,这两个 ID 先记下来,后边会用到,忘记了也可以到这个页面来查看。

应用创建好以后,我们需要为这个应用创建一个密码,或者叫凭证。

点击应用页面右侧的 凭证和秘钥(Certificates & secrets),这里这样创建秘钥(证书)方式的,也可以创建密码方式的,我们这里选择创建密码,点击 New client secret ,填写这个秘钥的描述,然后选择过期时间,过期时间可以是 1 年、2 年或者永不过期,然后点击 添加 (add) 就好。永不过期并不是真的永远不会过期,而且是过期时间被设置在了大约 300 年以后,我这里看到的是 2299.12.31 。

成功以后会看到这个描述的后边有几个值,分别是 Expires 、Value 、ID ,将其中的 Value 记录下来,切记切记,一定要记录好了。这个 Value 就是我们创建的密码,这个 Value 的显示时间比较短,几分钟的样子,如果没有记录下来,以后就看不到了,只能删了重新创建一个密码。

这样我们就收集到了后边要配置需要的 4 个参数中的 3 个。

client_id client_secret tenant_id

接下来就需要授权了。

授权

上边创建好应用以后,我们获得了需要的 ID,但是这个应用现在是没有权限的,所以我们需要对这个应用进行授权,步骤如下:

首先登陆订阅服务的控制台,在订阅页面的左侧,有一个访问控制(Access control (IAM)),点击这个菜单。

在打开的页面查找 角色管理 (Role assignment),点击新建,在新建里选择添加角色 (Add role assignment)。

在添加角色页面进行授权,在这个小页面里,Role 一栏选 “Monitoring Reader”,在搜索栏里搜索找到上边创建的应用,并且选中。其他项保持默认即可。

点击保存,授权就完成了。

记录下这个订阅的 subscription_id ,我们需要的配置参数就收集全了。

配置 Azure metrics exporter

官方没有提供编译好的二进制执行文件,可以自行编译,或者从 docker images 里拷贝一个出来。

下载 docker images , images ID 是 71b159cb4cb3

docker pull robustperception/azure_metrics_exporter:latest

准备好镜像文件以后就可以准备配置文件了,配置文件采用 Yaml 格式进行描述,下面是一个缺省的配置文件。

azure_metrics_exporter 缺省的配置文件为

active_directory_authority_url: "https://login.microsoftonline.com/"
resource_manager_url: "https://management.azure.com/"
credentials:
  subscription_id: <secret>
  client_id: <secret>
  client_secret: <secret>
  tenant_id: <secret>

targets:
  - resource: "azure_resource_id"
    metrics:
    - name: "BytesReceived"
    - name: "BytesSent"
  - resource: "azure_resource_id"
    aggregations:
    - Minimum
    - Maximum
    - Average
    metrics:
    - name: "Http2xx"
    - name: "Http5xx"
  - resource: "azure_resource_id"
    metric_namespace: "Azure.VM.Windows.GuestMetrics"
    metrics:
    - name: 'Process\Thread Count'

resource_groups:
  - resource_group: "webapps"
    resource_types:
    - "Microsoft.Compute/virtualMachines"
    resource_name_include_re:
    - "testvm.*"
    resource_name_exclude_re:
    - "testvm12"
    metrics:
    - name: "CPU Credits Consumed"

resource_tags:
  - resource_tag_name: "group"
    resource_tag_value: "tomonitor"
    resource_types:
      - "Microsoft.Compute/virtualMachines"
    metrics:
      - name: "CPU Credits Consumed"

官方对配置文件的描述如下:

azure_resource_id and subscription_id can be found under properties in the Azure portal for your application/service.

azure_resource_id should start with /resourceGroups... (/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxx must be removed from the begining of azure_resource_id property value)

tenant_id is found under Azure Active Directory > Properties and is listed as Directory ID.

The client_id and client_secret are obtained by registering an application under 'Azure Active Directory'.

client_id is the application_id of your application and the client_secret is generated by selecting your application/service under Azure Active Directory, selecting 'keys', and generating a new key.

If you want to scrape metrics from Azure national clouds (e.g. AzureChinaCloud, AzureGermanCloud), you should provide active_directory_authority_url and resource_manager_url parameters. active_directory_authority_url is AzureAD url for getting access token. resource_manager_url is Azure API management url. If you won't provide active_directory_authority_url and resource_manager_url parameters, azure-metrics-exporter scrapes metrics from global cloud.

其中配置的 active_directory_authority_urlresource_manager_url 缺省配置的是 Azure 全球的地址,使用其他国家区域的建议通过 Azure Environments 查找对应的环境来进行配置,这样可能会快一些,中国区建议配置 AzureChinaCloud 里的 URL。

subscription_id、client_id、client_secret、tenant_id 这 4 个参数在上边已经收集好了,填入即可。

微软配置监控 https://blog.csdn.net/sickles/article/details/81156659

对象存储监控指标 https://docs.azure.cn/zh-cn/storage/common/monitor-storage-reference#metrics-dimensions

全部指标 https://docs.azure.cn/zh-cn/azure-monitor/essentials/metrics-supported

资源类型列表

https://docs.azure.cn/zh-cn/azure-resource-manager/management/azure-services-resource-providers

无法监控到所有指标,详见问题 1 。

配置 Prometheus

Azure metric exporter 配置好以后是可以通过 curl 命令来查看采集到的数据的。接下来,我们需要配置 Prometheus ,让监控数据存储起来,方便查询和告警。

在 Prometheus 中添加如下内容,添加好以后重新加载配置文件或者重启 Prometheus 服务使得配置生效。

  - job_name: azure-metrics
    scrape_interval: 60s
    scrape_timeout: 60s
    static_configs:
      - targets: 
          - 192.168.1.1:9109

配置中配置了 Prometheus 每隔 60 秒会从 Exporter 获取一次数据存储到 TSDB,超时时间为 60 秒。Azure API 对于监控有一个拉取数据频率的限制,默认是每小时 12000 次请求,超过这个限制以后会被限制,在配置的时候需要计算所有的请求是否会超出限制。

打开 Prometheus 的 Graph 页面,输入要采集的 Metric ,一切正常的话,是可以看到要采集的指标的。

API 读请求每小时限制 12000 次

Grafana 画图

在 Prometheus 中配置好采集以后,虽然在 Prometheus Graph 页面可以看到采集的指标,但是并不能长久存储,我们还是在 Grafana 中进行画图。

Grafana 搭建和 Prometheus 数据源的配置就不在这里讲解了,我们讲接下来的画图部分。

对于画图,我们需要首先把要采集的指标列到一个表里,并且把各个指标的数据类型也备注上,对于 Azure 的监控,我们使用下面的表格来进行梳理。

Metric 名称 数据类型 单位 Aggregation Type 描述
availability_percent_average gauge Percent Average 可用性
egress_bytes_total gauge Bytes Total 出流量
...

梳理好以后选择合适的 Panel 类型将数据画出来。

如果觉得自己画图比较麻烦,也可以到 Grafana Dashboards 上去搜索别人画好的 Dashboard ,但是 Azure 相关的 Dashboards 比较少,基于 Prometheus 的更少,大概率的情况下还是需要自己画的。

遇到的问题

1、只能监控到 account 指标,无法监控到 blob 、queue 等指标。 当前版本无法监控所有指标,因为 apiversion 版本的限制,

exporter 在获取 aipversion 的时候获取的是 2018-02-01

https://github.com/RobustPerception/azure_metrics_exporter/blob/HEAD/azure.go 的 401 ~ 424 行是用来返回指定的资源组和资源的,

在这一段,指定了 apiVersion 为 2018-02-01

...
// Returns all resources for given resource group and types
func (ac *AzureClient) listFromResourceGroup(resourceGroup string, resourceTypes []string) ([]AzureResource, error) {
    apiVersion := "2018-02-01"

...

azure 的最新apiversion 版本为 2019-06-01 ,

在 2018-02-01 版本上针对的 Storage 的 Resource Type 只有 Storage Accounts,

在 2019-06-01 版本上针对的 Storage 的 Resource Type 有 Storage Accounts 、Blob Services 、File Services 、Queue Services、Table Services 等接口。

所以无法监控到 Blob 、File、Queue、Table 等数据。

https://docs.microsoft.com/en-us/azure/templates/microsoft.storage/2018-02-01/storageaccounts?tabs=json 2、无法监控到部分负载均衡的指标

负载均衡有两种 SKU ,分别是标准版和基础版,两者在功能、规模、售价方面有区别,对于监控来说,我们使用 Azure Metric Exporter 主要是获取指标数据。标准版提供基于 Azure Monitor 的监控指标,基础版只提供基于 Azure Log 的日志。所以无法获取基础版的监控指标。另外文档里提到SKU 是不可变的,无法更改现有资源的 SKU。所以只有迁移才能变更SKU,如果需要升级可以参考升级文档。

SKU 对比文档: https://docs.microsoft.com/zh-cn/azure/load-balancer/skus

升级文档: https://docs.microsoft.com/zh-cn/azure/virtual-network/virtual-network-public-ip-address-upgrade?tabs=option-upgrade-powershell%2Coption-migrate-powershell

results matching ""

    No results matching ""