当我使用 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 被忽略
答案 0 :(得分:0)
明白了。 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']]