Skip to content

Instantly share code, notes, and snippets.

@AjayPoshak
Last active January 26, 2025 14:14
Show Gist options
  • Save AjayPoshak/1fc2dccb6918175f51d448ef9996e151 to your computer and use it in GitHub Desktop.
Save AjayPoshak/1fc2dccb6918175f51d448ef9996e151 to your computer and use it in GitHub Desktop.
logs server compose
# docker-compose.yml for log-server
services:
loki:
image: grafana/loki:2.8.0
ports:
- "3100:3100"
volumes:
- loki-data:/loki
restart: unless-stopped
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=<your-password>
restart: unless-stopped
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
ports:
- "9090:9090"
volumes:
loki-data:
grafana-data:
prometheus_data:
@AjayPoshak
Copy link
Author

Use this command to install loki on all application servers

docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions

@AjayPoshak
Copy link
Author

AjayPoshak commented Jan 1, 2025

prometheus.yml
global:
scrape_interval: 15s

scrape_configs:

  • job_name: 'node'
    static_configs:
    • targets: [':9100'] # Replace with your application server's IP
    • labels:
      instance: 'url-shortener'
      app: 'url-shortener'
      env: 'production'
  • job_name: 'traefik'
    static_configs:
    • targets: [':8082'] # Replace with your application server's IP

@AjayPoshak
Copy link
Author

With ability to monitor the "logs-server" node itself
docker-compose.yml

services:
  loki:
    image: grafana/loki:2.8.0
    command: -config.file=/etc/loki/config.yml
    ports:
      - "3100:3100"
    volumes:
      - loki-data:/loki
      - ./loki-config.yml:/etc/loki/config.yml
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=<your-password>
    restart: unless-stopped

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    command:
      - '--storage.tsdb.retention.time=7d'
      - '--storage.tsdb.retention.size=2GB' # With 2GB limit, it will keep around 100-200 MB in RAM
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - "--path.procfs=/host/proc"
      - "--path.sysfs=/host/sys"
      - "--path.rootfs=/rootfs"
    ports:
      - "9100:9100"
    labels:
      app: "logs-server"
      environment: "production"


volumes:
  loki-data:
  grafana-data:
  prometheus_data:

./prometheus.yml

# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['172.31.41.244:9100']
        labels:
          app: 'url-shortener'
          env: 'production'

  - job_name: 'traefik'
    static_configs:
      - targets: ['172.31.41.244:8082']
        labels:
          app: 'url-shortener'
          env: 'production'


  - job_name: 'logs-server'
    static_configs:
      - targets: ['node-exporter:9100']  # Node exporter for log server
        labels:
          app: 'logs-server'
          component: 'infrastructure'
          env: 'production'

  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
        labels:
          app: 'logs-server'
          component: 'prometheus'
          env: 'production'

  - job_name: 'grafana'
    static_configs:
      - targets: ['grafana:3000']
        labels:
          app: 'logs-server'
          component: 'grafana'
          env: 'production'

  - job_name: 'loki'
    static_configs:
      - targets: ['loki:3100']
        labels:
          app: 'logs-server'
          component: 'loki'
          env: 'production'

./loki-config.yml

limits_config:
  retention_period: 7d
  ingestion_rate_mb: 4
  ingestion_burst_size_mb: 6

compactor:
  retention_enabled: true

table_manager:
  retention_deletes_enabled: true
  retention_period: 7d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment