1.8 KiB
1.8 KiB
1. /healthz接口
现在的健康检查(nc -z localhost 6060/8000)只能证明端口开着,测不出"连接池耗尽、死锁"这种进程还活着但已经不干活的情况。
要求:GET /healthz,不需要鉴权,正常200/异常503,body统一格式:
{"status": "ok", "checks": {"mysql": "ok", "redis": "ok", "kafka": "ok"}}
异常时把出问题的依赖写清楚原因,其他正常的照样标ok:
{"status": "error", "checks": {"mysql": "ok", "kafka": "timeout: dial tcp kafka:9092: i/o timeout"}}
各服务测什么:
- im-server:MySQL(唯一确认在用的外部依赖)。Redis代码里还没真正接入,先不用测
- im-manager:MySQL、Redis(
REDIS_DB=2在用)、Kafka(崩溃日志能看到它真的在跑queue consumer,是真实依赖)
检测建议用真实操作确认能用(MySQL SELECT 1/Ping(),Redis PING,Kafka查broker元数据),不要只判断连接对象是不是nil。
顺手把两个服务Dockerfile里的HEALTHCHECK换成打这个接口,deploy.sh的探测逻辑也建议一起换。
2. /metrics业务指标接口(不急,可以往后放)
im-server加GET /metrics,标准Prometheus文本格式,Go生态直接用官方库prometheus/client_golang/promhttp,几行代码接完。
按价值排序,可以只做第一个:
| 指标 | 类型 | 说明 |
|---|---|---|
ws_connections_active |
Gauge | 当前WS连接数,优先级最高——直接对应之前"WS总掉线"那次排查,有曲线就不用再靠人工连测 |
http_requests_total{method,path,status} |
Counter | 按路径/状态码分的请求量,看5xx占比 |
http_request_duration_seconds |
Histogram | 接口延迟分布 |
db_query_duration_seconds |
Histogram | 数据库查询延迟 |