FluentD日志不可读。它被排除在外,下次再检查

时间:2018-08-03 11:04:07

标签: logging kubernetes fluentd

正面:流畅的日志不可读。它已排除在外,下次将进行检查

我有一个简单的配置,用于在kubernetes安装程序中运行的fluentD守护程序集。

有效版本: fluentd-0.12.43

下面是我的配置。

  <source>
    @type tail
    path /var/log/containers/sample*.log
    time_format %Y-%m-%dT%H:%M:%S.%NZ
    tag sample.*
    format json
    read_from_head true
  </source>
  <match sample.**>
    @type forward
    heartbeat_type tcp
    send_timeout 60s
    recover_wait 10s
    hard_timeout 60s
    <server>
      name worker-node2
      host 10.32.0.15
      port 24224
      weight 60
    </server>
  </match>

得到警告,没有日志转发

  

2018-08-03 06:36:53 +0000 [警告]:   /var/log/containers/samplelog-79bd66868b-t7xn9_logging1_fluentd-70e85c5d6328e7d.log   无法读取。它被排除在外,下次将进行检查。

     

2018-08-03 06:37:53 +0000 [警告]:   /var/log/containers/samplelog-79bd66868b-t7xn9_logging1_fluentd-70e85c5bc89ab24.log   无法读取。它被排除在外,下次将进行检查。

日志文件权限:

[root@k8s-master fluentd-daemonset]# ls -lrt **/var/log/containers/**

**lrwxrwxrwx** Jun 25 06:25 sample-77g68_kube-system_kube-proxy-9f3c3951c32ee.log 
-> /var/log/pods/aa1f8d5b-746f-11e8-95c0-005056b9ff3a/sample/7.log

用于守护程序集的YAML文件具有安装说明:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: logging1
  labels:
    k8s-app: fluentd-logging
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  template:
    -----
    -----
    -----

        volumeMounts:
        - name: fluentd-config
          mountPath: /fluentd/etc/ 
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlogpods
          mountPath: /var/log/pods
          readOnly: true
        - name: varlogcontainers
          mountPath: /var/log/containers
          readOnly: true
        - name: varlibdocker
          mountPath: /var/lib/docker
          readOnly: true
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: fluentd-config
        configMap:
          name: fluentd-config
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlogpods
        hostPath:
          path: /var/log/pods
      - name: varlogcontainers
        hostPath:
          path: /var/log/containers
      - name: varlibdocker
        hostPath:
          path: /var/lib/docker
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers 

即使权限正确 fluentD版本正确 Mount指令在kubernetes守护程序集中都是毫无头绪的,这个警告。

4 个答案:

答案 0 :(得分:1)

根据您在列表中定义的/var/log,其他/var/log/...被复制。

删除/var/log

使用kubectl describe pod fluentd-...进行检查 是否所有卷都已正确安装。

答案 1 :(得分:0)

colachg的建议对您有帮助:

我认为kubelet会在'/ var / log / containers'中创建一些符号链接(只是链接不是真实文件),因此您必须同时安装链接和真实文件,或者仅使用正确的fluentd.conf安装真实文件。

答案 2 :(得分:0)

我们需要设置以下环境变量: FLUENT_UID设为0

答案 3 :(得分:0)

我遇到了类似的问题。 所以,实际发生的是-

 1. Fluentd在/ var / log / containers /中创建符号链接,这进一步是/ var / log / pods /中文件的符号链接,例如-

root@fluentd-forwarders-5bfzm:/home/fluent# ls -ltr /var/log/containers/consul-0_default_consul-c4dbf47bf46b4cacfb0db67885fdba73835e05b45b14ec7dc746cc2d5ed92ea3.log 
lrwxrwxrwx. 1 root root 83 Oct 30 07:42 /var/log/containers/consul-0_default_consul-c4dbf47bf46b4cacfb0db67885fdba73835e05b45b14ec7dc746cc2d5ed92ea3.log -> /var/log/pods/default_consul-0_2a206546-73b3-4d05-bd7a-0b307c8b24d1/consul/1628.log


2. / var / log / pods是安装在主机上的日志文件的符号链接。在我的设置中,我使用主机/节点的/ data /目录存储docker数据。

root@fluentd-forwarders-5bfzm:/home/fluent# ls -ltr /var/log/pods/default_consul-0_2a206546-73b3-4d05-bd7a-0b307c8b24d1/consul/1629.log 
lrwxrwxrwx. 1 root root 162 Oct 30 07:47 /var/log/pods/default_consul-0_2a206546-73b3-4d05-bd7a-0b307c8b24d1/consul/1629.log -> /data/docker/containers/478642a56a6e15e7398391a2526ec52ad1aa24341e95aa32063163da11f4cc8b/478642a56a6e15e7398391a2526ec52ad1aa24341e95aa32063163da11f4cc8b-json.log


因此,在我的deployment.yaml中,我必须挂载/ data / docker / containers而不是/ var / lib / containers /来解决问题,即

        volumeMounts:
        - mountPath: /var/log
          name: varlog
        - mountPath: /data/docker/containers
          name: datadockercontainers
          readOnly: true
        - mountPath: /fluentd/etc
          name: config-path