使用 Logstash 收集和处理 FastAPI 应用的日志

使用 Logstash 收集和处理 FastAPI 应用的日志

Logstash 是一个强大的数据处理管道,可以从多个来源收集数据,转换数据,并将其发送到存储系统中,如 Elasticsearch。以下是如何使用 Logstash 收集和处理 FastAPI 应用的日志的详细步骤。

什么是 Logstash?

Logstash 是一个开源的数据收集引擎,支持多种类型的输入数据,包括日志文件、系统消息队列、数据库等。它可以对数据进行各种转换和处理,然后将数据发送到各种目标,如 Elasticsearch、Kafka、邮件通知等

步骤 1:安装必要的包

首先,需要安装 python-logstash-async 包来异步发送日志:

csharp 复制代码
bash
pip install python-logstash-async

步骤 2:配置 FastAPI 应用

在你的 FastAPI 应用中,配置日志处理器以将日志发送到 Logstash。

python 复制代码
python
from fastapi import FastAPI, Request
from logstash_async.handler import AsynchronousLogstashHandler
import logging

app = FastAPI()

# 配置日志处理器
host = 'localhost'
port = 6000

logger = logging.getLogger("fastapi_logger")
logger.setLevel(logging.INFO)

async_handler = AsynchronousLogstashHandler(host, port, database_path=None)
logger.addHandler(async_handler)

# 定义一个中间件来捕获请求和响应日志
@app.middleware("http")
async def log_requests(request: Request, call_next):
    logger.info(f"Request: {request.method} {request.url}")
    
    response = await call_next(request)
    
    # 记录响应日志
    logger.info(f"Response: {response.status_code} {response.body}")
    
    return response

@app.get("/")
async def root():
    return {"message": "Hello World"}

步骤 3:配置 Logstash

在 Logstash 配置文件 (logstash.conf) 中,设置输入为 TCP,并指定 JSON 编解码器:

ini 复制代码
text
input {
  tcp {
    port => 6000
    codec => json
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "fastapi_logs"
  }
}

步骤 4:运行 Logstash

启动 Logstash 服务:

复制代码
bash
logstash -f logstash.conf

步骤 5:运行 FastAPI 应用

启动你的 FastAPI 应用:

css 复制代码
bash
uvicorn main:app --reload

访问你的 FastAPI 应用时,响应日志将被发送到 Logstash,并存储在 Elasticsearch 中。通过 Kibana,你可以实时查看和分析这些日志。

优势

使用 python-logstash-async 包可以异步发送日志,这意味着你的应用不会因为日志发送而阻塞,从而提高了性能。同时,Logstash 的灵活配置可以帮助你处理和转换日志数据,以便更好地存储和分析。

示例代码和配置

  • FastAPI 应用配置:上述 Python 代码。
  • Logstash 配置 :上述 logstash.conf 文件内容。
  • 性能指标:异步日志发送可以提高应用性能,减少阻塞时间。

更多案例

  • 多源数据收集:Logstash 可以从多个来源(如日志文件、Redis、Kafka)收集数据。
  • 数据转换和过滤:使用 Logstash 的过滤器插件(如 Grok、JSON)对数据进行解析和转换。
  • 输出到多个目标:Logstash 支持输出到多个目标,如 Elasticsearch、Kafka、文件等。
相关推荐
橙序员小站5 分钟前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德11 分钟前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆2 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好20253 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字3 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常3 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强3 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
over6974 小时前
从 LLM 到全栈 Agent:MCP 协议 × RAG 技术如何重构 AI 的“做事能力”
面试·llm·mcp
小码哥_常4 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌4 小时前
基于注解+拦截器的API动态路由实现方案
java·后端