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.普通框架
2.个性化扩展框架(针对日志数据需要二次处理以及多方使用的场景)
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索引的增删改查操作
语法见https://blog.csdn.net/lzhcoder/article/details/89819140
Discover 对elk日志进行过滤和查询
查询技巧
在Discover界面的搜索栏输入要查询的字段。查询语法是基于Lucene的查询语法。允许布尔运算符、通配符和字段筛选。注意关键字要大写。如查询类型是http,且状态码是302。type: http AND http.code: 30
查询可以包含一个或多个字或者短语。短语需要使用双引号引起来。如:
正则表达式过滤器和表达式
允许一个字段值在某个区间。[] 包含该值,{}不包含。
布尔查询
布尔运算符(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 *]
查询某段时间的日志
添加日志过滤条件