【发布时间】:2015-09-03 09:21:02
【问题描述】:
我的 ELK 设置如下:
HOST1:组件(生成日志)+ Logstash(发送日志到redis)
HOST2: Redis + Elasticsearch + Logstash(基于 grok 解析数据并在相同设置下发送到 elasticsearch)
HOST3: Redis + Elasticsearch + Logstash(基于 grok 解析数据并在相同设置下发送到 elasticsearch)
HOST4: nginx + Kibana 4
现在,当我从 logstash 向 redis 发送一条错误日志行时,我在 Kibana 4 中得到了双重输入。如下所示:
另外,我没有收到任何来自 logstash 的电子邮件警报,尽管它被配置为在 severity == "Erro" 时发送警报。
这是logstash conf文件的一部分:
output {
elasticsearch { host => ["<ELK IP>"] port => "9200" protocol => "http" }
if [severity] =~ /Erro/
{
email {
from => "someone@somedomain.com"
subject => "Error Alert"
to => "someone@somedomain.com"
via => "smtp"
htmlbody => "<h2>Error Alert1</h2><br/><br/><div
align='center'>%{message}</div>"
options => [
"smtpIporHost", "smtp.office365.com",
"port", "587",
"domain", "smtp.office365.com",
"userName", "someone@somedomain.com",
"password", "somepasswd",
"authenticationType", "login",
"starttls", "true"
]
}
}
stdout { codec => rubydebug }
}
我正在使用以下自定义 grok 模式来解析日志行:
ABTIMESTAMP %{YEAR}%{MONTHNUM2}%{MONTHDAY} %{USERNAME}
ABLOGLEVEL (Note|Erro|Fatl|Warn|Urgt)
ABLOG %{ABTIMESTAMP:timestamp} %{HOST:hostname} %{WORD:servername} %{INT:pid} %{INT:lwp} %{INT:thread} %{ABLOGLEVEL:severity};%{USERNAME:event}\(%{NUMBER:msgcat}/%{NUMBER:msgnum}\)%{GREEDYDATA:greedydata}
这里有什么帮助,如何获取每个错误日志行的每个电子邮件警报?
提前致谢!
【问题讨论】:
-
从 Kibana 屏幕截图中,您的
severity字段似乎是一个包含两个Erro值的数组,这可能是您的检查不起作用的原因,因此,您的电子邮件是没有发送。 -
那是我关心的问题,当我只放一次这一行时,它是如何获取包含多个值的严重性字段数组的......
-
您的问题中缺少一件事,即您如何解析日志行?
-
我已经为它编写了自定义 grok,
ABTIMESTAMP %{YEAR}%{MONTHNUM2}%{MONTHDAY} %{USERNAME} ABLOGLEVEL (Note|Erro|Fatl|Warn|Urgt) ABLOG %{ABTIMESTAMP:timestamp} %{HOST:hostname} %{WORD:servername} %{INT:pid} %{INT:lwp} %{INT:thread} %{ABLOGLEVEL:severity};%{USERNAME:event}\(%{NUMBER:msgcat}/%{NUMBER:msgnum}\)%{GREEDYDATA:greedydata} -
我认为如果您可以使用该配置更新您的问题并添加您可能拥有的任何自定义模式定义,那就太好了。
标签: elasticsearch logstash kibana-4