本文主要是介绍使用elasticstack实现log提取与搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目标
了解elastic stack中主要组件的职责,掌握如何使完成提取log和搜索log。
组件简介
-
beats
beats是轻量型数据采集器,集合了多种单一用途的采集器,向elasticSearch或logstash发送采集的数据。
beats 支持哪些采集器呢?
采集器名称 | 作用 |
filebeat | 日志采集器。安装在服务器端且作为agent,监控log文件,收集log,发送给es或logstash等。 |
metricbeat | 指标采集器。 |
packetbeat | 网络数据采集器。 |
heartbeat | 心跳数据采集器。 |
…… |
采集log数据,需要使用filebeat。所以接下来主要介绍filebeat。
Filebeat Reference [7.15] | Elastichttps://www.elastic.co/guide/en/beats/filebeat/current/index.htmlfilebeat主要涉及两个组件:input与harvester。
input | 负责管理采集器和查找需要读取的所有资源 |
harvester 采集器 | 一个采集器只负责读取一个文件的内容,一行一行的读,发送给output。只要采集器正在运行,则文件描述符一直保持打开状态。 |
filebeat需要记录文件状态吗?
filebeat会记录每个被采集文件的状态并且经常写入到磁盘中(位于filebeat路径/data/registry)。
用于记录最后读取行的offset和确保发送所有行。当output不可用时,filebeat跟踪已发送的最后一行offset,output可用后,继续读取文件并发送。
由于文件可以被移动和重命名,所以文件名和路径不足以唯一标识文件。filebeat会记录一个唯一标识,以判断文件之前是否被采集过。
input 支持哪些信息来源类型呢?
log | 读文件。支持多行。 |
filestream | 读文件。不支持多行。 |
kafka | |
redis | |
…… |
output 支持哪些目标类型呢?
elasticsearch |
logstash |
…… |
-
logstash
服务器端数据处理管道,从多个来源采集数据,转换数据,将数据发送到目的地,如数据库。
数据管道,指定数据从哪里来,数据如何处理,数据去哪里。支持多种类型的input、filter、output。
input | beats | 接受由beats发送的数据 |
filter | grok | 对文本进行解析与结构化。 |
output | elasticsearch |
logstash 有两类配置文件:pipeline配置和setting配置。
pipeline配置,每个conf文件对应一个管道的input-filter-output配置,例如test-pipeline.conf。
setting配置,控制启动与执行。
管道配置修改后,支持自动加载吗?
当管道配置变更后,logstash会自动重新加载配置。
logstash意识到config变更,则终止该管道的所有input,然后尝试使用新的config创建新的管道。首先验证config中的语法,然后验证所有input和output可以使用。如果验证都ok,则用新管道替换旧的。若验证不通过,则旧的管道继续使用,并且在console输出error。
配置重加载的过程,发生在同一个jvm,即同一个进程。
-
es
elasticSearch介绍与使用_陈海龙的格物之路-CSDN博客首先一起了解elasticSearch,然后结合springData,看看如何使用elasticSearch。https://blog.csdn.net/chl87783255/article/details/120830202
-
kibana
kibana对es数据进行可视化,提供了丰富的用户界面。
如何利用es stack实现log提取与搜索?
-
目标1:log提取。
filebeat
filebeat.yml
filebeat.inputs:- type: logenabled: truepaths:- D:\logs\logstash-tutorial-dataset#- /var/log/*.log#- c:\programdata\elasticsearch\logs\*#处理多行,由于filesystem不支持多行,所以选择logmultiline.type: patternmultiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'multiline.negate: falsemultiline.match: after……output.logstash:hosts: ["localhost:5044"]……
logstash
在config/目录,新增管道配置文件。
input {beats {port => "5044"}
}
filter {grok {# 需要根据实际log,编写正则match => { "message" => "%{COMBINEDAPACHELOG}"}}geoip {source => "clientip"}
}
output {# console输出#stdout { codec => rubydebug }elasticsearch {hosts => [ "localhost:9200" ]index => "logstash-mul-log"}
}
启动指令
logstash -f ../config/test1_pipeline.yml --config.reload.automatic
elasticSearch
安装时指定的config路径/elasticsearch.yml,例如修改或确认端口。
kibana
kibana.yml,例如修改或确认es信息,elasticsearch.hosts: ["http://localhost:9200"]。
截至到此,以上4个组件都启动后,应已开始log的采集了。接下来需要在kibana界面做些配置,以达到log搜索的目标。
-
目标2:log搜索。
前往菜单management->stack management->index management
查看indics列表,logstash发送数据后,indics列表中可以看到index名称,具体名称要看logstash管道文件的配置,如上文logstash-mul-log。
查看index template,可以在Legacy index templates中看到logstash。
前往菜单management->stack management->Index Lifecycle Policies
编辑 logstash-policy,如自动删除多久前数据。
前往菜单management->stack management->Index patterns
新建Index patterns,要求与index template可以匹配。
前往菜单discover
选择感兴趣的index pattern,通过add filter 添加筛选条件,可以添加多个filter,彼此是and关系。
至此,可以对log进行搜索了。
在上述过程中,我认为有如下几个需要注意的位置:
- filebeat负责多行处理
- 这里有个问题,为什么不适用logstash的多行呢?logstash的多行会引起数据的混乱。
- logstash filter grok 适用log的正则
- es数据保留时间
这篇关于使用elasticstack实现log提取与搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!