日志收集系统 ELK

  查看日志一直都是一个很困扰的问题,登录到服务器上查看几百兆的txt文件,从中找到某个问题可能会留下的日志记录......    尤其是现在,在集群式部署的服务器原来越多的时候,找到一个异常记录几乎要翻遍每一台服务器,想想就崩溃了!这个时候就特别希望能有一个集中查看日志的方案来拯救我。

  曾经找到一个名为log4Grid的项目,试用了一下。日志数据都保存到mssql数据库中,通过一个web项目来查询显示日志记录。只是实现了基本的日志数据收集和显示,项目没有持续更新,使用起来也不够稳定。不是一个成熟的日志收集项目。

  log4net项目里有一个SimpleSocketServer的小应用,可以把多个服务器上的log4net日志集中到一个服务器上,然后再选择log4net的某种记录方式写下来。但是不能满足方便查看的要求。

  后来因为公司要求学习Java,所以经常能搜索到的ELK系统也进入了考虑的范围。经过初步试用,感觉是能满足我的基本需求的。
  虽然能搜索到很多ELK的部署说明,但是自己操作的时候还是遇到了很多坑,中间还遇到了无法继续的情况。在这里我也记录下自己的部署过程(因为没有及时记录,竟然有些细节忘记了)。
  那时候还不知道Exceptionless呢。
 
下载列表:
jdk1.8 (oracle)
logstash (https://www.elastic.co/downloads)
elasticsearch (https://www.elastic.co/downloads)
kibana (https://www.elastic.co/downloads)
redis for x64 (github)
Nssm(http://nssm.cc/download)

 

一. jdk安装

ELK是运行在JVM上的所以也要安装jdk,jdk安装在Windows系统上后需要配置系统环境变量。详细配置可以看成是另外一件事,请自行搜索网上文章。

 

二. elasticsearch

elasticsearch 是ELK的核心负责存储和检索。

将elasticsearch 解压到一个目录下,在\bin目录下找到服务的安装、启动文件 service.bat:

执行命令 service.bat install 安装windows服务
执行命令 service.bat start 启动windows服务
 
用浏览器访问 http://localhost:9200/ 能返回一个正常的页面就说明服务启动成功了
 

三. kibana

kibana 是ELK中负责显示检索结果的。

将kibana 解压到一个目录下,将nssm复制到kibana的\bin目录下(为了简单所以直接复制nssm):

执行命名 nssm install kibana
在nssm的界面上选择启动文件kibana.bat,设置自动启动,完成。
用浏览器访问 http://localhost:5601/ 能返回一个正常页面的话说明服务启动成功了
 

四. logstash

logstash在ELK中负责收集转化数据的,从日志中获取的数据由它传给elasticsearch。

将logstash解压到一个目录下,在\bin的同级目录下新建\conf目录,在该目录下存放配置文件。

启动服务时使用 logstash.bat -f ..\conf\xx.conf 的命令。

在logstash进入工作状态前,为了测试其能否正常工作,做了一个从日志文件获取数据的配置 example.conf:

input {
   file {
       path => "C:\logs\log.log"
   }
}
filter {}
output {
   stdout {
      codec => rubydebug
  }
}

当日志文件有新增时就会在控制台上输出。

一般情况下应该从log4j(我系统是log4j的)的输出获取数据,配置 log4j.conf :
input {
  log4j{
    mode => "server"
    type=>"log4j-json"
    port=>4712
  } 
}
filter {}
output {
   stdout { codec => rubydebug }
   elasticsearch { hosts => ["127.0.0.1"] }
}

这就是在单机上配置ELK的关键点,跨服务器还没试过。

logstash的配置文件很容易出错误,最后我只放基本的配置,用ANSI不用中文不用注释。

 

对应的在系统内log4j要配置SocketAppender输出,log4j的properties配置:

log4j.rootLogger=info,logstash
# Socket,logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.Port=4712
log4j.appender.logstash.RemoteHost=localhost
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
 

把新的输出配置logstash加到log4j.rootLogger= 后就能获得全部的日志输出。

如果收到以下提示信息,说明没找到log4j的SocketAppender输出请检查日志配置是否正确
log4j:WARN No appenders could be found for logger (org.apache.http.client.protoc
ol.RequestAuthCache).
log4j:WARN Please initialize the log4j system properly.

 

posted @ 2016-10-14 21:30  [z]  阅读(5051)  评论(0编辑  收藏  举报