Kubernetes - 如何聚合应用程序日志

时间:2018-06-14 15:58:04

标签: kubernetes

我在Tomcat容器/ pod中部署了一个微服务。容器中生成了四个不同的文件 - access.log,tomcat.log,catalina.out和application.log(log4j输出)。将这些日志发送到Elasticsearch(或类似平台)的最佳方法是什么。

我阅读了有关此page日志记录架构的信息 - Kubernetes 5.“带有日志代理的Sidecar容器”是我用例的最佳选择吗?

是否可以获取pod标签(例如:version)并将其添加到每一行?如果可行,请使用像流利的日志代理? (我只是想知道我应该采取的方向)。

2 个答案:

答案 0 :(得分:2)

是的,您的用例的最佳选择是每个日志文件必须有一个tail -f边车,然后安装一个fluentdfluent-bit守护进程来处理运输和丰富日志事件。

该链接提供fluentd elasticsearch群集插件。它将安装一个流畅的守护进程和一个最小的ES集群。 ES群集未准备好生产,因此请参阅自述文件以获取有关必须更改的内容的详细信息。

答案 1 :(得分:1)

  

是否可以获取pod标签(例如:version)并将其添加到每个标签   线?

您可以将Pod元数据描述中的信息挂载到其文件系统,之后您可以将代理配置为使用此数据。这是一个例子:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: my-group/my-username
      - downwardAPI:
          items:
            - path: "labels"
              fieldRef:
                fieldPath: metadata.labels
            - path: "cpu_limit"
              resourceFieldRef:
                containerName: container-test
                resource: limits.cpu
      - configMap:
          name: myconfigmap
          items:
            - key: config
              path: my-group/my-config
  

如果可行,请使用像流利的日志代理?

Tomcat无法自动将日志发送到Elasticsearch,它需要一个代理(例如,Fluentd,Logstash)。因此,如果要使用直接从应用程序公开日志选项,则需要使用其中的代理构建Tomcat映像。它似乎与使用带有日志代理的边车容器选项几乎相同,并且配置更难。 直接从应用程序公开日志选项与您开发的应用程序更相关。

相关问题