第 19 章 · 生产部署与监控
本章目标:掌握 HTTP 客户端在生产环境的部署、日志和监控配置。
19.1 结构化日志
python
import logging
import requests
# 配置 requests 日志
logging.basicConfig(level=logging.DEBUG)
http_client_logger = logging.getLogger('httpx' or 'requests')
http_client_logger.setLevel(logging.INFO)
# 启用请求日志
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
resp = requests.get('https://api.example.com/data')
logging.info(f'Request completed: status={resp.status_code}')19.2 httpx 日志配置
python
import httpx
import logging
# 启用 httpx 详细日志
logging.basicConfig(level=logging.DEBUG)
httpx_logger = logging.getLogger('httpx')
httpx_logger.setLevel(logging.INFO)
with httpx.Client() as client:
resp = client.get('https://httpbin.org/get')19.3 性能指标收集
python
import time
import requests
def timed_request(url: str, **kwargs) -> dict:
start = time.perf_counter()
resp = requests.get(url, **kwargs)
elapsed = time.perf_counter() - start
return {
'url': url,
'status': resp.status_code,
'duration_ms': round(elapsed * 1000, 2),
'size_bytes': len(resp.content)
}
# 使用
result = timed_request('https://api.example.com/data')
print(f"耗时: {result['duration_ms']}ms")19.4 健康检查
python
import requests
from typing import Dict, List
def check_endpoints(endpoints: List[str]) -> Dict[str, bool]:
"""检查多个 API 端点的可用性"""
results = {}
for url in endpoints:
try:
resp = requests.head(url, timeout=5)
results[url] = resp.status_code < 500
except requests.exceptions.RequestException:
results[url] = False
return results
# 使用
health = check_endpoints([
'https://api.example.com/health',
'https://db.example.com/status'
])19.5 优雅关闭
python
import signal
import requests
session = requests.Session()
def graceful_shutdown(signum, frame):
print('关闭连接池...')
session.close()
exit(0)
signal.signal(signal.SIGTERM, graceful_shutdown)
signal.signal(signal.SIGINT, graceful_shutdown)
# 正常处理请求
resp = session.get('https://api.example.com/data')19.6 本章小结
- 配置结构化日志便于问题排查;
- 记录请求耗时和响应大小用于性能监控;
- 实现健康检查端点用于服务监控;
- 注册信号处理器确保连接池正确关闭。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. requests 的请求日志由哪个 logger 控制?
2. 优雅关闭 Session 的目的是?
3. 生产环境健康检查应该?
4. 性能监控应记录哪些指标?
🛠️ 动手实践
- 配置 httpx 请求日志,输出每个请求的 URL 和状态码。
- 实现请求计时装饰器,记录 API 调用耗时。
- 编写健康检查函数,定期检查多个端点并报警。
完成练习后,进入下一章:综合实战。