当前位置: 首页 > 知识库问答 >
问题:

如何在kubernetes中将应用程序的日志从一个容器中获取到另一个容器中

东方智敏
2023-03-14

我们计划使用Prometheus实现Kubernetes应用程序监控。我们的应用程序在apache中运行,并部署到kubernetes集群。我们正在开发定制的Apache exporter,它将在与我的应用程序容器相同的POD中运行

共有2个答案

郁博学
2023-03-14

使用日志聚合工具,例如loki,它与kubernetes和grafana很好地集成,然后您可以在grafana仪表板中执行所有这些解析并在那里创建报警

桓喜
2023-03-14

Kubernetes以POD\u NAMESPACE\u container\u CONTAINERID的格式将容器的stdout存储在每个节点的/var/logs/containers和/var/logs/pods中。日志和命名空间\u POD\u CONTAINERID/CONTAINER/*。分别记录。一旦pod从节点中退出,这些文件将被删除。

您可以将它们中的任何一个挂载到导出器pod以读取日志。问题是,

  • 容器ID在Kubernetes中不能作为ENV使用。我们无法生成文件名并装载所需的文件。我们必须装载整个目录
  • 在Kubernetes中,装载可写的主机路径非常容易受到攻击。因此,请确保将其设置为只读文件系统或配置PodSecurityPolicy

亚马尔

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

 类似资料:
  • 我们有一个公开REST API的现有java应用程序。当它收到超文本传输协议请求时,它使用Runtime.getRuntime(). exe启动另一个java进程。 我们正在将此应用程序迁移到docker,我们希望将这些服务、一个容器中的REST应用程序和另一个容器中的其他组件分开。 有没有办法,REST应用程序可以在另一个docker容器中启动另一个应用程序?

  • 我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne

  • 我有两张docker的照片。其中一个docker映像(来自第一个容器)在运行时会生成一些文件,这些文件需要由另一个容器使用。 我可以这样做吗?

  • 问题内容: 我和一个拥有我所有资产的工具都来自grunt或其他一些工具。 现在在docker compose文件中,我想将的文件夹路径装入到其中,以便nginx可以提供该文件。 我们该怎么做?我不记得了,但我认为有一种选择可以使我们将一个容器的路径与另一个容器共享。 假设如果我将nginx扩展到2个容器,那么该安装将适用于所有nginx实例吗? 如果我扩大规模,那会发生什么? 我也想将其安装在主机

  • 问题内容: 我通常会看到将Docker容器的端口暴露给主机的解决方案。 就我而言,我想将本地端口从一个容器转发到另一个。假设我在具有 硬编码配置的 容器A 上运行服务, 以访问localhost 3306上的db 。但是我想在 容器B 上运行数据库服务器。 从A-localhost:3306到B-IP:3306的 端口转发的最佳方法是什么? 问题答案: 在您的容器中安装并在启动运行时安装 这将在您

  • 我想在一个docker容器中运行Rabbitmq服务器,并使用芹菜从另一个容器连接到它(http://celeryproject.org/) 我已使用以下命令运行rabbitmq。。。 然后通过 当我试图做非常基本的教程来验证http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html 我得