☰
AI应用日志收集:用ELK+Filebeat搭建轻量级追踪系统日志收集
2026/10/8 2:15:42 网站建设 项目流程

为什么AI应用需要专用日志管道

AI应用(如RAG问答、模型推理服务)与传统Web服务不同,日志中混杂着推理耗时、token消耗、向量检索命中、Prompt内容等关键指标。直接打印到stdout再人工grep,既无法关联多节点,也无法做实时告警。本文带你用Filebeat + Elasticsearch + Kibana搭建一个轻量级日志收集链路,重点解决结构化JSON日志的采集与可视化。

环境准备

假设你已有一台Linux服务器(Ubuntu 20.04+),Docker可用。我们将用Docker Compose启动ELK(Elasticsearch 8.11 + Kibana 8.11),并在宿主机上运行Filebeat采集Python日志。

# docker-compose.yml(简化版) version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0 environment: - discovery.type=single-node - xpack.security.enabled=false ports: ["9200:9200"] kibana: image: docker.elastic.co/kibana/kibana:8.11.0 ports: ["5601:5601"] environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 depends_on: [elasticsearch]

启动后验证:curl localhost:9200应返回集群信息。

第一步:让Python应用输出结构化JSON日志

在AI服务中,我们推荐使用python-json-logger。修改你的日志配置:

import logging from pythonjsonlogger import jsonlogger logger = logging.getLogger("ai_app") handler = logging.StreamHandler() formatter = jsonlogger.JsonFormatter( "%(asctime)s %(levelname)s %(name)s %(message)s %(request_id)s %(model)s %(latency_ms)s %(tokens)s" ) handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.INFO) # 使用示例 logger.info("rag_query", extra={ "request_id": "req_123", "model": "gpt-4o", "latency_ms": 1250, "tokens": 850 })

输出形如:{"asctime":"2025-01-01 12:00:00","levelname":"INFO","message":"rag_query","request_id":"req_123",...}。这样Elasticsearch能自动映射字段类型,便于后续聚合。

第二步:Filebeat采集与解析

Filebeat读取日志文件并发送到ES。创建filebeat.yml:

filebeat.inputs: - type: filestream id: ai-app-logs paths: - /var/log/ai-app/*.log parsers: - ndjson: # 每行一个JSON对象 target: "" output.elasticsearch: hosts: ["localhost:9200"] index: "ai-logs-%{+yyyy.MM.dd}" setup.template.name: "ai-logs" setup.template.pattern: "ai-logs-*"

启动Filebeat(二进制包或Docker均可):filebeat -e -c filebeat.yml。确保日志文件路径存在且应用有写权限。

第三步:在Kibana中验证与可视化

打开http://localhost:5601,进入Management → Index Patterns,创建ai-logs-*索引模式。然后到Discover查看日志:

  • 筛选levelname: ERROR快速定位错误。
  • 用latency_ms > 2000过滤慢请求。

创建可视化面板:

  1. 在Dashboard中新建聚合查询,按model桶聚合,展示各模型平均tokens。
  2. 添加request_id字段的曲线图,观察并发量。

进阶:关联推理链路

若你的AI应用内部有多个步骤(如检索→Prompt→推理),建议在日志中增加trace_id,并提前打印到所有子步骤。Kibana中可以用trace_id做过滤,查看一次完整请求的时间线。

验证效果

写个测试脚本随机产生日志,5分钟后在Kibana中应能看到:

  • 结构化字段(latency_ms等)可点击排序。
  • 搜索message: rag_query能返回所有推理记录。

至此,一套面向AI应用的轻量级日志监控系统已可用。后续可扩展告警(ElastAlert)或与Prometheus集成。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询