zoukankan      html  css  js  c++  java
  • ELK(ElasticSearch, Logstash, Log4j)系统日志搭建

    • 1.elk平台介绍
    • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
    • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
    • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。因为kibana需要node.js的支持,麻烦所以本文暂时不介绍其使用,有兴趣可以自己去搭建一个。

      2.ELK平台搭建

        系统环境:window7 ,jdk1.7 ,logstash 2.3.4,es 2.3.5 

        备注:logstash要求jdk1.7以上。

      2.1 es搭建

        2.1.1 es下载地址:https://www.elastic.co/downloads/ 选中自己的版本,我选择的是window版本的

        2.1.2 解压压文件:elasticsearch-2.3.5

        2.1.3 安装插件:Head

          >cd d:/elasticsearch-2.3.5/bin

          >d:

          >plugin install mobz/elasticsearch-head

          进入到/elasticsearch-2.3.5/plugin有一个head的目录结构,正面已经安装完成。

        2.1.4 配置文件

          d:/elasticsearch-2.3.5/config/elasticsearch.yml

          修改配置文件: 

    cluster.name=es_cluster  ####集群名称
    
    ###### 节点名称     node.name=node0 ###### 数据存储路径 path.data=/elasticsearch/data ###### 日志文件存储路径 path.logs=/elasticsearch/logs #当前hostname或IP,我这里是 network.host=127.0.0.1 # 端口 network.port=9200

        2.1.5 启动es:

          >cd d:/elasticsearch-2.3.5/bin

          >d:

          >elasticsearch

          访问:127.0.0.1:9200 出现下图,正面已经配置成功

          

      2.2 logstash搭建

        logstash是一个日志收集器,主要三部分组成,input,filter,output.本介绍中,我们的input是log4j日志文件,而output是通过es来存储输出文件。

        2.2.1. 下载地址见2.1.1

        2.2.2. 加压logstash-2.3.4

        2.2.3. 配置文件修改

          >cd d:/logstash-2.3.4/bin ###添加配置文件config/log4j.conf

    a> 通过log4j发送日志方式
    input {
    log4j { mode => "server" host => "127.0.0.1" port => 4567 } } filter { #Only matched data are send to output. } output { # For detail config for elasticsearch as output, # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html elasticsearch { action => "index" #The operation on ES hosts => "127.0.0.1:9200" #ElasticSearch host, can be array. index => "AppLog" #The index to write data to. } }

    b>通过file文件方式发送

      input {
        file {
          path => "D:/data/file.txt"
          start_position => beginning
          ignore_older => 0
        }
      }


    c>mq方式发送日志
       zeromq {
          address => ["tcp://127.0.0.1:8889"]
         mode => "client"
          type => "zmq-input"
          topic => "weblog"
          topology => "pubsub"
      codec => "json"
        }
      }

    d>jdbc发送日志
      安装插件:/plugin install logstash-input-jdbc
      input {
        jdbc {
          # mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库
          jdbc_connection_string => "jdbc:mysql://192.168.1.1:3306/test"
          
          # the user we wish to excute our statement as
          jdbc_user => "root"
          jdbc_password => "******"
          
          # the path to our downloaded jdbc driver
          jdbc_driver_library => "/elasticsearch-jdbc-2.3.2.0/lib/mysql-connector-java-5.1.38.jar"
          
          # the name of the driver class for
          mysql jdbc_driver_class => "com.mysql.jdbc.Driver"
          jdbc_paging_enabled => "true"
          jdbc_page_size => "50000"

          #以下对应着要执行的sql的绝对路径。
          statement_filepath => "/usr/local/logstash/bin/logstash_jdbc_test/jdbc.sql"
          
          #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
          schedule => "* * * * *"

          #设定ES索引类型
          type => "cc_type"
        } }
      
      e>redis插件使用
      
    input {
        redis {
          batch_count => 1
          
          #返回的事件数量,此属性仅在list模式下起作用。
          data_type => "list"
          
          #logstash redis插件工作方式
          key => "logstash-test-list" #监听的键值
          host => "127.0.0.1"  #redis地址
          port => 6379 #redis端口号  
          password => "123qwe" #如果有安全认证,此项为密码
          db => 0 #redis数据库的编号
          threads => 1 #启用线程数量
        } }

     

        2.3.4. 启动

          logstash两种启动方式,1.logstash -e "" 2.logstash -f [配置文件]基于配置文件启动方式

          >logstash -f config/log4j.conf   

          

      2.3 log4j配置:不多介绍

    log4j.logger.com.demo.elk=DEBUG, socket

    # appender socket
    log4j.appender.socket=org.apache.log4j.net.SocketAppender
    log4j.appender.socket.Port=4567 #logstash input参数与此端口保持一致
    log4j.appender.socket.RemoteHost=127.0.0.1 
    log4j.appender.socket.layout=org.apache.log4j.PatternLayout
    log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
    log4j.appender.socket.ReconnectionDelay=10000

     

      

      2.4 es java api简单使用

        2.4.1. pom依赖

        

    <!-- es -->
            <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>2.3.5</version>
            </dependency>

        2.4.2. java代码

        

    public static void main(String[] args) throws Exception {
            // applog-对应配置中的index types是类型  size是返回的数据总数 默认不设置时为10条数据
            SearchRequestBuilder search = client.prepareSearch("AppLog").setTypes("logs").setSize(100);
            showResult(search);
    
            client.close();
        }
    
        /***
        *获取search请求的结果,并输出打印结果信息
        * @param search
        * @throws Exception
        */
        public static void showResult(SearchRequestBuilder search) throws Exception {
            SearchResponse r = search.get();// 得到查询结果
            for (SearchHit hits : r.getHits()) {
                String data=hits.getSource().get("message").toString();
                //if(data.startsWith("{")){
                    System.out.println(data);
                //}
            }
            long hits = r.getHits().getTotalHits();// 读取命中数量
            System.out.println(hits);
        }
  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/huane/p/5979610.html
Copyright © 2011-2022 走看看