DataHub 容器日志提取完全指南:从 Docker Compose 与 Kubernetes 中导出 GMS 与前端日志
DataHub 容器日志提取完全指南从 Docker Compose 与 Kubernetes 中导出 GMS 与前端日志【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahubDataHub 的容器化部署中后端服务 datahub-gms元数据服务与前端 datahub-frontendUI 服务会将运行日志写入各自容器内的本地文件系统。当后端 API 报错、UI 加载异常或元数据同步失败时提取这些日志文件是定位问题的第一步。本文将基于当前仓库的官方运维文档结合源码与配置逐层拆解日志的存放位置、两种日志类型的区别以及如何在 Docker / Docker Compose 与 Kubernetes / Helm 两种部署形态下把容器内日志安全地导出到宿主机进行排查。为什么需要主动提取容器日志DataHub 的 GMS 与 frontend 服务基于 Logback 输出日志日志会同时写入两个目标一是容器的标准输出stdout可通过docker logs或kubectl logs直接查看二是容器本地文件系统上的滚动日志文件。文件日志的价值在于保留了按日期切分的归档文件便于回溯历史某一天的问题debug 级别的日志默认只进文件、不打印到 stdout排查底层代码路径时必须读取文件日志文件可直接grep、tail或整份导出交给团队分析。下文所有操作都围绕这两个服务各自的日志目录展开。第一步找到目标容器或 Pod 的标识日志文件位于容器内部因此首先要拿到容器的 IDDocker或 Pod 名称Kubernetes。Docker 与 Docker Compose运行以下命令列出所有已知容器并记录目标服务的 CONTAINER IDdocker container ls输出示例来自仓库文档CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c4a280bc457 acryldata/datahub-frontend-react datahub-frontend/bi… 5 days ago Up 46 hours (healthy) 0.0.0.0:9002-9002/tcp datahub-frontend-react 122a2488ab63 acryldata/datahub-gms /bin/sh -c /datahub… 5 days ago Up 5 days (healthy) 0.0.0.0:8080-8080/tcp datahub-gms 7682dcc64afa confluentinc/cp-schema-registry:5.4.0 /etc/confluent/dock… 5 days ago Up 5 days 0.0.0.0:8081-8081/tcp schema-registry 3680fcaef3ed confluentinc/cp-kafka:5.4.0 /etc/confluent/dock… 5 days ago Up 5 days 0.0.0.0:9092-9092/tcp, 0.0.0.0:29092-29092/tcp broker 9d6730ddd4c4 neo4j:4.0.6 /sbin/tini -g -- /d… 5 days ago Up 5 days 0.0.0.0:7474-7474/tcp, 7473/tcp, 0.0.0.0:7687-7687/tcp neo4j c97edec663af confluentinc/cp-zookeeper:5.4.0 /etc/confluent/dock… 5 days ago Up 5 days 2888/tcp, 0.0.0.0:2181-2181/tcp, 3888/tcp zookeeper 150ba161cf26 mysql:8.2 docker-entrypoint.s… 5 days ago Up 5 days 0.0.0.0:3306-3306/tcp, 33060/tcp mysql 4b72a3eab73f elasticsearch:7.9.3 /tini -- /usr/local… 5 days ago Up 5 days (healthy) 0.0.0.0:9200-9200/tcp, 9300/tcp elasticsearch以datahub-gms服务为例需要记下容器 ID122a2488ab63。Kubernetes 与 Helm使用 kubectl 查看 Pod 列表并记录目标 Pod 的名称kubectl get pods输出示例... default datahub-frontend-1231ead-6767 1/1 Running 0 42h default datahub-gms-c578b47cd-7676 1/1 Running 0 13d ...其中datahub-gms-c578b47cd-7676即包含 GMS 后端服务的 Pod 名称。第二步定位容器内的日志文件日志文件位于每个服务各自固定的目录下服务日志目录datahub-gms/tmp/datahub/logs/gmsdatahub-frontend/tmp/datahub/logs/datahub-frontend这两个路径并非文档中的约定俗成而是由源码中的 Logback 配置直接定义的。GMS 侧配置位于 metadata-service/war/src/main/resources/logback.xml其中通过LOG_DIR属性声明property nameLOG_DIR value${LOG_DIR:-/tmp/datahub/logs/gms}/frontend 侧的配置位于 datahub-frontend/conf/logback.xml声明property nameLOG_DIR value${LOG_DIR:- /tmp/datahub/logs/datahub-frontend}/也就是说日志目录可以通过设置环境变量LOG_DIR覆盖默认值默认值即为文档中给出的路径。容器启动时docker/datahub-frontend/start.sh 通过 JVM 参数-Dlogback.configurationFile${DATAHUB_HOME}/conf/logback.xml显式加载 frontend 的日志配置确保容器内使用与仓库一致的日志行为。两种日志类型的区别容器内同时收集两类日志文件Info 日志包含 info、warn、error 级别的日志行与容器 stdout 打印的内容一致按天滚动归档保留时间较长。Debug 日志保留时间更短仅最近 1 天但包含来自 DataHub 自身代码的更细粒度调试信息。注意DataHub 依赖的外部库的 debug 日志会被忽略从而保证 debug 文件聚焦于项目自身逻辑。以 GMS 为例ls目录可见两类文件并存示例来自仓库文档docker exec --privileged 122a2488ab63 ls -la /tmp/datahub/logs/gms total 4664 drwxr-xr-x 2 datahub datahub 4096 Jul 28 05:14 . drwxr-xr-x 3 datahub datahub 4096 Jul 23 08:37 .. -rw-r--r-- 1 datahub datahub 2001112 Jul 23 23:33 gms.2021-23-07-0.log -rw-r--r-- 1 datahub datahub 74343 Jul 24 20:29 gms.2021-24-07-0.log -rw-r--r-- 1 datahub datahub 70252 Jul 25 17:56 gms.2021-25-07-0.log -rw-r--r-- 1 datahub datahub 626985 Jul 26 23:36 gms.2021-26-07-0.log -rw-r--r-- 1 datahub datahub 712270 Jul 27 23:59 gms.2021-27-07-0.log -rw-r--r-- 1 datahub datahub 867707 Jul 27 23:59 gms.debug.2021-27-07-0.log -rw-r--r-- 1 datahub datahub 3563 Jul 28 05:26 gms.debug.log -rw-r--r-- 1 datahub datahub 382443 Jul 28 16:16 gms.log因为日志文件以当前日期命名必须先用ls查看当前实际存在的文件再决定提取哪一个。Docker 与 Docker Compose使用 docker exec 查看通用命令形式docker exec --privileged container-id shell-command查看 GMS 日志目录docker exec --privileged 122a2488ab63 ls -la /tmp/datahub/logs/gms--privileged并非查看日志所必需但这是官方文档给出的示例写法在部分受限容器环境如需要特殊权限或挂载中可保证命令正常执行。根据问题现象可同时关注 debug 日志与普通 info 日志。Kubernetes 与 Helm使用 kubectl exec 查看kubectl exec datahub-gms-c578b47cd-7676 -n default -- ls -la /tmp/datahub/logs/gms输出示例total 36388 drwxr-xr-x 2 datahub datahub 4096 Jul 29 07:45 . drwxr-xr-x 3 datahub datahub 17 Jul 15 08:47 .. -rw-r--r-- 1 datahub datahub 104548 Jul 15 22:24 gms.2021-15-07-0.log -rw-r--r-- 1 datahub datahub 12684 Jul 16 14:55 gms.2021-16-07-0.log -rw-r--r-- 1 datahub datahub 2482571 Jul 17 14:40 gms.2021-17-07-0.log -rw-r--r-- 1 datahub datahub 49120 Jul 18 14:31 gms.2021-18-07-0.log -rw-r--r-- 1 datahub datahub 14167 Jul 19 23:47 gms.2021-19-07-0.log -rw-r--r-- 1 datahub datahub 13255 Jul 20 22:22 gms.2021-20-07-0.log -rw-r--r-- 1 datahub datahub 668485 Jul 21 19:52 gms.2021-21-07-0.log -rw-r--r-- 1 datahub datahub 1448589 Jul 22 20:18 gms.2021-22-07-0.log -rw-r--r-- 1 datahub datahub 44187 Jul 23 13:51 gms.2021-23-07-0.log -rw-r--r-- 1 datahub datahub 14173 Jul 24 22:59 gms.2021-24-07-0.log -rw-r--r-- 1 datahub datahub 13263 Jul 25 21:11 gms.2021-25-07-0.log -rw-r--r-- 1 datahub datahub 13261 Jul 26 19:02 gms.2021-26-07-0.log -rw-r--r-- 1 datahub datahub 1118105 Jul 27 21:10 gms.2021-27-07-0.log -rw-r--r-- 1 datahub datahub 678423 Jul 28 23:57 gms.2021-28-07-0.log -rw-r--r-- 1 datahub datahub 1776274 Jul 28 07:19 gms.debug.2021-28-07-0.log -rw-r--r-- 1 datahub datahub 27576533 Jul 29 09:55 gms.debug.log -rw-r--r-- 1 datahub datahub 1195940 Jul 29 14:55 gms.log第三步将容器日志文件保存到本地确定目标日志文件后将其复制到本地文件系统进行进一步排查。Docker 与 Docker Composecat 重定向使用docker exec执行cat命令并把输出重定向到本地新文件docker exec --privileged 122a2488ab63 cat /tmp/datahub/logs/gms/gms.debug.log my-local-log-file.log执行后即可在本地查看my-local-log-file.log。同样的方法适用于 frontend 服务只需替换容器 ID 与路径如/tmp/datahub/logs/datahub-frontend/datahub-frontend.log。Kubernetes 与 Helmkubectl exec 或 kubectl cpKubernetes 下有多种方式将 Pod 内文件导出到本地既可以用kubectl cp直接拷贝文件也可以像 Docker 一样用cat管道重定向。官方文档示例采用后者kubectl exec datahub-gms-c578b47cd-7676 -n default -- cat /tmp/datahub/logs/gms/gms.log my-local-gms.log若使用kubectl cp等价命令为kubectl cp default/datahub-gms-c578b47cd-7676:/tmp/datahub/logs/gms/gms.log ./my-local-gms.log源码视角日志文件的滚动策略与调试级别理解日志文件为什么按日期命名、debug 日志为何只保留 1 天有助于判断该提取哪个文件。这些行为全部由 Logback 配置控制。GMS 日志配置详解GMS 的 logback.xml 定义了三个关键 appenderAppender文件滚动策略要点FILEinfo${LOG_DIR}/gms.log单文件最大 100MBmaxFileSize归档总量上限 10GBtotalSizeCap最多保留 30 天maxHistory文件名形如gms.yyyy-dd-MM-i.logDEBUG_FILE${LOG_DIR}/gms.debug.log单文件最大 100MB归档总量上限 2GB仅保留 1 天且通过LevelFilter只接受 DEBUG 及以上级别GRAPHQL_DEBUG_FILE${LOG_DIR}/gms.graphql.log独立记录 GraphQL 层的调试日志com.datahub.graphqllogger 设为 DEBUG/TRACE保留 1 天值得注意的两点debug 日志仅覆盖 DataHub 自身代码com.linkedinlogger 被设为DEBUG并接入 DEBUG_FILE而org.apache.kafka.clients等外部依赖保持 INFO/WARN这正是文档所说忽略外部库 debug 日志的实现来源。stdout 与文件共用过滤STDOUT 与 FILE appender 都通过ThresholdFilter拦截 INFO 以下日志并过滤掉scanned from multiple locations等无意义告警行保证两种输出内容一致且干净。Frontend 日志配置详解frontend 的 logback.xml 结构类似datahub-frontend.loginfo保留 30 天、总量上限 10GB与datahub-frontend.debug.logDEBUG保留 1 天。其 debug 文件额外覆盖了controllers、auth、org.pac4j、graphql、react等与 UI 认证和渲染链路相关的 logger排查登录问题或前端接口报错时优先查看该文件。可选进阶将日志推送到 Loki 聚合平台从配置可以看到GMS 与 frontend 的 logback 还内置了可选的日志聚合能力当环境变量LOG_AGGREGATOR_ENDPOINT被设置时日志会通过 Loki4jAppender 异步批量推送到兼容 Loki push 协议的聚合端如 Grafana Loki、VictoriaLogs标签格式为servicedatahub-gms或servicedatahub-frontend。该能力默认休眠且采用有界队列、不会阻塞服务。在 docker-compose 中可通过 docker/profiles/docker-compose.gms.yml 与 docker/profiles/docker-compose.frontend.yml 中的LOG_AGGREGATOR_ENDPOINT环境变量启用LOG_AGGREGATOR_ENDPOINT: ${LOG_AGGREGATOR_ENDPOINT:-}启用后即使不进入容器也可以直接在聚合平台上检索、过滤 GMS 与 frontend 的全部日志适合大规模部署场景。排查实践建议先看 stdout再取文件docker logs datahub-gms或kubectl logs deployment/datahub-gms适合快速确认服务是否正常启动需要回溯历史或查看 debug 细节时再按本文步骤提取文件。按需选择日志文件业务报错通常查 info 日志gms.log/datahub-frontend.log需要深入 DataHub 内部调用链时查当日 debug 文件gms.debug.log/datahub-frontend.debug.logGraphQL 查询问题在 GMS 容器中可查gms.graphql.log。注意 debug 日志的短保留期debug 文件仅保留 1 天遇到持续性问题应尽早导出历史 debug 归档文件如gms.debug.2021-27-07-0.log只在归档窗口内可用。提取完整目录若问题横跨多天可以一次导出整个目录例如docker exec --privileged id tar -cf - /tmp/datahub/logs/gms | tar -xf -再在本地检索。总结DataHub 的日志体系设计得很直观GMS 与 frontend 各自维护独立的日志目录info 与 debug 双轨并行滚动策略与保留期由仓库内的 Logback 配置统一定义。无论是 Docker Compose 还是 Kubernetes 部署掌握docker exec/kubectl exec查看与导出文件的方法后即可在几分钟内拿到定位后端与 UI 问题所需的全部日志证据。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考