使用 Linux 诊断扩展 4.0 监视指标和日志

本文档介绍 Linux 诊断扩展 (LAD) 的最新版本。

重要

有关版本 3.x 的信息,请参阅使用 Linux 诊断扩展 3.0 监视指标和日志。 有关版本 2.3 及更早版本的信息,请参 监视 Linux VM 的性能和诊断数据

简介

Linux 诊断扩展可帮助用户监视 Azure 上运行的 Linux VM 的运行状况。 它具有以下集合和功能:

数据源 自定义选项 必需目标 可选目标
指标 计数器、聚合、采样率、说明符 Azure 表存储 EventHub、Azure Blob 存储(JSON 格式)、Azure Monitor1
Syslog 设备、严重性级别 Azure 表存储 EventHub、Azure Blob 存储(JSON 格式)
文件 日志路径、目标表 Azure 表存储 EventHub、Azure Blob 存储(JSON 格式)

1 LAD 4.0 中的新增内容

此扩展适用于两种 Azure 部署模型(Azure 资源管理器和经典)。

安装扩展

可以使用 Azure PowerShell cmdlet、Azure CLI 脚本、Azure 资源管理器模板(ARM 模板)或 Azure 门户为 VM 和虚拟机规模集启用此扩展。 有关详细信息,请参阅扩展和功能

备注

Log Analytics VM 扩展中还随附了 Linux 诊断 VM 扩展的某些组件。 由于这种体系结构,如果在同一 ARM 模板中对两个扩展进行实例化,则可能会发生冲突。

为避免安装时冲突,请使用 dependsOn 指令按顺序安装扩展。 可按任一顺序安装扩展。

使用安装说明和可下载的示例配置将 LAD 4.0 配置为:

  • 捕获并存储 LAD 版本 2.3 和 3.x 提供的相同指标。
  • 将指标发送到 Azure Monitor 接收器,并将常用的接收器发送到 Azure 存储。 此功能是 LAD 4.0 中的新功能。
  • 捕获一组有用的文件系统指标(与 LAD 3.0 一样)。
  • 捕获 LAD 2.3 允许的默认 syslog 收集。
  • 允许 Azure 门户体验,以便对 VM 指标进行制图以及就其发送警报。

可下载配置只是一个示例。 请根据需要进行修改。

支持的 Linux 分发

Linux 诊断扩展支持许多分发和版本。 分发和版本的以下列表仅适用于 Azure 认可的 Linux 供应商映像。 扩展通常不支持第三方 BYOL 和 BYOS 映像(例如设备)。

仅列出主要版本(如 Debian 7)的分发对于所有次要版本也均受支持。 如果指定了特定次要版本,则仅支持该版本。 如果追加了加号 (+),则支持的次要版本等于或晚于指定版本。

支持的分发和版本:

  • Ubuntu 18.04、16.04、14.04

  • CentOS 7、6.5+

  • OpenSUSE 13.1+

  • SUSE Linux Enterprise Server 12

  • Debian 9、8、7

先决条件

  • Azure Linux 代理 2.2.0 版或更高版本。 大部分 Azure VM Linux 库映像包含 2.2.7 或更高版本。 运行 /usr/sbin/waagent -version 以确认 VM 上安装的版本。 如果 VM 正在运行较早版本的来宾代理,请更新 Linux 代理
  • Azure CLI。 在计算机上设置 Azure CLI 环境。
  • wget 命令。 如果尚未有该命令,请运行 sudo apt-get install wget
  • Azure 订阅以及用于存储数据的常规用途存储帐户。 常规用途存储帐户支持必需的表存储。 Blob 存储帐户不起作用。
  • Python 2。

Python 要求

Linux 诊断扩展需要 Python 2。 如果虚拟机使用的分发在默认情况下不包括 Python 2,请安装它。

以下示例命令在各种分发上安装 Python 2:

  • CentOS:yum install -y python2
  • Ubuntu、Debian:apt-get install -y python2
  • SUSE: zypper install -y python2

python2 可执行文件必须将别名设置为 python。 以下是实现此目标的一种方法:

  1. 运行以下命令以删除所有现有别名。

    sudo update-alternatives --remove-all python
    
  2. 运行以下命令以创建新的别名。

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
    

安装

可以在 Azure CLI 或 PowerShell 中安装和配置 LAD 4.0。

如果受保护的设置位于 ProtectedSettings.json 文件中,而公用配置信息位于 PublicSettings.json 中,请运行以下命令 :

az vm extension set --publisher Microsoft.Azure.Diagnostics --name LinuxDiagnostic --version 4.0 --resource-group <resource_group_name> --vm-name <vm_name> --protected-settings ProtectedSettings.json --settings PublicSettings.json

该命令假定你使用 Azure CLI 的 Azure 资源管理模式。 若要为经典部署模型 VM 配置 LAD,请切换到服务管理模式 (azure config mode asm),并在命令中省略资源组名称。

有关详细信息,请参阅跨平台 CLI 文档

示例安装

备注

对于以下示例,请在运行代码之前,为第一部分中的变量填写适当的值。

