概述
{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`: 设置加密模式(
insecure
、starttls
或tls
)。默认为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`之外) |
---|---|---|---|
系统更新可用 |
|
|
|
集群节点被隔离 |
|
|
|
存储复制失败 |
|
|
- |
备份完成 |
|
|
|
发送给root的邮件 |
|
|
- |
字段名称 | 描述 |
---|---|
|
通知的类型 |
|
主机名,包括域名(例如 |
系统邮件转发
某些本地系统守护进程,例如`smartd`,会生成通知邮件,这些邮件最初是定向给本地的`root`用户的。{pve}`会将这些邮件作为类型为`system-mail
、严重性为`unknown`的通知,输入到通知系统中。
当转发过程涉及基于电子邮件的目标(如`sendmail`或`smtp`)时,电子邮件会被完整地转发,所有原始邮件头部信息保持不变。对于所有其他目标,系统会尝试从电子邮件内容中提取主题行和正文。在电子邮件仅由HTML内容组成的情况下,在此过程中它们将被转换成纯文本格式。
权限
为了修改/查看通知目标的配置,需要对`/mapping/notifications` ACL节点具有`Mapping.Modify/Mapping.Audit`权限。
测试一个目标需要在`/mapping/notifications`上的`Mapping.Use`、`Mapping.Audit`或者`Mapping.Modify`权限。