ELK太重怎么办?试试这个轻量级Loki吧!

在软件开发中,日志系统扮演着至关重要的角色。它不仅帮助开发者调试程序,还能在生产环境中监控应用状态。本文将讲解如何使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统。

系统组件概览

什么是 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 来快速部署它们。

# 安装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文件中:

<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 的可视化展示。本文讲解了如何快速的搭建一个简单的日志系统,实际开发中还有许多因素需要考虑,比如安全性等方面。