• 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);
        }
  • 相关阅读:
    再谈用java实现Smtp发送邮件之Socket编程
    Android TextView设置个别字体样式
    Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)
    Angular团队公布路线图,并演示怎样与React Native集成
    [LeetCode]Remove Element
    poj2481 Cows
    Spark SQL 源代码分析之Physical Plan 到 RDD的详细实现
    MySQL5.6 怎样优化慢查询的SQL语句 -- 慢日志介绍
    容器使用笔记(List篇)
    【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement
  • 原文地址:https://www.cnblogs.com/huane/p/5979610.html
Copyright © 2020-2023  润新知