如何使用 fluent-bit 将 Kubernetes 日志文件流式传输到其他位置?

如何使用 fluent-bit 将 Kubernetes 日志文件流式传输到其他位置?

我有一个要求,我希望存储在该位置的所有 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

相关内容