So gut wie jeder verwendeten E-Mails in der einen oder anderen Form, viele haben auch mehrere E-Mail-Adressen, sowohl beruflich als auch privat.

Aber nicht nur Personen verwenden E-Mails, auch sehr viele Software Produkte versenden oder empfangen und verarbeiten E-Mails.

Um die Größe / Anzahl an E-Mail in IMAP Postfächern überwachen zu können, möchte ich euch den IMAP Mailbox Exporter für Prometheus vorstellen.

Das Projekt findest du auf GitHub: https://github.com/jop-software/imap-mailbox-exporter

Automatisiertes empfangen und verarbeiten von E-Mails

Beim automatischen Verarbeiten von E-Mails ist es wichtig den Überblick zu behalten, hierbei werden E-Mails idr. in verschiedene Mailboxen sortiert, je nach Erfolg oder Fehlschlag der Verarbeitung um dann ggf. händisch nachhelfen zu können.

Nun muss man aber mitbekommen, wenn eine neue E-Mail in einer Mailbox aufkommt um dann entsprechend reagieren zu können.

Genau hier setzt der imap-mailbox-exporter für prometheus ein. Mit diesem ist es möglich mit Prometheus die Anzahl an E-Mail in einem bestimmten Postfach zu überwachen und auch entsprechende Alerts über den alertmanager auslösen zu können.

Installation

Der imap-mailbox-exporter kann entweder als go-binary oder docker container installiert / eingesetzt werden.

Das Docker Image wird in der Docker Registry von GitHub gehostet. Kompilierte Binärdateien werden aktuell nicht mit den Releases verbreitet, wenn ihr dieses trotzdem benötigt könnt ihr einfach den go Quell Code für eure benötigte Platform kompilieren.
Alle hierfür notwendigen Informationen sind in dem GitHub Repository hinterlegt.

Konfiguration

Die Konfiguration des Exporters erfolgt mit einer YAML-Datei.

In dieser können mehrere Server mit jeweils mehreren Accounts hinterlegt werden.
Der Exporter

Eine beispielhafte Konfiguration ist in den Beispielen in dem Repository vorhanden.
Hier wird auch eine beispielhafte docker-compose.yaml sowie .env Datei zu Verfügung gestellt.

Um Passwörter für die E-Mail-Konten nicht in der eigentlichen Konfigurationsdatei speichern zu müssen, gibt es die Möglichkeit Umgebungsvariablen mit der Syntax env:ENVIRONMENT_VARIABLE_NAME zu verwenden.

Verwenden

Der Exporter kann über eine einfache HTTP API verwendet werden.
Hierfür wird der Endpunk /probe bereitgestellt.

Beispiel

GET /probe?mailbox=INBOX&username=info@example.com&server=imap.example.com

# HELP probe_mailbox_count Displays the count of mails found in the mailbox
# TYPE probe_mailbox_count gauge
probe_mailbox_count 0

Integration in Prometheus

Für die Integration in Prometheus können die Labels für Targets in Query Parameter umgeschrieben werden. Als “Name” des Targets kann der Name des Postfaches angegeben werden.

Hierbei handelt es sich aber nur um eine beispielhafte Konfiguration, diese muss ggf. für deine Bedürfnisse angepasst werden.

scrape_configs:
 - job_name: 'imap-mailboxes'
    scheme: http
    metrics_path: /probe
    static_configs:
    - targets:
      - INBOX
      labels:
        username: 'info@example.com'
        hostname: 'imap.example.com'
    - targets:
      - INBOX
      labels:
        username: 'info@other-domain.tld'
        hostname: 'imap.other-domain.tld'

    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_mailbox
      - source_labels: [username]
        target_label: __param_username
      - source_labels: [hostname]
        target_label: __param_hostname
      - source_labels: [__param_mailbox]
        target_label: mailbox
      - target_label: __address__
        replacement: imap-mailbox-exporter:9101

OpenSource

Den QuellCode findet ihr auf GitHub, der Code steht unter der MIT-Lizenz. Issues und Pull-Requests sind immer willkommen 😉