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看数据都可。