使用Logstash发送异常邮件

使用Logstash发送异常邮件

前端时间我们讲了如何使用elk搭建日志系统,以及如何使用Docker搭建ELK日志系统。虽然我们可以不用再去日志服务器找日志了,但是这样也有问题,我怎么知道什么时候会出现异常,不出现异常我也没必要去kibana查日志啊。

今天我们就要解决这个问题。当然解决的方式比较简单。如果有大神有更好的方式欢迎一起分享。

使用Logstash发送邮件

我们使用的是Logstash来发送邮件,网上我也搜了elastalert,但是感觉又多了一个服务,又要多去维护一个服务。后来发现logstash自带了邮件发送功能,那就直接用logstash就好了。

非常的简单易用,在logstash.conf中增加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
input {
beats {
host => "localhost"
port => "5043"
}
}

filter {
if [fields][doc_type] == 'order' {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" }
}
}
}

output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[fields][doc_type]}-%{+YYYY.MM.dd}"
}

if "ERROR" == [level] {
email {
to => "5228******@qq.com,chen****@163.cn"
cc => "email_chen****@163.com"
via => "smtp"
subject => "标题,ERROR: %{[fields][doc_type]}项目出现异常"
htmlbody => "消息主体:%{message}"
body => "Tags: %{tags}\\n\\Content:\\n%{message}"
from => "email_chen****@163.com"
address => "smtp.163.com"
username => "email_chen****@163.com"
password => "*****" # pop3密码或者登陆密码
}
}
}

主要是增加了下面这段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if "ERROR" == [level] {
email {
to => "5228******@qq.com,chen****@163.cn"
cc => "email_chen****@163.com"
via => "smtp"
subject => "标题,ERROR: %{[fields][doc_type]}项目出现异常"
htmlbody => "消息主体:%{message}"
body => "Tags: %{tags}\\n\\Content:\\n%{message}"
from => "email_chen****@163.com"
address => "smtp.163.com"
username => "email_chen****@163.com"
password => "*****" # pop3密码或者登陆密码
}
}

我们只对ERROR级别的日志进行发送邮件,这里用了if条件语句。如果你看过之前的两篇文章,我想这里你是很容易就能弄懂的。当然这种方式不一定很好,如果你有更好的想法,欢迎交流。

坚持原创技术分享,您的支持将鼓励我继续创作!