日志和健康检查
日志分三层。只需知道看哪一层就够了。
| 层级 | 内容 | 查看方法 |
|---|---|---|
| 容器日志 | 容器输出到 stdout 的内容 — 启动日志 + 下面所有服务日志都加上 [태그] | 主机 bin/logs.sh plantpulse-datalake |
| 服务日志 | 各模块写入自己 logs/ 的约 40 个文件 | 容器内 pd logs [서비스] |
| 启动日志 | pd start 将服务启动器的输出串联成的一个文件 /var/log/plantpulse-datalake.log | pd logs 的 BOOT 标签,或 tail |
在主机上 — logs.sh
cd /opt/kopens/plantpulse-platform-docker/bin
./logs.sh # 모든 컨테이너의 마지막 200줄, 1회 출력
./logs.sh plantpulse-datalake # 데이터레이크 컨테이너만
./logs.sh -f plantpulse-datalake # 계속 따라간다 (Ctrl+C)
./logs.sh --list # 서비스 · 컴포넌트 이름 목록
./logs.sh cassandra # 컴포넌트 이름을 주면 데이터레이크 안 그 로그 파일
从 2026-09-02 起默认只输出一次。要持续跟踪,加上 -f。应用容器(服务器·批处理·数据仓库·HA·OPC-UA·AASX)的日志也用同一命令查看 — 那些不在 pd logs 里。
在容器内 — pd logs
docker exec plantpulse-datalake pd logs --list # 따라갈 파일 <태그> <path> 목록만
docker exec plantpulse-datalake pd logs --lines 50 cep # cep 만, 마지막 50줄부터
docker exec plantpulse-datalake pd logs --lines 3 admin-api
docker exec -it plantpulse-datalake pd logs storage messaging # 여러 서비스, 계속 따라감 (Ctrl+C)
| 选项 | 说明 |
|---|---|
--list | 列出文件并立即退出 |
--lines N | 每个文件显示已有内容的末尾 N 行(默认 10)。0 时仅显示之后新写入的内容 |
--no-boot-log | 不包括启动日志 |
서비스 … | 仅限这些服务 |
pd logs 只跟踪服务声明的文件。尚不存在的文件每 5 秒重新查找一次,生成后从第一行开始跟踪。有些文件故意不跟踪 — 轮转副本、JVM GC 日志、Cassandra debug.log(改用 pd node errors)、HiveMQ event.log(逐条消息审计,数十 MB)、Kafka 请求审计日志。
常看的标签和文件:
| 标签 | 文件(基于 PP_HOME) |
|---|---|
BOOT | /var/log/plantpulse-datalake.log |
VALKEY | /data1/pp-data/valkey/logs/system.log — 位于数据卷下 |
POSTGRES · CASSANDRA | plantpulse-storage/db/<엔진>/logs/system.log |
KAFKA · MQTT | plantpulse-messaging/kafka/logs/ · mqtt/logs/ |
CEP-TOMCAT · DGW-TOMCAT | plantpulse-cep/server/logs/catalina.<date>.log 等 |
TEMPORAL · KESTRA | plantpulse-workflow/temporal/logs/ · kestra/logs/ |
ADMIN-API | plantpulse-datalake-admin-api/logs/admin-api.log |
确切的列表因部署而异,请参考 pd logs --list。
健康检查 — 三种检查回答不同的问题
| 检查 | 检查内容 | 位置 |
|---|---|---|
| 容器 HEALTHCHECK | postgres·cassandra 是否对实际查询有响应 + pd 的所有端口是否开放。每 20 秒运行一次,启动宽限期 900 秒,30 次连续失败则标记为 unhealthy | docker ps 的 (healthy) |
pd status | 21 个端口是否开放。给定服务名称时运行该服务的健康检查脚本 | 容器内 |
/api/health | 管理控制台后端汇总的综合判定(OK·WARN·FAIL) | https://<server-ip>:4950/api/health |
若 docker ps 为 healthy 但 pd status 中有 STOPPED,则处于启动窗口或刚好漏过一次(再运行会变成 RUNNING)。反之,若 unhealthy 但 pd status 全为 RUNNING,说明端口已开放但无法响应查询 — 请查看 pd logs storage。
Kafka 较特殊。9092 端口在代理处理请求前 10 秒开放,所以 pd 不检查端口,而是检查«是否能向代理广告的地址发送 ApiVersions 请求并收到响应»。这就是为什么 messaging 健康状态行会显示 UP (advertised 10.99.0.100:9092 answered ApiVersions) 这样的原因。
docker inspect --format '{{json .State.Health.Log}}' plantpulse-datalake | jq # 최근 헬스체크 결과
docker exec plantpulse-datalake pd status messaging # 서비스 하나의 헬스 줄
事件日志 — 谁在何时做了什么
pd start·stop·restart·backup 将 JSON 逐行记录到 plantpulse-datalake-admin-api/logs/pd-events.jsonl。管理控制台的事件屏幕将其显示为时间线。
{"at":"2026-09-03T10:11:53+09:00","kind":"service.stop","subject":"datalake","severity":"info","message":"pd stop","actor":"pd","exit_code":0}
从控制台执行的命令由 actor 记录为 operator:<name>。计划外停止(service.down/service.recovered)由人之外的 pd downtime 历史记录生成。
诊断包
一次性收集提交故障报告所需的信息,在主机上运行:
cd /opt/kopens/plantpulse-platform-docker/bin
./ops-check.sh # 헬스 + 최근 critical 로그 + 제거된 워커의 잔여물
./doctor.sh # 진단 tarball — 시크릿 값은 마스킹된다