全链路监控的起点是行情数据接口的调用。每次调用都生成一个唯一的trace_id,从请求开始一直传递到前端展示。中间经过API网关、数据清洗、缓存、前端等多个环节。
python
import uuid
trace_id = str(uuid.uuid4())
logger.info(f"trace_id={trace_id} call api start")
resp = requests.get(url)
logger.info(f"trace_id={trace_id} call api end status={resp.status_code}")
【数据API】jkidata.com | 文档中心 docs.jkidata.com
日志采集使用阿里云SLS。每条日志包含trace_id、时间戳、服务名、耗时、状态码。SLS支持全文检索,出问题时根据trace_id可以查到整条链路的日志。
配置了几个核心告警。连续3次调用失败触发P0告警,电话通知。P99延迟超过3秒触发P1告警,钉钉通知。数据新鲜度超过30秒触发P2告警,邮件通知。
python
数据新鲜度检查
now = int(time.time())
data_time = data['data'][0]['time']
if now - data_time > 30:
alert(f"数据新鲜度异常: {now - data_time}秒")
葡萄牙市场的交易时段是北京时间15:00-23:30。告警规则在交易时段才启用,非交易时段屏蔽,避免误报。
日志还用于性能分析。按接口聚合P50、P95、P99延迟,发现PSI-20指数接口的P99延迟比平均值高不少。排查发现是某次成分股调整后数据量变大,优化后恢复正常。
sql
-- SLS查询语句
select
avg(latency) as p50,
approx_percentile(latency, 0.95) as p95,
approx_percentile(latency, 0.99) as p99
from log
where market = 'portugal'
docs.jkidata.com上有SLS日志采集的配置示例,包括日志格式、索引设置、告警规则。
【数据API】jkidata.com | 文档中心 docs.jkidata.com