ELKF搭建及使用全过程(7.8版本)

前言

讲真的现在互联网的技术更新换代实在是太快,ELK还没出几天,就又出了ELKF。好不容易找到几个6.x的版本教程,然而7.x的版本配置又和6.x天差地别。所以最好的办法真的是去看官方文档本文仅适用于以7.8版本!

ELKF框架

在这里插入图片描述
先说一下个人对ELKF的理解,只是看搭建和使用的可以跳过这个环节。

ELKF成员介绍

E:简称是Es(elasticsearch),搜索引擎,至于为什么要用ES。第一、他能存数据,第二、对于日志这些大量的数据,搜索引擎能快速定位到记录。要详细了解ES的话,网上一搜大把资料,也可以看看我历史博文讲ES原理的。
L:全称是LogStash,用于收集日志以及处理日志后丢给ES存储和检索。
K:全称是Kibana,可以理解成数据展示系统即可(因为我现在还没好好研究这玩意。。)
F:全称是FileBeat,对ELK中LogStash的中收集日志功能优化后的结果输出,LogStash直接来收集日志的话,是通过TCP连接,存在掉包的可能。并且logStash内存开销也比较大。

运行流程

例如有A,B,C三个系统和他们的日志文件。
1、首先FileBeat会读取日志文件,并且把获取到的日志发送给LogStash;
2、LogStash获取到FileBeat发来的增量日志后,进行各种匹配过滤取,存入ES;
3、Kibana从Es中查询数据进行展示;

---------------------------------------------------------------------------------------

FileBeat搭建

FileBeat的配置是最简单的,解压后,编辑 filebeat.yml文件。(注:# 标记的是重要且需要修改自定义的地方)

filebeat:
  inputs:
  -
      paths:
        - C:/Users/DELL/Desktop/ELK7.2/logs/*.log    # 日志文件所在实际路径
      fields:
         service: project_name
output:
   logstash:
    hosts: ["127.0.0.1:4567"]        # LogStash的地址

保存后命令启动

./filebeat.exe -e -c filebeat.yml

LogStash搭建

解压后在Bin文件夹新建 logstash.conf,输入以下配置

input {
  beats {
    # 占用端口
    port => 4567    
  }
}

filter {

  #定义数据的格式
  grok {
    match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
  }

 #定义时间戳的格式
  date {
    match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
    locale => "cn"
  }

  #定义客户端的IP是哪个字段(上面定义的数据格式)
  geoip {
    source => "clientIp"
  }
}

output {
   # 输出到控制台,方便测试,线上环境必须删掉!!
   stdout { codec => rubydebug }
   elasticsearch {
   	 # ES地址
     hosts => "http://127.0.0.1:9200"
     # ES索引
     index => "log_test"
   }
}

启动命令:

./logstash -f logstash.conf

Elasticsearch搭建

在conf/elasticsearch.yml加入以下配置,这个文件是最重要的,问题也是最多的,其他可能还会出一些问题,网上搜一下即可解决。

http.port: 9200
network.host: 0.0.0.0     # 这个改为服务器IP,本地测试的话不用管
node.name: node-1
discovery.type: single-node    # 集群的话,用另外一个配置,二者取一即可
http.cors.enabled: true
http.cors.allow-origin: '*'     # 这个一定要是单引号!!!这句话看完记得删掉
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

ES启动这里有个基本都会踩的通坑,就是ROOT权限不能启动,需要新建一个用户,授予权限即可;
启动命令:进入bin目录,

elasticsearch   #后台启动命令 elasticsearch -d

Kibana搭建

比较简单,参考 https://blog.csdn.net/xiaozm1223/article/details/89475003
备注:kibana是可视化界面,所以做了中文化的处理,修改conf/kibana.yml文件,最下面一个配置改为

i18n.locale: "zh-CN"

测试

引入测试包

<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

测试配置 log4j.properties

log4j.rootLogger=INFO,R,stdout  

log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender  
# 输出日志的路径,跟FileBeat获取日志的路径匹配即可
log4j.appender.R.File=C:\\Users\\DELL\\Desktop\\ELK7.2\\logs\\test.log  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n  

log4j.logger.java.sql.Connection=INFO  
log4j.logger.java.sql.Statement=INFO  
log4j.logger.java.sql.PreparedStatement=INFO  
log4j.logger.java.sql.ResultSet=INFO  

编写测试类:

public class Test {

    private static final Logger logger = Logger.getLogger(Test.class);

    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 20; i++) {
            logger.error("hello world ,hello YHR"+i);
        }
    }
}

进ES看数据或者kibana看数据都可。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页