在这些示例中,示例配置会收集一组标准数据,并将其发送到表存储。 示例配置的 URL 及其内容可能会更改。

在大多数情况下,应下载门户设置 JSON 文件的副本,并根据需要进行自定义。 随后使用模板或自己的自动化来使用自定义版本的配置文件,而不是每次都从 URL 下载。

备注

启用新 Azure Monitor 接收器时,VM 需要启用系统分配的标识,才能生成托管服务标识 (MSI) 身份验证令牌。 可以在 VM 创建期间或之后添加这些设置。

有关 Azure 门户、Azure CLI、PowerShell 和 Azure 资源管理器的说明,请参阅配置托管标识

安装示例 - Azure CLI

# Set your Azure VM diagnostic variables.
my_resource_group=<your_azure_resource_group_name_containing_your_azure_linux_vm>
my_linux_vm=<your_azure_linux_vm_name>
my_diagnostic_storage_account=<your_azure_storage_account_for_storing_vm_diagnostic_data>
my_diagnostic_storage_endpoint="https://core.chinacloudapi.cn/"

# Login to Azure before you do anything else.
az cloud set -n AzureChinaCloud
az login

# Select the subscription that contains the storage account.
az account set --subscription <your_azure_subscription_id>

# Enable system-assigned identity on the existing VM.
az vm identity assign -g $my_resource_group -n $my_linux_vm

# Download the sample public settings. (You could also use curl or any web browser.)
wget https://raw.githubusercontent.com/Azure/azure-linux-extensions/master/Diagnostic/tests/lad_2_3_compatible_portal_pub_settings.json -O portal_public_settings.json

# Build the VM resource ID. Replace the storage account name and resource ID in the public settings.
my_vm_resource_id=$(az vm show -g $my_resource_group -n $my_linux_vm --query "id" -o tsv)
sed -i "s#__DIAGNOSTIC_STORAGE_ACCOUNT__#$my_diagnostic_storage_account#g" portal_public_settings.json
sed -i "s#__VM_RESOURCE_ID__#$my_vm_resource_id#g" portal_public_settings.json

# Build the protected settings (storage account SAS token).
my_diagnostic_storage_account_sastoken=$(az storage account generate-sas --account-name $my_diagnostic_storage_account --expiry 2037-12-31T23:59:00Z --permissions wlacu --resource-types co --services bt -o tsv)
my_lad_protected_settings="{'storageAccountName': '$my_diagnostic_storage_account', 'storageAccountSasToken': '$my_diagnostic_storage_account_sastoken', 'storageAccountEndPoint': '$my_diagnostic_storage_endpoint'}"

# Finally, tell Azure to install and enable the extension.
az vm extension set --publisher Microsoft.Azure.Diagnostics --name LinuxDiagnostic --version 4.0 --resource-group $my_resource_group --vm-name $my_linux_vm --protected-settings "${my_lad_protected_settings}" --settings portal_public_settings.json

虚拟机规模集的安装示例 - Azure CLI

# Set your Azure virtual machine scale set diagnostic variables.
my_resource_group=<your_azure_resource_group_name_containing_your_azure_linux_vm>
my_linux_vmss=<your_azure_linux_vmss_name>
my_diagnostic_storage_account=<your_azure_storage_account_for_storing_vm_diagnostic_data>
my_diagnostic_storage_endpoint="https://core.chinacloudapi.cn/"

# Login to Azure before you do anything else.
az cloud set -n AzureChinaCloud
az login

# Select the subscription that contains the storage account.
az account set --subscription <your_azure_subscription_id>

# Enable system-assigned identity on the existing virtual machine scale set.
az vmss identity assign -g $my_resource_group -n $my_linux_vmss

# Download the sample public settings. (You could also use curl or any web browser.)
wget https://raw.githubusercontent.com/Azure/azure-linux-extensions/master/Diagnostic/tests/lad_2_3_compatible_portal_pub_settings.json -O portal_public_settings.json

# Build the virtual machine scale set resource ID. Replace the storage account name and resource ID in the public settings.
my_vmss_resource_id=$(az vmss show -g $my_resource_group -n $my_linux_vmss --query "id" -o tsv)
sed -i "s#__DIAGNOSTIC_STORAGE_ACCOUNT__#$my_diagnostic_storage_account#g" portal_public_settings.json
sed -i "s#__VM_RESOURCE_ID__#$my_vmss_resource_id#g" portal_public_settings.json

# Build the protected settings (storage account SAS token).
my_diagnostic_storage_account_sastoken=$(az storage account generate-sas --account-name $my_diagnostic_storage_account --expiry 2037-12-31T23:59:00Z --permissions wlacu --resource-types co --services bt -o tsv)
my_lad_protected_settings="{'storageAccountName': '$my_diagnostic_storage_account', 'storageAccountSasToken': '$my_diagnostic_storage_account_sastoken', 'storageAccountEndPoint': '$my_diagnostic_storage_endpoint'}"

# Finally, tell Azure to install and enable the extension.
az vmss extension set --publisher Microsoft.Azure.Diagnostics --name LinuxDiagnostic --version 4.0 --resource-group $my_resource_group --vmss-name $my_linux_vmss --protected-settings "${my_lad_protected_settings}" --settings portal_public_settings.json

