Python后端学习系列(7):日志记录与监控(使用logging、Prometheus等)

Python日志记录和监控:日志管理、性能监控和其他系统活动的最佳实践总结 在软件开发和系统管理中,日志记录和监控是至关重要的方面。良好的日志管理可以帮助开发者理解应用程序的运行状况,定位问题,而性能监控和系统活动监控可以确保应用程序以及底层系统的正常运行。本文将深入探讨Python中的日志记录和监控的最佳实践,以帮助开发者和系统管理员更好地理解、配置和利用这些工具。 阅读详情

Python后端学习系列(7):日志记录与监控(使用logging、Prometheus等)

前言

在Python后端开发中,随着应用的日益复杂以及运行环境的多变,日志记录与系统监控变得至关重要。它们就像是后端应用的“眼睛”和“体检报告”,能够帮助我们了解应用的运行状态、及时发现问题并进行优化。本期我们将重点探讨如何使用Python的logging模块进行日志记录,以及借助Prometheus实现系统监控,一起来学习吧。

一、日志记录的重要性与基本规范

1. 重要性

  • 问题排查:当应用出现错误或者异常行为时,详细准确的日志可以帮助我们回溯操作流程、查看具体的参数值等,快速定位问题所在,比如是哪个函数引发了数据库连接错误,当时传入的参数是什么情况。
  • 性能分析:通过记录关键操作的耗时等信息,我们可以分析出应用的性能瓶颈点,以便针对性地进行优化,例如了解某个接口响应时间过长的原因。
  • 运行状态跟踪:能实时掌握应用的运行情况,知晓哪些功能被频繁调用、哪些模块运行正常等,方便对整个系统有清晰的把控。

2. 基本规范

  • 日志级别清晰:常见的日志级别有DEBUG(用于调试信息,最详细)、INFO(一般性的信息,表明程序正常运行的关键步骤等)、WARN(警告信息,提示可能存在问题但不影响当前主要功能)、ERROR(出现错误,影响了部分功能)、CRITICAL(严重错误,可能导致系统无法正常运行)。合理设置不同级别日志的输出,避免日志过多或者关键信息遗漏。
  • 内容准确有意义:日志内容应包含足够的关键信息,如时间、模块名称、具体操作内容、相关参数值等,方便后续查看和分析,例如“[2025-03-20 10:00:00][user_service.py] [INFO] User with ID 100 logged in successfully”。
  • 格式统一:保持整个应用日志格式的一致性,便于阅读和使用日志分析工具进行处理。

二、Python中logging模块的使用方法

1. 基本配置

import logging

logging.basicConfig(
    level=logging.INFO,  # 设置日志级别为INFO,即INFO及以上级别日志会被输出
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',  # 定义日志格式
    handlers=[
        logging.StreamHandler()  # 输出到控制台,也可以配置文件处理器等输出到文件
    ]
)

通过上述代码,我们完成了logging模块的基本配置,确定了日志级别、格式以及输出的位置(这里是控制台)。

2. 记录不同级别日志示例

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

运行这段代码,由于我们前面配置的日志级别是INFO,所以只会输出INFO、WARN、ERROR、CRITICAL这几个级别的日志到控制台。

3. 在模块中使用

假设我们有一个user_service.py模块,代码如下:

import logging

logger = logging.getLogger(__name__)  # 获取当前模块对应的logger对象

def register_user(username, password):
    logger.info(f"Attempting to register user: {username}")
    try:
        # 模拟注册用户的操作,这里假设可能出现异常
        if len(password) < 6:
            raise ValueError("Password too short")
        # 实际注册逻辑省略
        logger.info(f"User {username} registered successfully")
    except Exception as e:
        logger.error(f"Error registering user {username}: {str(e)}", exc_info=True)  # 记录详细异常信息

在其他地方调用这个模块的函数时,相应的日志就会按照配置进行输出,方便跟踪user_service模块的运行情况。

三、如何利用Prometheus进行系统监控

1. Prometheus简介

Prometheus是一款开源的系统监控和告警工具套件,它通过定时从应用中拉取指标数据(也支持应用主动推送),然后可以对这些数据进行存储、查询、可视化展示以及基于规则设置告警等操作,能很好地监控Python后端应用以及整个系统的各项关键指标。

2. 安装与配置(以Linux系统为例)

  • 下载安装包:
