深色模式
Loki 安装与查询
Loki 是 Grafana 生态的日志系统,按标签索引而非全文,存储极省。本文用 Docker 单节点起 Loki,并演示 LogQL 查询。
适用环境
bash
docker --version
docker compose version
# 准备数据目录
sudo mkdir -p /opt/loki/{chunks,rules}1
2
3
4
2
3
4
操作步骤
1. 编写 docker-compose.yml
yaml
services:
loki:
image: grafana/loki:latest
command: -config.file=/etc/loki/local-config.yaml
ports:
- "3100:3100"
volumes:
- /opt/loki:/loki1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
2. 启动
bash
docker compose up -d
curl -s http://localhost:3100/ready # 返回 "ready"1
2
2
3. 用 LogQL 查询(通过 Loki HTTP API)
bash
# 查询某服务的日志
curl -s -G 'http://localhost:3100/loki/api/v1/query_range' \
--data-urlencode 'query={app="nginx"}' \
--data-urlencode 'start=1h' | head -c 500
# 统计错误数
curl -s -G 'http://localhost:3100/loki/api/v1/query' \
--data-urlencode 'query=count_over_time({app="nginx"} |= "error" [5m])'1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
验证
bash
# 列出所有活跃标签值
curl -s http://localhost:3100/loki/api/v1/labels
curl -s 'http://localhost:3100/loki/api/v1/label/app/values'1
2
3
2
3
常见坑
WARNING
Loki 的索引是标签(label),不是内容。千万不要把 user_id 这类高基数字段当标签,否则索引爆炸。高基数内容应放在日志行里用 |= 过滤。
DANGER
local-config.yaml 用的是文件系统 + 单实例,仅适合测试。生产请用对象存储(S3)并配置 memberlist 实现多副本。