无需使用代理即可将日志直接发送至 Loki

Luk*_*vko 13 grafana prometheus grafana-api grafana-loki

有没有一种方法可以直接将日志发送给 Loki,而无需使用其代理之一?

例如,如果我有一个 API,是否可以从 API 直接向 Loki 发送请求/响应日志,而不受 Promtail 等的干扰?

Mic*_*roń 17

洛基 HTTP API

Loki HTTP API允许将消息直接推送到 Grafana Loki 服务器:

POST /loki/api/v1/push

/loki/api/v1/push 是用于向 Loki 发送日志条目的端点。POST 正文的默认行为是快速压缩的 protobuf 消息:

或者,如果 Content-Type 标头设置为application/json,则可以按以下格式发送JSON 帖子正文:

{
  "streams": [
    {
      "stream": {
        "label": "value"
      },
      "values": [
          [ "<unix epoch in nanoseconds>", "<log line>" ],
          [ "<unix epoch in nanoseconds>", "<log line>" ]
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

您可以设置 Content-Encoding: gzip 请求标头并发布 gzipped JSON。

例子:

curl -v -H "Content-Type: application/json" -XPOST -s "http://localhost:3100/loki/api/v1/push" --data-raw \
 '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1570818238000000000", "fizzbuzz" ] ] }]}'
Run Code Online (Sandbox Code Playgroud)

因此,可以轻松创建带有日志的 JSON 格式字符串并将其发送到 Grafana Loki。

图书馆

一些库实现了多种 Grafana Loki 协议。

还有(我的)纯Java 1.8中的零依赖库,它实现了将JSON格式的日志推送到Grafana Loki。适用于 Java SE 和 Android 平台:

安全

上述 API 不支持此处编写的任何访问限制- 通过公共网络使用时,请考虑使用来自Certbot的 HTTPS和基本身份验证配置 Nginx 代理。