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

4

有一个容器可以将日志输出到stdout/stderr,但我无法访问主机,因此无法使用节点日志收集器来收集并发送到中央日志系统(这里是ElasticSearch),是否有一种方法可以使用sidecar容器来完成这样的操作?

1个回答

4
您可以使用fluentbit作为sidecar将日志发送到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文件中配置elastic search的详细信息

1
有没有可能不修改应用程序直接从stdout获取日志,而不是将日志写入文件系统? - raja
从支持的输入插件来看,FluentBit不支持此功能。请参考https://docs.fluentbit.io/manual/pipeline/inputs。 - Arghya Sadhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接