分布式日志收集需统一采集、标准化格式、可靠传输,推荐Filebeat+Kafka+Logstash/Elasticsearch组合;Python日志须注入trace_id/span_id实现链路追踪打通;实时监控聚焦高频错误、慢请求关联异常及业务指标提取;存储采用热/温/冷分层策略并配合采样与过滤控本。
单机日志在微服务或容器化环境中很快会失效——日志散落在不同节点、命名不统一、轮转策略不一致,查问题像大海捞针。核心思路是:统一采集、标准化格式、可靠传输。
推荐用 Filebeat + Kafka + Logstash/Elasticsearch 组合(轻量级且成熟):
app.log),自动识别多行异常栈(需配置 multiline.pattern)service_name、host、trace_id(配合 OpenTelemetry 或自定义上下文注入)、level、timestamp
光有日志不够,得知道这条日志属于哪个请求、经过哪些服务。关键是在 logging 的 LogRecord 中注入追踪上下文。
以 OpenTelemetry Python SDK 为例:
TraceContextTextMapPropagator)logging.Filter,在 filter(record) 中读取当前 span 的 trace_id、span_id,并写入 record.trace_id、record.span_id
%(trace_id)s %(span_id)s %(levelname)s %(message)s
这样一条错误日志就能在 Kibana 里点击 trace_id,跳转到 Jaeger/Zipkin 查完整调用链。
日志不是攒着看的,要变成监控信号。重点盯三类模式:
request_id 关联,筛选 “耗时 >2s 且含 Exception” 的组合"order_created: id=(\w+), amount=(\d+)" → 计算每分钟下单量、平均金额告警建议用 ElastAlert 或 OpenSearch Alerting,避免直接脚本轮询——支持静默期、告警合并、通知渠道(企业微信/钉钉/Webhook)。
全量日志存一年不现实。分层策略更实用:
同时在 Filebeat 或 Logstash 层做采样:对 INFO 级别日志按 10% 采样,ERROR/WARNING 全量保留。用 drop_event_if 过滤无意义日志(如健康检查 ping、静态资源访问)。