postfix mta - sender_dependent_relayhost_maps - Cómo controlar el estado del MTA de Postfix
postfix smtp_bind_address (3)
Puede usar los programas de línea de comando que vienen con Postfix:
- mailq: muestra qué colas tienen el correo ''procesado''
- postqueue -p: es qué mailq realmente referencias
- postqueue -f: vacía todo el correo en cola, tratando de conseguirlo de inmediato
- ps aux: muestra los procesos en ejecución en el servidor, busca cosas como:
- smtpd
- proxymap
- yunque
- trivial-reescribir
- qmgr
- recoger
- showq
Lo que encuentre con el comando ps variará según cómo configure las cosas.
¿Cuál es un buen comando para monitorear una instalación de Postfix en un servidor Linux? Debe ser un comando que se puede ejecutar desde un símbolo del sistema en una sesión SSH y devuelve información sobre si el proceso postfix está activo y el tamaño de las colas de correo relevantes.
EDITAR
Es posible que esto no parezca estar en el tema de Desbordamiento de pila (¿Tal vez sea mejor para la falla del servidor?), Pero sí está relacionado con el desarrollo de software. En ese momento, estaba creando una aplicación compleja de envío de correo que usaba múltiples MTA para la entrega de correo. Si la cola de correo en un servidor creció demasiado, entonces debería preferir otros MTA menos ocupados. Por lo tanto, la aplicación de control necesitaba una forma de mantener una conexión SSH con cada MTA y monitorear periódicamente su estado.
Si la necesidad de monitoreo era simplemente para fines administrativos, hay muchas herramientas GUI que lo hacen mucho más fácilmente.
En orden de preferencia:
La mejor manera es enviar mensajes de latido a través del servidor de correo y controlar su llegada al destino.
Use mailq y qshape (incluido con las distribuciones de postfix recientes) para supervisar las colas.
Puede verificar que smtpd esté escuchando y devolviendo un banner usando netcat (las opciones para netcat varían según el sistema operativo, estas son para Linux):
nc -w 1 localhost 25 </dev/null
A continuación, se informará el número de procesos para cada daemon postfix, agrupados por maestro (múltiples maestros si tiene varias instancias de postfix).
ps -e -o pid,ppid,fname | perl -lane ''
if ($F[1] != 1) {
++$c{$F[1]}->{$F[2]};
} elsif ($F[2] eq "master") {
push(@masters, $F[0]);
}
END {
foreach $master (@masters) {
print "=== master: $master ===";
foreach $agent (keys %{$c{$master}}) {
printf "/t%-5d %s/n", $c{$master}->{$agent}, $agent;
}
}
}
''
Además de la respuesta anterior de Bryan Rehbein, aquí hay un script que uso para monitorear las longitudes de cola de postfix. Todo lo que hace es enviar una alerta por correo electrónico una vez que la cola crece más allá de los mensajes X en tamaño. La alerta se envía utilizando msmtp (un cliente smtp de línea de comando diminuto) por lo que omite la instalación local de posfijo (en la que no puede confiar para obtener su alerta a tiempo si sus colas están creciendo ...)
#!/bin/bash
#
# Postfix queue length monitoring script (requires msmtp)
#
# This script checks the active, incoming, deferred and maildrop postfix queue directories.
#
# If the number of messages in any of these directories is more than $MAX_QUEUE_LENGTH,
# the script will generate an alert email and send it using msmtp. We use msmtp so that
# we can bypass the local postfix installation (since if the queues are getting big,
# the alert email may not be sent in time to catch the problem).
#
#########################################################
# SET SCRIPT VARS
#########################################################
# Path to msmtp binary (e.g. /usr/bin/msmtp on Debian systems)
MSMTP=/usr/bin/msmtp
# Remote mail host (this is the mail server msmtp will use to send the alert. It should NOT be the local postfix installation)
MAILHOST=backup.mailserver.com
# Remote mail port
MAILPORT=25
# Mail protocol
MAILPROTO=smtp
# Fully qualified domain name of local postfix installation
DOMAIN=primary.mailserver.com
# From address
[email protected]
# Recipient (this address should not route to the local postfix installation, for obvious reasons)
MAILTO="[email protected]"
# Email subject
MAILSUBJECT="Postfix queue length alert for ${DOMAIN}"
# MSMTP log file
LOGFILE=/var/log/msmtp.log
# Root of the postfix queue dirs (e.g. /var/spool/postfix on Debian systems). Note: no trailing slash.
QUEUEDIR_ROOT="/var/spool/postfix"
# Max queue length (if there are more messages in a queue than this number, we will send an alert)
MAX_QUEUE_LENGTH=10
#########################################################
# SCRIPT LOGIC STARTS HERE
#########################################################
# Check msmtp binary exists
if [ ! -f ${MSMTP} ]
then
echo "Cannot find ${MSMTP}. Exiting."
exit 1
fi
# Get the number of messages sitting in each postfix queue directory
Q_ACTIVE=$(find ${QUEUEDIR_ROOT}/active -type f | wc -l)
Q_INCOMING=$(find ${QUEUEDIR_ROOT}/incoming -type f | wc -l)
Q_DEFERRED=$(find ${QUEUEDIR_ROOT}/deferred -type f | wc -l)
Q_MAILDROP=$(find ${QUEUEDIR_ROOT}/maildrop -type f | wc -l)
# If any of these queues contain more than $MAX_QUEUE_LENGTH issue an alert
if [ ${Q_ACTIVE} -gt ${MAX_QUEUE_LENGTH} -o ${Q_INCOMING} -gt ${MAX_QUEUE_LENGTH} -o ${Q_DEFERRED} -gt ${MAX_QUEUE_LENGTH} -o ${Q_MAILDROP} -gt ${MAX_QUEUE_LENGTH} ]; then
(
echo "From: ${MAILFROM} "
echo "To: ${MAILTO} "
echo "Mime-Version: 1.0"
echo ''Content-Type: text/plain; charset="iso-8859-1"''
echo "Subject: ${MAILSUBJECT}"
echo ""
echo "One or more of the postfix queues on ${DOMAIN} has grown beyond ${MAX_QUEUE_LENGTH} messages in length."
) | ${MSMTP} --host=${MAILHOST} --port=${MAILPORT} --protocol=${MAILPROTO} --domain=${DOMAIN} --auth=off --tls=off --from=${MAILFROM} --logfile=${LOGFILE} --syslog=off --read-recipients
exit 2
fi
exit 0