wget https://github.com/prometheus/prometheus/releases/download/vX.Y.Z/prometheus-X.Y.Z.linux-amd64.tar.gz  # 替换X.Y.Z为实际版本号
  • 解压安装包:
tar xvf prometheus-X.Y.Z.linux-amd64.tar.gz
cd prometheus-X.Y.Z.linux-amd64
  • 配置文件修改:主要编辑prometheus.yml配置文件,指定要监控的目标、抓取数据的时间间隔等,示例配置如下:
global:
  scrape_interval: 15s  # 每15秒抓取一次指标数据

scrape_configs:
  - job_name: 'python_backend'
    static_configs:
      - targets: ['localhost:8000']  # 假设Python后端应用运行在本地8000端口,这里填写对应的IP和端口
  • 启动Prometheus:
./prometheus --config.file=prometheus.yml

3. 在Python应用中暴露指标

可以使用prometheus_client库来在Python应用中定义和暴露指标,示例如下:

from prometheus_client import start_http_server, Counter, Gauge
import time

# 定义一个计数器指标,用于记录请求次数
REQUEST_COUNT = Counter('http_requests_total', 'Total number of HTTP requests')

# 定义一个 gauge 指标,用于记录当前内存使用情况(这里是模拟示例,实际需结合相应库获取真实内存数据)
MEMORY_USAGE = Gauge('memory_usage_bytes', 'Current memory usage in bytes')

def handle_request():
    REQUEST_COUNT.inc()  # 每次请求时计数器加1
    # 模拟获取内存使用情况并更新 gauge 指标值(实际应用中替换为真实获取内存的逻辑)
    MEMORY_USAGE.set(1024 * 1024)  # 假设当前内存使用1MB
    time.sleep(1)

if __name__ == "__main__":
    start_http_server(8001)  # 在8001端口暴露指标,供Prometheus抓取
    while True:
        handle_request()

通过上述代码,Python后端应用就可以将定义好的指标数据暴露出来,供Prometheus定时抓取并进行后续的监控分析了。

四、基于日志和监控数据的问题排查与优化

1. 问题排查

  • 结合日志和监控数据定位问题:当出现性能问题或者功能异常时,首先查看监控数据中各项指标的变化趋势,比如是否某段时间请求量暴增、内存使用率过高,再结合对应时间段的日志信息,查找具体是哪个模块、哪个操作引发的异常,例如从日志中看到某个接口频繁报错,结合监控的请求量可以判断是否是该接口负载过大导致。
  • 深入分析日志详情:对于关键的ERROR、CRITICAL级别日志,仔细查看其中的参数值、异常堆栈信息等,利用日志记录的详细情况还原当时的操作场景,逐步排查问题根源,比如是数据库连接参数配置错误还是业务逻辑处理不当等原因。

2. 优化

  • 性能优化依据:通过监控数据中接口响应时间、资源使用率等指标,确定性能瓶颈所在,比如发现某个数据库查询操作耗时过长,就可以针对性地优化查询语句、添加索引或者考虑缓存策略等优化措施。
  • 功能优化调整:依据日志中记录的用户操作行为、功能使用频率等信息,对应用的功能进行优化,例如发现某个很少使用的功能模块却占用较多资源,可以考虑简化或者移除该模块;或者根据用户频繁访问的功能路径,优化相应的业务逻辑和页面展示等。

学习资源推荐

  1. 官方文档:
    • Python logging模块官方文档,全面且深入地介绍了logging模块的各种功能、配置方法以及高级用法,是掌握日志记录的权威资料。
    • Prometheus官方文档,涵盖了Prometheus从安装、配置到指标定义、查询以及告警等各方面的详细内容,对于深入学习系统监控必不可少。
  2. 在线课程:

下期预告

《Python后端学习系列(8):部署与自动化运维(使用Docker、Kubernetes等)》

  • Docker容器技术的基本原理与应用
  • 使用Docker打包和部署Python后端应用
  • Kubernetes的架构与核心概念
  • 基于Kubernetes实现Python后端应用的自动化运维

欢迎在评论区留下你的问题或学习心得,我们下期见!

Python实现日志监控程序 最后,我们启动Observer对象的监控循环,循环检测文件系统的变化,并在文件被修改时调用LogMonitor类的相应方法。在该方法中,我们打开日志文件,并逐行遍历文件内容。在上面的代码中,我们定义了一个LogMonitor类,它继承自watchdog库中的FileSystemEventHandler类。接下来,我们将创建一个名为LogMonitor的Python类,该类将负责监控日志文件的变化,并触发关键字匹配时的警报通知。这样,你就可以实时监控日志文件,并在关键字匹配时接收警报通知。 阅读详情

相关推荐

在FastAPI中实现请求日志记录和监控

在开发API时,请求日志记录和监控是非常重要的功能,它们可以帮助我们追踪请求的执行情况、排查问题以及监控性能。在开发API时,请求日志记录和监控是非常重要的功能,它们可以帮助我们追踪请求的执行情况、排查问题以及监控性能。我们将在FastAPI应用中添加一个中间件,该中间件将在每个请求处理之前和之后记录请求的详细信息。我们将在FastAPI应用中添加一个中间件,该中间件将在每个请求处理之前和之后记录请求的详细信息。在上述代码中,我们创建了一个名为"uvicorn"的日志记录器,并将其日志级别设置为INFO。

UkyzJava的博客 1316

Python 实现日志监控

日志监控,是一种外挂式的采集。通过读取进程打印的日志,来进行监控数据的采集与汇聚计算。汇聚成标准的时间序列数据之后,推送给统一的后端存储。日志监控是一种典型的应用、业务监控的手段,如果我们没法在应用程序里内嵌SDK埋点,使用日志监控不失为一种折中方案。 这么说好像还不太明白日志监控到底能够做什么,简单点就是说就是对程序的日志内容进行过滤,如果出现了我们设定的关键字,对其进行计数当达到一定数量时可以触发报警。 下面来看一下需要哪些步骤: 1、不断的监听日志文件,获取最新的日志内容 2、正则功能对日志内容.

Valiant 的博客 8663

Python 实时日志监控

NULL 博文链接:https://xielioo.iteye.com/blog/2287801

Python实现日志文件监控并进行钉钉告警

通过Python实现日志文件监控

gcs12345的博客 1177

Python-基于python实现的linux后台日志监控小项目

基于python实现的linux后台日志监控小项目

Python pyinotify日志监控系统处理日志的方法

前言 最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyinotify模块监控日志文件夹,当日志到来的情况下,触发相应的函数进行处理,处理完毕后删除日志文件的过程,下面就着重介绍下pyinotify pyinotify Pyinotify是一个Python模块,用来监测文件系统的变化。 Pyinotify依赖于Linux内核的功能—inotify(内核2.6.13合并)。 inotify的是一个事件驱动的通知器,其通知接口通过三个系统调用从内核空间到用户空间。pyinotify结合这些系统调用,并提供一个顶级的抽

python监控程序编写_使用Python编写Prometheus监控的方法

要使用python编写Prometheus监控,需要你先开启Prometheus集群。可以参考//www.ddpool.cn/article/148895.htm 安装。在python中实现服务器端。在Prometheus中配置请求网址,Prometheus会定期向该网址发起申请获取你想要返回的数据。使用Python和Flask编写Prometheus监控Installatio...

weixin_39533361的博客 561

ANSYS ICEM CFD 2023R2 结构化网格实战:翼型绕流 10 步生成高质量六面体网格

在计算流体力学(CFD)分析中,网格质量直接决定了仿真结果的精度和收敛性。对于翼型绕流这类典型的外部流动问题,结构化网格因其规则的节点排列和优异的边界层捕捉能力,成为高精度模拟的首选方案。通过在后缘处添加局部H型拓扑,并将过渡区增长率降至1.1,最终使网格质量指标提升40%,计算收敛速度提高2倍。这印证了结构化网格在复杂流动模拟中的不可替代性——虽然初期投入时间较多,但能显著提升计算精度和稳定性。在开始网格划分前,合理的几何准备是确保后续流程顺利的关键。对于翼型绕流,O型网格拓扑能提供最佳的边界层适应性。

weixin_30731305的博客 362

Python Web日志管理与监控实践指南

🎯 日志记录与配置🔄 日志文件轮转📊 集中化日志管理🚨 监控与报警Python标准库自带的模块是实现日志记录的核心工具。通过灵活的配置,可以记录不同级别的信息到多个输出目标,如控制台或文件。 在该示例中,通过方法创建了一个名为的日志记录器,并将日志级别设置为。通过将日志输出至控制台,并通过定义了日志的输出格式。随后使用不同级别的日志记录了不同类型的信息。Flask和Django作为常见的Python Web框架,内置了对模块的支持,可以通过配置文件或代码实现日志记录。Flask本身会默认输出请求相关

switch616的博客 2427

核回归(Kernel Regression)

本文讲解了核函数,并且实战通过核函数进行了预测,并附python代码

a2333333_的博客 6955

【读论文】AI陪伴场景长期记忆(用户画像)解决方案

在长程人机交互中,如何让 AI 记住用户,不再是简单的“检索增强(RAG)”就能解决的问题。传统的向量数据库面临“信息信噪比低”、“人格不一致”以及“随着对话无限增长而崩塌”的困境。MemTensor 团队联合人大提出的Inside Out框架,从认知心理学汲取灵感,提出了一种基于PersonaTree(人格树)的显式记忆进化机制。该方案通过训练一个轻量级的(使用 DeepSeek-R1 蒸馏数据 + GRPO 强化学习),实现了将非结构化对话流实时压缩为结构化树操作(新增|更新|删除)。

kakaZhui的博客 818

Python 自动化运维:日志与监控的深度探索

通过Python可以构建灵活的事件驱动监控与报警系统,结合已有的监控工具,可以实现更高效的运维管理。分析趋势、识别模式、发现异常,都可以从日志数据中获取丰富的信息,助力系统的稳定与高效运维。结合事件驱动的逻辑,可以根据不同的事件类型触发不同的报警策略,提高系统的反应能力。模块,不仅可以实现简单的日志记录,还能通过灵活的配置管理复杂的日志输出需求。通过构建事件驱动监控与报警系统,能够实现实时的事件处理与响应,从而提升运维管理的智能化程度,确保系统的高可用性。例如,将日志输出到文件中,可以使用。

switch616的博客 1593

SAP WMS开发实战:用BAPI_L_TO_CREATE_MULTIPLE搞定LT01转储单(附完整代码)

本文详细解析了SAP WMS开发中如何利用BAPI_L_TO_CREATE_MULTIPLE函数模块批量创建LT01转储单。文章深入剖析了核心参数、常见错误及实战代码框架,重点强调了源/目标存储类型等关键字段的获取方法,为系统集成与自动化流程开发提供了可靠的解决方案。

view3的博客 561

AnimeGANv2部署监控:日志记录与性能指标追踪

本文介绍了基于星图GPU平台自动化部署AI二次元转换器 - AnimeGANv2镜像的完整方案,结合日志记录与性能监控实现服务可观测性。该镜像可广泛应用于图像风格迁移、头像动漫化等场景,助力开发者高效构建稳定的AI图像处理应用。

weixin_31749299的博客 414

经纬度转换为UTM坐标

UTM(通用横向墨卡托投影): 是一种以米为单位的坐标系统,用于地图和GPS导航。将地球划分为60个纵向的区域。每个区域宽6度,从赤道开始往南北两级方向划分。每个区域都有一个特定的字母。

weixin_45626706的博客 7275

Unity之Timeline教程

Unity Timeline是Unity的一种时间轴编辑器工具,用于制作和管理游戏中的动画、剧情以及事件触发。它提供了直观的界面,使得开发者可以通过拖放操作轻松创建和编辑时间轴。Activation Track:用于控制物体的激活状态。可以在轨道上添加关键帧,控制物体的激活和非激活状态。Animation Track:用于处理物体的动画。可以在此轨道上添加关键帧,编辑物体的动画状态。Audio Track:用于处理场景中的音频。可以管理音频的播放、暂停、淡入淡出等操作。

TxNet 9442

HY-World 2.0实际应用案例:从建筑可视化到游戏开发的10个创新场景

HY-World 2.0是一款功能强大的3D内容生成与处理工具,能够帮助开发者和创作者轻松实现从2D图像到3D模型的转换,广泛应用于建筑、游戏、影视等多个领域。本文将介绍10个HY-World 2.0的创新应用场景,展示其在不同行业中的实际价值。 ## 1. 建筑可视化:快速创建建筑3D模型 在建筑设计领域,HY-World 2.0可以将建筑设计图或照片转换为高精度的3D模型,帮助设计师和客户

gitblog_00785的博客 398

全新YOLOv11一文弄懂 | YOLOv11网络结构解读 、yolov11.yaml配置文件详细解读与说明、模型训练参数详细解析 | 通俗易懂!入门必看系列!

