系统组件概览
什么是 Loki?
Loki 是由 Grafana Labs 开源的一款高可用、高扩展性、多租户的日志聚合系统。它受到 Prometheus 的启发,采用了类似的机制,使用标签(labels)对日志进行特征标记,然后进行归集统计。
Loki 的设计理念是经济高效且易于操作,它不会为日志内容建立全文索引,而是对日志数据进行压缩存储,并且只对日志数据的元数据(如时间戳、labels 等)建立索引。这样的设计使得 Loki 在存储成本和查询效率方面具有优势。
什么是 Loki4j?
Loki4j 是一个专为 Java 应用程序设计的日志 appender,它使得 Java 应用能够直接将日志发送到 Loki 服务器。Loki4j 特别适用于 Spring Boot 环境,因为它可以无缝集成到使用 Logback 或 Log4j2 的系统中,为 Java 开发者提供了一个简单而强大的日志管理解决方案。
什么是 Grafana?
Grafana 是一个功能强大的开源数据可视化和监控平台。它支持多种数据源,包括 Loki,允许用户创建动态且高度定制的仪表板,以直观展示日志数据。Grafana 的灵活性和丰富的功能使其成为监控和分析日志数据的理想选择。
搭建步骤
1. 安装 Loki 和 Grafana
首先,我们需要安装 Loki 和 Grafana。本文通过 Docker 来快速部署它们。
代码语言:javascript复制# 安装Loki
docker run -d --name loki -p 3100:3100 grafana/loki:latest -config.file=/etc/loki/local-config.yaml
# 安装Grafana
docker run -d --name grafana -p 3000:3000 grafana/grafana:latest
2. 配置 Loki4j
在 Spring Boot 项目中,我们将使用 Loki4j 来发送日志到 Loki。
首先,添加 Loki4j 依赖到你的pom.xml文件中:
代码语言:javascript复制<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender</artifactId>
<version>1.4.1</version>
</dependency>
然后,配置 Logback,在 src/main/resources
目录下创建 logback.xml 文件,并添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 引入Spring应用名称 -->
<springProperty name="name" source="spring.application.name"/>
<!-- 控制台输出器 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [thread %thread] %-5level %logger{35}.%method - %msg%n</pattern>
</encoder>
</appender>
<!-- Loki输出器 -->
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://localhost:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>application=${name},level=%level</pattern>
<readMarkers>true</readMarkers>
</label>
<message>
<pattern>
{"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}", "level": "%level", "logger": "%logger{36}.%method", "method":"%M", "line":"%line", "thread": "%thread", "message": "%msg%n"}
</pattern>
</message>
<sortByTime>true</sortByTime>
</format>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="LOKI"/>
</root>
</configuration>
3. 配置 Grafana
打开 Grafana 的 Web 界面(地址为http://localhost:3000
),首次登录账号密码都是 admin,登录之后修改密码,添加 Loki 作为数据源,并配置它指向运行中的 Loki 服务。
4. 运行 Spring Boot 应用
运行你的 Spring Boot 应用,现在所有的日志都会发送到 Loki,并且可以在 Grafana 中查看。
5. 查看日志
在 Grafana 中,你可以创建仪表板来展示日志数据。选择 Loki 作为数据源,然后使用 Loki 的查询语法来过滤和展示日志。
下面做一个简单查看日志的操作,点击 explore ,数据源选loki,在Label filters选项中选择标签(application)和值(muqing-api),点右上角Run query搜索查看日志。
结语
通过上述步骤,我们成功搭建了一个简单的 Java 日志系统,它结合了 Loki 的强大日志聚合能力、Loki4j 的便捷日志发送功能、Grafana 的可视化展示。本文讲解了如何快速的搭建一个简单的日志系统,实际开发中还有许多因素需要考虑,比如安全性等方面。
后续还会针对 Loki 的另一个日志收集器Promtail进行讲解,它是一个支持任何格式、可独立部署、灵活度更高的服务。