_id 像变量 logstash 输出电子邮件

时间:2021-05-11 12:41:43

标签: elasticsearch logstash

我会在输出邮件中使用 _id(元数据)之类的变量。 但它不起作用,因为它不能像变量一样考虑 _id。 有人有想法吗? 我以这种方式输出:

elasticsearch {
     hosts => [ "https://xxx:9200" ]
     ssl => true
     ssl_certificate_verification => false
     user => "admin"
     password => "admin"
     index => "apache"
}
stdout { codec => rubydebug }
if [tags] {
email {
to => "xxx"
address => "smtp.gmail.com"
port => 587
username => "xxx"
password => "xxx"
use_tls => true
body => "something happened: %{message} http://xxx/5601/app/discover#/doc/82de0080-acd9-11eb-a4b8-614232a13000/indexname?id=%{id}"
}}} ```

2 个答案:

答案 0 :(得分:0)

我会采取不同的方式并利用 Kibana 中的 Alerting & Actions 功能。

您可以在 custom query 上设置警报(例如,tags 存在)并决定发送警报 via email

更新:

使用 OpenDistro 时,您可以访问其工作方式类似的 Alerting plugin,您可以使用它来发送警报。

答案 1 :(得分:0)

我认为您正在尝试创建一封电子邮件,其中包含指向相关文档的直接链接。

您可以通过对现有配置进行三处小的更改来实现这一点。

  1. 在管道的 filter 阶段生成“id”字符串
  2. 在 elasticsearch 输出中使用该字符串作为 document_id
  3. 在您的电子邮件输出模板中使用该字符串

默认情况下,Elasticsearch 会生成一个不与 Logstash 共享的随机 _id。这就是我们需要执行所有这三个步骤的原因。

生成ID字符串

UUIDFingerprint 过滤器插件可以提供帮助。我将使用 UUID,因为它更简单:

filter {
  uuid {
    target => "[@metadata][uuid]"
  }
}

这会生成一个随机 UUID,它应该足以满足您的目的。如果您更喜欢使用一致的哈希(例如用于重复数据删除),请使用指纹。

document_id 设置为 ID 字符串

通过将 _id 添加到您的 elasticsearch 输出中,将 UUID 用作 document_id => "[@metadata][uuid]"

elasticsearch {
     hosts => [ "https://xxx:9200" ]
     ssl => true
     ssl_certificate_verification => false
     user => "******"
     password => "******"
     index => "apache"
     document_id => "[@metadata][uuid]"
}

Elasticsearch 输出插件文档中的更多详细信息 here

在电子邮件输出 body 模板中包含 ID 字符串

您的 body 行应该更新为包含 %{[@metadata][uuid]}

   body => "something happened: %{message} http://xxx/5601/app/discover#/doc/82de0080-acd9-11eb-a4b8-614232a13000/indexname?id=%{[@metadata][uuid]}"

关于 Kibana 索引模式参考的注意事项

我假设 82de0080-acd9-11eb-a4b8-614232a13000 是与此处 ES 索引相关的 Kibana 索引模式的对象 ID。对于其他索引模式,或其他尝试相同操作的人,确定合适字符串的最简单方法是在 Kibana 中导航到单个文档,然后替换为上面的 ID 变量。

或者,在撰写本文时(2021 年 5 月),您可以用单词 mixed 替换该字符串,如下所示:

http://xxx/5601/app/discover#/doc/mixed/indexname?id=%{[@metadata][uuid]}

这在将来可能会中断,您仍然需要正确处理 indexname