version: "3.9" services: victoria-metrics: image: victoriametrics/victoria-metrics:v1.120.0 command: - "-retentionPeriod=30d" networks: - internal deploy: replicas: 1 restart_policy: condition: on-failure vmagent: image: victoriametrics/vmagent:v1.120.0 command: - "-promscrape.config=/etc/vmagent/scrape.yml" - "-remoteWrite.url=http://victoria-metrics:8428/api/v1/write" configs: - source: vmagent_scrape target: /etc/vmagent/scrape.yml networks: - internal deploy: replicas: 1 restart_policy: condition: on-failure loki: image: grafana/loki:3.5.5 command: - "-config.file=/etc/loki/config.yml" configs: - source: loki_config target: /etc/loki/config.yml networks: - internal deploy: replicas: 1 restart_policy: condition: on-failure tempo: image: grafana/tempo:2.8.2 command: - "-config.file=/etc/tempo/config.yml" configs: - source: tempo_config target: /etc/tempo/config.yml networks: - internal deploy: replicas: 1 restart_policy: condition: on-failure grafana: image: grafana/grafana:12.1.1 environment: GF_SECURITY_ADMIN_USER: "admin" GF_SECURITY_ADMIN_PASSWORD__FILE: "/run/secrets/grafana_admin_password" GF_AUTH_ANONYMOUS_ENABLED: "false" configs: - source: grafana_datasources target: /etc/grafana/provisioning/datasources/datasources.yml - source: grafana_dashboards_provider target: /etc/grafana/provisioning/dashboards/dashboards.yml - source: dashboard_operations_overview target: /var/lib/grafana/dashboards/operations_overview.json - source: dashboard_http_detail target: /var/lib/grafana/dashboards/http_detail.json - source: dashboard_logs target: /var/lib/grafana/dashboards/logs.json - source: dashboard_traces target: /var/lib/grafana/dashboards/traces.json - source: dashboard_event_bus target: /var/lib/grafana/dashboards/event_bus.json - source: dashboard_workers target: /var/lib/grafana/dashboards/workers.json - source: dashboard_storage target: /var/lib/grafana/dashboards/storage.json - source: dashboard_cluster target: /var/lib/grafana/dashboards/cluster.json - source: dashboard_noisy_neighbor_tenant_health target: /var/lib/grafana/dashboards/noisy_neighbor_tenant_health.json - source: dashboard_api_regression_deployment target: /var/lib/grafana/dashboards/api_regression_deployment.json - source: dashboard_storage_event_bus_bottlenecks target: /var/lib/grafana/dashboards/storage_event_bus_bottlenecks.json - source: dashboard_infrastructure_exhaustion target: /var/lib/grafana/dashboards/infrastructure_exhaustion.json secrets: - grafana_admin_password networks: - public - internal ports: - target: 3000 published: 3000 protocol: tcp mode: ingress deploy: replicas: 1 restart_policy: condition: on-failure configs: vmagent_scrape: file: ../../observability/vmagent/scrape.yml loki_config: file: ../../observability/loki/config.yml tempo_config: file: ../../observability/tempo/config.yml grafana_datasources: file: ../../observability/grafana/provisioning/datasources/datasources.yml grafana_dashboards_provider: file: ../../observability/grafana/provisioning/dashboards/dashboards.yml dashboard_operations_overview: file: ../../observability/grafana/dashboards/operations_overview.json dashboard_http_detail: file: ../../observability/grafana/dashboards/http_detail.json dashboard_logs: file: ../../observability/grafana/dashboards/logs.json dashboard_traces: file: ../../observability/grafana/dashboards/traces.json dashboard_event_bus: file: ../../observability/grafana/dashboards/event_bus.json dashboard_workers: file: ../../observability/grafana/dashboards/workers.json dashboard_storage: file: ../../observability/grafana/dashboards/storage.json dashboard_cluster: file: ../../observability/grafana/dashboards/cluster.json dashboard_noisy_neighbor_tenant_health: file: ../../observability/grafana/dashboards/noisy_neighbor_tenant_health.json dashboard_api_regression_deployment: file: ../../observability/grafana/dashboards/api_regression_deployment.json dashboard_storage_event_bus_bottlenecks: file: ../../observability/grafana/dashboards/storage_event_bus_bottlenecks.json dashboard_infrastructure_exhaustion: file: ../../observability/grafana/dashboards/infrastructure_exhaustion.json secrets: grafana_admin_password: external: true networks: public: driver: overlay internal: driver: overlay