【问题标题】:Performance when shipping logs from PHP to AWS ElasticSearch/OpenSearch将日志从 PHP 传送到 AWS ElasticSearch/OpenSearch 时的性能
【发布时间】:2021-12-19 14:17:45
【问题描述】:

是否建议将日志直接从 PHP 应用程序发送到 ElasticSearch?还是存储到文件并使用 filebeat 发送日志总是更好?我熟悉直接发送到 ES 的 C# 和 Serilog 实现,我们从来没有遇到过问题,但想知道是否可以使用 Monolog 对 PHP 应用程序进行同样的操作,而不会严重影响性能。我假设 Serilog 能够异步发送日志,我不确定 PHP 上的 Monolog 实现是否能够做到这一点,或者只要它们是不常见的错误日志,就可以直接发送,但信息/debug 日志记录会削弱性能。有人有这样做的经验吗?对于其他背景,我们将使用 AWS OpenSearch,并且 PHP 应用程序也将在 ECS/Fargate 容器中在 AWS 上运行,因此它将位于同一网络内。

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    就我个人而言,无论您最终选择哪种最终数据存储,我都建议您记录到文件中然后发送

    原因是,否则您需要在客户端中处理大量逻辑 - 负载平衡/故障转移、重试、错误处理、背压 - 虽然该数据存储的另一个客户端库可能会将其中的一些抽象出来,但很可能不是最好的地方

    最大的问题是背压。如果发生延迟或停止记录到您的数据存储的事情会发生什么?您是否将日志保存在内存中并稍后重试?你会阻塞直到日志被存储?你如何管理这些方面

    如果您登录到一个文件(甚至是容器的标准输出),您的代码就有一个非常清晰的描述点。您可能会备份日志以防万一您需要检查它,并且您可以使用特定于任务的工具来发送您的日志

    【讨论】:

    • 顺便说一句,opensearch 不是 Elasticsearch。这是一个 aws run fork
    • 所以在 Fargate 场景中,您建议保存到容器上的文件中(假设它是短暂的,但我们正在运送,所以大多数时候应该没问题)。然后 filebeat 会在自己的容器中运行,并且能够访问另一个容器上的文件或在每个容器上运行 filebeat,因为它非常轻量级?
    • 或者放入stdout让Filebeat读取,是的
    • 因此,如果您写入文件,我假设您还需要确保运行一些进程来清理文件,以免容器空间不足?
    • logrotate 在那里非常标准
    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 2016-10-07
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多