实施日志记录和监控的正确工具

Right tools to implement logging and monitoring

我和我的团队最近开始着手一个新项目。我们的项目分为 3 层 - 客户端(Winforms 应用程序)、中间件(.NET Core 3.0 Web API)、数据库(PostgreSQL)。我被指派去寻找实现日志记录和监控系统的最佳方法。

我们需要的是记录每个异常(当然),以及我们的中间件对我们的数据库所做的每个查询以及一些审计日志。请记住,这些日志会经常出现,因为用户同时超过 200 个。

起初我的搜索是从 noSQL 数据库开始的。我正在考虑选择 MongoDb、Cassandra 或 ElasticSearch,因为它们速度很快,不需要特定的模式并在那里记录所有内容。但后来我偶然发现了 this great blog post by Nick Craver - the Architecture Lead for Stack Exchange. There he mentions the use of StackExchange.Exceptional,我认为这就是我们真正需要的。 但是我不确定如何实际使用它以及 Nick 提供的所有这些出色解决方案中哪些是我的用例所需要的。

所以我想问:

  1. 如果你曾经使用过 Exceptional,请告诉我它的用途
  2. 我是否也需要 OPServer 来监控日志?
  3. 我还是只使用 Mongo 更好吗?

如果你问我,我将使用 ELKB 堆栈。我没有使用过 OPServer。所以我不打算对此发表评论。但我想分享我对 elasticsearch 的看法,你的用例如何在这方面实现。

据我了解,您有两件事需要记录:

  1. 每个 Exception/Errors
  2. 中间件查询日志

ELKB 堆栈专为这些用例而设计。哪里就会有河流那样的流淌。您的日志将继续存储在 Elasticsearch 中。

以下是实现用例的几个步骤:

步骤 1:设置 Elasticsearch。为此,您不需要成为任何专业人士。只需按照他们拥有的精彩文档即可。
第 2 步:设置 Logstash / Filebeat,它将实时读取您的日志文件并不断插入 Elasticsearch。
第 3 步:通过 elasticsearch 安装 Kibana。您将获得数据日志的完整视图。
第 4 步:只需在您的应用程序中添加日志点,您将在其中获得异常或您想记录其他内容。

优点 :

  1. 所有工具都是现成的,并被许多其他用例非常多的组织使用。所以它也适合您的用例。
  2. 非常好的文档和社区支持。
  3. kibana 的出色数据视图。您可以创建自己的仪表板。它就像您整个系统日志的一个视图。
  4. 已经有一些节拍可用,例如 MySQL 节拍、Nginx Beats、Apache 节拍、Mongo DB 等。在这里,您只需插入并开始使用它们。
  5. 每当您想添加一些新类型的日志时,这将是您的集中架构,您只需开始写入同一个日志文件,它就会开始记录。

您可以在 Internet 上找到很多代词。

缺点:

  1. 您可以使用付费的 'watcher' 设置警报。
  2. 如果你想设置开源警报,你可以使用 alertmanager (Prometheus),你需要做一些额外的集成。

以下是我想分享的几个用例。我相信它会帮助你理解:

梦想11 : https://medium.com/@D11Engg/elasticsearch-dream11-30328d913cd5
优步https://eng.uber.com/elk/
易趣 : https://www.elastic.co/blog/monitoring-petabytes-of-logs-at-ebay-with-beats