跳到主要内容

服务日志

「服务日志」面板查询的是 HAP/HDP 各微服务推送到运维平台 Loki 的结构化日志。默认不推送,需要在产品服务侧打开写入开关。

重点配置项

需要配置的是 HAP/HDP 服务侧ENV_LOKI_URL。运维平台侧也有同名变量,两者作用不同:

配在哪作用要不要动
HAP/HDP 服务侧写入开关,默认空 —— 不配置则不会向 Loki 写入服务日志配置此项
运维平台侧(ops.yaml/ConfigMap)查询地址,部署后已有默认值❌ 标准拓扑下无需修改

只修改运维平台侧变量不会启用服务日志写入,面板仍会为空,且两侧通常都不会报错。

第 1 步:按部署形态填写地址

A. 产品服务与运维平台在同一个 Kubernetes 集群

ENV_LOKI_URL=http://ops-loki.<运维平台所在命名空间>.svc.cluster.local:3100

命名空间填写运维平台实际所在的命名空间(默认清单为 hap-ops)。可通过以下命令确认:

kubectl get svc -A | grep ops-loki

输出结果第一列即为命名空间。

不要填写节点 IP

运维平台的 ops-loki 是 ClusterIP Service,只在集群内可解析。填运维平台所在节点的 IP, 会返回 503 或连接失败——即使目标机器是运维平台所在节点,也应使用 Service DNS。

B. 产品服务与运维平台在同一台机器,都是 Docker Compose

ENV_LOKI_URL=http://ops-loki:3100

可直接使用服务名,前提是产品服务与运维平台已接入同一个 Docker 网络。

C. 运维平台单机部署(Docker Compose),产品服务在另一台机器

ENV_LOKI_URL=http://运维平台主机IP:3100

需要为 ops-loki 配置 3100:3100 端口映射。1.5.3 起随包 ops.yaml 已默认包含该映射;更早版本需手动添加。

D. 运维平台集群部署(Kubernetes),产品服务在集群外

先为 ops-loki 配置 NodePort 或 Ingress(默认 ClusterIP 无法从集群外访问),再将 ENV_LOKI_URL 指向该对外地址。

第 2 步:改完重启产品服务

变量在启动时读取,修改后需重启产品服务才会生效。单机部署修改 docker-compose.yaml/.env,集群部署修改对应的 ConfigMap(私有部署服务通常集中在 env-list 里)。

第 3 步:确认连通性

① 在产品服务的任一容器中,使用已配置的地址验证可达性:

curl -s -o /dev/null -w '%{http_code}\n' <你填的 ENV_LOKI_URL>/ready

返回 200 表示连通。503 通常表示地址配置错误,例如情况 A 中填写了节点 IP。

② 触发一次业务操作(登录、发送验证码等),微服务实际执行后才会写入日志。

③ 刷新运维平台的日志查询,「服务日志」面板应出现内容。

若页面持续为空,见常见问题

容器日志

「容器控制台」面板查的是各容器的 stdout/stderr,与上面的服务日志互不相干,由谁采集取决于部署方式:

HAP/HDP 部署方式谁在采要不要配
单机(Docker Compose)ops-alloy/var/run/docker.sock 采集 Docker 容器日志无需配置,部署后自动启用
集群 · PVCk8s-cluster/50-daemonsets.yaml 中的 alloy-logs 经 Kubernetes API 读取 Pod 日志无需配置,随清单部署
集群 · hostPath(单文件 ops.yaml默认不采集⚠️ 需额外部署 alloy-logs,见下文
hostPath 部署未安装 alloy-logs 时无法采集容器日志

ops.yaml 里只有运维平台自身,不含任何 Kubernetes 采集组件。而 ops-alloy 采的是 Docker 容器, Kubernetes 用的是 containerd,它在集群里采不到任何 Pod——启动日志会明确说明并跳过该采集段。

结果是「容器控制台」面板无数据,且两侧通常都不会报错。需要安装 k8s-addons.tar.gz 中的 40-alloy-logs.yaml

kubectl apply -f k8s-addons/40-alloy-logs.yaml

⚠️ apply 前先修改里面的 ENV_LOKI_PUSH_URL

  • 运维平台在本集群http://ops-loki.<运维平台所在命名空间>.svc.cluster.local:3100/loki/api/v1/pushENV_LOKI_PUSH_TOKEN 留空
  • 运维平台在其它集群ops-loki 是 ClusterIP、跨集群无法访问,要走网关 http://<运维平台地址>:30881/mdis/loki/api/v1/push,并把 ENV_LOKI_PUSH_TOKEN 填成运维平台的 ENV_OPS_TOKEN(网关那条写入入口用 Bearer 鉴权,不填返回 401)

这两项配置错误通常不会产生显式报错,界面表现为面板无数据。

两个面板的详细说明见 日志查询