无法通过 fluentd/elasticsearch 收集所有 kubernetes container/pod 日志
Unable to collect all kubernetes container/pod logs via fluentd/elasticsearch
我是 fluentd/elasticsearch 堆栈的新手,我正在尝试将其部署到 kubernetes 上。虽然我设法做到了这一点,但我遇到了一个问题,即并非所有 pod/container 日志都显示在 elasticsearch 上(我正在使用 Kibana 进行数据可视化)。换句话说,我能够看到来自 "default" kubernetes pods 的日志,例如 weave-net 和 elasticsearch 相关的 pod 日志(es-data、es-master...等),但不能来自 "custom" pods 我正在尝试部署。
作为一个简单的测试,我在 fluentd/elasticsearch 所在的同一个 kube 命名空间中部署了 redis,redis service/deployment 看起来像这样:
---
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 守护程序的日志时pods,我看到以下内容:
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>
任何提示都会很有帮助。
提前致谢。
我出于同样的目的使用 fluent bit,几天前我遇到了完全相同的问题。 Fluent bit 是 fluentd 的轻量级版本,对我有用的可能对你也有用。
我的流利位出了什么问题是输入配置。对于拖入大型日志文件的尾部插件,日志轮换存在一些问题。所以我将 refresh_interval 降低到大约 5 秒(更新监视文件列表的时间段)。然后我将 mem_buf_limit 降低到大约 5MB(日志流利位的总大小在将其刷新到输出插件之前进入内存)。
通过这些更改,我能够获得更多的日志,这些日志之前由于天知道原因而未被收集。
我已经提出这个问题。如果我知道原因会更新我的答案。
希望这对您有所帮助。我主要建议您调整输入配置,然后查看更改。
我是 fluentd/elasticsearch 堆栈的新手,我正在尝试将其部署到 kubernetes 上。虽然我设法做到了这一点,但我遇到了一个问题,即并非所有 pod/container 日志都显示在 elasticsearch 上(我正在使用 Kibana 进行数据可视化)。换句话说,我能够看到来自 "default" kubernetes pods 的日志,例如 weave-net 和 elasticsearch 相关的 pod 日志(es-data、es-master...等),但不能来自 "custom" pods 我正在尝试部署。
作为一个简单的测试,我在 fluentd/elasticsearch 所在的同一个 kube 命名空间中部署了 redis,redis service/deployment 看起来像这样:
---
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 守护程序的日志时pods,我看到以下内容:
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>
任何提示都会很有帮助。 提前致谢。
我出于同样的目的使用 fluent bit,几天前我遇到了完全相同的问题。 Fluent bit 是 fluentd 的轻量级版本,对我有用的可能对你也有用。
我的流利位出了什么问题是输入配置。对于拖入大型日志文件的尾部插件,日志轮换存在一些问题。所以我将 refresh_interval 降低到大约 5 秒(更新监视文件列表的时间段)。然后我将 mem_buf_limit 降低到大约 5MB(日志流利位的总大小在将其刷新到输出插件之前进入内存)。
通过这些更改,我能够获得更多的日志,这些日志之前由于天知道原因而未被收集。
我已经提出这个问题。如果我知道原因会更新我的答案。
希望这对您有所帮助。我主要建议您调整输入配置,然后查看更改。