CentOS Python应用如何监控
导读:监控目标与分层 建议将监控分为四层: 基础设施层:CPU、内存、磁盘 I/O、网络; 进程与应用层:Python 进程的 RSS、线程数、句柄数、GC、异常与响应时延; 业务与日志层:关键业务指标(QPS、成功率、延迟分位)与错误日志;...
监控目标与分层
- 建议将监控分为四层:
- 基础设施层:CPU、内存、磁盘 I/O、网络;
- 进程与应用层:Python 进程的 RSS、线程数、句柄数、GC、异常与响应时延;
- 业务与日志层:关键业务指标(QPS、成功率、延迟分位)与错误日志;
- 可视化与告警层:时序可视化与阈值/异常告警。
快速落地方案 Prometheus + Grafana
- 在 CentOS 上部署 Prometheus 采集时序数据,使用 Grafana 做可视化与告警面板。
- Python 应用侧用 prometheus_client 暴露指标端点,示例:
- 安装:
pip install prometheus-client - 代码示例:
from prometheus_client import start_http_server, Counter, Histogram, Gauge import time, random # 启动指标服务,端口 8000 start_http_server(8000) REQUEST_DURATION = Histogram('app_request_duration_seconds', 'Request latency', ['method', 'endpoint']) REQUEST_COUNT = Counter('app_requests_total', 'Total requests', ['method', 'endpoint', 'status']) MEM_RSS_GAUGE = Gauge('app_process_rss_bytes', 'Process RSS in bytes') def handle_request(method, endpoint): start = time.time() # 模拟业务 time.sleep(random.uniform(0.01, 0.2)) status = "200" # 记录指标 REQUEST_DURATION.labels(method, endpoint).observe(time.time() - start) REQUEST_COUNT.labels(method, endpoint, status).inc() # 更新RSS(需在目标进程中采集) try: import psutil, os p = psutil.Process(os.getpid()) MEM_RSS_GAUGE.set(p.memory_info().rss) except Exception: pass - Prometheus 抓取配置片段(prometheus.yml):
scrape_configs: - job_name: 'python_app' static_configs: - targets: ['localhost:8000'] - Grafana 导入官方或社区 Python/Flask/Prometheus 仪表盘,配置阈值告警(如 P95 延迟、5xx 比例、进程 RSS 超过阈值)。
- 安装:
系统与应用内监控工具
- 系统资源与命令行工具
- psutil:在应用内采集进程与系统指标(CPU%、内存、磁盘、网络)。
- dstat / nmon:终端实时查看 CPU、内存、磁盘、网络等综合指标。
- glances:跨平台监控,支持终端与 Web 界面,适合临时排查与值守。
- 常用命令:
top/htop、vmstat、free、iostat、ss等用于快速定位瓶颈。
- 性能剖析与热点定位
- py-spy:对运行中的 Python 进程进行低开销采样,生成火焰图/调用栈,便于定位慢函数与线程争用。
- 示例:
py-spy record -o profile.svg --pid < PID>或py-spy top --pid < PID>。
日志与业务指标
- 日志可观测性
- 使用 Python 标准库 logging 输出结构化日志(JSON 便于检索),配合 tail -f 或 grep 实时查看错误:
import logging logging.basicConfig( filename='app.log', level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s %(message)s' ) logging.error("业务异常", extra={ "trace_id": "abc-123"} ) - 实时查看错误:
tail -f app.log | grep "ERROR"。
- 使用 Python 标准库 logging 输出结构化日志(JSON 便于检索),配合 tail -f 或 grep 实时查看错误:
- 业务与探针指标
- 在代码中埋点关键路径的 Counter/Gauge/Histogram(如请求数、错误数、延迟分位、队列长度、缓存命中率)。
- 暴露 /health 与 /metrics 端点:健康检查用于服务发现与就绪探针,/metrics 供 Prometheus 抓取。
告警与可视化最佳实践
- 建议按“主机/容器层—进程层—应用层—业务层”建立指标树,Grafana 面板按层级组织;
- 告警规则聚焦可行动作:
- 基础设施:节点 CPU> 80% 持续5分钟、可用内存< 10%、磁盘使用率> 85%;
- 进程:Python 进程 RSS 持续增长、线程数异常、句柄泄漏;
- 应用:P95/P99 延迟升高、5xx 比例上升、关键依赖超时;
- 运行方式:
- 以 systemd 托管应用与 Prometheus Node Exporter,确保进程崩溃自动拉起;
- 为 py-spy 采集与 Prometheus 抓取配置合适的 scrape_interval(如 15s),避免频繁开销;
- 定期回归火焰图与慢查询,结合错误日志做根因分析。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Python应用如何监控
本文地址: https://pptw.com/jishu/756543.html
