2026-04-26T02:20:31.894ZDocker Compose监控系统
docker compose 搭建 Prometheus+Grafana+Loki+Promtail 监控系统
搭建 Prometheus+Grafana+Loki+Promtail 监控系统
使用 Docker Compose 搭建一个包含 Prometheus、Grafana、日志分析和性能监控的监控系统,此配置将包括 Prometheus、Grafana 和一个简单的日志分析服务(例如 Loki),同时也可以集成 Node Exporter 以收集节点的性能监控数据。
- 完整的 docker-compose.yaml 配置示例
services:
victoria-metrics:
image: victoriametrics/victoria-metrics:v1.103.0
container_name: victoria-metrics
command:
- "-storageDataPath=/victoria-metrics-data"
- "-retentionPeriod=30d"
volumes:
- victoria_metrics_data:/victoria-metrics-data
ports:
- "8428:8428"
restart: unless-stopped
networks:
- monitoring
vmagent:
image: registry.cn-hongkong.aliyuncs.com/obsbot/vmagent:v1.103.0
container_name: vmagent-center
command:
- "-promscrape.config=/etc/vmagent/prometheus.yml"
- "-remoteWrite.url=http://victoria-metrics:8428/api/v1/write"
volumes:
- ./prometheus/prometheus.yml:/etc/vmagent/prometheus.yml:ro
- ./prometheus/targets:/etc/prometheus/targets:ro
depends_on:
- victoria-metrics
restart: unless-stopped
networks:
- monitoring
loki:
image: grafana/loki:3.1.1
container_name: loki
command: [ "-config.file=/etc/loki/loki-config.yml" ]
volumes:
- ./loki/loki-config.yml:/etc/loki/loki-config.yml:ro
- loki_data:/loki
ports:
- "3100:3100"
restart: unless-stopped
networks:
- monitoring
grafana:
image: grafana/grafana:11.2.0
container_name: grafana
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: admin
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning:ro
- ./grafana/dashboards:/var/lib/grafana/dashboards:ro
ports:
- "3000:3000"
depends_on:
- victoria-metrics
- loki
restart: unless-stopped
networks:
- monitoring
node-exporter-lite:
image: prom/node-exporter:v1.8.2
container_name: node-exporter-lite
restart: unless-stopped
networks:
- monitoring
node-exporter:
image: prom/node-exporter:v1.8.2
container_name: node-exporter
command:
- "--path.rootfs=/host"
- "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
pid: host
volumes:
- /:/host:ro,rslave
restart: unless-stopped
profiles: [ "linux-host" ]
networks:
- monitoring
cadvisor:
image: registry.cn-hongkong.aliyuncs.com/obsbot/cadvisor:v0.49.1
container_name: cadvisor
privileged: true
devices:
- /dev/kmsg:/dev/kmsg
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: unless-stopped
profiles: [ "linux-host" ]
networks:
- monitoring
promtail:
image: grafana/promtail:3.1.1
container_name: promtail
command: [ "-config.file=/etc/promtail/promtail-config.yml" ]
volumes:
- ./promtail/promtail-config.yml:/etc/promtail/promtail-config.yml:ro
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
depends_on:
- loki
restart: unless-stopped
profiles: [ "linux-host" ]
networks:
- monitoring
volumes:
victoria_metrics_data:
loki_data:
grafana_data:
networks:
monitoring:
driver: bridge
- Prometheus 配置文件 prometheus/prometheus.yml
global:
scrape_interval: 15s
external_labels:
monitor: "devopsqttools-monitor"
scrape_configs:
- job_name: "node-exporter"
static_configs:
- targets:
- "node-exporter-lite:9100"
labels:
node: "center-lite"
- job_name: "center-infra"
static_configs:
- targets:
- "victoria-metrics:8428"
- "loki:3100"
- "vmagent:8429"
labels:
node: "center"
- prometheus/targets/cadvisor_targets.yml
targets:
- "192.168.1.101:8080"
labels:
env: "dev"
node: "node-1"
- targets:
- "192.168.1.102:8080"
labels:
env: "dev"
node: "node-2"
- prometheus/targets/node_exporter_targets.yml
- targets:
- "192.168.1.101:9100"
labels:
env: "dev"
node: "node-1"
- targets:
- "192.168.1.102:9100"
labels:
env: "dev"
node: "node-2"
- Loki 配置文件 loki/loki-config.yaml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /loki
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: loki_index_
period: 24h
storage_config:
filesystem:
directory: /loki/chunks
limits_config:
retention_period: 168h
ingestion_rate_mb: 16
ingestion_burst_size_mb: 32
reject_old_samples: true
reject_old_samples_max_age: 168h
compactor:
working_directory: /loki/compactor
compaction_interval: 5m
retention_enabled: true
delete_request_store: filesystem
analytics:
reporting_enabled: false
- Promtail配置文件 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: "varlogs"
static_configs:
- targets:
- localhost
labels:
job: "varlogs"
host: "monitor-host"
__path__: /var/log/*.log
- job_name: "docker-containers"
static_configs:
- targets:
- localhost
labels:
job: "docker"
host: "monitor-host"
__path__: /var/lib/docker/containers/*/*.log
启动服务 在项目目录中创建上述目录结构,并将相应的配置文件放到对应的目录中。 在终端中,导航到包含 docker-compose.yml 的目录并运行以下命令:
docker-compose up -d

访问地址:
Prometheus:
http://localhost:9090
Grafana:
http://localhost:3000 (默认用户名和密码均为 admin)
Loki:
http://localhost:3100
最终效果
