Logcli-loki命令行工具

安装

前往Loki版本发布页面 下载对应版本的Logcli命令行工具到本地。

1
2
3
4
5
6
7
cd /tmp && wget https://github.com/grafana/loki/releases/download/v2.7.2/logcli-linux-amd64.zip

unzip logcli-linux-amd64.zip

mv logcli-linux-amd64 /usr/bin

rm -f ./logcli-linux-amd64.zip

配置loki客户端连接loki服务器的地址到环境变量

1
2
3
4
5
6
# 如果loki 为非本机地址, 请将localhost 替换为对应ip地址
$ export LOKI_ADDR=http://localhost:3100

# 如果你的loki有账号密码的认证,使用下面将账号密码导入到环境变量中
$ export LOKI_USERNAME=<username>
$ export LOKI_PASSWORD=<password>

注意:如果在代理服务器后面运行 Loki 并且配置了身份验证,则还必须相应地传入 LOKI_USERNAME 和 LOKI_PASSWORD、LOKI_BEARER_TOKEN 或 LOKI_BEARER_TOKEN_FILE。

验证是否安装成功

1
2
3
4
5
6
# 当查询到服务器上的标签即成功。
$ logcli labels
2023/02/01 13:19:24 http://localhost:3100/loki/api/v1/labels?end=1675228764425123295&start=1675225164425123295
filename
host
job

常用子命令的用法

query子命令

0、子命令帮助信息查看

1
$ logcli query --help

1、查询app标签foo10条日志

1
2
3
$ logcli query '{app="foo"}' --limit 10 -o raw  
# --limit 限制日志条数, 默认30
# -o 输出格式, 有三种default, raw, jsonl, raw 相比default 会抑制日志标签与时间戳的输出

2、查询app标签foo10条日志,每批次限制5条

1
2
$ logcli query '{app="foo"}' --limit 10 -o raw --batch 5
# --batch 限制你每批次请求日志的行数,直到请求完成--limit设置的行数停止,范围 2-5000,默认是1000

3、查询app标签foo, 时间为2022-06-26 09:00:002022-06-26 18:00:00的日志

1
2
3
4
$ logcli query --limit 2000000 --batch 2000 '{app="foo"}' --from="2022-06-26T01:00:00Z" --to="2022-06-26T10:00:00Z" --timezone=Local
# --from 日志起始时间
# --to 日志截止时间
# --timezone 时区, 二选一 Local 或UTC

有时可能会遇到这种情况-> 服务foo在过去某一段时间明明有日志, 但是通过 logcli query '{app="foo"}' -o raw 未查询到结果.

这是因为logcli默认只在过去1小时的区间里查询日志(–since=1h), 如果没有查询到日志,则会返回空。

4、查询app标签foo,过去8个小时最新的1000条日志。

1
2
$ logcli query '{app="foo"}' --limit 1000  --since=8h
# --since=8h 过去8小时,只支持小时单位,比如1h 2h 8h,不支持1d 2d这样的天单位

5、实时查询app标签foo的日志

1
2
$ logcli query '{app="foo"}'  --limit 10 -o raw -t
# -t 实时跟踪日志

labels子命令

1、查询loki所有的标签

1
2
$ logcli labels -q 
# 同query 的时间区间,默认 --since=1h,只会显示1小时内有数据的标签。

2、查询app标签下所有的值

1
$ logcli labels app

series子命令

series 命令将根据提供的标签匹配器 返回时间窗口内的所有日志流

1、获取所有标签的摘要信息

1
2
3
$ logcli series '{}' -q --analyze-labels 

# 同query 的时间区间,默认 --since=1h

2、获取app为foo的日志流信息

1
$ logcli series '{app="foo"}' -q