返回
创建于
状态公开
要将Docker Compose的日志收集整合到Grafana中,推荐使用Grafana Loki和Promtail的组合。Loki是一个轻量级的日志聚合系统,Promtail负责收集Docker容器日志并将其推送到Loki,然后通过Grafana进行可视化。以下是实现步骤和相应的Docker Compose配置。
1version: "3.9"
2services:
3 loki:
4 image: grafana/loki:3.4.1
5 container_name: loki
6 ports:
7 - "3100:3100"
8 volumes:
9 - ./loki-config.yaml:/etc/loki/loki-config.yaml
10 command: -config.file=/etc/loki/loki-config.yaml
11 networks:
12 - monitoring
13
14 promtail:
15 image: grafana/promtail:3.4.1
16 container_name: promtail
17 volumes:
18 - ./promtail-config.yaml:/etc/promtail/promtail-config.yaml
19 - /var/lib/docker/containers:/var/lib/docker/containers:ro
20 - /var/run/docker.sock:/var/run/docker.sock
21 command: -config.file=/etc/promtail/promtail-config.yaml
22 depends_on:
23 - loki
24 networks:
25 - monitoring
26
27 grafana:
28 image: grafana/grafana:latest
29 container_name: grafana
30 ports:
31 - "3000:3000"
32 volumes:
33 - grafana-data:/var/lib/grafana
34 - ./grafana/provisioning:/etc/grafana/provisioning
35 environment:
36 - GF_AUTH_ANONYMOUS_ENABLED=true
37 - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
38 depends_on:
39 - loki
40 networks:
41 - monitoring
42
43volumes:
44 grafana-data:
45
46networks:
47 monitoring:
48 driver: bridge1auth_enabled: false
2server:
3 http_listen_port: 3100
4 grpc_listen_port: 9096
5common:
6 instance_addr: 127.0.0.1
7 path_prefix: /tmp/loki
8 storage:
9 filesystem:
10 chunks_directory: /tmp/loki/chunks
11 rules_directory: /tmp/loki/rules
12 replication_factor: 1
13 ring:
14 kvstore:
15 store: inmemory
16schema_config:
17 configs:
18 - from: 2020-10-24
19 store: tsdb
20 object_store: filesystem
21 schema: v13
22 index:
23 prefix: index_
24 period: 24h1server:
2 http_listen_port: 9080
3 grpc_listen_port: 0
4positions:
5 filename: /tmp/positions.yaml
6clients:
7 - url: http://loki:3100/loki/api/v1/push
8scrape_configs:
9 - job_name: docker
10 docker_sd_configs:
11 - host: unix:///var/run/docker.sock
12 refresh_interval: 5s
13 relabel_configs:
14 - source_labels: ['__meta_docker_container_name']
15 target_label: 'container'
16 - source_labels: ['__meta_docker_container_label_com_docker_compose_project']
17 target_label: 'compose_project'
18 - source_labels: ['__meta_docker_container_log_stream']
19 target_label: 'logstream'1apiVersion: 1
2datasources:
3 - name: Loki
4 type: loki
5 url: http://loki:3100
6 access: proxy
7 isDefault: true
8 editable: false实现步骤:
-
创建配置文件:
- 将上述
docker-compose.yaml、loki-config.yaml、promtail-config.yaml和datasource.yaml保存到项目目录。 - 确保目录结构如下:
1. 2├── docker-compose.yaml 3├── loki-config.yaml 4├── promtail-config.yaml 5├── grafana 6│ └── provisioning 7│ └── datasources 8│ └── datasource.yaml
- 将上述
-
启动服务:
- 运行
docker-compose up -d启动Loki、Promtail和Grafana容器。
- 运行
-
访问Grafana:
- 打开浏览器,访问
http://localhost:3000,默认用户名为admin,密码为admin(首次登录后需更改)。 - Grafana已通过
datasource.yaml自动配置Loki数据源。
- 打开浏览器,访问
-
查看日志:
- 在Grafana左侧菜单点击“Explore”,选择“Loki”数据源。
- 使用LogQL查询日志,例如
{container="your_container_name"}查看特定容器日志,或{compose_project="your_project_name"}按Docker Compose项目过滤。
注意事项:
- 确保Docker主机上
/var/lib/docker/containers和/var/run/docker.sock可被Promtail访问,用于收集容器日志。 - 可通过
loki-external-labels在promtail-config.yaml中添加自定义标签,便于日志查询。 - 如果需要持久化Loki数据,可为Loki配置卷挂载。
- 参考资料:Grafana Loki文档,Docker日志集成。
通过以上配置,你可以在Grafana中轻松查看Docker Compose应用的日志,实现集中化日志管理。