软件工程之美38讲——日志管理:如何借助工具快速发现和定位产品问题 ?

软件工程之美38讲——日志管理:如何借助工具快速发现和定位产品问题 ?

什么是日志管理

日志就是操作系统和应用软件自动生成的事件说明或者消息记录,包含了时间、日志信息。举例来说,下面就是一个典型的 Web 请求日志:
10.0.1.22 – – [15/Oct/2018:13:46:46 -0700] “GET /favicon.ico HTTP/1.1” 40410.0.1.22 – – [15/Oct/2018:13:46:58 -0700] “GET / HTTP/1.1” 200从上面的日志中,可以看出来,日志包含两次 http 请求,它们发生的时间、请求的 URL、请求的 IP 地址、最后返回的状态码等信息。在日志数量不多的时候,凭借肉眼或者借助文本编辑器,还能大概看出日志的内容,

日志管理系统架构

  • 日志采集和解析

  要想对日志进行统一管理,就必须要从各个应用系统收集日志。Logstash 就可以帮助实现对日志的采集。如果日志文件只是一行行带时间戳的文本,那其实是无法有效检索的,必须将其解析成结构化的数据,才能方便地检索。另外,一套系统可能由不同的应用类型组成,有的是 Java 写的,有的是 Go 写的,日志格式可能完全是不一样的,所以还有必要在对日志解析后,提取公共元素,比如时间、IP 地址、主机名、应用名称等。Logstash 不仅可以对日志数据进行收集,还能对日志数据进行过滤和解析,解析完成后再将解析好的数据发送给 ElasticSearch。
存储和搜索当所有的日志数据都被集中存储后,可以想象这个日志数据库是相当庞大的,直接查询效率是比较低下的,这就意味着还需要对日志数据进行索引和分析,从而让你可以快速地检索出来结果。ElasticSearch 就是一套专业的全文检索和数据存储系统,同时还有一套类似于 SQL 的查询语句,这样你就可以基于它,方便对收集好的日志数据进行检索了。但 ElasticSearch 本身类似于数据库,没有图形化界面。

  • 结果可视化

  可视化是日志管理的另一项重要功能。通过可视化的图表,可以直观地看到数据的走势,以及方便地和历史数据进行对比。比如说通过观察交易数据的走势曲线,就能看出来这周的交易数据比上周是增长还是下降;根据 API 响应速度的走势,可以看得出新版本部署后,性能是提升了还是下降了。像 Kibana 就是一套专门针对 ElasticSearch 的图形化操作工具,可以方便对 ElasticSearch 数据进行检索,也可以对结果用图表的方式展现。

  • 监控和报警ELK

  本身只是提供了一套基础的日志管理框架,但是基于它之上还可以有很多扩展,比如说自动报警就是一个非常典型的场景,可以基于已经存储和索引好的日志数据,制定相应的自动报警规则,当线上服务发生异常时,可以自动地触发报警,通知相关值班人员及时处理。ELK 可以通过插件的方式,安装像 ElastAlert 或Watcher这样的自动报警插件,实现自动报警功能

posted @ 2021-01-21 21:34  段志轩  阅读(8)  评论(0编辑  收藏