ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OneUptime 入站邮件监控器(Incoming Email Monitor)完整指南:用邮件驱动告警创建与自动恢复

OneUptime 入站邮件监控器(Incoming Email Monitor)完整指南:用邮件驱动告警创建与自动恢复 OneUptime 入站邮件监控器Incoming Email Monitor完整指南用邮件驱动告警创建与自动恢复【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime导读OneUptime 的**入站邮件监控器Incoming Email Monitor**允许你为每个监控器生成一个独一无二的专属邮箱地址任何发往该地址的邮件都会被 OneUptime 接收并按照你配置的条件进行求值——命中告警创建条件则创建新的告警/事件命中告警解除条件则自动恢复现有告警。这是把老旧系统、第三方告警工具、云厂商通知等一切只能发邮件的系统接入 OneUptime 事件管理Incident Management工作流的最直接方式。读完本文你将掌握入站邮件监控器的完整配置方法、全部条件字段与过滤类型、心跳式heartbeat监控的搭建技巧以及它在 OneUptime 仓库中的源码级实现原理。工作原理入站邮件监控器的工作流程分三步生成专属地址当你创建一台入站邮件监控器时OneUptime 会为该监控器生成一个唯一的邮箱地址底层由监控器模型上的incomingEmailSecretKey字段承载见 Monitor.ts。接收并求值任何发往该地址的邮件都会被接收并对照你配置的告警创建/解除条件进行求值。驱动事件生命周期根据求值结果OneUptime 创建新的告警或自动解除已有的告警。这种方式将邮件告警系统与 OneUptime 的事件管理工作流无缝打通是从邮件世界进入事件管理平台的强力桥梁。创建入站邮件监控器在 OneUptime Dashboard 中按以下步骤创建导航到监控器Overvågninger / Monitors页面点击创建监控器Opret monitor / Create Monitor选择入站邮件Indgående e-mail / Incoming Email作为监控器类型配置监控器基础信息名称Navn为监控器起一个描述性名称描述Beskrivelse说明该监控器的用途配置告警创建条件Advarselsopretnelseskriterier满足这些条件时创建告警配置告警解除条件Advarselssolverende kriterier满足这些条件时解除告警点击创建Opret / Create。创建完成后监控器详情页会显示该监控器的唯一邮箱地址复制该地址并配置到你的外部系统中即可。默认条件开箱即用的邮件内容约定从源码结构看入站邮件监控器的默认条件遵循一个明确的约定见 IncomingMonitorDefaultCriteria.test.ts 中的测试契约离线条件创建告警邮件正文包含关键字error不区分大小写在线条件解除告警邮件正文不包含关键字error。测试明确断言了这套默认值不再检查到达时钟Email Received而是读取邮件正文内容——因为入站邮件监控器是推送驱动push-driven类型由发送方决定数据何时到达、内容是什么。默认关键字为小写error且监控器创建表单的校验逻辑要求该值非空防止默认条件被清空后导致校验失败。你可以在此基础上按需修改为符合自身邮件语义的条件。邮箱地址格式每台入站邮件监控器都会获得一个唯一邮箱地址格式如下monitor-{secret-key}{inbound-domain}例如monitor-abc123def456inbound.yourdomain.com其中{secret-key}是监控器独有的机密密钥。该地址可以从监控器详情页复制并配置到外部系统中作为告警邮件的投递目标。关于密钥的字段定义与监控器数据模型可参见 Monitor.ts 中的incomingEmailSecretKey。可用条件字段CheckOn你可以基于以下邮件字段创建条件对应源码 CriteriaFilter.ts 中CheckOn枚举的入站邮件相关取值字段说明源码中的 CheckOn 取值邮件主题E-mailemne入站邮件的主题行EmailSubject邮件发件人E-mail fra发件人的邮箱地址EmailFrom邮件正文E-mailindhold邮件的纯文本正文内容EmailBody邮件收件人E-mail til收件人的邮箱地址EmailTo邮件接收时间E-mail modtaget基于邮件接收时间的时间型条件EmailReceivedAtJavaScript 表达式一个需被求值为 true 的自定义表达式JavaScriptExpression这些字段在运行时被封装为IncomingEmailMonitorRequest数据结构其定义见 IncomingEmailMonitorRequest.ts包含emailFrom、emailTo、emailSubject、emailBody纯文本、emailBodyHtml可选、emailHeaders可选键值对形式的完整头、emailReceivedAt、attachments可选附件元信息等字段。可用过滤类型FilterType字符串过滤主题、发件人、正文、收件人过滤类型说明示例包含Indeholder / Contains字段包含指定文本主题包含 CRITICAL不包含Indeholder ikke / Not Contains字段不包含指定文本主题不包含 TEST等于Er lig med / Equal To字段精确匹配指定文本发件人等于 alertsservice.com不等于Er ikke lig med / Not Equal To字段不匹配指定文本主题不等于 OK以…开头Starter med / Starts With字段以指定文本开头主题以 [ALERT] 开头以…结尾Slutter med / Ends With字段以指定文本结尾主题以 - Production 结尾为空Er tomt / Is Empty字段为空或空白正文为空不为空Er ikke tomt / Is Not Empty字段有内容主题不为空字符串求值的底层实现见 IncomingEmailCriteria.ts 的evaluateStringCriteria方法所有比较都通过toLowerCase()进行即不区分大小写。时间型过滤邮件接收时间过滤类型说明示例在 X 分钟内收到Modtaget inden for minutter / Received In Minutes邮件在 X 分钟内被收到邮件在 30 分钟内收到在 X 分钟内未收到Ikke modtaget inden for minutter / Not Received In MinutesX 分钟内没有收到任何邮件邮件在 60 分钟内未收到这两个类型对应源码 CriteriaFilter.ts 中的FilterType.RecievedInMinutes与FilterType.NotRecievedInMinutes。其求值逻辑位于 IncomingEmailCriteria.ts计算emailReceivedAt与checkedAt检查时刻之间的分钟差若差值 ≤ 阈值则在 X 分钟内收到成立若差值 阈值则X 分钟内未收到成立。数值以字符串传入时会先经parseInt转换为数字。JavaScript 表达式唯一的过滤条件是求值为真Evalueres til sand / Evaluates To True当表达式返回真值时条件成立。⚠️重要限制表达式运行在无邮件字段绑定的沙箱中因此它无法读取触发检查的那封邮件的主题、发件人、正文或收件人。若需要基于邮件内容匹配请使用邮件主题、邮件发件人、邮件正文、邮件收件人这些字符串过滤类型。示例配置示例 1收到关键邮件时创建告警告警创建条件邮件主题包含CRITICAL或 邮件主题包含ALERT或 邮件主题包含ERROR告警解除条件邮件主题包含RESOLVED或 邮件主题包含OK或 邮件主题包含RECOVERED示例 2监控指定发件人告警创建条件邮件发件人等于monitoringlegacy-system.com且 邮件主题包含Failed告警解除条件邮件发件人等于monitoringlegacy-system.com且 邮件主题包含Success示例 3心跳监控没有邮件 告警告警创建条件邮件接收时间在 60 分钟内未收到值设为60这会在 60 分钟内没有收到任何邮件时创建告警——非常适合监控应当发送完成通知邮件的计划任务scheduled jobs或批处理任务。告警解除条件邮件接收时间在 5 分钟内收到值设为5当收到邮件时告警即被解除。源码层面这类心跳式条件由后台 Worker 进程驱动作业 CheckOnlineStatus.ts 每 30 秒运行一次EVERY_THIRTY_SECONDS通过shouldProcessRequest扫描监控器的条件步骤只有当条件中包含EmailReceivedAt时间型检查时才触发求值否则该监控器的条件完全由收到邮件的 webhook 路径驱动避免无意义的空转求值。每次扫描还会以无钩子的单语句 UPDATEupdateColumnsByIdWithoutHooks写入incomingEmailMonitorHeartbeatCheckedAt心跳时间戳用于标记已检查的监控器。应用场景集成老旧系统许多老旧系统只支持基于邮件的告警。使用入站邮件监控器可以将邮件告警转换为 OneUptime 事件Incidents当恢复邮件到达时自动解除事件将多个老旧系统的告警集中管理。监控第三方服务接入一切通过邮件发送通知的服务云厂商告警AWS、GCP、Azure安全扫描工具备份完成通知SSL 证书到期告警。监控计划任务监控批处理任务与计划作业若完成邮件未按时到达则创建告警通过错误通知邮件追踪任务失败监控数据管道data pipelines的完成情况。聚合多厂商告警整合来自多个监控工具的告警通过邮件接收 Nagios、Zabbix 等工具的告警在 OneUptime 中统一事件管理为所有告警维护单一事实来源single source of truth。模板变量Template Variables配置事件模板Incident Templates时可以使用来自入站邮件的以下变量变量说明{{emailSubject}}收到的邮件的主题{{emailFrom}}发件人的邮箱地址{{emailTo}}收件人的邮箱地址{{emailBody}}邮件的纯文本正文{{emailReceivedAt}}邮件被接收的时间这些字段与运行时IncomingEmailMonitorRequest数据结构见 IncomingEmailMonitorRequest.ts一一对应保证了模板渲染时数据的可获取性。监控器概览视图监控器概览页Summary View会展示最近一封邮件的关键信息最近邮件接收时间Seneste e-mail modtaget kl.最近一封邮件的接收时间发件人Fra最近一封邮件的发件人主题Emne最近一封邮件的主题行邮件头E-mailheadere最近一封邮件的完整头信息可展开邮件正文E-mailindhold最近一封邮件的正文内容可展开。前端展示组件位于 IncomingEmailMonitorSummaryView.tsx并在监控器视图页面 Index.tsx 中集成。自托管Self-hosted设置如果你自托管 OneUptime需要配置一个入站邮件提供商inbound email provider。当前支持SendGrid Inbound Parse相关集成方式为 SendGrid 的入站邮件解析Inbound Parse功能用于将发送到你的入站域的邮件转交给 OneUptime 处理。该功能的详细配置说明收录在仓库 Docs 内容的 self-hosted 专题中原文链接为/docs/self-hosted/sendgrid-inbound-email对应 Docs 内容目录 下的相关语言文档。配置完成后需将收到的邮件投递目标指向 OneUptime 的邮件接收接口OneUptime 会解析邮件并构造IncomingEmailMonitorRequest交给条件求值器处理求值器实现见 IncomingEmailCriteria.ts。注意事项邮箱地址安全性监控器邮箱地址包含机密密钥incomingEmailSecretKey。请像对待密码一样对待它切勿公开分享。邮件大小包含大型附件的超大邮件可能被邮件提供商截断或拒绝。IncomingEmailMonitorRequest中的附件仅记录文件名、内容类型与大小等元信息。处理时间邮件是异步处理的从发送邮件到创建告警之间可能有数秒延迟。大小写不敏感所有字符串比较包含、等于等均不区分大小写——这在 IncomingEmailCriteria.ts 中通过toLowerCase()实现。纯文本求值邮件正文条件使用邮件的纯文本版本进行求值HTML 格式会被移除。若需要 HTML 内容emailBodyHtml字段在请求结构中是可选提供的见 IncomingEmailMonitorRequest.ts。故障排查收不到邮件确认邮箱地址拼写正确检查是否有拼写错误检查邮件是否被垃圾邮件过滤器拦截确认入站邮件提供商配置正确检查 OneUptime 日志中是否有错误信息。告警未创建确认你的条件与邮件内容匹配检查监控器未被禁用在监控器详情页查看求值日志evaluation logs先使用精确字符串匹配测试再使用模式匹配。告警未解除确认解除条件与恢复邮件匹配确保存在一个处于活动状态的告警可以解除确认恢复邮件发送到了同一个监控器地址。源码级实现要点总结请求数据结构入站邮件被标准化为IncomingEmailMonitorRequestIncomingEmailMonitorRequest.ts包含主题、收发件人、纯文本/HTML 正文、邮件头、接收时间、附件元信息等字段。条件求值IncomingEmailCriteria.isMonitorInstanceCriteriaFilterMetIncomingEmailCriteria.ts按CheckOn分派求值——字符串字段走大小写不敏感的evaluateStringCriteria时间字段计算接收时间与检查时间的分钟差。后台心跳作业Worker 中的 CheckOnlineStatus.ts 每 30 秒扫描一次入站邮件监控器仅对含时间型条件的监控器做心跳求值并用轻量 UPDATE 维护心跳时间戳避免触发完整的工作流/审计日志钩子。测试保障IncomingMonitorDefaultCriteria.test.ts 与 IncomingEmailBodyCriteria.test.ts 分别锁定了默认条件契约与正文条件求值行为防止默认值悄然回归到旧的最近 30 分钟内收到心跳检查。以上实现细节均可直接在仓库对应路径中查阅便于你在二次开发或排查问题时快速定位。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表