跳到主要内容

获取日志

本文介绍如何通过3种方案获取 ONES 日志,root登录服务器后操作。

1. 获取运行时日志

本节介绍如何使用 kubectl logs 获取 Pod 的实时日志与历史日志。

1.1 获取当前运行日志

kubectl logs -n ones -l app=project-api  -c project-api > /tmp/project-api.log

1.2 获取pod上一次重启前的日志

kubectl logs -n ones  -l app=project-api  -c project-api --previous --timestamps > /tmp/project-api-previous.log

1.3 不确定 Pod 名称或 Label 时

kubectl get pod -n ones |grep -i project
kubectl logs -n ones project-api-**** -c project-api > /tmp/project-api.log

2. 获取临时日志文件

在 K3S 中,部分组件的容器日志会通过 symlink 映射在 /var/log/pods 目录下,第一个方法找不到所需的日志,可参考该方法。

2.1 进入日志目录

cd /var/log/pods

2.2 构建日志包

构建日志包的方法,再将 <业务模块>-log.tar.gz 拿出来即可

ls | grep -e <组件名称1> -e <组件名称2> | xargs tar -czvf /tmp/<业务模块>-log.tar.gz

2.3 示例:Project 业务模块

更多业务模块和具体组件的关系,参考文末 FAQ;日志包存放于 /tmp 目录,需手动下载传输。

ls | grep -e project-api -e rabbitmq -e redis | xargs tar -czvf /tmp/project-log.tar.gz

3. 获取持久化日志文件

持久化日志需根据 ONES 版本区分,上述两个方案找不到所需的日志,可参考该方法。

3.1、6.1.94以上版本获取日志

检查是否开启可观测系统

 kubectl get pod -n ones-telemetry

如果看到如下输出,代表当前环境开启了日志组件。否则没有开启,该方法不适用

[root@ones-cn-server-node03 ~]#  kubectl get pod -n ones-telemetry
ones-logging-statefulset-0 1/1 Running 0 35d

进入日志目录

# 本地存储模式下默认 ONES 数据目录是 /data/ones
cd /data/ones/ones-local-storage/ones-logging/ones-telemetry/data-volume-ones-logging-statefulset-0/logs/

构建日志包

# 分析故障时,可打包该文件夹、提供给 ONES 工程师 
tar cvf "/tmp/logs-$(hostname)-$(date '+%Y%m%d').tar" ./

/tmp/logs-test1-20241008.tar下载传输即可。

3.2、6.1.94以下版本获取日志

检查是否开启日志组件

kubectl get po -A | grep -E "ones-logging-statefulset|fluent-bit"

如果看到如下输出,代表当前环境开启了日志组件。否则没有开启,该方法不适用

[root@ones-cn-server-node03 ~]# kubectl get po -A | grep -E "ones-logging-statefulset|fluent-bit"
logging fluent-bit-p7wxk 1/1 Running 0 26h
ones-logging ones-logging-statefulset-0 1/1 Running 6 (87m ago) 22h

进入日志目录

进入 ONES 日志目录, ONES 的日志目录为 <ones-data-path>/ones-local-storage/ones-logging/ones-logging/data-volume-ones-logging-statefulset-0/ones/

ones-data-path 的目录为安装时 ONES_DATA_DIR 环境变量指定,如果没有指定则默认为 /data/ones

   cd /data/ones/ones-local-storage/ones-logging/ones-logging/data-volume-ones-logging-statefulset-0/ones/ 

构建日志包

构建日志包的方法

ls | grep -e <组件名称1> -e <组件名称2> | grep <日期> | xargs tar -czvf /tmp/<业务模块>-<日期>-log.tar.gz

例如构建 project 组件 2023-11-01 的日志包。业务模块和具体组件的关系,参考 FAQ

ls | grep -e project-api -e rabbitmq -e redis | grep 2023-11-01 | xargs tar -czvf /tmp/project-2023-11-01-log.tar.gz

/tmp/<业务模块>-<日期>-log.tar.gz 下载传输即可。

FAQ:业务模块和组件的关联关系

{
"gateway": ["ingress", "apisix"],
"project": ["project-api", "rabbitmq", "redis"],
"wiki": ["wiki-api", "wiz"],
"task": ["taskapp"],
"auditLog": ["binlog-event-sync", "audit-log-sync", "ones-canal", "kafka", "clickHouse"],
"performance": ["binlog-event-sync", "audit-log-sync", "ones-canal", "kafka", "clickHouse", "performance-api"],
"automation": ["camunda-bpm"],
"devops": ["ones-devops-api"],
"search": ["advanced-tidb-tikv", "kilob-sync", "binlog-event-sync"],
"openPlatform": ["ones-platform-api", "plugin-host-node", "platform-hostboot"],
"databases": ["mysql", "dm"]
}