elk和efk的搭建
每天多学一点点~
话不多说,这就开始吧…
1.前言
上篇说到了canal,年前最后一篇,elk和ekf的搭建
往期专题博客
2. 架构演变
为什么要elk?
1.日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询
2.应用太多,面临数十上百台应用时你该怎么办
3.随意登录服务器查询log对系统的稳定性及安全性肯定有影响
4.如果使用人员对Linux不太熟练那面对庞大的日志简直要命。
ELK因此就应运而生
ELK主要是三个核心组件:
E:ElasticSearch,索引库 存储日志
L:Logstash 收集日志(有很多种替代的方案)
K:Kibana 前台展示
1.elk基础架构
2. efk基础架构
ELK的变种:
因为其Logstash部署一般比较吃内存,在机器资源不够的情况一般可以采取以下方法:
放弃logstash 直接引入filebeat。变成 filebeat+es+kibana(EFK):此种架构非常适合中小型简单的日志收集系统。因为logstash里面提供了一些丰富的过滤功能,其实一般很多系统都用不上,所以就可以直接采用filebeat进行日志的收集。
3.filebeat+logstah架构
FELK:filebeat+logstash+es+kibana。此种设计适合需要丰富采集日志信息的系统,可部署一台Logstash用于接收filebeat收集到的日志进行集中的过滤后再传给es。当然你要是机器足够的话 Logstash也可以部署集群减轻压力。
4. filebeat+消息中间件架构
个性化框架:(采集到的日志需要进行加工或者多方需要的情况)引入kafka或者redis。一般也会采用Filebeat+(消息中间件)+logstash(也可以不要,直接通过消息中间件入es)+es+kibana。
一般来说其实第一种和第二种用的更多,博主公司就准备用第二种(logstash占内存太大),毕竟穷,服务器不行~
3. elk的部署
分布式微服务,每个服务器都要安装logstash,配置都一样
1.版本:我们选择的仍然是6.6.0 注意这三个组件的版本要完全一致,否则会出现意想不到的错误。
2.Es部署:之前说过
3.Kibana部署:之前说过
4.logstash部署:往下看
3.1 官方下载
官方下载地址
3.2 版本
elasticsearch 6.6.0,kibana6.6.0 ,logstash6.6.0三个版本(注意 JDK需要1.8)
4.3 安装logstash
(1)解压
(2)修改jvm配置
我这里因为虚拟机太小,改成512m,默认是1g
(3)新建 my-logstash.conf 文件 ,做好input ,filter,output三大块, 其中input是吸取logs文件下的所有log后缀的日志文件,filter是一个过滤函数,这里不用配置,output配置了导入到
#输入
input {
file {
type => "log" #自定义 随便起
path => ["/home/zjq/web/jars/logs/*.log"] # 你要检测的日志的路径
start_position => "end" # 从上一次末尾开始读
ignore_older => 0
# 关键配置,合并日志
codec=> multiline {
#因为博主这里是springboot项目,所以日志都是以 2020-01-12 17:05:08.854开头的
# 如果出现异常不会有日期,所以将有日期开头的合并到一起,直到有下一个出现
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
# 每5s刷新一次
auto_flush_interval => 5
what => "previous"
}
}
beats {
port => 5044
}
}
# 输出
output {
if [type] == "log" {
elasticsearch {
hosts => ["http://127.0.0.1:19200"] # 本地的es,集群也只需要配置一个
index => "logstash-%{+YYYY.MM}" # es的集合,以logstash开头,每一月建一个索引
#user => es 如果之前用nginx配置账号密码,就加上
#password => zjq
}
}
}
(4)bin目录下启动logstash了,配置文件设置为my-logstash.conf
启动命令
./bin/logstash -f my-logstash.conf # 指定配置文件启动
nohup ./bin/logstash -f my-logstash.conf & # 指定配置文件启动 后台启动
启动成功
3.4 测试logstash
去kibana控制台看下
现在是啥都没有,没显示日志
启动一个springboot项目
博主这里用logbacj配置了日志,所以就不需要nohup.out文件了
nohup java -jar myesstudy.jar>/dev/null 2>&1&
日志已经在报错了
再去刷新下kibana控制台
出现了 logstash-2020.01 日志 索引
再去这里做个配置
创建logstash-* 索引,以时间戳为filed
这样索引创建好了之后,就可以去Discover搜索了,也可以直接去DEV TOOLS去查
注意:日志是不分词的,日志要啥分词,肯定不分的,为了更准确的查找
这样elk就配置好了,但是logstash还是太重了,下面介绍轻量级方案,efk
4. efk的部署
2.1 官方下载
官方下载地址
2.2 版本
elasticsearch 6.6.0,kibana6.6.0 ,filebeat-6.6.0-linux-x86_64三个版本(注意 JDK需要1.8)
2.3 安装filebeat
(1)解压
(2)修改配置文件 filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/zjq/web/jars/logs/*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
max_lines: 1000
timeout: 3s
output.elasticsearch: # 直接配置到es
hosts: ["127.0.0.1:19200"] # es地址
index: "log-%{+yyyy.MM}" # 索引名
setup.template.name: "filebeat" # 如果加了index,这两个一定要配置,否则报错
setup.template.pattern: "filebeat-*"
(3)启动
./filebeat -e -d filebeat.yml # 指定配置文件启动
nohup ./filebeat -e -d filebeat.yml & # 指定配置文件启动,后台启动
启动成功,按照elk的搭建方法,去kibana创建索引log-*
去discover检索一下
efk搭建完成,微服务架构也是一样的,在多台服务器上安装filebeat就好
5.结语
世上无难事,只怕有心人,每天积累一点点,fighting!!!