第 19 章
合规、存储与运维
管理:
#pAlerts
运维仪表板、告警与实时遥测
运维仪表板 (#pOps) 以实时和 24 小时历史方式显示:每分钟入站和出站邮件数、延迟和退回的邮件、垃圾邮件率、失败的登录、队列大小和最早邮件的等待时长、各协议的活动连接、CPU、内存、可用磁盘空间、数据库大小、证书到期时间和集群节点。告警 (#pAlerts) 通过电子邮件、webhook、短信、Telegram、Signal 或 WhatsApp 报告超限情况。外部工具可通过 /metrics (Prometheus)、OpenTelemetry 或实时事件流(Server-Sent Events)读取相同的数据。
运维提示与架构说明
首次启动时,nextxch 会创建五条没有目标的规则(队列阻塞、磁盘即将写满、证书即将到期、大量登录失败、大量退信)。它们会显示在历史记录中;如需接收通知,请在“目标”下添加电子邮件地址或 webhook,并在规则中勾选。历史记录在重启后保留(设置 Ops:PersistHistory = false 可关闭此功能)。
面向监控工具的实时事件流
身份验证方式与管理 API 相同(管理员的 API 密钥,通过 X-Api-Key、Bearer 或 Basic)。租户管理员只能看到自己的租户。筛选条件:types、direction、status、q;maxRate 限制每秒事件数(默认 20,最大 200);超出部分会以 dropped 事件报告。
curl -N -H "X-Api-Key: $NEXTXCH_KEY" \
"https://mail.company.com/api/admin/telemetry/stream?types=delivery,rejection,auth-failure&maxRate=50"
event: delivery
data: {"at":"2026-11-02T08:15:01Z","direction":"Outbound","status":"Delivered","from":"billing@company.com","to":"customer@example.com","code":250,...}
event: auth-failure
data: {"account":"info@company.com","protocol":"IMAP","remoteIp":"203.0.113.7","reason":"invalid password"}
# Types: delivery, rejection, auth-failure, filter, alert, queue
设置、默认值与最佳实践
| 设置 / 位置 | 说明 | 默认值 | 生产环境最佳实践 |
|---|---|---|---|
Alarmregel |
指标、条件(>、>=、<、<=)、阈值和持续时间(分钟)。只有当条件不间断地持续满足这么长时间时,才会触发告警。 | 5 min |
忽略短时峰值:速率类(每分钟)至少 5 分钟,证书到期为 0 分钟。 |
Abklingzeit, Wiederholung, Entwarnung |
冷却时间是同一规则两条消息之间的最短间隔;重复提醒会在告警持续期间再次提醒;恢复通知会报告告警结束。 | 60 min / aus / an |
请将冷却时间保持在 30 分钟或以上,以免波动的数值反复触发告警。 |
Ziele |
电子邮件(发件人为保存设置的管理员)、webhook(类型为 nextxch.alert 的 JSON,使用 X-Nextxch-Signature: sha256=... 签名)、短信、Telegram、Signal、WhatsApp,通过“通知”下的渠道发送。 | - |
至少添加一个位于您自己的邮件服务器之外的目标(短信、即时通讯或 webhook):如果投递中断,告警邮件将无法送达。 |
Messwerte in Prometheus und OpenTelemetry |
仪表板上的每个值都可在 /metrics 中获取:nextxch_mail_inbound_total、nextxch_mail_outbound_total、nextxch_mail_deferred_total、nextxch_mail_bounced_total、nextxch_mail_rejected_total、nextxch_mail_spam_total、nextxch_auth_failures_total、nextxch_mail_spam_rate_percent、nextxch_queue_messages、nextxch_queue_deferred_messages、nextxch_queue_oldest_age_minutes、nextxch_connections_active{protocol}、nextxch_process_cpu_percent、nextxch_process_working_set_bytes、nextxch_disk_free_percent、nextxch_disk_free_bytes、nextxch_database_size_bytes、nextxch_tls_certificate_min_expiry_days、nextxch_tls_certificate_expiry_days{domain}、nextxch_cluster_nodes_active、nextxch_alerts_firing、nextxch_smtp_filter_verdicts_total{type,verdict}、nextxch_smtp_filter_failures_total。 | aktiv |
通过 OTLP 传输时,各指标名称相同,只是用点号代替下划线(nextxch.mail.inbound);转换为 Prometheus 格式后又得到相同的名称。 |