高效日志管理与监控的优秀实践云计算

来源:互联网 / 作者:SKY / 2019-05-16 15:06 / 点击:
由于云原生系统具有海量的数据流和抽象的复杂性,因此我们必须建立强大的监控和日志记录,以管控各种不可预知的中断或宕机。本文将和您讨论在记录和监控云原生应

【Chinaz.com快译】有过云端运营经验的读者想必都知道:云原生应用具有分布与动态的特性,而所有此类应用通常都会用到容器和无服务器函数等临时技术(ephemeral technologies),来予以部署。而在管理这些云原生应用的时候,能够在任何给定的时间内,提供端到端的可视性显得尤为重要。

高效日志管理与监控的优秀实践

与此同时,由于云原生系统具有海量的数据流和抽象的复杂性,因此我们必须建立强大的监控和日志记录,以管控各种不可预知的中断或宕机。本文将和您讨论在记录和监控云原生应用时,各种值得借鉴和遵循的优秀实践与标准。

1.使用托管日志记录解决方案,还是自建基础架构

首先,除了和本地部署的系统一样,日志记录需要能够反映出应用程序的运行状态之外,在云原生应用中,日志记录解决方案还应该遵循高可用性、分布式处理、以及智能故障转移等原则。而这恰恰就是现代云原生应用与传统整体式应用的区别所在。

能够实现此类目的的常见工具包括:Elasticsearch、Fluentd、Kibana(三者常被共称为EFK Stack)、以及其他工具。它们在架构上可以处理大规模的数据分析,并能够实时地显示处理的结果。它们不但能够协助用户对数据进行复杂性的搜索与查询,还能够支持基于API的开放性集成、以及与其他工具相集成。当然,尽管这些工具在业界十分常用,但是要成功地将它们集成到一起,以满足您的管控目的,则着实需要花费一些功夫。

与上述自行构建系统的方式相比,使用那些由供应商构建、并能够灵活扩展的托管型日志记录解决方案,则更为方便且实用。常见的有:Elastic Stack(请参见)。使用此类现成的集成方案,您只需要将云端的应用数据源和目标相连接,便可轻松地获取与分析各种应用日志。因此,您还可以将宝贵的时间分配到监控和记录其他重点应用之上,而不必花精力去研究如何自行构建日志记录的基础架构。

2.知晓哪些内容该监控、哪些不必记录

众所周知,我们监控的数据记录越多,我们就越难找到真正重要的数据。与此同时,更多的日志管理任务,也意味着更加复杂的日志存储与管理过程。

因此,我们需要认真考虑那些必须记录的内容。例如,在任何类型的生产环境中,那些具有合规性、和满足审计目的、以及至关重要的数据理应得到完整的记录。另外,对于那些能够帮助您解决性能和用户体验方面的问题、以及与安全事件相关的数据也需要被持续监控与记录。

那么,哪些数据类别不需要被记录呢?例如:来自测试环境的数据,由于它们不是软件交付管道(delivery pipeline)的重要组成部分,而且出于合规性或安全方面的考虑,我们对于此类数据不予记录。另外,如果用户启用了“禁止跟踪(do-not-track)”的设置,那么我们就不应记录与该用户关联的所有数据。同理,在确定自己的日志记录和存储过程已满足了该数据的安全要求之前,我们也要避免记录某些具有高敏感性的数据(如,信用卡号等)。

3.配套实施日志安全和保留策略

由于日志势必会接触到敏感数据,因此我们的日志安全策略应当包含检查诸如:客户端的个人数据、以及API内部访问密钥等敏感数据源的环节。同时,在将日志传送给任何第三方之前,我们应确保敏感数据被匿名化(或称脱敏)或加密。GDPR日志管理最佳实践一文(请参见)向您介绍了保护Web服务器日志中的敏感数据和个人信息的最佳实践。为了将日志数据安全地传输到日志管理服务器上,我们往往需要在客户端和服务器端之间启用、并设置TLS或HTTPS等端点加密的方式。

同时,不同来源的日志可能需要被分配不同的保留时间策略。例如:某些应用可能仅与几天之内的故障排除相关;而那些与安全相关的事务日志、或业务事务日志,则需要有更长的保留期限。因此,我们的留存策略应该对于日志源是灵活、且细粒度的。

4.日志存储

我们在规划日志存储的容量时,应充分考虑到高负载时的峰值流量。在系统平稳运行时,应用每天所产生的数据量几乎是不变的,而且主要取决于系统的利用率、以及服务每天的事务量。而系统在出现严重错误的情况下,我们通常会发现日志卷的猛增。

因此,如果日志存储达到分配空间的限制,而您又没有设置过“滑动窗体”策略的话,那么就可能无法再继续存入那些对于修复系统错误来说至关重要的最新日志。此处的滑动窗体是指:日志存储循环地在缓冲区上进行工作,以实现在应用数据达到存储空间的限制之前,自动将最早的数据删除掉,以保持最新日志的存入。

如果有人问:“什么是比系统宕机时间更糟糕的事情?”那么我的回答是:“缺乏相应的故障排除信息,以至于反过来延长了宕机时间。”可见,我们在设计日志存储时,要保持它的可扩展性和可靠性。

另外,日志存储应该配备有单独的安全策略,以防止攻击者绕过或是删除掉用以跟踪其行为的日志文件。我们最好将各种日志实时地、集中性地传送到某台中央存储库上。如果攻击者有可能访问您的基础架构的话,则可以考虑将日志发送到异地(例如,使用专门提供日志服务的SaaS),以避免证据被篡改。

5.查看并持续维护您的日志

缺少对于日志数据的维护,可能会导致排障时间的延长、敏感数据的暴露、以及日志存储成本的走高。我们需要定期查看应用日志的输出,通过审查服务的可用性、可操作性、以及安全性等方面的内容,以及时按需调整系统。

创建有意义的日志信息

如果日志中只包含了局部且“神秘”的错误代码与信息,那么运营部门是需要花时间进行解读的。只有那些易读且实用的日志消息,才是快速进行排障的关键。因此,各类开发人员应当尽可能地通过提供有意义的日志信息,来节省诊断的宝贵时间。

使用结构化的日志格式

结构化的日志格式(例如:JSON或key/value格式)可以包含诸如:时间戳、严重性、进程ID、事务ID等与消息相关的数据字段。如果您尚未对所有应用采取统一的日志格式,那么请尽快规范化和标准化日志的产生,以便系统能够以结构化的方式,高效地进行日志的合并、解析与存储。

使得日志级别可配置

阅读延展

1
3