Docker部署loki:Docker部署Loki日志系统
用Docker部署Loki,快速搭建轻量日志系统
日常运维中日志集中管理是刚需,但ELK太重量级。
Loki是Grafana出品的日志系统,不全文索引,只压缩并打标签,查询时用标签+时间范围过滤,比ELK省资源。
配合Promtail采集日志、Grafana展示,三件套全跑在Docker里,一台1核2G的小鸡就能跑。
下面按步骤来。
你需要准备什么
- 一台Linux服务器(CentOS 7+ / Ubuntu 20.04+),已安装Docker和docker-compose。没装docker的参考:
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
- 至少 2GB 可用磁盘(用于存储Loki的日志块)
- 域名或IP(用于访问Grafana,非必须)
编写docker-compose.yml,一键部署Loki + Promtail + Grafana
在服务器上新建目录,比如 /opt/loki-stack,创建 docker-compose.yml:
version: '3'
services:
loki:
image: grafana/loki:2.9.0
container_name: loki
ports:
- "3100:3100"
volumes:
- ./loki-data:/loki
command: -config.file=/etc/loki/loki-config.yaml
restart: unless-stopped
promtail:
image: grafana/promtail:2.9.0
container_name: promtail
volumes:
- /var/log:/var/log:ro
- ./promtail-config.yaml:/etc/promtail/promtail-config.yaml
command: -config.file=/etc/promtail/promtail-config.yaml
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- ./grafana-data:/var/lib/grafana
restart: unless-stopped
然后创建 Loki 配置文件 loki-local-config.yaml(放在同一目录):
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
再创建 Promtail 配置文件 promtail-config.yaml:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
启动服务并绑定Grafana数据源
在 docker-compose.yml 所在目录执行:
docker-compose up -d
等1-2分钟,检查所有容器是否Running:
docker ps
访问 http://服务器IP:3000 进入Grafana(默认账号admin/admin,第一次强制改密码)。
添加Loki数据源:
- 左侧齿轮 → Data Sources → Add data source
- 选择 Loki
- URL填
http://loki:3100(因为Grafana和Loki在同一个Docker网络) - 点击 Save & Test,提示成功即可。
常见踩坑与解决办法
- 端口冲突:如果服务器已有服务占用3000或3100端口,在docker-compose.yml里改映射端口,比如
"3001:3000",Grafana访问地址也跟着改。 - Promtail抓不到日志:检查挂载卷
/var/log:/var/log:ro是否正确,以及Promtail容器是否有读权限。可以用docker logs promtail查看报错。 - Loki写大量日志导致磁盘爆满:Loki默认不自动删除。建议在
loki-local-config.yaml中加上retention: true和retention_duration: 720h(30天),需要配合delete_worker_count等参数,新手可先不管,数据量大时手动清理loki-data目录。 - Grafana查不到日志:确认数据源URL写的是
http://loki:3100不是IP;再到Explore页面输入{job="varlogs"}查询,如果还是空,等几分钟让Promtail推送。
验证日志查询是否正常
在Grafana左侧菜单点击 Explore,Label filters选择 job → varlogs,然后点击 Run query。
如果能出现日志行,说明Docker部署Loki成功。
你还可以手动写一条测试日志:
echo "test log entry $(date)" >> /var/log/syslog
等一会儿就能在Explore里搜到这条。
如果你打算长期使用,建议把挂载目录(loki-data、grafana-data)加入到定时快照,避免日志丢失。
遇到异常先看 docker-compose logs 定位错误,再结合上面的踩坑点排查。
以上就是从零到一用Docker部署Loki日志系统的全过程,跟着步骤走基本不会有问题。
如果还有疑问,欢迎留言交流。