日志与健康
日志分为三层。只需知道该看哪一层即可。
| 层 | 内容 | 查看方式 |
|---|---|---|
| 容器日志 | 容器输出到 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 日志、Aster TSDB 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次失败则判定为不健康 | docker ps 的 (healthy) |
pd status | 21个端口是否开放。若指定服务名称,则执行该服务的健康脚本 | 容器内 |
/api/health | 管理控制台后端收集的综合判定(OK、WARN、FAIL) | https://<server-ip>:4950/api/health |
若docker ps 显示健康,但pd status 中存在 STOPPED,则可能正处于启动窗口或曾出错(再次启动后变为 RUNNING)。反之,如果不健康但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 — 시크릿 값은 마스킹된다