更新扩展设置

更改受保护或公开设置后,通过运行相同的命令将其部署到 VM。 如果更改了任何设置,则更新会发送到扩展。 LAD 将重载配置并自行重启。

从以前版本的扩展迁移

该扩展的最新版本为 4.0,目前为公共预览版。 旧版本的 3.x 仍受支持。 但从 2018 年 7 月 31 日起,已弃用了 2.x 版本。

重要

若要从 3.x 迁移到扩展的最新版本,请卸载旧扩展。 然后安装版本 4,其中包含系统分配的标识和接收器的更新配置,用于将指标发送到 Azure Monitor 接收器。

安装新扩展时,启用自动次要版本升级:

  • 在 Azure 资源管理器部署模型 VM 上,在 VM 部署模板中包含 "autoUpgradeMinorVersion": true
  • 在经典部署模型 VM 上,如果要通过 Azure CLI 或 PowerShell 安装该扩展,请指定版本 4.*

可以使用用于 LAD 3.x 的相同存储帐户。

受保护的设置

此组配置信息包含不应公开的敏感信息。 例如,它包含存储凭据。 扩展以加密形式传输和存储这些设置。

{
    "storageAccountName" : "the storage account to receive data",
    "storageAccountEndPoint": "the hostname suffix for the cloud for this account",
    "storageAccountSasToken": "SAS access token",
    "mdsdHttpProxy": "HTTP proxy settings",
    "sinksConfig": { ... }
}
名称
storageAccountName 扩展写入数据的存储帐户的名称。
storageAccountEndPoint (可选)标识存储帐户所在云的终结点。 如果此设置不存在,则默认情况下,LAD 使用 Azure 公有云 https://core.windows.net。 若要使用 Azure 中国世纪互联中的存储帐户,请将此值替换为 https://core.chinacloudapi.cn
storageAccountSasToken Blob 和表服务的帐户 SAS 令牌 ss='bt'。 此令牌适用于容器和对象 (srt='co')。 它授予添加、创建、列出、更新和写入权限 (sp='acluw')。 请勿使用前导问号 (?)。
mdsdHttpProxy (可选)扩展连接到指定存储帐户和终结点所需的 HTTP 代理信息。
sinksConfig (可选)可将指标和事件传递到的替换目标的详细信息。 以下各节提供了有关扩展所支持的每个数据接收器的详细信息。

若要在 ARM 模板中获取 SAS 令牌,请使用 listAccountSas 函数。 有关示例模板,请参阅 List 函数示例

可通过 Azure 门户构造所需的 SAS 令牌:

  1. 选择希望扩展写入的常规用途存储帐户。
  2. 在左侧菜单中的“设置”下,选择“共享访问签名” 。
  3. 按照前面所述进行选择。
  4. 选择“生成 SAS”。

屏幕截图显示了带有“生成 SAS”按钮的“共享访问签名”页。

将生成的 SAS 复制到 storageAccountSasToken 字段中。 删除前导问号 (?)。

sinksConfig

备注

公共设置和受保护的设置都有一个可选的 sinksConfig 部分。 由于包含 sasURL 之类的机密,受保护的设置中的 sinksConfig 部分仅保留 EventHubJsonBlob 接收器配置。 AzMonSink 接收器配置不能包含在受保护的设置中。

"sinksConfig": {
    "sink": [
        {
            "name": "sinkname",
            "type": "sinktype",
            ...
        },
        ...
    ]
},

sinksConfig 可选部分用于定义扩展要将收集到的信息发送到的更多目标。 "sink" 数组包含每个附加数据接收器的对象。 "type" 特性确定对象中的其他特性。

元素
name 在扩展配置中其他位置用于引用此接收器的字符串。
type 要定义的接收器的类型。 确定此类型实例中的其他值(如果有)。

Linux 诊断扩展 4.0 支持两种受保护的接收器类型:EventHubJsonBlob

EventHub 接收器

"sink": [
    {
        "name": "sinkname",
        "type": "EventHub",
        "sasURL": "https SAS URL"
    },
    ...
]

"sasURL" 条目包含应将数据发布到的事件中心的完整 URL,包括 SAS 令牌。 LAD 要求 SAS 命名启用发送声明的策略。 下面是一个示例:

  • 创建名为 contosohub 的事件中心命名空间。
  • 在名为 syslogmsgs 的命名空间中创建事件中心。
  • 在名为 writer 的事件中心上创建启用发送声明的共享访问策略。

如果创建了在 UTC 2018 年 1 月 1 日午夜之前有效的 SAS,sasURL 值可能类似于以下示例。

https://contosohub.servicebus.chinacloudapi.cn/syslogmsgs?sr=contosohub.servicebus.chinacloudapi.cn%2fsyslogmsgs&sig=xxxxxxxxxxxxxxxxxxxxxxxxx&se=1514764800&skn=writer

有关为事件中心生成和检索 SAS 令牌信息的详细情况,请参阅生成 SAS 令牌

JsonBlob 接收器

