Kubernetes:如何使用Sidecar容器收集stdout / stderr日志

时间:2020-07-20 02:54:45

标签: logging kubernetes sidecar

有一个可以将日志打印到stdout / stderr的容器,并且我无法访问主机,因此无法使用节点日志收集器来收集并将其发送到中央日志记录系统(此处为ElasticSearch),有没有办法用便车容器做这种事情?

1 个答案:

答案 0 :(得分:3)

您可以使用fluentbit作为补充,将日志发送到Elasticsearch。为此,您不需要在主机中运行任何进程。以下是一个示例yaml。

apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: fluentbit-logging-sidecar
  spec:
    selector:
      matchLabels:
        app: fluentbit-logging-sidecar
    replicas: 1
    template:
      metadata:
        labels:
          app: fluentbit-logging-sidecar
        volumes:
          - name: shared-data
            emptyDir: {}
          - name: config-volume
            configMap:
              name: fb-agent-config
        containers:
          - name: sample-logging
            image: <image>
            volumeMounts:
            - name: shared-data
              mountPath: /app/logs
          - name: fb-sidecar
            image: fluent/fluent-bit  
            volumeMounts:
            - name: shared-data
              mountPath: /app/logs
            - name: config-volume
              mountPath: /fluent-bit/etc/fluent-bit.conf
              subPath: fluent-bit.conf

您需要配置您的应用程序以在路径/app/logs中写入文件系统日志。因为应用程序容器和fluentbit容器使用volumeMounts共享路径,所以fluentbit sidecar将能够从该路径读取日志并将其流式传输到Elasticsearch。您需要在fluent-bit.conf文件中配置details of elastic search