12 factor app manifesto 建议将所有日志输出写入 stdout。如果您的服务/应用程序在 docker 容器中运行,这非常容易实现。然后,您可以使用 docker log 驱动程序将日志发送到像 fluentd 这样的日志传送器,然后它可以将它们发送到 elasticsearch 进行分析或类似 HDFS 的东西进行长期存储。
虽然很清楚如何处理日志,但似乎没有任何关于如何处理指标的指导。例如,我们可能想要跟踪每个请求所花费的时间、错误率和我们服务的其他内容。
可以让服务直接发送指标,但这似乎违反了 12 因素应用程序原则。此外,如果指标服务器出现故障或服务出现故障,我们将需要处理将指标写入磁盘和其他类似预写日志的功能,这会增加复杂性。
一种可能的解决方案是将指标写入stdout
并使用 fluentd 过滤它们。但是在这种情况下,我们将日志和指标混合在一起,我们需要为日志和指标的外观设置一套格式来区分它们,这对于不是我们编写的服务可能不是一个选项。
在 12 因素应用程序中,应如何将来自应用程序/服务的指标发送到指标服务器?