使用logstash监控logback日志

前言

leader 让给生产服务器上 tomcat 错误日志监控起来,我们的应用使用的日志框架是logback,google 找到了一个 logstash 和logback 集成的好工具,logstash-logback-encoder
之前流程,客户在使用过程中遇到问题,我们手动的上生产服务器翻看catalina.out那个时间点的日志来排错。我想实现通过日志监控,将日志按照系统名称、日志类型、日志级别、日志信息、日志堆栈来切割,并输出到 elasticsearch,同时集成了 zabbix,日志信息输出到 elasticsearch 的同时还能同时进行邮件预警,将错误信息直接通过邮件发送。

通过 logstash 输出到 elasticsearch

配置 logback 的 appender,将系统错误日志解析成 json 的格式,并通过 UDP 的方式上传到 logstash,logstash 配置UDP的input,存到 elasticsearch。

logback.xml配置

我使用的是UDP Appender
堆栈信息配置参见Customizing Stack Traces

<appender name="stash" class="net.logstash.logback.appender.LogstashSocketAppender">
        <!--logstash服务器IP-->
        <host>127.0.0.1</host>
        <!-- port is optional (default value shown) -->
        <port>514</port>
        <customFields>{"appname":"bdcor2"}</customFields>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
            	<!--正则匹配的日志信息不输出-->
                <exclude>sun\.reflect\..*\.invoke.*</exclude>
                <exclude>net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
                <exclude>org.*</exclude>
                <rootCauseFirst>true</rootCauseFirst>
            </throwableConverter>
        </encoder>
</appender>
<root level="ERROR">
      <appender-ref ref="stash"/>
</root>

  

logstash配置

配置Input plugins,默认的bugger_size是8192,指从网络读取的数据包大小,开始测试的时候,堆栈日志太长,输出到logstash,一直报_jsonparsefailure,日志信息被截取。
tips: 开启1-1024之间的端口,必须使用root用户

udp {
  port => 514
  codec => "json"
  type => "syslog"
  buffer_size => 20000
}

  

存到elasticsearch的数据结构如下

通过logstash输出到zabbix

logstash配置

配置详见logstash-output-zabbix
开始我直接配置zabbix_host => "logstash"时报错Field referenced by logstash is missing {:level=>:warn},查看配置文档

The field name which holds the Zabbix host name. This can be a sub-field of the @metadata field.

  该配置项必须是一个field name,对应了zabbix前端配置的主机名称。zabbix的配置其实就是zabbix_sender的配置,zabbix_sender的使用见下面

filter {
	mutate {
	  add_field => { "[@metadata][zabbix_key]" => "logstash" }
	}
}
output {
  if "_grokparsefailure" not in [tags] {	
		if [level] == "ERROR" {	
			zabbix {
			    zabbix_host => "[@metadata][zabbix_key]"
				zabbix_server_host => "10.24.10.225"
				zabbix_key => "[@metadata][zabbix_key]"
				zabbix_value => "message"
			}
		}
  }
}

  

zabbix配置

配置监控项,类型为zabbix采集器,键值对应logstash zabbix配置的zabbix_key


配置完成之后,可以通过zabbix_sender进行测试

[root@Slave01 ~]# zabbix_sender -z 10.24.10.225 -s logstash -k "logstash" -o hello1111
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000038"

  

然后在zabbix前端 监测中—>最新数据里面找到这个值

配置触发器,选择区间T中最新字符串的长度,即有错误消息,立马就进行邮件预警

发送的邮件内容

posted @ 2018-03-14 20:16  dion至君  阅读(10314)  评论(0编辑  收藏  举报