← 返回列表
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 以收集节点的性能监控数据。

  1. 完整的 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
  1. 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"
  1. 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
  1. 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

最终效果

评论与交流

每条首评会开启一个话题;大家可在该话题下继续讨论。

还没有评论,欢迎留下想法。

发起新话题