Appearance
如何使用 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-identity2. 配置必要参数
在 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。
你可能还需要
暂无推荐