简介
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分:
- Inputs:用于从数据源获取数据,常见的插件如beats、file、kafka、rabbitmq、log4j、redis等。参考:官网地址
- Filters:筛选器是Logstash管道中的数据处理器,input时会触发事件,触发filter对数据进行transport,即转换解析各种格式的数据,常见的过滤器插件如下:
- grok:解析和构造任意文本。是Logstash过滤器的基础,广泛用于从非结构化数据中导出结构,当前,Grok是Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方法。
- mutate:对事件字段执行常规转换。支持对事件中字段进行重命名,删除,替换和修改。
- date:把字符串类型的时间字段转换成时间戳类型
- drop:完全删除事件,例如调试事件。
- clone:复制事件,可能会添加或删除字段。
- geoip:添加有关IP地址地理位置的信息。
- Outputs:用于数据输出,常见的插件如:
- elasticsearch:最高效、方便、易于查询的存储器,最有选择,官方推荐!
- file:将输出数据以文件的形式写入磁盘。
Beats:基于golang语言开发,开源的、轻量级的日志收集器的统称。
- 轻量级:体积小,功能单一、基于go语言开发,具有先天性能优势,不依赖于Java环境。
- 高性能:对CPU、内存和IO的资源占用极小。
- 开源:社区中维护了上百个beat。 就功能而言,Beats是弟弟,得益于Java生态优势,Logstash功能明显更加强大。但是Logstash在数据收集上的性能表现饱受诟病,Beats的诞生,其目的就是为了取代Logstash Forwarder
yml配置(filebeat例子)
# 可以设置多个,- 符号是数组。新建
filebeat.inputs:
- type: log
paths:
- /IDEAproject/its_library/library-log/log_total.log
output.logstash:
hosts: ["127.0.0.1:5044"]
启动beta
./filebeat.exe -c localhost.yml
Logstash的配置
- 日志demo
2020-12-24 17:10:39.591 [http-nio-4040-exec-10] INFO com.its.library.business.controller.TagController - getIeltsTeacher : userid == 10
yml配置
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{DATA:dateTime} \[%{NOTSPACE:thread}\] %{NOTSPACE:level} %{NOTSPACE:className} - %{NOTSPACE:methodName} : %{NOTSPACE:userid} == %{NOTSPACE:uid}" }
}
if "_grokparsefailure" in [tags] { drop {} }
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}"
}
}
启动命令
./bin/logstash -f confing/lcoalhost.yml
Kibana
{
"_index" : "filebeat-7.10.1",
"_type" : "_doc",
"_id" : "qSkDlHYBEJNmxDg2vB-C",
"_score" : 1.0,
"_source" : {
"userid" : "userid",
"message" : "2020-12-24 17:10:39.591 [http-nio-4040-exec-10] INFO com.its.library.business.controller.TagController - getIeltsTeacher : userid == 10",
"log" : {
"file" : {
"path" : """D:\IDEAproject\its_library\library-log\log_total.log"""
},
"offset" : 3022704
},
"@version" : "1",
"ecs" : {
"version" : "1.6.0"
},
"methodName" : "getIeltsTeacher",
"uid" : "10",
"className" : "com.its.library.business.controller.TagController",
"input" : {
"type" : "log"
},
"host" : {
"name" : "JT-116400-1"
},
"agent" : {
"ephemeral_id" : "0e82c3f4-6f00-4cd8-b903-28703bd91bac",
"type" : "filebeat",
"id" : "d5f521aa-2ba2-4a7a-8c76-3661f54e9fb9",
"hostname" : "JT-116400-1",
"version" : "7.10.1",
"name" : "JT-116400-1"
},
"dateTime" : "2020-12-24 17:10:39.591",
"thread" : "http-nio-4040-exec-10",
"tags" : [
"beats_input_codec_plain_applied"
],
"level" : "INFO",
"@timestamp" : "2020-12-24T09:10:40.394Z"
}
}
ElasticSearch完整目录
1. Elasticsearch是什么
2.Elasticsearch基础使用
3.Elasticsearch Mapping
4.Elasticsearch 集群原理
5.Elasticsearch Scripts和读写原理
6.Elasticsearch 分词器
7.Elasticsearch TF-IDF算法及高级查询
8.Elasticsearch 地理位置及搜索
9.Elasticsearch ELK