zoukankan      html  css  js  c++  java
  • ELK+log4j笔记

        最近公司做一个项目,我所做的功能是接口访问日志明细和统计。我本想建一个表,按传统的模式进行查询和统计,但实际情况是每天的访问量达到100万级,这只是项目中的一个功能,如果真这么做,第一服务器承载不了,数据库也会崩掉。后来听同事说了一个ELK的套装工具,很适合目前的情况,就上网查各种资料就着手用了起来,下面是我使用中的笔记。

    ELK是elasticsearch、logstash、kibana的缩写,有点像MVC模式。在官网http://www.elastic.co/downloads可以下载,我统一下载的6.3版本,如下:

    ,其中kibana和head是可视化工具。

    1、安装logstash(重点,这是一个数据搜索引擎,可配置不同数据源的数据)

    解压,在bin目录下新建logstash-simple.conf文件(数据源配置文件)

    分为三块,input、filter、output
    input {     file {       
    
      path => "D:/elk01/testlog/test1/*.*"   #文件存方目录     
    
      start_position => "beginning"
    
      codec => plain { charset => "UTF-8" }   
    
      } }
    
    
    
    filter{  
    
    #定义数据的格式  
    
    grok {     match => { "message" => "%{DATA:timestamp}|%{DATA:username}|%{IP:clientIp}|%{DATA:ipname}|%{DATA:actionName}|%{DATA:detail}||"}   }
    
     #定义时间戳的格式  
    
    date {     match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]  target=>"@timestamp"   } }
    
    output {  
    
    if [timestamp] =~ /^d{4}-d{2}-d{2}/ {         
    
    elasticsearch {    
    
    hosts => "localhost:9200"   #elasticsearch启动后访问地址
    
    index => "log4j-%{+YYYY-MM-dd}"   #索引
    
    document_type => "log4j_type"      
    
    codec => plain{ charset => "GBK" }
    
        }   }
    
      #stdout { codec => rubydebug } }

     在bin目录执行命令:logstash  -f logstash.conf执行命令的捷径方法:以前都是通过cmd一层一层的进去,可以把文件打开到bin目录下按shift右击选择 在此处打开命令窗口

     经过多次运行后,后来报you must change the "path.data" setting 异常,需要换path.data。换path.data的命令是:logstash  -f logstash.conf  --path.data=/elkdata/

    input 是log4j所存放的日志路径。logstash计算模式是一行算做一条数据。

    后来觉得这样读文件比较烦,不够快,还不如直接用程序把log4j日志推给logstash

    input的配置如下:

    input {
        tcp {
            host => "127.0.0.1"
            port => 4560
      codec => plain{ charset => "GBK" }
        }
    }

    java程序如下:

    java项目目录,因数是log4j日志需要log4j-api-2.11.0.jar、log4j-core-2.11.0.jar这两个jar包

    log4j2.xml:

    <?xml version="1.0" encoding="UTF-8"?>    
    <configuration status="error">  
    <!--     先定义所有的appender -->  
        <appenders>  
    <!--         这个输出控制台的配置 -->  
            <Console name="Console" target="SYSTEM_OUT">  
    <!--             控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->  
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  
    <!--             这个都知道是输出日志的格式 -->  
                <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss}|%msg%xEx%n"/>
            </Console>  
              
    <!--         文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->  
    <!--         append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->  
            <File name="log" fileName="log/test.log" append="false">  
                <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss}|%msg%xEx%n"/>  
            </File>  
              
    <!--          添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝  -->  
            <File name="ERROR" fileName="logs/error.log">  
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>  
                <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
            </File>  
      
    <!--         这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->  
            <RollingFile name="RollingFile" fileName="logs/web.log"  
                         filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">  
                <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
                <SizeBasedTriggeringPolicy size="2MB"/>  
            </RollingFile>  
            <Socket name="Logstash" host="127.0.0.1" port="4560" protocol="TCP">
               <PatternLayout pattern="%d{yyyy-MM-dd}|%msg%xEx%n"/>
            </Socket>
        </appenders>  
          
    <!--     然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->  
        <loggers>  
    <!--         建立一个默认的root的logger -->  
            <root level="trace">  
                <appender-ref ref="RollingFile"/>  
                <appender-ref ref="Console"/>  
                <appender-ref ref="ERROR" />  
                <appender-ref ref="log"/>  
                <appender-ref ref="Logstash"/> 
            </root>  
      
        </loggers>  
    </configuration>

    Test.java:

    package com.etc;
    
    import org.apache.logging.log4j.Logger;  
    import org.apache.logging.log4j.LogManager;  
      
    public class Test {  
      
        static Logger logger = LogManager.getLogger(Test.class.getName());  
          
        public static boolean hello(){  
            logger.info("admin|127.131.73.100|数字化门诊|queryChildInfo(ID)|mabcage1111111admin||");  
            logger.info("admin|110.131.73.100|app户端|queryChildInfo(ID)|message2222222admin||");   
            logger.info("user|110.131.73.100|app户端|queryChildInfo(ID)|messageuser1111111111||");    
            logger.info("user|168.131.73.100|自助一体机|queryChildInfo(ID)|messageuser2222222222||"); 
            return false;  
        }  
          
        public static void main(String[] args) {  
              
            logger.trace("开始主程序");  
              
            for(int i = 0; i < 150; i++){  
                logger.info("当前i:"+i);  
                if(!Test.hello()){  
                    logger.error("hello");  
                }  
            }  
              
            logger.trace("退出程序");  
        }  
    }  

    2、安装Elasticsearch

    解压,运行bin目录下的elasticsearch.bat,启动成功后,浏览器输入localhost:9200,可以查看json格式的信息,表示启动成功。

    3、安装Kibana

    解压,修改config/kibana.yml ,添加

    elasticsearch.url: "http://localhost:9200"

    进入bin目录双击运行kibana.bat。

    浏览器输入http://localhost:5601可发现kibana启动成功。

     
     
     

     

  • 相关阅读:
    python详解json模块
    postman---post请求数据类型
    postman---postman发送请求
    SpringBoot之集成通用Mapper
    Mybatis-generator/通用Mapper/Mybatis-Plus对比
    spring-data-JPA repository自定义方法规则
    JPA之@GeneratedValue注解
    Java工具类NumberUtils使用
    shell函数
    Maven的生命周期
  • 原文地址:https://www.cnblogs.com/wuxiaojuan/p/8984246.html
Copyright © 2011-2022 走看看