如何使用Logtail将FastAPI日志上传至阿里云SLS

开发工具 潘老师 2周前 (04-10) 12 ℃ (0) 扫码查看

开发FastAPI应用可以借助阿里云的Logtail和日志服务(SLS),实现高效的日志收集与存储。下面就为大家详细介绍如何使用Logtail将FastAPI应用的日志上传到阿里云SLS。

一、安装Logtail

(一)安装依赖

在安装Logtail之前,要确保服务器上安装了curl工具。因为Logtail的自动诊断工具需要它来获取相关信息。

(二)下载Logtail安装包

从阿里云文档中找到Logtail的安装包下载路径,按照文档里的指引进行下载。

(三)安装Logtail(以Linux系统为例)

在Linux系统下,使用以下命令来安装Logtail:

wget http://logtail-release.oss-cn-hangzhou.aliyuncs.com/linux64/logtail.sh
chmod 744 logtail.sh
./logtail.sh install

wget命令用于从指定网址下载logtail.sh脚本文件;chmod 744 logtail.sh赋予该脚本文件一定的执行权限;最后的./logtail.sh install则是执行安装操作。

二、配置阿里云SLS

(一)创建SLS Project和Logstore

登录阿里云控制台,找到SLS控制台入口。在SLS控制台里创建一个新的Project和Logstore。Project就像是一个大仓库,Logstore则是仓库里的一个个小隔间,用来存放不同类型的日志数据。

(二)获取AccessKey ID和AccessKey Secret

创建一个RAM用户,并给这个用户授予对刚才创建的Project和Logstore的写入权限。之后,就能获取到AccessKey ID和AccessKey Secret。

三、配置Logtail

(一)创建Logtail配置

在SLS控制台中进行Logtail配置的创建。在配置里,要指定日志文件路径、日志格式等参数。比如下面这个示例配置:

{
  "configName": "fastapi-logs",
  "inputType": "file",
  "inputDetail": {
    "logPath": "/path/to/your/fastapi/logs/*.log",
    "logType": "text",
    "filePattern": "regex",
    "logSample": ""
  },
  "outputType": "LogService",
  "outputDetail": {
    "projectName": "your-project-name",
    "logstoreName": "your-logstore-name"
  }
}

configName是配置的名称;inputTypefile表示从文件中采集日志;logPath指定了FastAPI应用日志文件的存放路径,*是通配符,表示匹配该路径下所有的.log文件;logTypetext说明日志是文本类型;filePattern设置为regex,表示按正则表达式匹配文件;outputTypeLogService,表示输出到阿里云的日志服务;projectNamelogstoreName则是之前在SLS控制台创建的Project和Logstore的名称。

(二)应用配置

把创建好的配置应用到相应的机器组中。这样,Logtail就能按照配置去采集日志,并将其发送到SLS中。

四、配置FastAPI日志输出

(一)配置日志输出到文件(使用logging模块)

使用Python的logging模块可以将FastAPI应用的日志输出到文件。示例代码如下:

from fastapi import FastAPI
from logging.handlers import RotatingFileHandler
import logging

app = FastAPI()

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

file_handler = RotatingFileHandler('/path/to/your/fastapi/logs/app.log', maxBytes=1024*1024*10, backupCount=5)
file_handler.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

logger.addHandler(file_handler)

@app.get("/")
def read_root():
    logger.info("访问根路径")
    return {"Hello": "World"}

首先创建了一个FastAPI应用实例app。然后获取一个日志记录器logger,并设置日志级别为INFO,表示只记录INFO级别及以上的日志信息。RotatingFileHandler用于创建一个按文件大小进行滚动记录的文件处理器,当app.log文件大小达到1024*1024*10字节(即10MB)时,会自动备份,最多保留5个备份文件。接着设置日志格式,最后将文件处理器添加到日志记录器中。在read_root函数里,使用logger.info记录访问根路径的日志信息。

(二)使用loguru配置日志

如果更喜欢用loguru来配置日志,可以参考以下代码:

import os
import time
from loguru import logger

log_path = os.path.join(os.getcwd(), 'logs')
if not os.path.exists(log_path):
    os.mkdir(log_path)

log_path_error = os.path.join(log_path, f'{time.strftime("%Y-%m-%d")}_error.log')
logger.add(log_path_error, rotation="12:00", retention="5 days", enqueue=True)

# 在需要的地方使用logger
logger.info("创建用户")

这段代码先确定日志文件的存放路径log_path,如果该路径不存在就创建它。然后定义了错误日志文件的路径log_path_error,使用logger.add方法添加日志记录器,设置日志文件每天12点进行滚动(rotation="12:00"),日志文件保留5天(retention="5 days"),并且使用队列异步写入日志(enqueue=True)。在实际使用中,在需要记录日志的地方,比如“创建用户”这个业务逻辑处,使用logger.info记录相关信息。

五、测试日志上传

(一)生成测试日志

确保FastAPI应用正在运行并生成日志,而且生成的日志文件存放在之前配置Logtail时指定的路径中。

(二)检查SLS日志

登录阿里云SLS控制台,进入之前创建的Logstore,查看是否成功上传了日志。如果能在Logstore里看到日志内容,那就说明整个配置过程是成功的,Logtail顺利地把FastAPI应用的日志“送”到了SLS中。

通过以上这些步骤,你就能成功使用Logtail将FastAPI应用的日志上传到阿里云SLS,实现高效的日志管理啦。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/tool/17134.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】