多服务器的日志记录和监控

33次阅读
没有评论

问题描述

领导一个小项目,有两组服务器(每组服务器都是具有相同微服务的克隆,类似于k8s中的pod),一个负载均衡器和一个数据库。由于项目规模较小,没有使用Docker和k8s(但计划进行迁移)。相反,云服务提供商允许根据负载情况设置动态服务器的创建/删除,使用文件系统镜像。目前这样做是可以的,但缺乏日志记录和监控功能。用户尝试对需求进行了结构化描述:
1. 一个仪表盘,显示每个服务器的CPU、RAM、磁盘空间、网络等使用情况。云服务提供商提供了一些具有这些技术信息的仪表盘,但希望有一个与服务商无关的解决方案。
2. 一个仪表盘,显示每个服务器组的HTTP状态码响应次数,以及每个服务器的响应次数。我们使用NginX,它提供了一个状态页面,但只能在单独的服务器上工作。
3. 一个日志分析和查找窗口,支持多行消息(如异常跟踪)。
4. 支持编程语言的独立性。我们的服务器应用程序将日志写入多个不同的文件,文件名中包含日期,可能需要对此进行一些更改。
5. 能够设置电子邮件(甚至启动shell脚本)通知自定义触发器。
6. 可能还有其他重要的功能吗?

附加要求:
7. 日志记录/监控设置应该是免费的。
8. 更喜欢简单性。希望一个解决方案足够灵活,能够满足所有日志记录和监控的需求。
9. 解决方案的成熟度/流行度以及文档和示例的可用性很重要。
10. 解决方案在迁移到容器和编排时应该是持久的。

用户希望最终的结果是:
1. 一个累积所有日志、提供仪表盘和日志查找面板的服务器。
2. 在每个服务器上安装一个脚本,由SystemD定时器运行,并定期将本地日志发送到服务器。但是脚本如何知道当前服务器安装了哪些确切的日志文件,是否需要使用某种配置?用户对这个算法可能有误解。

用户已经听说过LogStash、ElasticSearch、Grafana、Kibana、Zabbix、Loki、Prometheus等技术,尝试过谷歌搜索,但发现了一堆混乱的建议。用户希望看到关于不同技术、堆栈、可以一起使用的软件或相互类似的现代解释,并根据上述需求进行比较。用户还希望这些答案对许多其他开发人员和初级项目负责人非常有帮助,因为这个主题非常重要。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
根据用户的需求,有几种解决方案可以满足日志记录和监控的需求。以下是一些常见的技术和堆栈,以及它们如何满足用户的需求:

Zabbix

Zabbix是一个功能齐全的技术,可以处理指标和日志处理,并且可以进行扩展。它还支持自动主机检测和网络地图构建。

Prometheus

Prometheus是一个指标监控系统。它是Kubernetes原生的,因此可以自动检测数据提取的主机。它还有许多可用的适配器,用于可视化数据,使用Grafana。关于数据存储,Prometheus有自己的本地系统,但也可以与其他技术进行集成进行分片,参见文档:Storage。

PLG(PromTail, Loki, Grafana)

PLG是一个用于日志聚合的堆栈。日志使用PromTail进行收集,Loki作为核心处理引擎,Grafana用作界面。Loki没有自己的存储系统,因此需要其他解决方案。它将数据存储为块和索引,通常分别存储,参见文档:Storage。据我了解,PLG没有触发器/通知系统,但数据提取部分也可以将日志解析为指标并导出到Prometheus,从而获得警报。另外,我注意到PromTail不支持多行日志,但可以使用更灵活的FluentD代替。

ELK / EFK

ELK / EFK是用于日志解析、索引和搜索的技术堆栈。最初使用LogStash进行数据提取,但FluentD变得越来越流行。

正文完