【问题标题】:Unable to collect all kubernetes container/pod logs via fluentd/elasticsearch无法通过 fluentd/elasticsearch 收集所有 kubernetes 容器/pod 日志
【发布时间】:2018-07-03 11:35:29
【问题描述】:

我是 fluentd/elasticsearch 堆栈的新手,我正在尝试在 kubernetes 上部署它。虽然我设法做到了,但我遇到了一个问题,即并非所有 pod/容器日志都显示在 elasticsearch 上(我正在使用 Kibana 进行数据可视化)。换句话说,我可以看到来自“默认”kubernetes pod 的日志,比如 weave-net 和 elasticsearch 相关的 pod 日志(es-data、es-master 等),但不能从我的“自定义”pod 中看到我正在尝试部署。

作为一个简单的测试,我已经在 fluentd/elasticsearch 所在的同一个 kube 命名空间中部署了 redis,redis 服务/部署如下所示:

---
apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
    role: master
    tier: backend
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
    role: master
    tier: backend
---
apiVersion: apps/v1 #  for k8s versions before 1.9.0 use apps/v1beta2  and before 1.8.0 use extensions/v1beta1
kind: Deployment
metadata:
  name: redis-master
spec:
  selector:
    matchLabels:
      app: redis
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: k8s.gcr.io/redis:e2e  # or just image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379

当我检查来自 fluentd daemonpods 的日志时,我看到以下内容:

2018-07-03 11:17:05 +0000 [info]: following tail of /var/log/containers/redis-master-585798d8ff-b5p5g_default_master-4c934d19a8e2b2d6143b662425fd8fc238df98433d1c0c32bf328c281ef593ad.log

如果我是正确的,应该给我一个 fluentd 正在获取 redis 容器日志的信息。但是,我无法看到存储在 elasticsearch 中的任何与 redis 相关的文档。

这是 fluentd 部分配置的样子(kubernetes.conf):

<source>
  @type tail
  @id in_tail_container_logs
  path /var/log/containers/*.log
  pos_file /var/log/fluentd-containers.log.pos
  tag kubernetes.*
  read_from_head true
  format json
  time_format %Y-%m-%dT%H:%M:%S.%NZ
</source>

和fluent.conf:

<match **>
   @type elasticsearch
   @id out_es
   log_level info
   include_tag_key true
   host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
   port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
   scheme "#{ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'http'}"
   ssl_verify "#{ENV['FLUENT_ELASTICSEARCH_SSL_VERIFY'] || 'true'}"
   user "#{ENV['FLUENT_ELASTICSEARCH_USER']}"
   password "#{ENV['FLUENT_ELASTICSEARCH_PASSWORD']}"
   reload_connections "#{ENV['FLUENT_ELASTICSEARCH_RELOAD_CONNECTIONS'] || 'true'}"
   logstash_prefix "#{ENV['FLUENT_ELASTICSEARCH_LOGSTASH_PREFIX'] || 'logstash'}"
   logstash_format true
   buffer_chunk_limit 2M
   buffer_queue_limit 32
   flush_interval 5s
   max_retry_wait 30
   disable_retry_limit
   num_threads 8
</match>

任何提示都会很有帮助。 提前致谢。

【问题讨论】:

    标签: elasticsearch kubernetes fluentd fluent-bit


    【解决方案1】:

    我出于同样的目的使用 fluent bit,几天前我遇到了完全相同的问题。 Fluent bit 是 fluentd 的轻量级版本,对我有用的也可能对你有用。

    我的流利位有什么问题是输入配置。对于拖入大型日志文件的尾部插件,日志轮换存在一些问题。因此,我将 refresh_interval 降低到 5 秒(更新监视文件列表的时间段)。然后我将 mem_buf_limit 降低到 5MB 左右(日志流利位的总大小在将其刷新到输出插件之前占用内存)。

    通过这些更改,我能够获得更多的日志,这些日志之前由于天知道的原因没有被收集。

    我已将此作为一个问题提出。如果我知道原因会更新我的答案。

    希望这对您有所帮助。主要是我建议你调整你的输入配置,然后看看变化。

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 2020-01-18
      • 1970-01-01
      • 2021-01-05
      • 2022-07-07
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多