如何在kubernetes中将应用程序的日志从一个容器放到另一个容器中
我们计划使用Prometheus实现Kubernetes应用程序监控。我们的应用程序在apache中运行,并部署到kubernetes集群。我们正在开发定制的ApacheExporter,它将与我的应用程序容器运行在同一个POD中&从Apache收集指标并将它们推送到Prometheus。作为此监视的一部分,我们需要在apache中解析access.log以获取2xx、3xx、4xx和5xx请求的数量。但是我们部署在Kubernetes中的应用程序不在POD中存储任何日志,而是登录到STDOUT。所以我可以从kubectl logs命令访问日志。现在,我正在构建的Apache导出器与我的应用程序容器托管在同一个POD中。现在我的问题是如何让应用程序日志(access.log)显示在apache exporter容器中/可供其访问,这样我就可以分析逻辑并得出2xx、3xx、4xx和5xx的数量等指标。使用日志聚合工具,例如loki,它与kubernetes和grafana很好地集成,然后,您可以在grafana仪表板中执行所有这些分析,并在那里创建报警使用日志聚合工具,例如loki,它与kubernetes和grafana很好地集成,然后,您可以在grafana仪表板中执行所有这些解析,并在那里创建报警Kubernetes将容器的标准输出分别存储在每个节点的如何在kubernetes中将应用程序的日志从一个容器放到另一个容器中,kubernetes,monitoring,prometheus,Kubernetes,Monitoring,Prometheus,我们计划使用Prometheus实现Kubernetes应用程序监控。我们的应用程序在apache中运行,并部署到kubernetes集群。我们正在开发定制的ApacheExporter,它将与我的应用程序容器运行在同一个POD中&从Apache收集指标并将它们推送到Prometheus。作为此监视的一部分,我们需要在apache中解析access.log以获取2xx、3xx、4xx和5xx请求的数量。但是我们部署在Kubernetes中的应用程序不在POD中存储任何日志,而是登录到STDOUT
/var/logs/containers
和/var/logs/pods
格式的POD\u NAMESPACE\u container\u CONTAINERID.log
和NAMESPACE\u POD\u CONTAINERID/container/*.log
。一旦pod从节点中退出,这些文件将被删除
您可以将其中任何一个装入导出器吊舱以读取日志。问题是,
在Kubernetes中不能作为ENV使用。我们无法生成文件名并准确装入所需的文件。我们必须装载整个CONTAINER ID
或/var/log/containers/
目录李>/var/log/pods
- 在Kubernetes中,装载可写的
非常容易受到攻击。因此,请确保将其设置为主机路径
文件系统或配置readOnly
PodSecurityPolicy
Kubernetes在每个节点的
/var/logs/containers
和/var/logs/pods
中分别以POD\u NAMESPACE\u container\u CONTAINERID.log
和NAMESPACE\u POD\u CONTAINERID/container/*.log
的格式存储容器的stdout。一旦pod从节点中退出,这些文件将被删除
您可以将其中任何一个装入导出器吊舱以读取日志。问题是,
在Kubernetes中不能作为ENV使用。我们无法生成文件名并准确装入所需的文件。我们必须装载整个CONTAINER ID
或/var/log/containers/
目录李>/var/log/pods
- 在Kubernetes中,装载可写的
非常容易受到攻击。因此,请确保将其设置为主机路径
文件系统或配置readOnly
PodSecurityPolicy
您可以尝试将Apache配置为登录到文件,而不是登录到标准输出。我建议将它们存储在一个卷中,并将该卷装入两个容器中。我认为容器化标准是将日志推送到标准输出,而不是存储在POD中。我们还将原木推送至Splunk/ELK。另外,如果我们将日志存储在POD中,并且存储在一些卷中,那么我们如何将这些日志推送到Splunk?我们在所有工作节点中也安装了Splunk转发器,将日志推送到Splunk。由于上述原因,我们不能将日志存储在POD中&我们不能将日志装入可以共享到两个容器的卷中。您可以尝试将Apache配置为登录到文件,而不是登录到STDOUT。我建议将它们存储在卷中,并将卷装入两个容器中。我认为容器化标准是推送日志将其取出,而不是储存在吊舱中。我们还将原木推送至Splunk/ELK。另外,如果我们将日志存储在POD中,并且存储在一些卷中,那么我们如何将这些日志推送到Splunk?我们在所有工作节点中也安装了Splunk转发器,将日志推送到Splunk。由于上述原因,我们不能将日志存储在POD中&我们不能将日志装入可以共享到两个容器的卷中。嘿,我可以使用ls/var/log命令列出容器中的文件,但我无法使用cat命令查看内容。它没有给出这样的文件或目录。可能是什么问题?解决了上述问题。。您还需要挂载/var/lib/docker/containershey。我可以使用ls/var/log命令列出容器中的文件,但我无法使用cat命令查看内容。它没有给出这样的文件或目录。可能是什么问题?解决了上述问题。。您还需要装载/var/lib/docker/containers
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
- image: busybox
name: exporter
command: ["cat"]
tty: true
volumeMounts:
- mountPath: /var/log/
name: logs
readOnly: true
volumes:
- name: logs
hostPath:
path: /var/log/containers/
# path: /var/log/pods/
type: Directory
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
$ kubectl exec -it nginx -n dev -c exporter sh -- ls /var/log | grep nginx
nginx_dev_exporter-41a2a80de1b899d1ee848378d2bf31285658bf86700671e560588ac69b2717b4.log
nginx_dev_nginx-e4c12df0c9dae129ed113f4195d750b447a570a686e3b5608e1af37ced788549.log