共计 2475 个字符,预计需要花费 7 分钟才能阅读完成。
之前也介绍过 开源组件 ELK 日志系统配置与治理
明天也聊一聊 ELK + Filebeat 搭建日志零碎
Elasticsearch
分布式搜寻和剖析引擎。具备高可伸缩、高牢靠和易治理等特点。基于 Apache Lucene 构建,能对大容量的数据进行靠近实时的存储、搜寻和剖析操作。
Logstash
日志收集器。收集各种数据源,并对数据进行过滤、剖析、格式化等操作,而后存储到 Elasticsearch。
Kibana
数据分析和可视化平台。与 Elasticsearch 配合应用,对其中数据进行搜寻、剖析、图表展现。
Filebeat
一个轻量级开源日志文件数据收集器,Filebeat 读取文件内容,发送到 Logstash 进行解析后进入 Elasticsearch,或间接发送到 Elasticsearch 进行集中式存储和剖析。
架构介绍
基于 ELK 的应用形式,Logstash 作为日志收集器,Elasticsearch 进行日志存储,Kibana 作为日志出现,大抵以下几种架构。
架构一
图中 Logstash 多个的起因是思考到程序是分布式架构的状况,每台机器都须要部署一个 Logstash,如果的确是单服务器的状况部署一个 Logstash 即可。
后面提到 Logstash 会对数据进行剖析、过滤、格式化等操作,这一系列操作对服务器的 CPU 和内存资源的耗费都是比拟高的,所以这种架构会影响每台服务器的性能,所以并不举荐采纳。
架构二
相比于架构一,减少了一个 MQ 和 Logstash,Logstash 的输入和输出反对 Kafka、Redis、RabbitMQ 等常见音讯队列,MQ 前的 Logstash 只作为日志收集和传输,并不解析和过滤,先将日志退出队列,由 MQ 前面的 Logstash 持续解析和过滤,这样就不至于每台服务器耗费资源都很多。
架构三
这种架构是基于架构二简化来的,理论在应用过程中也是能够采取的,日志间接进入 MQ,Logstash 生产 MQ 数据即可。
架构四
这种架构在日志数据源和 Logstash(或 Elasticsearch)中减少了 Beats。Beats 汇合了多种繁多用处数据采集器,每款采集器都是以用于转发数据的通用库 libbeat 为基石,beat 所占的零碎 CPU 和内存简直能够忽略不计,libbeat 平台还提供了检测机制,当上游服务器负载高或网络拥挤时,会主动升高产生速率。上面的例子咱们应用 Filebeat 来对文件日志的收集,其余的 beat 能够疏忽。
架构四相比于架构二,如果将每台服务器上部署的 Logstash 都换成对应的 Beats,那就是更现实的架构了。
不论怎么样,对于日志解析和过滤的 Logstash 资源耗费还是比拟高的,所以如果须要,能够将 Logstash 的部署应用分布式,Elasticsearch 的部署应用集群来强化整个日志零碎。
部署
部署之前须要装置好 JDK,Java 8 版本。而后官网下载对应操作系统的安装包,如果采纳 Docker 部署,间接应用提供的镜像即可。
下载包解压后就能够间接启动了。
Logstash
bin/logstash -f logstash.conf
# logstash.conf 是须要本人创立的日志解决配置文件
配置文件的根本格局如下:
# 输出
input {
}
# 剖析、过滤
filter {
}
# 输入
output {}
Elasticsearch
bin/elasticsearch
启动的时候如果呈现不容许 root 启动,那创立一个新用户:
- 创立用户组
groupadd elsearch
- 创立用户
useradd elsearch -g elsearch -p elsearch
- 切到 root 用户,批改 elsearch 用户组下的 elsearch 用户对 elasticsearch 文件夹(解压出的的 elasticsearch 目录)的权限
chown -R elsearch:elsearch elasticsearch
- 切到 elsearch 用户,重启 elasticsearch
Kibana
bin/kibana
Filebeat
filebeat -e -c filebeat.yml
filebeat.yml 要害配置,所有 /var/log/ 的.log 文件的日志都会输入到 Logstash 的 5044 端口
filebeat.prospectors:
- input_type: log
paths:
- /var/log/*.log
output.logstash:
hosts: ["localhost:5044"]
Logstash 例子:
配置文件内容:
input {
beats {
port => 5044
codec => "json"
}
}
filter{if [logtype] {mutate { replace => { type => "%{logtype}" }}
}else{mutate { replace => { type => 'unknow'}}
}
date {match => [ "createTime" , "yyyy-MM-dd HH:mm:ss"]
}
}
output {
elasticsearch {hosts => ["localhost:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
}
stdout {codec => rubydebug}
}
配置文件阐明:
应用 Filebeat 作为 Logstash 的输出(输入输出能够有多种形式,不太理解的能够先写看看官网文档),Logstash 监听了 5044 端口。这个例子中对接管到的日志进行 json 格式化,如果 json 中蕴含 logtype,咱们把日志的 type 设置成 logtype,如果不蕴含,设置成 unknow,而后把日志中的 createTime 格式化成 yyyy-MM-dd HH:mm:ss 的工夫格局。最初输入到 elasticsearch,index 是 elasticsearch 的索引名称,咱们依据不同的 type 创立不同的索引。
生产环境下 Kibana 应用效果图
出处:http://beckjin.com/2017/12/10…