如何搭建一个集中式的日志管理系统

日志是任何系统的重要组成部分,当发生错误时,它们会提供系统正在执行的操作以及导致错误的原因。 几乎每个系统都会以某种形式生成日志,这些日志将写入本地磁盘上的文件。当我们查看日志文件的时候我们就能够很快的定位问题,并且修复Bug。
然而随着互联网的发展,我们的系统越来越复杂,分布式系统、微服务架构,我们的应用跑在成百上千台服务器上。这时候一个集中式的日志管理系统是很有必要的。
集中式日志应系统大体分为四个部分 – 收集日志,传输,存储和分析(可视化)。 我们将深入研究这些部分,并了解我们如何构建应用程序。

日志收集

所有应可能以不同的方式创建日志,有些应用程序直接在文件中记录系统日志和其他日志。 在Linux服务器上运行的典型Web应用程序时,在/ var / log中将会有十几个日志文件,并且在主目录和其他位置中还会有一些特定于应用程序的日志。 基本上,不同的应用程序会在不同的地方生成日志。

日志传输

如果有多个主机正在运行,则日志数据可以快速累积。 应该有一种高效可靠的方式将这些数据传输到集中式应用程序,并确保数据不会丢失。

有许多框架可用于传输日志数据。 一种方法是直接插入输入源,框架可以开始收集日志,另一种方法是通过API发送日志数据,应用程序代码被写入以直接记录到这些源,从而减少延迟并提高可靠性。

下面推荐常用的几个框架:

  • Logstash — Open Source Log collector, written in Ruby
  • Flume — Open Source Log collector, written in Java
  • Fluentd — Open Source, written in Ruby

以上框架支持大部分使用场景,当然我们也可以自己实现API通过消息队列来传输

  • Scribe — Open Source Software by Facebook, written in C++
  • nsq — Open Source, Written in Go
  • Kafka — You would have heard about Kafka, highly used, Open Source Software by Apache, written in Java

日志存储

我们可以根据我们的需求,来存储我们的日志,如果我们我们只需要将我们的日志存储几天或者一个月左右我们可以使用CassandraMongoDBHDFS 或者ElasticSearch

我们也可以使用可以随时扩容的云存储入Amazon S3等。

日志分析

日志旨在用于分析和分析。 一旦日志存储在一个集中的位置,我们需要一种方法来分析它们。 有许多工具可用于日志分析,需要用于分析的UI,则可以解析ElasticSearch中的所有数据,我们可以使用Kibana或Greylog2查询和检查数据。 Grafana和Kibana可用于显示实时数据分析。

告警

这是集中式日志记录应用程序中的最后一个组件。 有一个警报系统,它会提醒我们日志模式或计算指标的任何变化。

日志对于故障排除非常有用。 在日志应用系统中建立一些警报机制会更好,它会发送一封电子邮件或通知我们然后让负责人持续监视日志以进行任何更改。 有许多错误报告工具可用,我们可以使用Sentry或Honeybadger。 这些汇总了重复的错误情况,让我们知道错误发生的频率。

打赏作者

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

Leave a Reply

Your email address will not be published. Required fields are marked *