概述

{pve} 将在系统中发生值得注意的事件时发送通知。

有许多不同的通知事件,每个事件都有其自己的一组元数据字段,这些字段可以在通知匹配器中使用。

一个通知匹配器用来决定_哪些_通知应该发送_到哪里_。一个匹配器有_匹配规则_,这些规则可以用来根据特定的通知属性进行匹配(例如时间戳、严重性、元数据字段)。如果一个匹配器匹配到一个通知,那么这个通知将被路由到一组可配置的通知目标。

一个通知目标 是一个抽象的目的地,用来发送通知 - 例如,一个Gotify服务器实例,或一组电子邮件地址。存在多种类型的通知目标,包括 sendmail,它使用系统的sendmail命令来发送电子邮件,或者 gotify,它发送通知到一个Gotify实例。

通知系统可以在GUI下的 Datacenter → Notifications 中进行配置。配置存储在 /etc/pve/notifications.cfg/etc/pve/priv/notifications.cfg 中 - 后者包含敏感配置选项,如通知目标的密码或认证令牌。

通知目标

Sendmail

sendmail二进制文件是一种通常在类Unix操作系统上发现的程序,用于处理发送电子邮件消息。这是一个命令行实用程序,允许用户和应用程序直接从命令行或脚本内部发送电子邮件。

Sendmail 通知目标使用 sendmail 二进制文件来发送电子邮件。

Note
在标准的 {pve} 安装中,sendmail 二进制文件是由 Postfix 提供的。为了使这类目标能够正确工作,可能需要更改 Postfix 的配置,以便它能正确地投递电子邮件。对于集群设置,每个集群节点上都必须有一个工作状态良好的 Postfix 配置。

Sendmail 目标插件的配置具有以下选项:

  • mailto: 发送通知的电子邮件地址。可以设置多次以容纳多个收件人。

  • mailto-user`:接收邮件的用户。将会在`users.cfg`中查找用户的电子邮件地址。可以设置多次以容纳多个收件人。

  • author`:设置电子邮件的作者。默认为`Proxmox VE`。

  • from-address`:设置电子邮件的发件人地址。如果未设置该参数,插件将回退到`datacenter.cfg`文件中的`email_from`设置。如果那个也没有设置,插件将默认使用`root@$hostname`,其中`$hostname`是节点的主机名。

  • comment```:针对此目标的评论。电子邮件中的```From```头将被设置为```$author <$from-address>```。

示例配置(/etc/pve/notifications.cfg):

sendmail: example
        mailto-user root@pam
        mailto-user admin@pve
        mailto max@example.com
        from-address pve1@example.com
        comment Send to multiple users/addresses

简单邮件传输协议

SMTP通知目标可以直接向SMTP邮件中继发送电子邮件。

SMTP目标插件的配置有以下选项:

  • mailto: 发送通知的电子邮件地址。可以设置多次以容纳多个收件人。

  • mailto-user`:接收邮件的用户。将会在`users.cfg`中查找用户的电子邮件地址。可以设置多次以容纳多个收件人。

  • author`:设置电子邮件的作者。默认为`Proxmox VE`。

  • from-address```:设置电子邮件的发件人地址。SMTP中继可能要求这个地址由用户拥有,以避免被冒充。电子邮件中的```From```头部将被设置为```$author <$from-address>```。

  • username`:认证时使用的用户名。如果没有设置用户名,则不执行认证。支持PLAIN和LOGIN认证方法。

  • password`: 在认证时使用的密码。

  • mode`: 设置加密模式(insecurestarttlstls)。默认为 tls

  • server`: SMTP中继的地址/IP

  • 'port:要连接的端口。如果没有设置,默认使用的端口是25(insecure),465(tls)或587(starttls),这取决于`mode`的值。'

  • comment```: 此目标的注释

示例配置(/etc/pve/notifications.cfg):

smtp: example
mailto-user root@pam
mailto-user admin@pve
mailto max@example.com
from-address pve1@example.com
username pve1
server mail.example.com
mode starttls

含有密钥令牌的 /etc/pve/priv/notifications.cfg 文件中的匹配条目:

smtp: example
password somepassword

Gotify

''http://gotify.net [Gotify] 是一个开源的自托管通知服务器,它允许你发送和接收推送通知到各种设备和应用程序。它提供了一个简单的API和网页接口,使得它易于与不同的平台和服务集成。''

Gotify目标插件的配置具有以下选项:

  • server`:Gotify服务器的基础URL,例如 `http://<ip>:8888

  • token`:认证令牌。令牌可在Gotify网页界面内生成。

  • comment```: 此目标的注释

Note
Gotify目标插件将遵循来自数据中心配置的HTTP代理设置。