"sink": [
    {
        "name": "sinkname",
        "type": "JsonBlob"
    },
    ...
]

定向到 JsonBlob 接收器的数据将存储在 Azure 存储中的 blob 内。 每个 LAD 实例每小时为每个接收器名称创建一个 blob。 每个 blob 总是包含一个语法上有效的 JSON 对象数组。 新条目以基元形式添加到数组。

Blob 存储在与接收器同名的容器中。 用于 blob 容器名称的 Azure 存储规则适用于 JsonBlob 接收器的名称。 也就是说,名称必须包含 3 到 63 个小写字母数字 ASCII 字符或短划线。

公用设置

此公用设置结构包含多个设置块,这些块控制扩展收集的信息。 每项设置(ladCfg 除外)都是可选的。 如果在 ladCfg 中指定收集指标或 syslog,则还必须指定 StorageAccount。 必须指定 sinksConfig 元素才能为 LAD 4.0 中的指标启用 Azure Monitor 接收器。

{
    "ladCfg":  { ... },
    "fileLogs": { ... },
    "StorageAccount": "the storage account to receive data",
    "sinksConfig": { ... },
    "mdsdHttpProxy" : ""
}
元素
StorageAccount 扩展写入数据的存储帐户的名称。 必须是受保护的设置中指定的名称。
mdsdHttpProxy (可选)受保护的设置中指定的代理。 如果设置了专用值,则它会重写公用值。 将包含机密(如密码)的代理设置放在受保护的设置中。

以下各节提供了有关其余元素的详细信息。

ladCfg

"ladCfg": {
    "diagnosticMonitorConfiguration": {
        "eventVolume": "Medium",
        "metrics": { ... },
        "performanceCounters": { ... },
        "syslogEvents": { ... }
    },
    "sampleRateInSeconds": 15
}

ladCfg 结构控制要传送到 Azure Monitor 指标服务和其他数据接收器的指标和日志的收集。 指定 performanceCounters 和/或 syslogEvents。 另外指定 metrics 结构。

如果不希望启用 syslog 或指标收集,请为 ladCfg 元素指定一个空结构,如以下所示:

"ladCfg": {
    "diagnosticMonitorConfiguration": {}
}
元素
eventVolume (可选)控制在存储表中创建的分区数。 值必须为 "Large""Medium""Small"。 如果未指定值,则默认值为 "Medium"
sampleRateInSeconds (可选)两次收集原始(未聚合)指标之间的默认时间间隔。 支持的最小采样率为 15 秒。 如果未指定值,则默认值为 15

指标

"metrics": {
    "resourceId": "/subscriptions/...",
    "metricAggregation" : [
        { "scheduledTransferPeriod" : "PT1H" },
        { "scheduledTransferPeriod" : "PT5M" }
    ]
}
元素
ResourceId VM 或 VM 所属虚拟机规模集的 Azure 资源管理器资源 ID。 如果配置使用任何 JsonBlob 接收器,还需指定此设置。
scheduledTransferPeriod 计算聚合指标并传输到 Azure Monitor 指标的频率。 该频率以 IS 8601 时间间隔形式表示。 最小传输周期为 60 秒,即 PT1M。 请至少指定一个 scheduledTransferPeriod

performanceCounters 部分中指定的指标样本每 15 秒收集一次,或者按计数器明确定义的采样率进行收集。 如果出现多个 scheduledTransferPeriod 频率(如示例所示),则每个聚合都将独立计算。

performanceCounters

"performanceCounters": {
    "sinks": "",
    "performanceCounterConfiguration": [
        {
            "type": "builtin",
            "class": "Processor",
            "counter": "PercentIdleTime",
            "counterSpecifier": "/builtin/Processor/PercentIdleTime",
            "condition": "IsAggregate=TRUE",
            "sampleRate": "PT15S",
            "unit": "Percent",
            "annotation": [
                {
                    "displayName" : "Aggregate CPU %idle time",
                    "locale" : "en-us"
                }
            ]
        }
    ]
}

performanceCounters 可选部分控制指标的收集。 每个 scheduledTransferPeriod 的原始样本聚合产生以下值:

  • 平均值
  • 最小值
  • 最大值
  • 上一次收集的值
  • 用于计算聚合的原始样本数
元素
sinks (可选)LAD 将聚合指标结果发送到的接收器的名称的逗号分隔列表。 所有聚合指标都将发布到列出的每个接收器。 示例:"MyEventHubSink, MyJsonSink, MyAzMonSink"。 有关详细信息,请参阅 sinksConfig(受保护的设置)sinksConfig(公共设置)
type 标识指标的实际提供程序。
class "counter" 一起标识提供程序的命名空间中的特定指标。
counter "class" 一起标识提供程序的命名空间中的特定指标。 请参阅下面的可用计数器列表。
counterSpecifier 标识 Azure Monitor 指标命名空间中的特定指标。
condition (可选)选择应用指标的对象的实例。 或选择该对象的所有实例的聚合。
sampleRate IS 8601 时间间隔,用于设置收集此指标原始样本的速率。 如果未设置该值,则收集时间间隔由 sampleRateInSeconds 的值设置。 支持的最短采样率为 15 秒 (PT15S)。
unit 定义指标的单位。 应为以下字符串之一:"Count""Bytes""Seconds""Percent""CountPerSecond""BytesPerSecond""Millisecond"。 所收集数据的使用者会预期收集到的数据值与此单位匹配。 LAD 会忽略此字段。
displayName Guest (classic) 指标命名空间中查看时,要附加到 Azure Monitor 指标中的数据的标签。 此标签采用关联区域设置指定的语言。 LAD 会忽略此字段。
注意:如果在 azure.vm.linux.guestmetrics 指标命名空间中查看相同的指标(如果配置了 AzMonSink,则可用),显示名称完全取决于计数器。 请参阅下表,查找计数器和名称之间的映射。

