3

我们将开始在 AWS elasticbeanstalk 上使用 docker 部署我们的 java 应用程序,我们想要集中式日志记录并将使用 ELK 堆栈。

我想为每个容器保留一个进程,因此避免使用 filebeat,但为了做到这一点,我们必须使用不同的 appender,如 syslog 甚至是 tcp appender。

我们不能承受丢失日志。

Filebeat 提供开箱即用的重试逻辑,但将其引入混合会增加部署复杂性,需要确保 filebeat 在容器终止时接收 SIGTERM,确保它已预先烘焙到容器映像或 Dockerfile 中,等等.

如果我们使用 tcp 或 syslog appender 沿着这条路走下去,重试取决于我们,我们也希望避免代码的复杂性。

除了我所指出的之外,每种方法的优缺点是什么?

我们的日志库是 logback。

4

1 回答 1

1

我和你有同样的担忧。最安全的记录方式是本地文件(假设您有足够的空间)。因为要保证其他进程或网络端点的可用性要困难得多。

查看 Logback 邮件列表中的讨论:orig / MarkLogic mirror / Nabble mirror,特别是重播:

如果您绝对想确保记录日志,在某种程度上记录失败应该意味着应该重试事务,那么重新记录不是 API 的正确选择。

https://github.com/internetitem/logback-elasticsearch-appender项目直接为高可用性 ElastichSearch 集群提供附加程序,如果所有节点都关闭,则将日志事件缓冲到内存中。

另一种方法是写入高可用中间件以进行缓存和交付保证。比如Kafka、Redis等。

于 2017-08-28T04:54:49.550 回答