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.
    
  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/zero/p/5904297.html
Copyright © 2011-2022 走看看