我有一个包含两组虚拟服务器的项目(每组中的服务器只是具有相同微服务集的同一映像的副本,例如 k8s 中的 pod)、一个平衡器和几个带有数据库的 VPS。现在Docker和K8S由于项目规模小还没有使用(不过有计划)。相反,我们使用了我们云提供商的功能:管理磁盘映像、虚拟机及其组,并根据负载自动创建/删除。目前它运行良好,但缺乏集中的日志记录和监控,我试图强调以下需求:
- 带有服务器参数的仪表板,如 CPU 使用率、RAM、磁盘空间、网络等。对于每个服务器。我们的供应商提供了一些仪表板,还有很酷的控制台实用程序,但我希望有一个独立且集中的解决方案。
- 具有不同 HTTP 代码的响应数量的仪表板,既针对整个服务器组,也针对每个服务器单独。我们使用的是 NginX,它提供了一个状态页面,但这仅适用于单个服务器(同样,需要集中化)。
- 用于分析日志的窗口,支持多行消息(如回溯);
- 独立于编程语言和技术栈。
- 可以通过邮件设置通知(或者更好的是,运行控制台脚本以向 TG 发送通知),并带有自定义的指标触发器。
- 也许还有其他一些重要的功能?
额外的愿望:
- 解决方案必须是免费的。
- 易于设置也是可取的。我希望一种解决方案可以足够灵活,以涵盖所有描述的日志记录和监控需求。
- 解决方案的成熟度/流行度、文档和示例的可用性。
- 当需要迁移到容器时,解决方案应该保持最小的变化。
在我看来,最终的解决方案如下:1)保存日志和计算指标的服务器,提供用于分析日志的仪表板和工具,以及 2)安装在每个服务器上的脚本,该脚本在计时器上运行并定期将本地日志发送到服务器。但是:脚本如何知道使用配置在特定服务器上查找和发送哪些日志?但也许我对这种工作算法是错误的。
该网络有大量关于 LogStash、ElasticSearch、Grafana、Kibana、Zabbix、Loki、Prometheus 等的建议,但它们几乎没有描述不同解决方案之间的差异及其特性,也没有说明何时以及为什么会出现最好使用一种或另一种解决方案。我希望看到关于哪些软件可以相互使用、如何以及何时使用的现代解释,以及根据所描述的需求进行比较。我也希望这些答案对许多其他开发人员有用,因为这个话题在我们这个时代非常相关和有用:)
因此,经过数小时的文章和文档研究,我弄清楚了比较表:
Zabbix是一项功能齐全的技术,可同时使用指标和日志,同时具有可扩展性。它还支持自动主机发现和网络映射。
有用的链接:
Prometheus这是一个指标监控系统。为微服务和 Kubernetes 构建,可以自动发现主机上传数据。有很多受支持的适配器:docs: Exporters and Integrations。Grafana 用于数据可视化。关于数据存储,Prometheus 有自己的本地存储系统,但也集成了第三方分片技术,请参阅文档:Storage。
有用的链接:
PLG是一个受 Prometheus 启发的日志堆栈。日志通过 PromTail 收集,Loki是中央处理组件。也使用 Grafana 作为前端。Loki 没有自己的存储系统,因此需要第三方解决方案。Loki 以块和索引的形式存储数据,通常单独存储,请参阅文档:存储了解更多详细信息。据我了解,PLG 堆栈没有触发/通知系统,但日志提取组件也可以将它们解析为指标并将它们发送给 Prometheus,从而获得警报。我还注意到 PromTail不支持多行日志,但可以使用更灵活的 FluentD 代替。
有用的链接:
ELK / EFK是用于解析、索引和搜索日志的传统堆栈,可以产生复杂的查询。LogStash 最初用于数据检索,但 FluentD 变得越来越流行。
有用的链接: