logcli 一个loki 的命令行工具, 通过logcli 可以在命令行很好的进行日志查询与导出 安装 cd /tmp/ \wget https://github.com/grafana/loki/releases/download/v2.5.0/logcli-linux-amd64.zip \unzip logcli-linux-amd64.zip
cd /tmp/ && \
wget https://github.com/grafana/loki/releases/download/v2.5.0/logcli-linux-amd64.zip && \
unzip logcli-linux-amd64.zip && \
mv logcli-linux-amd64 /usr/local/bin/ && \
ln -sv /usr/local/bin/logcli-linux-amd64 /usr/local/bin/logcli && \
rm -f ./logcli-linux-amd64.zip
配置
echo 'export LOKI_ADDR=http://localhost:3100' >> /etc/profile && \
source /etc/profile
如果loki 为非本机地址, 请将localhost 替换为对应ip 地址
执行命令logcli labels
出现类似以下内容时,表示配置成功
logcli labels
http://localhost:3100/loki/api/v1/labels?end=1656311640897253757&start=1656308040897253757
__name__
用法
query
query 中查询表达式可以使用任意logql 进行查询, 以下仅以{app="foo"}
做示例说明, 更多logql 语法请查询官方文档 LogQL
1. 查询app 为foo, 10条日志
logcli query '{app="foo"}' --limit 1 -o raw
# --limit 限制日志条数, 默认30
# -o 输出格式, 有三种default, jsonl, raw. raw 相比default 会抑制日志标签与时间戳的输出
2. 查询app 为foo, 10条日志,每批次限制5条
logcli query '{app="foo"}' --limit 10 -o raw --batch 5
# --batch 限制每批次请求行数,范围 2-5000
3. 查询app 为foo, 时间为2022-06-26 09:00:00 到 2022-06-26 18:00:00 的日志
logcli query '{app="foo"}' -o raw --from="2022-06-26T01:00:00Z" --to="2022-06-26T10:00:00Z" --timezone=UTC
# --from 日志起始时间
# --to 日志截止时间
# --timezone 时区, 二选一 Local 或UTC, 建议使用UTC 时区
有时可能会遇到这种情况-> 服务foo 在过去某一段时间明明有日志, 但是通过
logcli query '{app="foo"}' -o raw
未查询到结果, 这是因为 logcli 默认只在过去1小时的区间里查询日志(--since=1h), 如果没有查询到日志,则会返回空
4. 查询app 为foo, 过去8个小时最新的1000 条日志
logcli query '{app="foo"}' -o raw --limit 1000 --since=8h
5. 实时查询app 为iam 的日志
logcli query '{app="foo"}' --limit 10 -o raw -t
# -t 实时跟踪日志
labels
1. 查询loki 所有的标签
logcli labels -q # 同query 的时间区间,默认 --since=1h
2. 查询app 标签所有的值
logcli labels app
series
series 命令将根据提供的标签匹配器 返回时间窗口内的所有日志流
1. 获取所有标签的摘要信息
logcli series '{}' -q --analyze-labels # 同query 的时间区间,默认 --since=1h
2. 获取app 为foo 的日志流信息
logcli series '{app="foo"}' -q
参考: https://grafana.com/docs/loki/latest/tools/logcli/