ElasticStack
1、基础
-
ElasticStack是由4个部分组成,分别是beats、logstash、elasticsearch和kibana组成。ElasticStack是新的一代叫法,而旧称为ELK。
-
elasticsearch的相关技术笔记请参考Elasticsearch笔记-es基础版
-
beats是一个轻量型的数据采集器。用于收集数据。
-
Logstash是一个数据分析器,用于接收数据并分析转化原数据到可利用的数据。
-
es是一个分布式的搜索引擎,用于搜索和存储数据
-
kibana是一个可视化工具,用于展示数据。
2、Beats
2.1 基础
-
beats作为数据收集器,有着很重要的作用。原来查看日志,若是分布式部署的应用,则需要去查看每一个pod日志。而beats自动收集之后,就可以在kibana中非常友好的显示并可以搜索,大大的节省了时间,简化操作。
-
Beats 是一组轻量级采集程序的统称,我们通常常用的几个如下:
filebeat: 进行文件和目录采集,主要用于收集日志数据。 metricbeat: 进行指标采集,指标可以是系统的,也可以是众多中间件产品的,主要用于监控系统和软件的性能。 packetbeat: 通过网络抓包、协议分析,对一些请求响应式的系统通信进行监控和数据收集,可以收集到很多常规方式无法收集到的信息。 Winlogbeat: 专门针对 windows 的 event log 进行的数据采集。 Heartbeat: 系统间连通性检测,比如 icmp, tcp, http 等系统的连通性监控。
-
目前我们只关心使用filebeat和metricbeat,前者是采集文件的数据,比如日志数据。后者主要是采集应用的运行指标数据,比如cpu,内存等。
2.2 Filebeat
-
Filebeat由两个主要组件组成:prospector 和 harvester
harvester: 负责读取单个文件的内容。 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。 prospector: prospector 负责管理harvester并找到所有要读取的文件来源。 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。 Filebeat目前支持两种prospector类型:log和stdin。
-
Filebeat如何保持文件的状态。总结一句话:filebeats有把读取日志的偏移量记录到文件中。
- Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
- 如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用时继续读取文件。
- 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。
- 文件状态记录在data/registry文件中。
-
Filebeat读取日志文件,输出到控制台
filebeat.inputs: - type: log enabled: true paths: - /qsm/beats/logs/*.log setup.template.settings: index.number_of_shards: 3 output.console: pretty: true enable: true
-
Filebeat读取文件,输出到Elasticsearch
# itcast-log.yml filebeat.inputs: - type: log enabled: true paths: - /itcast/beats/logs/*.log tags: ["qsm-im"] fields: from: qsm-im fields_under_root: false setup.template.settings: index.number_of_shards: 3 #指定索引的分区数 output.elasticsearch: #指定ES的配置 hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]
-
Filebeat由于搜索的时候,读取的是原始数据,有时候需要对数据格式进行拆分为不同的字段。那么既可以使用Filebeat中自带的Module,比如配置nginx module。当然最重要的还是使用logstash进行分析,它处理数据更加强悍。
2.3 Metricbeat
- Metricbeat是一个用来收集系统和服务的一些运行指标的。
- Metricbeat有2部分组成,一部分是Module,另一部分为Metricset。
- Module:收集的对象,如:mysql、redis、nginx、操作系统等;
- Metricset:收集指标的集合,如:cpu、memory、network等;
-
默认开启的是手机本机system的系统运作指标
metricbeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 index.codec: best_compression setup.kibana: output.elasticsearch: hosts: ["192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"] processors: - add_host_metadata: ~ - add_cloud_metadata: ~
3、Logstash
-
logstash是一个数据分析软件,主要目的是分析log日志,能够对原始数据进行分析,转化为成品数据。比如在filter过程中使用grok正则插件,可以使数据能够转化为具体的字段。
-
由于Logstash在数据收集上并不出色,而且作为agent,性能并不达标。elastic发布了beats系列轻量级采集组件。至此,elastic形成了一个完整的生态链和技术栈,成为大数据市场的佼佼者。
-
logstash架构,分为三个部分:首先是input,中间是filter,最后是output:
input:设置数据来源 filter:可以对数据进行一定的加工处理过滤,但是不建议做复杂的处理逻辑。这个步骤不是必须的 output:设置输出目标
-
Logstash的配置
input { #输入 stdin { ... } #标准输入 } filter { #过滤,对数据进行分割、截取等处理 ... } output { #输出 stdout { ... } #标准输出 }
-
输入input数据的来源有很多,可以为日志文件,beats,nginx,mysql等等。
-
过滤filter的插件有很多:grok插件用于正则切分nginx的数据等。mutate过滤器可以对数据进行修改,比如重命名,分割split等。
filter { grok { match=>{"message"=> "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" } } }
-
输出的地方也有很多,比如控制台,比如es
input { file { path => "/itcast/logstash/logs/app.log" #type => "system" start_position => "beginning" } } filter { mutate { split => {"message"=>"|"} } } output { elasticsearch { hosts => [ "192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"] } }
4、Elasticsearch
- 一个分布式的全文搜索引擎,也是非关系型数据库。具体笔记可参考Elasticsearch笔记-es基础版。
5、Kibana
-
Kibana 是一款开源的数据分析和可视化平台
它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
-
与es一起协同工作的配置安装可参考docker安装es和kibana。
-
kibana提供了非常多是功能,包括数据的可视化,仪表盘的自定义,数据搜索等,还有es的运行监控和开发者工具。
目录:
仪表盘:
开发者工具:
【暂完】
正在去BAT的路上修行