zoukankan      html  css  js  c++  java
  • 日志收集系统 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 解压到一个目录下,在in目录下找到服务的安装、启动文件 service.bat:

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

    三. kibana

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

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

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

    四. logstash

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

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

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

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

    input {
       file {
           path => "C:logslog.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.
    
  • 相关阅读:
    潭州课堂25班:Ph201805201 第十二课 new方法,定制属性访问,描述符与装饰器 (课堂笔记)
    潭州课堂25班:Ph201805201 第十一课 继承,多继承和魔术方法,属性和方法 (课堂笔记)
    Storm笔记
    java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法
    java代码。从来没想过java里的继承是多么的难懂。如哲学
    java代码继承疑惑,请有心人解答
    java冒泡排序
    java数组复制
    java继承。顾不了
    java继承初级
  • 原文地址:https://www.cnblogs.com/zero/p/5904297.html
Copyright © 2011-2022 走看看