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

什么是日志管理

日志就是操作系统和应用软件自动生成的事件说明或者消息记录,包含了时间、日志信息。比如下面:

10.0.1.22 – – [15/Oct/2018:13:46:46 -0700] “GET /favicon.ico
HTTP/1.1404
10.0.1.22 – – [15/Oct/2018:13:46:58 -0700] “GET / HTTP/1.1200

从上面的日志中,可以看出来,日志包含两次 http 请求,它们发生的时间、请求的 URL、请求的 IP 地址、最后返回的状态码等信息。

在日志数量不多的时候,凭借肉眼或者借助文本编辑器,还能大概看出日志的内容,但是当日志数量一多,从日志里面查找需要的信息就变得很困难了。

现在的应用程序越来越复杂了,尤其是像微服务这样的架构,一个系统需要由若干微服务组成,每个微服务可能还会部署在若干容器上,那么意味着如果你要根据日志去排除故障的话,需要从几十、上百个地方去收集日志,再逐个去分析。

要解决这样的问题,就需要对日志进行统一管理。日志管理就是指对系统和应用程序产生的日志进行处理的方法,包括对日志进行统一收集,对日志数据进行筛选和解析,统一存储,还可以让它们方便被检索

当然你不需要自己去从头实现这样的日志管理系统,现在已经有很多成熟的日志管理工具可以帮助你对日志进行管理,你只要去了解这些工具可以帮助你做什么,以及如何基于它们来搭建适合你项目的日志管理系统即可。

为什么说搭建了日志管理系统,就可以帮助快速发现和定位问题呢?

(1)首先,日志进行集中式管理后,就可以方便对所有日志进行统一的检索

当所有日志都可以放在一起检索了,自然就能高效地定位到问题,而不再需要到各个应用程序的日志里面去分别检索。

同时在检索的方式上,可以用类似于 Sql 语句的方式来检索,高效地对结果进行查询和归类。

在这里插入图片描述
(2)然后,对日志进行集中式管理后,可以通过图表直观的看到应用运行情况。当所有的应用实时将日志传输到一起,日志管理系统就可以根据应用日志中记录的信息,动态地生成图表,实时看到应用运行的情况。

举例来说,某一个 API 服务,日志信息记录了每一次 Http 请求的状态、耗费时间等信息。

127.0.0.1 [10/Oct/2018:13:55:36 -0700] "GET /api HTTP/1.1200 2326 0.038

那么把这些信息统一收集、实时统计的话,就可以随时看到单位时间内,这个 API 错误率有多少,平均耗时多久,从而可以根据这样的信息生成实时的图表,方便查看当前 API 服务的运行情况。

在这里插入图片描述
(3)最后,可以根据日志的数值设置规则自动报警。对于这些从日志中实时分析出来的数据结果,如果设置好相应的阈值,在超过阈值后,比如说 API 错误率超过 10%,或者 90% 的API 请求时间超过 1 秒,就会自动触发报警,通知相关的开发人员进行维护。

ELK

很多大厂是基于 ELK 搭建的自己的日志管理系统

ELK 是 Elasticsearch+Logstash+Kibana 的缩写。

  • ElasticSearch 是一套搜索框架,提供了方便的接口,可以方便地做全文检索,可以用来对日志进行检索。
  • Logstash 是一个数据收集工具,可以用来收集日志数据。
  • Kibana 是一套可以和 ElasticSearch 交互的界面,通过 Kibana 可以方便的检索 ElasticSearch 内的所有数据,还可以用图形化的方式展示数据结果。

基于 ELK 搭建的日志管理系统基本架构是这样的:
在这里插入图片描述
这套架构有几个重要的模块:日志采集和解析、存储和搜索、结果可视化、监控和报警。
(1)日志采集和解析

  • 要想对日志进行统一管理,就必须要从各个应用系统收集日志。Logstash 就可以帮助实现对日志的采集。
  • 如果日志文件只是一行行带时间戳的文本,那其实是无法有效检索的,必须将其解析成结构化的数据,才能方便地检索。
  • 另外,一套系统可能由不同的应用类型组成,有的是 Java 写的,有的是 Go 写的,日志格式可能完全是不一样的,所以还有必要在对日志解析后,提取公共元素,比如时间、IP 地址、主机名、应用名称等。
  • logstash不仅可以对日志数据进行收集,还能对日志数据进行过滤和解析,解析完毕后再将解析好的数据发送给 ElasticSearch。

(2)存储和搜索

  • 当所有的日志数据都被集中存储后,可以想象这个日志数据库是相当庞大的,直接查询效率是比较低下的,这就意味着还需要对日志数据进行索引和分析,从而让你可以快速地检索出来结果。
  • ElasticSearch 就是一套专业的全文检索和数据存储系统,同时还有一套类似于 SQL 的查询语句,这样你就可以基于它,方便对收集好的日志数据进行检索了。但 ElasticSearch 本身类似于数据库,没有图形化界面。

(3)结果可视化

  • 可视化是日志管理的另一项重要功能。通过可视化的图表,可以直观地看到数据的走势,以及方便地和历史数据进行对比。
  • 像 Kibana 就是一套专门针对 ElasticSearch 的图形化操作工具,可以方便对ElasticSearch 数据进行检索,也可以对结果用图表的方式展现。

(4)监控和报警

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

在这里插入图片描述
具体教程参考这里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值