Verified Commit fc77a47b authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

Add Prometheus exporter for Postfix

parent 3fe86ee8
......@@ -8,7 +8,10 @@ Cette documentation se limite à Docker. Pour plus d'informations sur le serveur
### Construction des images
Deux images sont nécessaires pour le serveur mail : le MTA et le MDA.
Les deux Dockerfile sont présents dans les dossier [pica-mail-mda](./pica-mail-mda) et [pica-mail-mta](./pica-mail-mta).
On y adjoint un exporter compatible avec Prometheus pour récupérer des métriques sur le MTA, par exemple le nombre de mails envoyés, le nombre de mails rejetés, etc. Ces statistiques permettront de lever des alertes plus facilement qu'en vérifiant les logs à la main. Pour plus de détails sur la collecte de métriques chez Picasoft, voir [cette section du wiki](https://wiki.picasoft.net/doku.php?id=technique:adminsys:monitoring:metrologie:start).
Les trois Dockerfile sont présents dans les dossiers [pica-mail-mda](./pica-mail-mda), [pica-mail-mta](./pica-mail-mta) et [postfix-exporter](./postfix-exporter).
Pour plus de facilité, Docker Compose sait construire ces images simultanément : il suffit de lancer
```bash
......@@ -37,6 +40,8 @@ S'assurer que [TLS Certs Monitor](../pica-tls-certs-monitor) est lancé.
Attetion, le serveur mail a besoin d'enregistrements DNS et de clés DKIM pour fonctionner. S'il est lancé pour la première fois, voir la page [déploiement du wiki](https://wiki.picasoft.net/doku.php?id=technique:adminsys:mail:deploiement).
Enfin il faut créer un fichier `.env` (dans le même dossier que le Docker Compose) qui devra contenir une variable `METRICS_AUTH`. Cette vairbale correspond à la chaîne d'identification htpasswd utilisée pour authentifier sur l'endpoint des métriques, par exemple `METRICS_AUTH="mail:$apr1$bXnknJ0S$GsC.ozNJc/dAkh9uH7Qlg."` Le mot de passe est à chiffrer avec bcrypt et à rajouter dans le [pass](https://wiki.picasoft.net/doku.php?id=technique:tips:password_store:start) (`Tech/Prometheus-Exporters-Auth/mail`).
Lancer :
```bash
docker-compose up -d
......
......@@ -9,8 +9,6 @@ networks:
volumes:
mail-mda-maildir:
name: mail-mda-maildir
mail-mta-log:
name: mail-mta-log
services:
mail-mda:
......@@ -45,7 +43,8 @@ services:
- mail
- proxy
volumes:
- mail-mta-log:/var/log
- /var/log/mail.log:/var/log/mail.log
- /var/log/opendmarc.log:/var/log/opendmarc.log
#doit contenir selecteur.domaine.rsa
- /DATA/docker/mail/opendkim/:/etc/dkimkeys/
- /DATA/docker/certs/mail.picasoft.net/:/certs-ssl/:ro
......@@ -89,3 +88,27 @@ services:
tls-certs-monitor.enable: true
tls-certs-monitor.action: restart
restart: unless-stopped
postfix-exporter:
image: registry.picasoft.net/postfix-exporter:5a8f146
build: ./postfix-exporter
container_name: postfix-exporter
volumes:
# By default, postfix-exporter reads from /var/log/mail.log, so no need to configure
- /var/log/mail.log:/var/log/mail.log
- /etc/localtime:/etc/localtime:ro
command:
# Listen on all interfaces
- "--web.listen-address=0.0.0.0:9154"
- "--web.telemetry-path=/metrics/postfix"
networks:
- proxy
labels:
traefik.http.routers.mail-metrics.entrypoints: websecure
traefik.http.routers.mail-metrics.rule: "Host(`mail.picasoft.net`) && PathPrefix(`/metrics`)"
traefik.http.routers.mail-metrics.service: mail-metrics
traefik.http.routers.mail-metrics.middlewares: "mail-metrics-auth@docker"
traefik.http.middlewares.mail-metrics-auth.basicauth.users: "${METRICS_AUTH}"
traefik.http.services.mail-metrics.loadbalancer.server.port: 9154
traefik.enable: true
restart: unless-stopped
......@@ -138,12 +138,9 @@ postconf -e "smtp_tls_security_level=may"
#logs
#on redirige les logs des fichiers vers le stdout
rm /var/log/mail.log
rm /var/log/opendmarc.log
ln -s /dev/stdout /var/log/mail.log
ln -s /dev/stdout /var/log/opendmarc.log
# on garde les fichiers de logs pour les monter dans l'exporter
chown postfix:postfix /var/log/mail.log
chown opendmarc:postfix /var/log/opendmarc.log
#activation du service smtps (sur le port 465 par défaut)
cat <<EOF >> /etc/postfix/master.cf
......
ARG EXPORTER_COMMIT=5a8f14691eef0aab20790ebed6d7f950ad708501
FROM golang:1.17 AS builder
ARG EXPORTER_COMMIT
RUN apt-get update \
&& apt-get install -y unzip
# Download source code and build without systemd support, as we will use Docker logs
# Last release is 0.2.0 from early 2019 but important commits have been made in 2020 with no release, grab the last known and stable.
ADD https://github.com/kumina/postfix_exporter/archive/${EXPORTER_COMMIT}.zip postfix_exporter.zip
RUN unzip postfix_exporter.zip \
&& cd postfix_exporter-${EXPORTER_COMMIT} \
&& go build -tags nosystemd -o /bin/postfix_exporter
# Copy the built executable to make a tiny final image
FROM alpine:3
ARG EXPORTER_COMMIT
ARG GLIBC_VERSION=2.34-r0
LABEL maintainer="picasoft@assos.utc.fr"
LABEL version=${EXPORTER_COMMIT}
# Used to run binary linked against glibc on Alpine
ADD https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub /etc/apk/keys/sgerrand.rsa.pub
ADD https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk /tmp
RUN apk add --no-cache /tmp/glibc-${GLIBC_VERSION}.apk
COPY --from=builder /bin/postfix_exporter /bin/
ENTRYPOINT ["/bin/postfix_exporter"]
# Add arguments in Docker Compose with "command" array.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment