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 😉