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 日志监控系统搭建