起容器碰生产 mini-infra 暴露四坑,逐个修:
- 端口:9090 被 mini-infra 自身 mihomo/clash API 占(docker ps 看不到 host 网/宿主进程端口、摸底漏),Prometheus 让到 9091
- Loki+Tempo:配置注释里的 ${MINIO_*} 被 expand-env 连注释严格校验、通配符触发 "missing closing brace",改纯文字(先前误判 Tempo 宽松、其实同款)
- Collector 镜像:daocloud mirror 的 collector-contrib:0.116.0 缺 binary(exec no such file、force 重下同 digest 仍坏);0.114.0 的 redaction 缺 blocked_key_patterns/redact_all_types(脱敏红线);定版 0.155.0(binary 完好+redaction 字段最全)
五件全绿:Collector/Prometheus(9091)/Tempo/Loki/Grafana 全 200,实占约 170MiB(<< 3.4G 上限)。
follow-up:0.155 提示 otlphttp→otlp_http(deprecated warning、不阻塞)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
58 lines
2.2 KiB
Bash
Executable File
58 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# 观测栈健康探针 —— 五件就绪判定(配置控制面阶段四 · 第一波)
|
|
# -----------------------------------------------------------------------------
|
|
# 一次探完 Collector / Prometheus / Tempo / Loki / Grafana 五个对外端点,
|
|
# 全绿(全部 HTTP 200)整体 PASS 退 0;任一非 200 / 超时则 FAIL 退 1。
|
|
#
|
|
# 两处内网纪律(与 nacos/rocketmq 探针一致):
|
|
# - `--noproxy '*'`:本机系统代理是 fake-ip(198.18.x);内网直连(Tailscale 100.64.x)
|
|
# 必须绕过它,否则连接被代理拦下返 000。这是内网外呼铁律。
|
|
# - curl -w 恒输出 http_code(失败为 000);仅在 curl 二进制本身返空时兜底 000,
|
|
# 不用 `|| echo 000`(会与 -w 的 000 叠成 "000000")。
|
|
#
|
|
# 各件探的就绪端点:
|
|
# Collector :13133 / health_check extension(就绪返 200)
|
|
# Prometheus :9091 /-/healthy 自身健康(宿主 9091→容器 9090;9090 被 mihomo/clash 占)
|
|
# Tempo :3200 /ready 就绪(未就绪期返 503,就绪后 200)
|
|
# Loki :3100 /ready 就绪(未就绪期返 503,就绪后 200)
|
|
# Grafana :3002 /api/health 自身健康(DB/插件就绪返 200)
|
|
#
|
|
# 用法:HOST=100.64.0.8 bash deploy/infra/observability/health-check.sh
|
|
# =============================================================================
|
|
set -uo pipefail
|
|
|
|
HOST="${HOST:-100.64.0.8}"
|
|
MAX_TIME="${MAX_TIME:-8}"
|
|
|
|
# 探针清单:名称|URL。逐个探,记录结果。
|
|
CHECKS=(
|
|
"Collector|http://${HOST}:13133/"
|
|
"Prometheus|http://${HOST}:9091/-/healthy"
|
|
"Tempo|http://${HOST}:3200/ready"
|
|
"Loki|http://${HOST}:3100/ready"
|
|
"Grafana|http://${HOST}:3002/api/health"
|
|
)
|
|
|
|
fail=0
|
|
for item in "${CHECKS[@]}"; do
|
|
name="${item%%|*}"
|
|
url="${item#*|}"
|
|
code="$(curl -s -o /dev/null -w '%{http_code}' --noproxy '*' --max-time "${MAX_TIME}" "${url}" 2>/dev/null)"
|
|
code="${code:-000}"
|
|
if [[ "$code" == "200" ]]; then
|
|
echo "PASS ${name} 200 @ ${url}"
|
|
else
|
|
echo "FAIL ${name}=${code} @ ${url}"
|
|
fail=1
|
|
fi
|
|
done
|
|
|
|
echo "---"
|
|
if [[ "$fail" == "0" ]]; then
|
|
echo "PASS 观测栈五件全绿 @ ${HOST}"
|
|
exit 0
|
|
fi
|
|
echo "FAIL 观测栈存在未就绪组件 @ ${HOST}(见上)"
|
|
exit 1
|