You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Data Collector API将自定义日志推送至Log Analytics Workspace内置表?

能否通过Data Collector API将自定义日志推送至Log Analytics内置表(如AzureDiagnostics)?

可以的,通过Data Collector API确实能将自定义日志发送到Log Analytics的内置表(比如AzureDiagnostics),但需要严格遵循内置表的Schema要求,同时在请求中指定正确的目标表名。

具体操作步骤

1. 确认目标内置表的Schema

首先要明确目标表(如AzureDiagnostics)的必填字段和数据格式。以AzureDiagnostics为例,核心必填字段包括:

  • TimeGenerated:日志生成时间,必须为ISO 8601格式(例如2024-05-20T12:34:56Z)
  • ResourceId:关联的Azure资源ID(无实际资源时,可构造符合格式的字符串,比如/subscriptions/{subscription-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/virtualMachines/{vm-name})
  • Category:日志类别,可自定义但需符合表的字段规则
  • OperationName:操作名称,按需填写

你可以在Log Analytics工作区的「表」视图中查看目标内置表的完整Schema,确保推送的日志字段匹配。

2. 构造符合Schema的日志数据

构造JSON格式的日志数据,严格对齐目标表的字段。示例(针对AzureDiagnostics):

[
    {
        "TimeGenerated": "2024-05-20T14:20:00Z",
        "ResourceId": "/subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-rg/providers/Microsoft.Web/sites/my-webapp",
        "Category": "CustomAppLogs",
        "OperationName": "UserLogin",
        "Level": "Information",
        "Message": "User john_doe logged in successfully",
        "CustomField1": "CustomValue1"
    }
]

额外的自定义字段会自动添加到表的Properties字段中,或作为独立列(取决于表的配置)。

3. 调用API时指定目标表名

在API请求的URL和请求头中明确目标内置表名:

  • 请求URL格式:https://<workspace-id>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01
  • 核心请求头:
    • Content-Type: application/json
    • Log-Type: AzureDiagnostics(必须与内置表名完全一致)
    • Authorization: SharedKey <workspace-id>:<shared-key>(用工作区主键/次键生成签名)

4. 生成合法的Authorization签名

签名需使用工作区ID和共享密钥,步骤如下:

  1. 构造字符串:POST\n<content-length>\napplication/json\nx-ms-date:<date>\n/api/logs
  2. 用HMAC-SHA256算法,以共享密钥加密上述字符串,再做Base64编码
  3. 最终Authorization头格式:SharedKey <workspace-id>:<base64-encoded-signature>

5. 发送API请求

用POST方法发送请求,示例curl命令:

curl -X POST \
  https://<workspace-id>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01 \
  -H 'Authorization: SharedKey <workspace-id>:<generated-signature>' \
  -H 'Content-Type: application/json' \
  -H 'Log-Type: AzureDiagnostics' \
  -H 'x-ms-date: <current-date-in-rfc1123-format>' \
  -d '[
    {
        "TimeGenerated": "2024-05-20T14:20:00Z",
        "ResourceId": "/subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-rg/providers/Microsoft.Web/sites/my-webapp",
        "Category": "CustomAppLogs",
        "OperationName": "UserLogin",
        "Level": "Information",
        "Message": "User john_doe logged in successfully"
    }
]'

注意事项

  • 必须严格匹配内置表的必填字段,否则日志会被拒绝或无法正确解析
  • 部分内置表有特殊校验规则,比如ResourceId必须符合Azure资源ID格式,否则无法归类到正确的资源视图
  • 若推送字段与内置表现有字段冲突,可能导致数据解析异常,建议先推送少量测试数据验证

内容的提问来源于stack exchange,提问作者dev333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:35:22