轻量级日志系统(Loki + Loki4j + Grafana)实践

981 阅读4分钟

轻量级日志系统(Loki + Loki4j + Grafana)实践

常见的日志监控系统

平时在构建日志管理系统时,传统的、重量级的ELK Stack当仁不让,除了它之外还有几个常见的选择:

  • Splunk:

    • 强大的商业日志管理和分析平台,提供实时搜索、监控和警报功能。
    • 用户界面友好,适用于大规模的日志数据收集和分析需求。
  • Graylog:

    • 开源的日志管理平台,支持实时流式处理和数据分析。
    • 提供强大的搜索和可视化功能,适合中小型企业和开发团队使用。
  • Fluentd:

    • 开源的数据收集器,设计用于大规模数据流处理。
    • 支持灵活的数据传输和转换,可以与多种数据存储系统集成。
  • Prometheus + Grafana:

    • Prometheus是一个开源的监控和警报工具,专注于时序数据的收集和存储。

    • Grafana作为其可视化和仪表板工具,与Prometheus紧密集成,用于监控数据的可视化展示。

我今天实践的是由Grafana Labs开发的日志聚合系统,它专注于高效率地收集和存储日志,使用标签而不是索引来组织日志数据,使其在大规模环境中更具可扩展性(轻量级)。想我这种叼毛的服务器装上Elasticsearch+Kibana基本就.gg了别说运行程序了了。

所需组件简介

想要使用轻量级日志系统(Loki + Loki4j + Grafana),首先要理解每个组件的作用和优势:

什么是 Loki?

Loki 是由Grafana Labs开发的开源日志聚合系统,专为高效处理和可视化大规模分布式系统的日志数据而设计。与传统的日志系统不同,Loki使用标签索引而非传统的文档索引存储日志数据,这种方式提升了查询效率和存储效率,尤其适合大规模环境的应用。

什么是Loki4j?

Loki4j 是专为Java应用程序设计的日志库,用于将应用程序的日志数据发送到Loki服务器。它提供简单的API接口,使得在Java应用中集成Loki变得更加便捷高效,充分利用Loki的强大存储和检索能力。

什么是Grafana?

当谈论Grafana时,可以将其描述为一个强大且灵活的开源数据可视化和监控平台。它最初是为了监控系统指标而开发的,但现在已经发展成为支持多种数据源的广泛应用工具。

Grafana 是一款开源的数据分析和可视化平台,最初用于监控数据展示和分析。现在,Grafana不仅支持各种数据源(如时序数据库、日志数据库、关系型数据库等),还提供丰富的图表选项和仪表板配置,用户可以通过简单的拖拽操作快速创建和定制监控和分析场景。Grafana还拥有强大的警报功能,帮助用户实时响应数据异常情况。

实践过程

1. 安装Loki和Grafana

[root@bogon ~]# docker run -d --name loki -p 3100:3100 grafana/loki:latest -config.file=/etc/loki/local-config.yaml
[root@bogon ~]# docker run -d --name grafana -p 3000:3000 grafana/grafana:latest

有需要的可以将配置、数据和日志文件保存到宿主机。

grafana组件安装好后可以过127.0.0.1:3000进入操作页面,默认账号密码:admin。

登录成功以后可以先测试连接loki测试是否连通

  1. 进入Data Source页面Add data source

image-20240619172307402.png

image-20240619172415963.png 2. 点击后输入框搜索Loki后点击填写数据,填写完成后点击Save & test后

image-20240619174025971.png

2. 配置Loki4j

引入jar包

<dependency>
 <groupId>com.github.loki4j</groupId>
 <artifactId>loki-logback-appender</artifactId>
 <version>1.4.1</version>
</dependency>

在src/main/resources下创建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <!-- 引入Spring应用名称 -->
 <springProperty scope="context" 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{36}.%method - ${name} - %msg%n</pattern>
     </encoder>
 </appender><!-- Loki输出器 -->
 <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
     <http>
         <url>http://192.168.56.102: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>

application.yml

spring:
application:
 name: blog

配置完成后运行程序就可以去garafana查看日志了

3. 查看日志

进入garafana按照步骤就可以查看日志了

image-20240619230211998.png 此外Loki还支持HTTP API的形式操作数据,具体的可以看官网文档。