本文全面介绍了YOLOv11目标检测算法,包含网络结构解析、yaml配置文件详解及训练教程。YOLOv11通过改进的C3k2f模块、SPPF和C2PSA注意力机制等创新设计,在COCO数据集上实现了比YOLOv8更优的性能。文章详细解读了yolov11.yaml配置文件的参数设置、主干网络(backbone)和头部网络(head)结构,并提供了完整的训练代码示例和参数说明。训练部分涵盖了模型选择、参数设置及优化技巧,包括epochs、batch size、学习率等关键参数的调整建议。最后总结了YOLOv11

Ai缝合怪、助力小伙伴高效发论文 3万+

Python 在容器监控中的最佳实践

Python 在容器监控中的应用展示了其灵活性和强大的功能。无论是通过 Prometheus 收集指标,还是通过 logging 模块记录日志,Python 都能提供高效且可扩展的解决方案。结合自动化监控和告警机制,Python 可以帮助企业构建更加健壮和可靠的容器监控系统。总之,Python 不仅是一种编程语言,更是一种解决问题的强大工具。在容器监控领域,合理利用 Python 的特性和工具,可以极大地提升监控效率和效果。```

2501_91140875的博客 342

《AgentScope-Java 深入浅出教程》第2章 环境搭建与第一个智能体

创建// 【导入说明】/*** 时间相关工具类* 工具类是普通的 Java 类,通过注解声明为工具。* 智能体可以根据用户需求自动调用这些工具。*/// 【工具定义】获取当前时间@Tool(name = "get_current_time", // 工具名称:LLM 看到的名称description = "获取指定时区的当前时间" // 工具描述:帮助 LLM 理解何时使用// 【参数定义】// @ToolParam 的 name 属性是必需的!

步子哥的博客 417

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LiteLLM 回调系统实战:从零到一完成 LLM 调用日志与监控接入

LLM 调用一旦跨多家厂商,成本异常难发现、排障靠翻日志。LiteLLM 的回调系统(callbacks)在请求发出、成功、失败、流式返回等节点设钩,让你不改业务代码就能上报日志、发告警、采指标。 ## 它解决了什么问题 想象一个 AI 网关:入口统一,后端挂着 OpenAI、Anthropic、Bedrock 等多家模型。请求返回后,日志记到哪?预算超了谁通知?耗时归谁统计? 回调系统就嵌

gitblog_00582的博客 780

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

QuantDinger 可观测性指南:Prometheus 指标、请求关联与 JSON 日志实战

本文基于 QuantDinger 开源仓库中的可观测性部署文档([docs/deployment/OBSERVABILITY_CN.md](https://link.gitcode.com/i/f0e48f2580bb25a03d88b128a114480b))展开,系统讲解后端如何在 `GET /metrics` 暴露 Prometheus 指标、如何通过 `X-Request-ID` 头做请求

gitblog_00580的博客 678

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python代码检测与监控实战:从静态分析到生产环境可观测性

代码检测与监控是现代软件工程保障应用质量的核心实践。其原理是通过静态分析工具在开发阶段检查代码语法、风格与潜在缺陷,再结合动态分析在运行时洞察性能瓶颈与资源使用。这套体系的技术价值在于能系统性提升代码健壮性、可维护性,并预防线上故障。在Python开发中,典型的应用场景包括使用Flake8、Pylint进行代码规范检查,利用Mypy进行类型安全增强,并通过cProfile、memory_profiler进行性能与内存分析。本文聚焦于如何将**代码检测**与**监控**体系化,构建从本地开发到生产部署的全链路

weixin_30800807的博客 359

billion-context 上下文压缩代理:计费 token 降 31–54%,100K 窗口跑月级会话

先给结论:billion-context 是一个架在编码 agent 与模型 API 之间的上下文压缩代理,受控实验里比全量保留基线少计 31–54% 的计费 token,且召回探针得分持平(出处:[paper/](https://link.gitcode.com/i/b87f21b06b70dbbf696022514bac043a) §8.1 表 3)。它不训练模型、不搬外部记忆库,做法是把 `

gitblog_00426的博客 202
上一篇: Python后端学习系列(6):异步编程与并发处理(使用asyncio、Tornado等)
下一篇: Python后端学习系列(8):部署与自动化运维(使用Docker、Kubernetes等)
DoYangTan
博客等级 码龄5年 1946粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值