示例配置(/etc/pve/notifications.cfg):

gotify: 示例
服务器 http://gotify.example.com:8888
评论 发送给多个用户/地址

含有密钥令牌的 /etc/pve/priv/notifications.cfg 文件中的匹配条目:

gotify: example
token somesecrettoken

通知匹配器

通知匹配器根据其匹配规则将通知路由到通知目标。这些规则可以匹配通知的某些属性,例如时间戳(match-calendar)、通知的严重性(match-severity)或元数据字段(match-field)。如果一个通知被匹配器匹配,所有为该匹配器配置的目标都将接收到通知。

可以创建任意数量的匹配器,每个匹配器都有自己的匹配规则和通知目标。每个目标最多只会收到一次通知,即使该目标在多个匹配器中使用。

一个没有任何匹配规则的匹配器始终为真;配置的目标将始终被通知。

matcher: always-matches
        target admin
        comment This matcher always matches

匹配器选项

  • target`:确定如果匹配器匹配成功,应通知哪个目标。可多次使用以通知多个目标。

  • invert-match`:反转整个匹配的结果

  • mode`:决定了如何评估单个匹配规则以计算整个匹配器的结果。如果设置为`all`,则所有匹配规则必须匹配。如果设置为`any`,至少一个规则必须匹配。匹配器必须为真。默认为`all`。

  • match-calendar`:将通知的时间戳与日程表进行匹配

  • match-field`:匹配通知的元数据字段

  • match-severity`:匹配通知的严重性

  • comment`:这个匹配器的注释

日历匹配规则

一个日历匹配器会根据可配置的日程表来匹配发送通知的时间。

  • match-calendar 8-12

  • match-calendar 8:00-15:30

  • match-calendar mon-fri 9:00-17:00

  • match-calendar sun,tue-wed,fri 9-17

字段匹配规则

通知有一系列的元数据字段可以进行匹配。

  • match-field exact:type=vzdump` 仅匹配有关备份的通知。

  • match-field regex:hostname=^.+\.example\.com$` 匹配节点的主机名。

如果匹配的元数据字段不存在,那么通知将不会被匹配。例如,一个`match-field regex:hostname=.*`指令只会匹配那些有一个任意`hostname`元数据字段的通知,但如果该字段不存在,则不会匹配。

严重性匹配规则

通知有一个相关的严重性级别,可以进行匹配。

  • match-severity error`:只匹配错误

  • match-severity warning,error`: 匹配警告和错误

以下严重性等级正在使用中:info(信息),notice(通知),warning(警告),error(错误),unknown(未知)。

例子

matcher: workday
match-calendar mon-fri 9-17
target admin
comment Notify admins during working hours


matcher: night-and-weekend
        match-calendar mon-fri 9-17
        invert-match true
        target on-call-admins
        comment Separate target for non-working hours
matcher: backup-failures
        match-field exact:type=vzdump
        match-severity error
        target backup-admins
        comment Send notifications about backup failures to one group of admins

matcher: cluster-failures
match-field exact:type=replication
match-field exact:type=fencing
mode any
target cluster-admins
comment Send cluster-related notifications to other group of admins

最后一个匹配器也可以用带有正则表达式的字段匹配器重写:

matcher: cluster-failures
match-field regex:type=^(replication|fencing)$
target cluster-admins
comment Send cluster-related notifications to other group of admins

通知事件

事件 类型 严重性 元数据字段 (除了`type`之外)

系统更新可用

package-updates

info

hostname

集群节点被隔离

fencing

error

hostname

存储复制失败

replication

error

-

备份完成

vzdump

info (error on failure)

hostname

发送给root的邮件

system-mail

unknown

-

字段名称 描述

type

通知的类型

hostname

主机名,包括域名(例如 pve1.example.com

系统邮件转发

某些本地系统守护进程,例如`smartd`,会生成通知邮件,这些邮件最初是定向给本地的`root`用户的。{pve}`会将这些邮件作为类型为`system-mail、严重性为`unknown`的通知,输入到通知系统中。

当转发过程涉及基于电子邮件的目标(如`sendmail`或`smtp`)时,电子邮件会被完整地转发,所有原始邮件头部信息保持不变。对于所有其他目标,系统会尝试从电子邮件内容中提取主题行和正文。在电子邮件仅由HTML内容组成的情况下,在此过程中它们将被转换成纯文本格式。

权限

为了修改/查看通知目标的配置,需要对`/mapping/notifications` ACL节点具有`Mapping.Modify/Mapping.Audit`权限。

测试一个目标需要在`/mapping/notifications`上的`Mapping.Use`、`Mapping.Audit`或者`Mapping.Modify`权限。