Skip to content

如何使用 Python 将自定义日志上传至 Azure Monitor

解决自定义日志上云问题:通过配置 Azure Monitor Ingestion SDK,实现将 Python 应用产生的非标准日志自动同步到 Azure Log Analytics 工作区,以便进行统一监控和分析。

为什么需要这个技能

在复杂的分布式系统中,标准的应用日志往往不足以满足深度运维需求。当需要将特定业务指标、审计日志或自定义事件实时传输到 Azure Monitor 时,手动通过 API 构建 HTTP 请求过于繁琐且难以处理大规模并发。

本技能通过 azure-monitor-ingestion SDK,简化了身份验证、数据压缩、分片上传等底层逻辑,让开发者能够以简单的 Python 列表形式定义日志,快速实现数据的云端同步。

适用场景

  • 自定义指标监控:将应用运行时的特定业务指标发送至 Log Analytics。
  • 集中式日志分析:将分布在多台服务器上的自定义 .log 文件汇总到云端。
  • 高性能异步采集:在处理高吞吐量日志流时,利用异步客户端降低 I/O 阻塞。
  • 合规性审计:将关键操作记录实时同步至受保护的 Azure 云存储。

核心工作流

1. 环境准备与安装

首先需要安装 SDK 及身份验证库:

bash
pip install azure-monitor-ingestion
pip install azure-identity

2. 配置必要参数

在 Azure 门户中准备好以下资源并配置为环境变量:

  • DCE (Data Collection Endpoint):采集终结点 URL。
  • DCR (Data Collection Rule):定义数据结构和目标的规则 ID。
  • Stream Name:DCR 中定义的流名称(通常格式为 Custom-<TableName>_CL)。

3. 实现日志上传

使用 DefaultAzureCredential 进行无缝鉴权,并调用 upload 方法:

python
from azure.monitor.ingestion import LogsIngestionClient
from azure.identity import DefaultAzureCredential
import os

# 初始化客户端
client = LogsIngestionClient(
    endpoint=os.environ["AZURE_DCE_ENDPOINT"],
    credential=DefaultAzureCredential()
)

# 准备日志数据(必须包含 TimeGenerated 字段)
logs = [
    {"TimeGenerated": "2024-01-15T10:00:00Z", "Computer": "server1", "Message": "Application started"},
    {"TimeGenerated": "2024-01-15T10:01:00Z", "Computer": "server1", "Message": "Processing request"}
]

# 执行上传
client.upload(
    rule_id=os.environ["AZURE_DCR_RULE_ID"], 
    stream_name=os.environ["AZURE_DCR_STREAM_NAME"], 
    logs=logs
)

4. 进阶优化

  • 错误处理:通过 on_error 回调函数捕获部分失败的日志并进行重试。
  • 异步处理:使用 azure.monitor.ingestion.aio 模块实现异步上传,提升吞吐量。
  • 自动分批:SDK 会自动将超过 1MB 的数据进行 gzip 压缩并并行上传,无需手动分片。

下载和安装

下载 azure-monitor-ingestion-py 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md

你可能还需要

暂无推荐