使用 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、文件等。
相关推荐
IT_陈寒13 分钟前
Vite的HMR怎么突然罢工了?原来是我漏了这个配置
前端·人工智能·后端
BingoGo22 分钟前
一个ChatGPT 超级省额度方案!用 TaskQuay 连接网页 ChatGPT 和本地 Codex
人工智能·后端
QQ_216962909628 分钟前
基于微服务架构的店铺管理系统的设计与实现
大数据·spring boot·后端·spring·微服务·小程序·架构
芒鸽40 分钟前
把 Agent 运行时做成插件系统:agent-harness(openJiuwen Rust版) 的实践
开发语言·后端·rust
CHHH_HHH1 小时前
【Linux系统篇】进程间通信揭秘:从管道到共享内存
linux·服务器·c语言·开发语言·后端·ubuntu
写后端的胖头鱼1 小时前
【高频面试题】面试题里常出现的Bitmap是什么(附源码和多种场景)
java·开发语言·面试·位图·bitmap
mldong1 小时前
Node 开发者也有自己的轻量工作流引擎了:npm i 一行,5 分钟跑通一条审批流
javascript·后端·typescript
考虑考虑9 小时前
cmd局部设置java变量
运维·后端·自动化运维
wangruofeng9 小时前
一个 Markdown 文件攒下 37k 星,i-have-adhd 给 AI 输出立了 10 条规矩
github·aigc·ai编程
怕浪猫10 小时前
长会话不崩盘:DeepSeek Harness 的上下文压缩与目标管理策略
面试·github·agent