微服务的日志与监控:微服务日志管理将面临的挑战
日志来自正在运行的进程的事件流。对于传统的JavaEE应用程序而言,有许多框架和库可用于日志记录。Java Logging (JUL)是Java自身所提供的现成选项。除此之外,Log4j、Logback和SLF4J也是其他一些流行的日志框架。
这些框架都能很好地支持UDP及 TCP。应用程序将日志条目发送到控制台或文件系统。通常使用文件回收技术来避免日志填满所有磁盘空间。
日志处理的最佳实践之一是关闭生产中的大部分日志条目,因为磁盘IO的成本很高。磁盘IO不但会减慢应用程序的运行速度,还会严重影响它的可伸缩性。将日志写入磁盘也需要较高的磁盘容量。当磁盘空间用完之后,就有可能降低应用程序的性能。日志框架提供了在运行时控制日志记录的选项,以限制必须打印及不打印的内容。这些框架中的大部分不仅对日志记录控件提供了细粒度的控制,还提供了在运行时更改这些配置的选项。
另外,日志可能包含重要的信息,如果分析得当,则可能具有很高的价值。因此,限制日志条目本质上限制了用户理解应用程序行为的能力。所以,日志是一把“双刃剑”。
对于传统的单个架构而言,日志管理本身并不存在难点,毕竟所有的日志文件都存储在应用所部署的主机上,获取日志文件或搜索日志内容都比较简单。但分布式系统则不同,特别是微服务架构所带来的部署应用方式的重大转变,都使得微服务的日志管理面临很多新的挑战,主要有以下几种。
日志文件分散
微服务架构所带来的直观结果,就是微服务