ELK日志处理之使用logstash收集log4J日志

来源:互联网 发布:淘宝网的女款衬衣 编辑:程序博客网 时间:2024/05/20 16:40

介绍一下如何从Java工程中导出log4J日志到Logstash。

一、log4j基础

不能免俗的官方介绍:

Log4j 是一个使用 Java 语言编写的,可靠、快速、灵活的日志框架(API),使用 Apache Software License 授权。它被移植到 C、C++、C#、Perl、Python、Ruby 和 Eiffel 语言中。

Log4j 是高度可配置的,在运行期使用外部的配置文件对其进行配置。它按照优先级别记录日志,并可将日志信息定向输出到各种介质,比如数据库、文件、控制台、Unix Syslog等。

Log4j 主要由三部分组成:

  1. loggers:负责采集日志信息。
  2. appenders:负责将日志信息发布到不同地方。
  3. layouts:负责以各种风格格式化日志信息。

二、新建Java工程

下面通过实际的工程配置学习如何配置log4j。 
打开Eclipse或者Intellij Idea,新建一个maven工程。工程目录结构如下图所示: 
这里写图片描述
pom.xml文件中加入log4j的依赖,版本为1.2.17,pom.xml中的代码如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.logs</groupId>    <artifactId>log4idemo1</artifactId>    <version>1.0-SNAPSHOT</version>    <!-- https://mvnrepository.com/artifact/log4j/log4j -->    <dependencies>        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency>    </dependencies></project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在resource目录下新建log4j.properties,加入以下配置:

### 设置###log4j.rootLogger = debug,stdout,D,E,logstash### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### 输出DEBUG 级别以上的日志到=/Users/bee/Documents/elk/log4j/debug.log###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = /Users/bee/Documents/elk/log4j/debug.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 输出ERROR 级别以上的日志到=/Users/bee/Documents/elk/log4j/error.log  ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =/Users/bee/Documents/elk/log4j/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n#输出日志到logstashlog4j.appender.logstash=org.apache.log4j.net.SocketAppenderlog4j.appender.logstash.RemoteHost=127.0.0.1log4j.appender.logstash.port=4560log4j.appender.logstash.ReconnectionDelay=60000log4j.appender.logstash.LocationInfo=true
  • 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
  • 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

配置文件中,把日志输出了四份:

  1. 第一份输出到控制台
  2. 第二份把DEBUG 级别以上的日志到文件
  3. 第三份把输出ERROR 级别以上的日志到文件
  4. 第四份输出到logstash

在java目录下添加Log4jTest.java,内容如下:

import org.apache.log4j.Logger;/** * Created by bee on 17/3/6. */public class Log4jTest {    public static final Logger logger=Logger.getLogger(Log4jTest.class);    public static void main(String[] args) {        logger.debug("This is a debug message!");        logger.info("This is info message!");        logger.warn("This is a warn message!");        logger.error("This is error message!");        try{           System.out.println(5/0);        }catch(Exception e){            logger.error(e);        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

三、配置logstash

(logstash的安装和hello world教程请点这里http://blog.csdn.net/napoay/article/details/53276758)这里使用logstash2.3.3和Elasticsearch 2.3.3,首先启动Elasticsearch,然后在logstash-2.3.3/conf目录下新建配置文件log4j-es.conf,文件内容如下:

input {    log4j {        host => "127.0.0.1"        port => 4560    }}output {    stdout {      codec => rubydebug    }    elasticsearch{        hosts => ["localhost:9200"]        index => "log4j-%{+YYYY.MM.dd}"        document_type => "log4j_type"    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

配置文件中指定日志输出有2份,一份输出到console,一份输出到Elasticsearch。 
启动logstash:

sudo ./bin/logstash -f conf/log4j-es.conf
  • 1
  • 1

如果你已经启动了Elasticsearch,IP和端口都是通畅的,配置文件无误,启动成功后的界面如下: 
这里写图片描述

运行Log4jTest.java,在终端中可以看到以下输出:

这里写图片描述

在Elasticsearch中查看导入的日志: 
这里写图片描述

四、总结

上述配置完成了日志的产生,到logstash,再到Elasticsearch,介绍完毕。


elasticsearch集群管理工具head插件

elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由HTML5编写的独立网页程序,你可以通过插件把它集成到es

插件安装方法1:
1.elasticsearch/bin/plugin -install mobz/elasticsearch-head
2.运行es
3.打开http://localhost:9200/_plugin/head/
插件安装方法2:
1.https://github.com/mobz/elasticsearch-head下载zip 解压
2.建立elasticsearch-1.0.0\plugins\head\_site文件
3.将解压后的elasticsearch-head-master文件夹下的文件copy到_site
4.运行es
5.打开http://localhost:9200/_plugin/head/

在地址栏输入es服务器的ip地址和端口点connect就可以连接到集群。下面是连接后的视图。这是主界面,在这里可以看到es集群的基本信息(如:节点情况,索引情况)。

界面的右边有些按钮,如:node stats, cluster nodes,这些是直接请求es的相关状态的api,返回结果为json,如下图:

在索引下面有info和action两个按钮。info是可以查看索引的状态和mapping的定义。action是对索引进行操作,如:添加别名、刷新、关闭索引,删除索引等。

browser浏览界面,这个界面可以同时查看多个索引的数据,也可以查询指定字段的数据。


Structured Query查询界面,这个界面可以对某个索引进行一些复杂查询,如下面这个例子是查询product索引,构造boolquery,title字段里查询“产品”关键词,price范围为10到100的记录。


Any Request任意请求界面,这个界面可以说是个rest的客户端,可以通过它来对es进行一些请求操作或测试api接口,下面这个例子是把product索引的副本数设置为1,更多的api可以到es官网查询。


参考文献:http://blog.csdn.net/laigood12345/article/details/8193758


3
0 0
原创粉丝点击