Elast 警报 email_from_field 仅向一位收件人发送消息

时间:2021-02-19 09:07:16

标签: python elasticsearch elastalert

当我使用 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"

我认为问题可能是“收件人”字段的适当格式,但我不确定。这是它的外观: enter image description here

我尝试了另一种语法: enter image description here

在这两种情况下,消息总是发送到列表中的第一个电子邮件地址(可以是任何电子邮件),而第二个收件人将被忽略。但第二个收件人始终列在 Outlook 邮件内的收件人中。

enter image description here

消息传到 ByndyuSoftTest 电子邮件,但 ByndyuSoft4 忽略了

enter image description here

消息传到 ByndyuSoft4 电子邮件,但 ByndyuSoftTest 被忽略

1 个答案:

答案 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']]