counterSpecifier 是任意标识符。 Azure 门户绘图和警报功能等指标使用者使用 counterSpecifier 作为标识指标或指标实例的“关键字”。

对于 builtin 指标,建议使用以 /builtin/ 开头的 counterSpecifier 值。 如果要收集指标的特定实例,请将该实例的标识符附加到 counterSpecifier 值。 下面是一些示例:

  • /builtin/Processor/PercentIdleTime - 所有 vCPU 的平均空闲时间
  • /builtin/Disk/FreeSpace(/mnt) - /mnt 文件系统的可用空间
  • /builtin/Disk/FreeSpace - 所有已装载文件系统的平均可用空间

LAD 和 Azure 门户不要求 counterSpecifier 值与任何模式匹配。 请以相同的模式构造各个 counterSpecifier 值。

指定 performanceCounters 时,LAD 始终将数据写入 Azure 存储中的表。 可以将相同的数据写入 JSON blob 或事件中心,或两者都写入。 但不能禁止将数据存储到表。

使用相同存储帐户名称和终结点的所有 LAD 实例会将其指标和日志添加到同一个表中。 如果有过多 VM 写入同一表分区,则 Azure 可能限制写入该分区。

eventVolume 设置会使条目分散在 1 个(小型)、10 个(中型)或 100 个(大型)分区中。 通常,中型分区足以避免流量限制。

Azure 门户的 Azure Monitor 指标功能使用此表中的数据来生成图形或触发警报。 表名是这些字符串的串联:

  • WADMetrics
  • 表中存储的聚合值的 "scheduledTransferPeriod"
  • P10DV2S
  • 日期格式为“YYYYMMDD”,每 10 天更改一次

示例包括 WADMetricsPT1HP10DV2S20170410WADMetricsPT1MP10DV2S20170609

syslogEvents

"syslogEvents": {
    "sinks": "",
    "syslogEventConfiguration": {
        "facilityName1": "minSeverity",
        "facilityName2": "minSeverity",
        ...
    }
}

syslogEvents 可选部分控制 syslog 中日志事件的收集。 如果省略此部分,则完全不会捕获 syslog 事件。

syslogEventConfiguration 收集将为相关的每个 syslog 辅助参数创建一个条目。 如果特定辅助参数的 minSeverity"NONE",或者该辅助参数并未出现在元素中,则不会捕获该辅助参数下的任何事件。

元素
sinks 一个逗号分隔列表,包含要将单个日志事件发布到其中的接收器的名称。 与 syslogEventConfiguration 中的限制匹配的所有日志事件都会发布到列出的每个接收器。 示例: "EHforsyslog"
facilityName Syslog 辅助参数名称,例如 "LOG\_USER""LOG\_LOCAL0"。 有关详细信息,请参阅 syslog 手册页的“辅助参数”部分。
minSeverity Syslog 严重性级别,例如 "LOG\_ERR""LOG\_INFO"。 有关详细信息,请参阅 syslog 手册页的“级别”部分。 扩展将捕获发送到该辅助参数的等于或高于指定级别的事件。

指定 syslogEvents 时,LAD 始终将数据写入 Azure 存储中的表。 可以将相同的数据写入 JSON blob 或事件中心,或两者都写入。 但不能禁止将数据存储到表。

此表的分区行为与 performanceCounters 的描述相同。 表名是这些字符串的串联:

  • LinuxSyslog
  • 日期格式为“YYYYMMDD”,每 10 天更改一次

示例包括 LinuxSyslog20170410LinuxSyslog20170609

sinksConfig

可选的公共 sinksConfig 部分控制除了将指标发送到“存储帐户”和默认“来宾指标”边栏选项卡以外,还发送到 Azure Monitor 接收器的功能。

备注

公共设置和受保护的设置都有一个可选的 sinksConfig 部分。 “公共”设置中的 sinksConfig 部分仅保留 AzMonSink 接收器配置。 EventHubJsonBlob 接收器配置不能包含在公共设置中。

备注

sinksConfig 部分需要在 VM 或虚拟机规模集上启用系统分配的标识。 可以通过 Azure 门户、CLI、PowerShell 或 Azure 资源管理器启用系统分配的标识。 请按照详细说明操作或参阅本文中前面的安装示例。

  "sinksConfig": {
    "sink": [
      {
        "name": "AzMonSink",
        "type": "AzMonSink",
        "AzureMonitor": {}
      }
    ]
  },

