9. Elasticsearch ELK

429 阅读4分钟

简介

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