Grafana Loki 的 Java 客户端库

Posted

技术标签:

【中文标题】Grafana Loki 的 Java 客户端库【英文标题】:Java client library for Grafana Loki 【发布时间】:2020-07-13 02:53:52 【问题描述】:

目前我们正在使用 statsd java 客户端将某些应用程序数据推送到石墨。我们使用这些数据在 Grafana 中构建仪表板。

我打算改用 Grafana Loki。我想知道是否可以使用像 statsd 这样的守护进程将某些数据直接推送到 Grafana Loki。是否有任何 java 客户端库可以这样做。如果是这样,请给我 maven 存储库链接。

【问题讨论】:

【参考方案1】:

您可以尝试 Loki4j Logback appender https://github.com/loki4j/loki-logback-appender(披露:我是它的作者)。

Loki4j 是 Loki 的纯 Java 客户端,具有灵活的标签和日志消息格式选项。它支持 Loki 推送 API 的 JSON 和 Protobuf 风格。您应该能够使用 Loki4j 将您想要的任何数据直接推送到 Loki。

【讨论】:

嗨,我试过用它,但没有用。我用 http url 配置了 logback.xml,我正在使用 org.slf4j.Logger 类来使用 logger.debug("logs") @VasanthNagKV 看起来像是配置错误的问题。请检查 stderr 中是否有任何错误消息,它们可以帮助您修复配置。您也可以向 GitHub 项目报告问题,以便我们一起深入研究。 没有错误,也没有写入日志,我想我在一个非常基本的意义上做错了什么。无论如何我会在github上报告它,谢谢。此外,我觉得 loki4j 的文档非常少。关于一些配置和示例。只是请求更多示例。谢谢 谁将 log4j 库与其他 Java 应用程序一起使用,应该采取一些主动措施,他们可以采取这些措施来降低 CVE-2021-44228 带来的风险。【参考方案2】:

我已经创建了一个 Java client 用于将日志推送到 Loki。在它之上构建了一个 log4j appender(在我的雇主那里,它用于生产每天推送 10 GB 的日志)。

它被设计为在日志路径上无锁和无分配。使用 Netty,因此向 Loki 发送批次分配,但它非常有效。

【讨论】:

谁将 log4j 库与其他 Java 应用程序一起使用,应该采取一些主动措施,他们可以采取这些措施来降低 CVE-2021-44228 带来的风险。 @vladimirvojtisek 你是绝对正确的。我已更新我的库以使用修复 CVE 的 Log4j2 2.16.0。【参考方案3】:

TinyLoki - 适用于桌面和 android 的零依赖纯 Java 1.8 库。 没有得到很好的优化,但很容易作为带有自定义标签的独立日志发送者采用。

https://github.com/mjfryc/mjaron-tinyloki-java

导入库:

dependencies 
    implementation 'io.github.mjfryc:mjaron-tinyloki-java:0.2.2'

然后:

import pl.mjaron.tinyloki.*;
public class Sample 
    public static void main(String[] args) 
        LogController logController = TinyLoki.createAndStart(
            "https://localhost/loki/api/v1/push", "user", "pass");
        ILogStream stream = logController.createStream(
            TinyLoki.info().l("customStaticLabelName","customVaue"));
        stream.log("Hello world.");
        //...

        // Optionally at the application exit, send latest logs.
        logController.softStop().hardStop();
    

【讨论】:

以上是关于Grafana Loki 的 Java 客户端库的主要内容,如果未能解决你的问题,请参考以下文章

Promtail + Loki + Grafana 日志监控系统搭建

使用 Grafana 和 Loki 删除重复条目

prometheus(或grafana)查询来评估grafana loki使用的存储?

在 grafana 云中访问 loki

在 Grafana 上排序日志(来自 Loki)

如何在 Grafana 上使用 LogQL 将 Loki 解析的字段绘制为数值?