fileLogs

fileLogs 部分控制日志文件的捕获。 LAD 在新文本行写入文件时捕获它们。 它会将这些文本行写入表行和/或任何指定接收器,如 JsonBlobEventHub

备注

fileLogs 是由名为 omsagent 的 LAD 的子组件捕获的。 若要收集 fileLogs,请确保 omsagent 用户对指定的文件具有读取权限。 用户还必须对该文件的路径中的所有目录具有执行权限。 安装 LAD 后,可以通过运行 sudo su omsagent -c 'cat /path/to/file' 来检查权限。

"fileLogs": [
    {
        "file": "/var/log/mydaemonlog",
        "table": "MyDaemonEvents",
        "sinks": ""
    }
]
元素
文件 要监视和捕获的日志文件的完整路径名。 路径名称适用于单个文件。 它不能命名目录,也不能包含通配符。 omsagent 用户帐户必须具有文件路径的读取访问权限。
(可选)新行从文件“结尾”写入其中的 Azure 存储表。 该表必须位于指定存储帐户中,如受保护配置中所指定。
sinks (可选)日志行发送到的更多接收器的名称的逗号分隔列表。

必须指定 "table" 和/或 "sinks"

内置提供程序支持的指标

备注

将会针对所有文件系统、磁盘或名称聚合 LAD 支持的默认指标。 有关不聚合的指标,请参阅较新的 Azure Monitor 接收器指标支持信息。

备注

每个指标的显示名称将因其所属的指标命名空间而异:

  • Guest (classic)(从存储帐户填充):performanceCounters 部分中指定的 displayName,或在 Azure 门户中显示的默认显示名称(VM >“诊断设置”>“指标”>“自定义”)。
  • azure.vm.linux.guestmetrics(如果已配置,则从 AzMonSink 填充):下表中指定的“azure.vm.linux.guestmetrics 显示名称”。

由于实现详细信息,Guest (classic)azure.vm.linux.guestmetrics 版本之间的指标值将有所不同。 尽管经典指标在代理中应用了某些聚合,但新指标是未聚合的计数器,使客户可以灵活地在查看/警报时间根据需要进行聚合。

builtin 指标提供程序可提供大量用户最感兴趣的指标。 这些指标分为五个大类:

  • 处理器
  • 内存
  • 网络
  • 文件系统
  • 磁盘

处理器类的内置指标

处理器类指标提供有关 VM 中处理器使用情况的信息。 聚合百分比时,结果是所有 CPU 的平均值。

在双 vCPU VM 中,如果一个 vCPU 是 100% 忙碌,另一个是 100% 空闲,则报告的 PercentIdleTime 是 50。 如果在相同时段内每个 vCPU 都是 50% 忙碌,则报告的结果也是 50。 在四 vCPU VM 中,如果一个 vCPU 是 100% 忙碌,其他几个是空闲,则报告的 PercentIdleTime 是 75。

计数器 azure.vm.linux.guestmetrics 显示名称 含义
PercentIdleTime cpu/usage_idle 聚合窗口期内,处理器运行内核空闲循环的时间所占百分比
PercentProcessorTime cpu/usage_active 运行非空闲线程的时间所占百分比
PercentIOWaitTime cpu/usage_iowait 等待 IO 操作完成的时间所占百分比
PercentInterruptTime cpu/usage_irq 运行硬件或软件中断和 DPC(延迟过程调用)的时间所占百分比
PercentUserTime cpu/usage_user 聚合窗口期非空闲时间内,处于常规优先级的用户模式中所花费的时间所占百分比
PercentNiceTime cpu/usage_nice 非空闲时间内,处于降低(良好)优先级的时间所占百分比
PercentPrivilegedTime cpu/usage_system 非空闲时间内,处于特权(内核)模式的时间所占百分比

前四个计数器结果之和应为 100%。 后三个计数器结果之和应为 100%。 这三个计数器将总和细分为 PercentProcessorTimePercentIOWaitTimePercentInterruptTime

内存类的内置指标

内存类指标提供有关内存使用率、分页和交换的信息。

计数器 azure.vm.linux.guestmetrics 显示名称 含义
AvailableMemory mem/available 可用物理内存 (MB)
PercentAvailableMemory mem/available_percent 可用物理内存占内存总量的百分比
UsedMemory mem/used 已用物理内存 (MB)
PercentUsedMemory mem/used_percent 已用物理内存占内存总量的百分比
PagesPerSec kernel_vmstat/total_pages 总分页(读取/写入)
PagesReadPerSec kernel_vmstat/pgpgin 从后备存储(如交换文件、程序文件和映射文件)读取的页面数
PagesWrittenPerSec kernel_vmstat/pgpgout 向后备存储(如交换文件和映射文件)写入的页面数
AvailableSwap swap/free 未使用的交换空间 (MB)
PercentAvailableSwap swap/free_percent 未使用的交换空间占交换空间总量的百分比
UsedSwap swap/used 已使用的交换空间 (MB)
PercentUsedSwap swap/used_percent 已使用的交换空间占交换空间总量的百分比

