轻量级日志系统(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测试是否连通
- 进入Data Source页面Add data source
2. 点击后输入框搜索Loki后点击填写数据,填写完成后点击Save & test后
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按照步骤就可以查看日志了
此外Loki还支持HTTP API的形式操作数据,具体的可以看官网文档。