Loki HTTP API
Charmed Loki exposes its HTTP API over port 3100.
Example 1 - Get Loki version:
/loki/api/v1/status/buildinfo
exposes the build information in a JSON object.
The fields are version
, revision
, branch
, buildDate
, buildUser
, and goVersion
.
$ loki_ip=$(juju status loki-k8s/0 | grep "loki-k8s/0" | awk '{print $4}')
$ curl http://$loki_ip:3100/loki/api/v1/status/buildinfo | jq
{
"version": "2.4.1",
"revision": "f61a4d261",
"branch": "HEAD",
"buildUser": "root@39a6e600b2df",
"buildDate": "2021-11-08T13:09:51Z",
"goVersion": ""
}
Example 2 - Send log lines to Loki with curl:
/loki/api/v1/push
is the endpoint used to send log entries to Loki. The default behavior is for the POST body to be a snappy-compressed protobuf message.
Alternatively, if the Content-Type
header is set to application/json
, a JSON post body can be sent in the following format:
loki_ip=$(juju status loki-k8s/0 | grep "loki-k8s/0" | awk '{print $4}')
curl -v \
-H "Content-Type: application/json" \
-XPOST -s "http://$loki_ip:3100/loki/api/v1/push" \
--data-raw '{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1570818238000000000", "fizzbuzz" ] ] }]}'
Example 3 - Send logs entries to Loki with Promtail:
Promtail is an agent which ships the contents of local logs to Loki. It is usually deployed to every machine that has applications needed to be monitored.
It primarily:
- Discovers targets
- Attaches labels to log streams
- Pushes them to the Loki instance.
Currently, Promtail can tail logs from two sources: local log files and the systemd journal (on AMD64 machines only).
To set up a Promtail instance to work with Loki Charmed Operator please refer to Configuring Promtail documentation. Anyway the most important part is the clients
section in Promtail config file, for instance:
clients:
- url: http://<LOKI_ADDRESS>:3100/loki/api/v1/push