我会在输出邮件中使用 _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}"
}}} ```
答案 0 :(得分:0)
我会采取不同的方式并利用 Kibana 中的 Alerting & Actions 功能。
您可以在 custom query 上设置警报(例如,tags
存在)并决定发送警报 via email。
更新:
使用 OpenDistro 时,您可以访问其工作方式类似的 Alerting plugin,您可以使用它来发送警报。
答案 1 :(得分:0)
我认为您正在尝试创建一封电子邮件,其中包含指向相关文档的直接链接。
您可以通过对现有配置进行三处小的更改来实现这一点。
filter
阶段生成“id”字符串document_id
默认情况下,Elasticsearch 会生成一个不与 Logstash 共享的随机 _id
。这就是我们需要执行所有这三个步骤的原因。
UUID 和 Fingerprint 过滤器插件可以提供帮助。我将使用 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]}"
我假设 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
。