我有一个要求,我希望存储在该位置的所有 Kubernetes 容器的日志文件/var/log/containers/
即使在集群重启或节点出现问题后也能保持持久性。我已经使用 elastic search、fluent-bit 和 Kibana 实现了 EFK。但现在我想要原封不动的日志文件。我尝试使用相同的 fluent-bit 将日志转发到不同的位置,使用以下配置:
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
Parser docker
DB /var/log/flb_kube.db
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
[OUTPUT]
Name file
Match *
Path /logs
但我看不到正在创建的文件。是我看错了路径还是根本没有创建文件?
我也愿意使用任何其他工具来产生结果。有人能帮我解决这个问题吗?提前谢谢。
答案1
修改 Kubernetes 节点的 kubelet 配置以使用自定义日志目录。默认情况下,Kubernetes 会将日志记录到 /var/log/containers。要更改此设置,请编辑 kubelet 配置文件(通常位于 /etc/default/kubelet 或 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf)并添加 --log-dir 标志。
KUBELET_EXTRA_ARGS=--log-dir=/logs #Replace /logs with your desired directory
对 kubelet 配置进行更改后,重新启动 kubelet 服务以使更改生效。
sudo systemctl restart kubelet
使用Fluent Bit将日志从自定义日志目录转发到您的Elasticsearch或者EFK 堆栈。您的 Fluent Bit 配置文件应包含必要的输出设置。
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
[INPUT]
Name tail
Tag kube.*
Path /logs/*.log
Parser docker
DB /var/log/flb_kube.db
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
[OUTPUT]
Name es
Match *
Host <your_elasticsearch_host>
Port <your_elasticsearch_port>
Index kubernetes_logs
代替<你的elasticsearch主机>和<你的elasticsearch端口>和你的Elasticsearch服务器的详细信息。
重新启动 Fluent Bit 以应用新配置
sudo systemctl restart fluent-bit