ELK解决哪些问题?

在项目初期的时候,大家都是赶着上线,一般来说对日志没有过多的考虑,当然日志量也不大,所以用log4j就够了,随着应用的越来越多,日志散落在各个服务器的logs文件夹下,确实有点不大方便。

当我们需要日志分析的时候你大概会这么做:直接在日志文件中 grep、awk 就可以获得自己想要的信息。

ELK因此就应运而生,那么为什么要用ELK呢?ELK又能给我们解决哪些问题呢?

1.日志统一收集,管理,访问。查找问题方便安全

2.使用简单,可以大大提高定位问题的效率

3.可以对收集起来的log进行分析

4.能够提供错误报告,监控机制

 

ELK架构设计

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件

1. LogStash

     它可以流放到各自的服务器上收集Log日志,通过内置的ElasticSearch插件解析后输出到ES中

2.ElasticSearch

   这是一个基于Lucene的分布式全文搜索框架,可以对logs进行分布式存储,有点像hdfs。此为ELK的核心组件,日志的分析以及存储全部由es完成,因此在后面的课程中我们还会对此进行重点讲解。

3. Kibana

   它可以多维度的展示es中的数据。这也解决了用mysql存储带来了难以可视化的问题。他提供了丰富的UI组件,简化了使用难度,数据在es中的展示是比较让人蛋疼的,后面再讲es的时候让大家看看。

4.Filebeat

轻量级的日志收集工具。Filebeat用于日志收集和传输,相比Logstash更加轻量级和易部署,对系统资源开销更小。

 

目前ELK主要有两种框架:

1.普通框架

ELK架构的应用与研究_Elasticsearch

2.个性化扩展框架(针对日志数据需要二次处理以及多方使用的场景) 

ELK架构的应用与研究_Elasticsearch_02

 

 

ELK的配置

按天生成索引,logstash的配置文件

input {
  file {
    codec => json
    path => "D://SpringCloud/spring-cloud-docker-microservice-book-code/trace/microservice-simple-provider-user-trace-elk/build/*.json"
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:severity}\s+\[%{DATA:service},%{DATA:trace},%{DATA:span},%{DATA:exportable}\]\s+%{DATA:pid}---\s+\[%{DATA:thread}\]\s+%{DATA:class}\s+:\s+%{GREEDYDATA:rest}" }
  }
}
output {
  elasticsearch {
    hosts => "127.0.0.1:9200"
	index => "elk-java-log-%{+YYYY.MM.dd}"
  }
}

启动logstash

f:
cd  F:/tool/logstash-5.4.3
bin/logstash.bat -f  config/logstash.conf

Kibina的使用

Dev Tools   下执行ES索引的增删改查操作

语法见

Discover     对elk日志进行过滤和查询

 

查询技巧

在Discover界面的搜索栏输入要查询的字段。查询语法是基于Lucene的查询语法。允许布尔运算符、通配符和字段筛选。注意关键字要大写。如查询类型是http,且状态码是302。type: http AND http.code: 30

ELK架构的应用与研究_Elasticsearch_03

查询可以包含一个或多个字或者短语。短语需要使用双引号引起来。如:

ELK架构的应用与研究_Elasticsearch_04

正则表达式过滤器和表达式 

ELK架构的应用与研究_Elasticsearch_05

 允许一个字段值在某个区间。[] 包含该值,{}不包含。

ELK架构的应用与研究_Elasticsearch_06

布尔查询

布尔运算符(AND,OR,NOT)允许通过逻辑运算符组合多个子查询。

运算符AND/OR/NOT必须大写。

NOT type: mysql

mysql.method: SELECT AND mysql.size: [10000 TO *]

(mysql.method: INSERT OR mysql.method: UPDATE) AND responsetime: [30 TO *]

 

查询某段时间的日志

ELK架构的应用与研究_Elasticsearch_07

添加日志过滤条件 

ELK架构的应用与研究_Elasticsearch_08