Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

4.7 高级日志配置

问题

如何集中管理所有服务的日志?

解决方案

当使用微服务架构和Kubernetes时,日志是一个重要的考虑因素,因为每个服务都有单独的日志输出。但作为开发者或操作者,你可能希望将所有的日志集中到一个地方,这样就可以将日志作为一个整体来使用。

Quarkus日志也支持JSON和GELF输出。

这些日志可以以JSON格式而不是纯文本的形式写入日志处理程序中——通过注册logging-json扩展来实现:

使用GELF扩展来生成GELF格式的日志,并使用TCP或UDP发送日志。

现在使用Graylog扩展日志格式(GELF)的三个集中式的日志系统是:

·Graylog(MongoDB、Elasticsearch、Graylog)

·ELK(Elasticsearch、Logstash、Kibana)

·EFK(Elasticsearch、Fluentd、Kibana)

要以GELF格式进行日志记录,需要添加logging-gelf扩展:

因为示例代码不变,所以使用的是相同的访问路径:

❶创建logger实例

❷子路径设置为/log

❸打印一条info级别的日志

GELF处理系统必须在application.properties中显式配置:

❶启用GELF扩展

❷设置发送日志的地址

❸端点端口设置

如果使用Logstash(ELK),你需要启用能处理GELF格式的输入插件:

如果使用Fluentd(EFK),你需要启用能处理GELF格式的输入插件:

讨论

Quarkus日志默认支持syslog格式,无须添加任何扩展。syslog格式的日志配置(在Fluentd中使用)可以用来替代上面的GELF格式的配置(在Quarkus中使用):

在Fluentd中,你需要启用能够处理syslog格式的输入插件:

如果你使用的是Kubernetes,最简单的方法是登录到控制台,并在集群中安装一个收集所有日志的中央日志管理器。

另见

要了解关于高级日志主题的更多信息,请访问以下网站:

·Logstash/Gelf Loggers(https://oreil.ly/Mj9Ha