api - 不使用代理直接将日志发送到 Loki
问题描述
有没有办法直接将日志发送到 Loki 而无需使用其中一个代理?
例如,如果我有一个 API,是否可以从 API 直接向 Loki 发送请求/响应日志,而不受 Promtail 等的干扰?
提前致谢!
解决方案
洛基 HTTP API
Loki HTTP API允许将消息直接推送到 Grafana Loki 服务器:
发布 /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>" ] ] } ] }
您可以设置 Content-Encoding: gzip 请求标头并发布 gzip 压缩的 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" ] ] }]}'
因此很容易创建带有日志的 JSON 格式的字符串并将其发送到 Grafana Loki。
图书馆
有一些库实现了几个 Grafana Loki 协议。
纯 Java 1.8 中还有(我的)零依赖库,它实现了将 JSON 格式的日志推送到 Grafana Loki。适用于 Java SE 和 Android 平台:
安全
以上 API 不支持此处所写的任何访问限制- 通过公共网络使用时,请考虑使用来自Certbot的 HTTPS和Basic Authentication配置 Nginx 代理。
推荐阅读
- java - 春季启动时请求正文为空
- javascript - 如何从 html 按钮单击执行 JavaScript?
- kubernetes - 从特定 IP 地址出口 kubernetes 服务/pod
- javascript - 我如何解析下一个字符串:
- android - 如何在 gradle 中启用视图绑定?
- apache-spark - Spark Shuffle 写入大小是输入大小的 7500 倍
- javascript - 无法访问模块函数中的 quill 实例
- postgresql - 与触发函数和插入语句sql有关的错误
- python - Python中的多个窗口,tkinter
- 3d - 使用 Python 创建 3D EEG 地形图