diff --git a/email-worker-nodejs/docker-compose.yml b/email-worker-nodejs/docker-compose.yml index 93f29b3..3fff942 100644 --- a/email-worker-nodejs/docker-compose.yml +++ b/email-worker-nodejs/docker-compose.yml @@ -8,7 +8,7 @@ services: env_file: .env volumes: - ./domains.txt:/etc/email-worker/domains.txt:ro - - worker-logs:/var/log/email-worker + - ./logs:/var/log/email-worker ports: - "9000:8000" # Prometheus metrics (Host:Container) - "9090:8080" # Health check (Host:Container) diff --git a/email-worker-nodejs/src/logger.ts b/email-worker-nodejs/src/logger.ts index e37ce14..f624c65 100644 --- a/email-worker-nodejs/src/logger.ts +++ b/email-worker-nodejs/src/logger.ts @@ -104,13 +104,26 @@ function ensureFileStream(): WriteStream | null { const logger = pino({ level: 'info', transport: { - target: 'pino-pretty', - options: { - colorize: true, - translateTime: 'SYS:yyyy-mm-dd HH:MM:ss', - ignore: 'pid,hostname', - singleLine: true - } + targets: [ + { + // 1. Schicke bunte Logs in die Konsole (für docker compose logs -f) + target: 'pino-pretty', + options: { + colorize: true, + translateTime: 'SYS:yyyy-mm-dd HH:MM:ss', + ignore: 'pid,hostname', + singleLine: true + } + }, + { + // 2. Schreibe gleichzeitig alles unformatiert in die Datei + target: 'pino/file', + options: { + destination: '/var/log/email-worker/worker.log', + mkdir: true + } + } + ] } }); diff --git a/monitoring/docker-compose.yml b/monitoring/docker-compose.yml new file mode 100644 index 0000000..e83553b --- /dev/null +++ b/monitoring/docker-compose.yml @@ -0,0 +1,36 @@ +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + restart: unless-stopped + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro + - prometheus_data:/prometheus + ports: + - "9091:9090" + extra_hosts: + - "host.docker.internal:host-gateway" # Damit er deinen Worker findet + + grafana: + image: grafana/grafana:latest + container_name: grafana + restart: unless-stopped + volumes: + - grafana_data:/var/lib/grafana + ports: + - "4000:3000" + depends_on: + - prometheus + + blackbox_exporter: + image: prom/blackbox-exporter:latest + container_name: blackbox_exporter + restart: unless-stopped + ports: + - "9115:9115" + extra_hosts: # <-- Diese Zeile neu + - "host.docker.internal:host-gateway" # <-- Diese Zeile neu + +volumes: + prometheus_data: + grafana_data: \ No newline at end of file diff --git a/monitoring/prometheus.yml b/monitoring/prometheus.yml new file mode 100644 index 0000000..8d77907 --- /dev/null +++ b/monitoring/prometheus.yml @@ -0,0 +1,25 @@ +global: + scrape_interval: 15s + +scrape_configs: + # 1. Scraping deines Node.js Email-Workers + - job_name: 'email-worker' + static_configs: + - targets: ['host.docker.internal:9000'] + + # 2. Port-Überwachung deines Mailservers (IMAP 993 & POP3 995) + - job_name: 'mailserver_ports' + metrics_path: /probe + params: + module: [tcp_connect] # Prüft nur, ob der TCP-Port offen ist + static_configs: + - targets: + - host.docker.internal:993 # IMAPS + - host.docker.internal:995 # POP3S + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: blackbox_exporter:9115 # Der Exporter führt den Check aus \ No newline at end of file