此类指标仅有一个实例。 "condition" 特性没有有用的设置,应当省略。

网络类的内置指标

网络类指标提供有关自启动以来各个网络接口上网络活动的信息。

LAD 不会公开带宽指标。 可以从主机指标获取这些指标。

计数器 azure.vm.linux.guestmetrics 显示名称 含义
BytesTransmitted net/bytes_sent 自启动以来发送的字节数总计
BytesReceived net/bytes_recv 自启动以来接收的字节数总计
BytesTotal net/bytes_total 自启动以来发送或接收的字节数总计
PacketsTransmitted net/packets_sent 自启动以来发送的包数总计
PacketsReceived net/packets_recv 自启动以来接收的包数总计
TotalRxErrors net/err_in 自启动以来接收的错误数
TotalTxErrors net/err_out 自启动以来发送的错误数
TotalCollisions net/drop_total 自启动以来网络端口报告的冲突数

文件系统类的内置指标

文件系统类指标提供有关文件系统使用情况的信息。 将报告绝对值和百分比值,因为这些指标会向普通用户(而不是 root 用户)显示。

计数器 azure.vm.linux.guestmetrics 显示名称 含义
FreeSpace disk/free 可用磁盘空间(字节)
UsedSpace disk/used 已用磁盘空间(字节)
PercentFreeSpace disk/free_percent 可用空间百分比
PercentUsedSpace disk/used_percent 已用空间百分比
PercentFreeInodes disk/inodes_free_percent 未使用的索引节点 (Inode) 的百分比
PercentUsedInodes disk/inodes_used_percent 所有文件系统中已分配的(使用中)Inode 的百分比之和
BytesReadPerSecond diskio/read_bytes_filesystem 每秒读取的字节数
BytesWrittenPerSecond diskio/write_bytes_filesystem 每秒写入的字节数
BytesPerSecond diskio/total_bytes_filesystem 每秒读取或写入的字节数
ReadsPerSecond diskio/reads_filesystem 每秒读取操作数
WritesPerSecond diskio/writes_filesystem 每秒写入操作数
TransfersPerSecond diskio/total_transfers_filesystem 每秒读取或写入操作数

磁盘类的内置指标

磁盘类指标提供有关磁盘设备使用情况的信息。 这些统计信息适用于整个驱动器。

如果设备上有多个文件系统,则针对该设备的计数器会有效地跨所有文件系统聚合。

计数器 azure.vm.linux.guestmetrics 显示名称 含义
ReadsPerSecond diskio/reads 每秒读取操作数
WritesPerSecond diskio/writes 每秒写入操作数
TransfersPerSecond diskio/total_transfers 每秒总操作数
AverageReadTime diskio/read_time 每个读取操作的平均秒数
AverageWriteTime diskio/write_time 每个写入操作的平均秒数
AverageTransferTime diskio/io_time 每个操作的平均秒数
AverageDiskQueueLength diskio/iops_in_progress 队列中磁盘操作的平均数
ReadBytesPerSecond diskio/read_bytes 每秒读取的字节数
WriteBytesPerSecond diskio/write_bytes 每秒写入的字节数
BytesPerSecond diskio/total_bytes 每秒读取或写入的字节数

LAD 4.0 配置示例

根据前述定义,此部分提供了一个 LAD 4.0 扩展配置示例和一些说明。 要将此示例应用于具体情况,请使用自己的存储帐户名称、帐户 SAS 令牌和事件中心 SAS 令牌。

备注

提供公共和受保护设置的方法会有所不同,具体取决于是否使用 Azure CLI 或 PowerShell 安装 LAD:

  • 如果使用 Azure CLI,请将以下设置保存到 ProtectedSettings.json 和 PublicSettings.json,以使用上面的示例命令 。
  • 如果使用 PowerShell,请通过运行 $protectedSettings = '{ ... }' 将以下设置保存到 $protectedSettings$publicSettings

受保护的设置

受保护的设置配置:

  • 存储帐户。
  • 存储帐户终结点。
  • 匹配的帐户 SAS 令牌。
  • 几个接收器(带有 SAS 令牌的 JsonBlobEventHub)。
{
  "storageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "storageAccountName": "yourdiagstgacct",
  "storageAccountSasToken": "sv=xxxx-xx-xx&ss=bt&srt=co&sp=wlacu&st=yyyy-yy-yyT21%3A22%3A00Z&se=zzzz-zz-zzT21%3A22%3A00Z&sig=fake_signature",
  "sinksConfig": {
    "sink": [
      {
        "name": "SyslogJsonBlob",
        "type": "JsonBlob"
      },
      {
        "name": "FilelogJsonBlob",
        "type": "JsonBlob"
      },
      {
        "name": "LinuxCpuJsonBlob",
        "type": "JsonBlob"
      },
      {
        "name": "MyJsonMetricsBlob",
        "type": "JsonBlob"
      },
      {
        "name": "LinuxCpuEventHub",
        "type": "EventHub",
        "sasURL": "https://youreventhubnamespace.servicebus.chinacloudapi.cn/youreventhubpublisher?sr=https%3a%2f%2fyoureventhubnamespace.servicebus.chinacloudapi.cn%2fyoureventhubpublisher%2f&sig=fake_signature&se=1808096361&skn=yourehpolicy"
      },
      {
        "name": "MyMetricEventHub",
        "type": "EventHub",
        "sasURL": "https://youreventhubnamespace.servicebus.chinacloudapi.cn/youreventhubpublisher?sr=https%3a%2f%2fyoureventhubnamespace.servicebus.chinacloudapi.cn%2fyoureventhubpublisher%2f&sig=yourehpolicy&skn=yourehpolicy"
      },
      {
        "name": "LoggingEventHub",
        "type": "EventHub",
        "sasURL": "https://youreventhubnamespace.servicebus.chinacloudapi.cn/youreventhubpublisher?sr=https%3a%2f%2fyoureventhubnamespace.servicebus.chinacloudapi.cn%2fyoureventhubpublisher%2f&sig=yourehpolicy&se=1808096361&skn=yourehpolicy"
      }
    ]
  }
}

公用设置

公用设置会使 LAD 执行以下操作:

  • 将 percent-processor-time 和 used-disk-space 上传到 WADMetrics* 表,
  • 将 syslog 辅助参数 "info" 和严重性 LinuxSyslog* 之下的消息上传到 "user" 表。
  • 将文件 /var/log/myladtestlog 中的追加行上传到 MyLadTestLog 表。

无论如何,数据都还会上传到以下位置:

  • Azure Blob 存储。 容器名称在接收器 JsonBlob 中定义。
  • 事件中心终结点,在 EventHub 接收器中指定。
{
  "StorageAccount": "yourdiagstgacct",
  "ladCfg": {
    "sampleRateInSeconds": 15,
    "diagnosticMonitorConfiguration": {
      "performanceCounters": {
        "sinks": "MyMetricEventHub,MyJsonMetricsBlob",
        "performanceCounterConfiguration": [
          {
            "unit": "Percent",
            "type": "builtin",
            "counter": "PercentProcessorTime",
            "counterSpecifier": "/builtin/Processor/PercentProcessorTime",
            "annotation": [
              {
                "locale": "en-us",
                "displayName": "Aggregate CPU %utilization"
              }
            ],
            "condition": "IsAggregate=TRUE",
            "class": "Processor"
          },
          {
            "unit": "Bytes",
            "type": "builtin",
            "counter": "UsedSpace",
            "counterSpecifier": "/builtin/FileSystem/UsedSpace",
            "annotation": [
              {
                "locale": "en-us",
                "displayName": "Used disk space on /"
              }
            ],
            "condition": "Name=\"/\"",
            "class": "Filesystem"
          }
        ]
      },
      "metrics": {
        "metricAggregation": [
          {
            "scheduledTransferPeriod": "PT1H"
          },
          {
            "scheduledTransferPeriod": "PT1M"
          }
        ],
        "resourceId": "/subscriptions/your_azure_subscription_id/resourceGroups/your_resource_group_name/providers/Microsoft.Compute/virtualMachines/your_vm_name"
      },
      "eventVolume": "Large",
      "syslogEvents": {
        "sinks": "SyslogJsonBlob,LoggingEventHub",
        "syslogEventConfiguration": {
          "LOG_USER": "LOG_INFO"
        }
      }
    }
  },
  "sinksConfig": {
    "sink": [
      {
        "name": "AzMonSink",
        "type": "AzMonSink",
        "AzureMonitor": {}
      }
    ]
  },
  "fileLogs": [
    {
      "file": "/var/log/myladtestlog",
      "table": "MyLadTestLog",
      "sinks": "FilelogJsonBlob,LoggingEventHub"
    }
  ]
}

配置中的 resourceId 必须与 VM 或虚拟机规模集中的相匹配。

  • Azure 平台指标绘图和警报了解你所用 VM 的 resourceId。 它会预期能够使用 resourceId 查找关键字找到该 VM 的数据。
  • 如果使用 Azure 自动缩放,则自动缩放配置中的 resourceId 必须与 LAD 使用的 resourceId 相匹配。
  • LAD 所编写的 JSON blob 名称包含 resourceId

查看数据

使用 Azure 门户查看性能数据或设置警报:

屏幕截图显示 Azure 门户。选择了已用磁盘空间指标。显示生成的图表。

performanceCounters 数据始终存储在 Azure 存储表中。 Azure 存储 API 适用于多种语言和平台。

发送到 JsonBlob 接收器的数据存储在受保护的设置中指定的存储帐户中的 blob 内。 可使用任意 Azure Blob 存储 API 使用这些 blob 数据。

还可使用这些 UI 工具访问 Azure 存储中的数据:

Azure 存储资源管理器会话的以下快照显示了测试 VM 上正确配置的 LAD 4.0 扩展生成的 Azure 存储表和容器。 此图与示例 LAD 4.0 配置不完全匹配。

显示 Azure 存储资源管理器。

有关如何使用发布到事件中心终结点的消息的详细信息,请参阅相关事件中心文档

后续步骤