将 EKS -> Cloudwatch 的日志传输从 FluentD 迁移到 Fluent Bit

我搬家了

 

总结

我把之前在将EKS应用程序日志传送到CloudWatch中使用的FluentD替换为了Fluent Bit。在这个过程中,由于官方文件中只提供了一些基础信息,没有涉及到一些具体问题,所以我遇到了一些困难。

建议将FluentD迁移到Fluent Bit。

数年前,我们使用FluentD将在EKS集群上运行的应用程序日志集中到Cloudwatch中。以下是当时的文章:↓↓↓

 

自从进行了这个设置以来,大约三年半以来一直通过这个方法来获取日志。
然而,不久前,我们将EKS的Kubernetes版本从1.22升级到1.25后,无法获取日志的情况发生了。
在调查原因的过程中,我们了解到使用FluentD现在已经不推荐了。
由于进一步调查无法获取日志的原因可能会浪费时间,因此我们决定先推进向Fluent Bit的迁移。

Container Insights 的 FluentD 支援目前已進入維護模式。換句話說,AWS 將不再提供 FluentD 的更新,並計劃在不久的將來將其標為不推薦使用。
(省略部分)
我們強烈建議您盡可能地遷移至使用 FluentBit 在Container Insights 中。使用 FluentBit 作為Container Insights 的日誌轉發器將大幅提升性能。

将FluentD配置为将日志发送到CloudWatch Logs的DaemonSet选项。

关于迁移到Fluent Bit的事宜

转变步骤

基本上是官方文件。

 

尽管基于此,但只有这个还不够灵活。

公式文件中提到,应直接应用于 Fluent Bit 的配置文件。

执行以下任一命令,将Fluent Bit守护进程下载并部署到集群中。

然而,如果直接使用这个文件,会有一些不方便的地方。所以,决定在应用之前先进行修改。

在文档中有一个选项叫做“类似于 Fluentd 的 Fluent Bit 配置”,但在我的环境中根本不相似,所以我使用了“Fluent Bit 优化配置”的选项。

首先,让我们下载以下文件。

 

改变日志解析方法

默认情况下,日志将以”CRI格式”输出。
这是AWS提供的示例配置,将其作为纯文本汇总。

before.png

因此,我们将对此进行解析并转化为结构化数据。

after.png

在设置parsers.conf的部分

[PARSER]
    Name        cri
    Format      regex
    Regex       ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>.*)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z

给它增加一样东西。

然后,在设置application-log.conf部分时,将所有使用docker的地方全部替换为cri。

Parser              docker

In Chinese, the phrase “を” can be paraphrased as “用于” yú).

Parser              cri

之。

参考链接:https://progret.hatenadiary.com/entry/2022/04/24/102737;
请尽量用中文进行封装,只需要一种选项。

改变日志流的名称

開始される最適設定を提供しています。

Kubernetes的节点名称-应用名称-日志路径-容器日志路径为kubernetes-容器名称-容器ID。

这将成为一个名字。

我希望能将跨Pod的同一应用程序的日志汇总到同一个日志流中。这是因为当我想要查看错误日志时,如果日志流被按容器ID分开,查找就会变得很困难。(也许应该在Elasticsearch等工具中进行日志汇总吗?)

    [OUTPUT]
        Name                cloudwatch_logs
        Match               application.*
        region              ${AWS_REGION}
        log_group_name      /aws/containerinsights/${CLUSTER_NAME}/application
        log_stream_prefix   ${HOST_NAME}-
        log_stream_template $kubernetes['labels'] ['app'].$kubernetes['namespace_name'] // ここ!
        auto_create_group   true
        extra_user_agent    container-insights

作为答案,请指定一个名为log_stream_template的参数。
然而,为了备用,需要保留指定log_stream_name或log_stream_prefix的选项。

log_stream_template在代码中将被称之为”Record Accessor”。

 

在文件中没有提到,但似乎对使用连字符有限制。
原本希望通过将应用程序名称和环境名称连接起来以集中日志,但决定使用应用程序名称和环境名称之间的句点。

整体来说

而最后,

使用kubectl命令应用fluent-bit.yaml文件。

应用设置后,由Fluent Bit解析为所需的日志流名称,然后将日志传送到Cloudwatch。

只需保留以下一种方式的中文释义:
接下来,我们要删除FluentD的DaemonSet。


请通过此处咨询工作相关事宜。

 

广告
将在 10 秒后关闭
bannerAds