我在k8s日志存储库中堆叠。我们有无法输出到stdout的日志,但必须保存到dir。我们要保存到glusterfs共享目录,例如/data/logs/./xxx.log应用是用Java编写的,我们该怎么做
答案 0 :(得分:1)
这主要取决于您的CRI插件,通常是Docker命令行选项。默认情况下,它们已经确实写入本地磁盘,您只需要在正确的位置安装卷即可(可能是/ var / log / containers或类似的文件,请查看Docker配置)。
答案 1 :(得分:1)
我在一个第三方申请中遇到了同样的问题。它是在日志文件中写入日志,我希望Fluentd能够获取它们,所以我想以某种方式在stdout上打印它们。 我发现了一种解决方法,可以在同一个容器中同时运行一个附加容器和应用容器。
让我们说第三方应用程序正在以下文件中写入日志:
/some/folders/logs/app_log_file.log
以下pod将运行两个容器,一个运行应用程序,另一个运行busybox映像,我们将使用它们从应用程序容器中获取日志。
apiVersion: v1
kind: Pod
metadata:
name: application-pod
spec:
containers:
- name: app-container
image: <path-to-app-image>
imagePullPolicy: IfNotPresent
volumeMounts:
- name: log-volume
mountPath: /some/folders/logs
- name: log-fetcher-container
image: busybox
args: [/bin/sh, -c, 'sleep 60 && tail -n+1 -f /var/log/app_log_file.log']
volumeMounts:
- name: log-volume
mountPath: /var/log
volumes:
- name: log-volume
emptyDir: {}
正如您所看到的,清单是在app容器中的/ some / folders / logs文件夹和log fetcher容器中的/ var / log文件夹中创建一个空卷并将其装入。现在,应用程序容器写入/ some / folders / logs的每个文件也将在/ var / log中可见。 这就是busybox映像运行shell命令的原因:
sleep 60 && tail -n+1 -f /var/log/app_log_file.log
首先,我们等待60秒钟,因为应用程序容器必须有时间启动并创建日志文件,然后tail命令将在日志文件中的每一行都打印到日志提取器容器的标准输出。
现在,流利的人将能够从应用程序容器的日志文件中获取日志,从而获取日志提取器容器的标准输出日志。