第四章:LogCLI 命令行工具

掌握 LogCLI 的安装和使用方法,用于查询和分析 Loki 日志。

最后更新: 2024-01-18
页面目录

LogCLI 命令行工具

LogCLI 是 Loki 的官方命令行客户端,用于查询和导出日志数据。

安装 LogCLI

二进制安装

# Linux
curl -O -L "https://github.com/grafana/loki/releases/download/v2.9.0/logcli-linux-amd64.zip"
unzip logcli-linux-amd64.zip
sudo mv logcli-linux-amd64 /usr/local/bin/logcli
chmod +x /usr/local/bin/logcli

# macOS
brew install logcli

# 验证安装
logcli --version

Docker 运行

# 使用 Docker
docker run --rm grafana/logcli:2.9.0 --version

# 设置别名
alias logcli='docker run --rm -ti grafana/logcli:2.9.0'

基本配置

环境变量

# 设置 Loki 地址
export LOKI_ADDR=http://localhost:3100

# 设置认证信息
export LOKI_USERNAME=admin
export LOKI_PASSWORD=admin

# 跳过证书验证
export LOKI_TLS_CA_CERT=/path/to/ca.crt

# 输出格式
export LOKI_OUTPUT_MODE=raw

配置文件

# 查看默认配置路径
~/.config/logcli/config.yml

# 创建配置
cat > ~/.config/logcli/config.yml << EOF
address: http://localhost:3100
output-mode: raw
from: 24h
stats: false
EOF

查询命令

基础查询

# 查询最近 24 小时的日志
logcli query '{job="nginx"}'

# 指定时间范围
logcli query '{job="nginx"}' --from=2024-01-01T00:00:00Z --to=2024-01-02T00:00:00Z

# 相对时间查询
logcli query '{job="nginx"}' --from=1h
logcli query '{job="nginx"}' --from=30m
logcli query '{job="nginx"}' --from=7d

# 限制返回条数
logcli query '{job="nginx"}' --limit=100

日志过滤

# 包含关键字
logcli query '{job="nginx"}' |= "error"

# 排除关键字
logcli query '{job="nginx"}' != "debug"

# 正则匹配
logcli query '{job="nginx"}' |~ "error.*timeout"

# 否定正则
logcli query '{job="nginx"}' |~! "info.*debug"

# 多个过滤条件
logcli query '{job="nginx"}' |= "error" |~ "timeout|connection"

聚合查询

# 统计错误数量
logcli query '{job="nginx"}' | json | stats
logcli query '{job="nginx"}' | json | line_format "{{.status}}"

# 按标签聚合
logcli query '{job="nginx"}' | json | sum by (status) (rate(counter[5m]))

# 统计日志条数
logcli query '{job="nginx"}' --stats

输出格式

常用格式

# 原始输出
logcli query '{job="nginx"}' --output=raw

# 标准输出
logcli query '{job="nginx"}' --output=default

# JSON 输出
logcli query '{job="nginx"}' --output=jsonl

# 美化 JSON
logcli query '{job="nginx"}' --output=json

输出示例

# raw 格式
2024-01-15T10:00:00Z job=nginx msg="GET /api/health status=200 duration=5ms"

# json 格式
{
  "streams": [...],
  "status": "success",
  "stats": {...}
}

高级选项

统计信息

# 显示查询统计
logcli query '{job="nginx"}' --stats

# 输出示例
Ingester head chunk bytes: 2.1k
Ingester head chunk entries: 42
Ingester decomposed path missed regexp: 0
Total bytes matched: 15.2k
Total lines matched: 128
Total streams matched: 3

并发控制

# 并行客户端数
logcli query '{job="nginx"}' --parallelize=4

# 统计信息包含
logcli query '{job="nginx"}' --include-stats

时间相关

# 设置时区
logcli query '{job="nginx"}' --timezone=Asia/Shanghai

# 时间格式化
logcli query '{job="nginx"}' --time-format=2006-01-02\ 15:04:05

实时查询

# 实时跟踪日志
logcli query '{job="nginx"}' --tail

# 带过滤的实时跟踪
logcli query '{job="nginx"}' |= "error" --tail

# 带超时的实时跟踪
logcli query '{job="nginx"}' --tail --from=1h --timeout=5m

标签查询

# 查看标签名称
logcli labels

# 查看标签值
logcli label job values

# 查看所有标签值
logcli labels '{job="nginx"}'

Series 查询

# 查看所有 series
logcli series '{job="nginx"}'

# 查看带过滤的 series
logcli series '{job=~".*"}'

# 查看特定时间范围的 series
logcli series --from=1h --to=now '{job="nginx"}'

导出功能

# 导出到文件
logcli query '{job="nginx"}' --from=1d > nginx.logs

# 导出到 gzip
logcli query '{job="nginx"}' --from=1d | gzip > nginx.logs.gz

# 导出带统计信息
logcli query '{job="nginx"}' --from=1d --stats > nginx.stats.json

常用命令速查

命令 说明
logcli query <query> 执行日志查询
logcli query <query> --tail 实时跟踪
logcli labels 列出标签
logcli label <name> values 列出标签值
logcli series <selector> 列出 series
logcli --help 帮助信息
logcli --version 版本信息

完整示例

# 1. 基本查询
logcli query '{job="nginx"}' --from=24h

# 2. 错误日志查询
logcli query '{job="nginx"}' |= "error" --from=1h

# 3. 实时跟踪
logcli query '{job="nginx"}' --tail

# 4. 按服务统计
logcli query '{job=~".*"}' | json | stats

# 5. 导出日志
logcli query '{job="nginx"}' --from=7d --output=jsonl > nginx.jsonl

# 6. 查看 series
logcli series '{job="api-server"}'

下一步

接下来让我们学习 Promtail 配置。

👉 Promtail 配置