python - Elast 警报 email_from_field 仅向一个收件人发送消息
问题描述
当我使用 email_from_field 选项时,Elastalert 只向一个收件人发送消息,但有两个收件人。这是我的规则:
name: SOD Error recipients
type: frequency
# ES Settings
es_host: elasticsearch
es_port: 9200
index: $INDEX
num_events: 1
timeframe:
seconds: 30
realert:
minutes: 0
filter:
- query:
query_string:
query: "ServiceName: test_multirecipients"
aggregation:
seconds: 10
aggregation_key: logger
query_key: logger
#SMTP Settings
smtp_host: "$SMTP_IP"
smtp_port: $SMTP_PORT
smtp_ssl: false
smtp_auth_file: /opt/config/smtp_auth_file.yaml
from_addr: "$SMTP_FROM"
email_format: "html"
email_from_field: "recipients"
# Include certain field inside alert body
include: ["ServiceName", "message", "logger", "recipients"]
alert_text_type: alert_text_only
alert_text: "sometext"
alert_text_args:
- ServiceName
- "@timestamp"
- recipients
- logger
alert:
- "email"
email:
- "$SMTP_TO2"
我认为麻烦可能是“收件人”字段的格式,但我不确定。这是它的外观:
在这两种情况下,消息总是发送到列表中的第一个电子邮件地址(可以是任何电子邮件),而第二个收件人将被忽略。但是第二个收件人总是列在 Outlook 邮件中的收件人中。
消息到达 ByndyuSoftTest 电子邮件,但 ByndyuSoft4 被忽略
消息到达 ByndyuSoft4 电子邮件,但 ByndyuSoftTest 被忽略
解决方案
知道了。email_from_field 作为单个电子邮件地址传递,即使有更多地址。这有效(alerts.py):
if 'email_from_field' in self.rule:
recipient = lookup_es_key(matches[0], self.rule['email_from_field'])
if isinstance(recipient, str):
if '@' in recipient:
to_addr = recipient.split(',')
elif 'email_add_domain' in self.rule:
to_addr = [recipient + self.rule['email_add_domain']]
推荐阅读
- javascript - 我的程序的“npm start”命令没有连接到 Mongod 的本地主机,这看起来工作错误
- r - 在 R 范围的数据中选择多列来管道操作
- kubernetes - 在 k3s 上使用 traefik 入口生成重定向?
- java - MediaPlayer.onCreate 方法/Android 音乐应用程序出错
- python - 最有效的计数numpy
- r - 提取数据框列中唯一值的数量
- javascript - EntityMetadataNotFound:找不到“用户”的元数据
- laravel - Laravel 与 postgres 的连接无法正常工作
- tensorflow - 向 HuggingFace 的 TFT5ForConditionalGeneration 模型添加样本权重
- c++ - 单击按钮 QT 时将参数传递给函数