作者: Steven Acreman
原文: Time Series vs Logging vs Tracing
作者对时间序列,日志分析和路径跟踪这三种常见的系统检测方法以及常用的工具进行比较分析,给出应对不同应用场景的系统检测工具推荐。
译文
监测(Monitoring),或者用更新的词“可观察性(observability)“是常常被大家误解的一个东西。我知道这个主要是因为在一些论坛上有人问问题而大家胡乱回答导致的。
由于监测工具的种类太多了,所以一篇想要覆盖所有内容的博文就会变得很枯燥乏味。
而我所有要解释的是你一定需要的三种监测类型,然后针对每种Kubernetes使用场景给出最好的工具。从标题也可以看出来,这三种类型分别是:时间序列(Time Series),日志分析(Logging)和路径跟踪(Tracing)。
为什么是这三种方法
实际上这三种方法是通过收集的数据不同来区分的。每种方法的数据都需要经过收集、处理和存储等步骤,但三种不同的数据都有自己的流程和数据库存储方案。
时间序列数据更轻量,在收集处理流程上更少,这就使得它可以作为实时监控高量级指标(high cardinality metrics)的最佳工具,这种方法大多将数据转化为可视化图表的形式。
日志分析更重量级一线,但是包含更多发生事件的信息,因此日志分析更适合历史事件检索和分析工作,也是就是谁在什么时间干了什么。
路径跟踪更像是一种日志分析,而其更关注于某些方面,这种方法构建一种连线图,描述在一个跨多个服务的事务过程中发生了什么。在微服务系统中,这种方法让你能快速定位问题所在,然后你就可以钻研那个错误的服务。
有意思的是你可以混用这些方法去解决别的方法的问题,我见过有人用日志分析方法来监控原本基于时间序列的系统。
同样的,你也可以利用日志分析工具通过为每个日志添加事务ID构建比较简单的路径跟踪系统,这种方式在小规模的时候很好用,但是一旦指标的数量多了就不好使了。
理智的人会依据工作选择正确的工具,所以我推荐你独立使用这三种方法。
时间序列
时间序列工具有两类。第一类是使用过时的方法,只是用一维数据,像Nagios,Graphite和Sensu。在Kubernetes上这种方法显然没什么意义,甚至都不能进行自我评估,客观真实来讲,他们的数据模型比其他方法要差很多。
所以这就催生出了第二类工具,这类工具支持多维时间序列数据,这类工具具有统治地位的是Prometheus。Prometheus会监控你的服务器,Kubernetes本身和你的应用,为你提供提实时的图表,以便你在Grafana中查看,你也可以创建复杂的查询并且在报警管理器中使用它们。
你真正需要考虑的是自己构建监控系统还是购买监控系统,如果你想买定制化的时间序列监控系统,那么DataDog是不二首选。DataDog很贵但是用起来很好,也有很多其他SaaS服务商可选,但是都没有DataDog所占市场份额大。
我的观点是,你应该抓紧时间把Prometheus用起来,投入精力去学习和安装Prometheus。根据我在实际生产环境18个月的使用经验,Kubernetes和Prometheus用起来也不会很费劲而且还很前卫。
日志分析
我感觉可能会有人不同意我这方面的观点,但是为了简单起见,就以JSON日志分析作为标准。在Kubernetes用这个的一个好的办法是用在主机上用FluentD来收集日志然后再转化为JSON。
你把这些日志发到哪就看个人想法了,最普遍的是把日志发给ElasticSearch。我曾经成功使用部署在AWS上的ElasticSearch来管理我们所有的日志,如果我们只有高中学历,那么我们很可能调研一下Stackdriver日志分析。
Graylog是另一个比较好的选择,Graylog有更多安全相关的展示面板。如果你正在考虑买一个产品,那么Splunk是基于SaaS的,用于内部使用和附有Sumologic规则的最好选择。付费的日志分析解决方案的问题在于他们花了大量的财力但是在扩容方面确实做得不好。你最好扩展好自己的ElasticSearch集群,并且和其他开发者合并发送有用的应用程序日志以减少容量。
我对于在Kubernetes上的日志分析的建议是搭建FluentD收集日志,将日志发送给ElasticSearch,然后用Kibana来加速搜索。
路径跟踪
路径跟踪是可选方案最少的一种方式,目前可用于Kubernetes的最好的开源的跟踪方案是Jaeger。你可以单独使用Jaeger,也可以像Istio那样将其作为服务节点。还有很多其他的解决方案比如Zipkin和OpenAMP,但是这些并没有Jaeger那么成熟。
在付费路径跟踪方面的霸主是AppDynamics,AppDynamics很贵但是将复杂的分布式系统问题处理操作变得很傻瓜式。
如果你在一个大的政府机构里面,每次做什么事情都要转手100个承包商,每个承包商都创建自己的很容易就崩的垃圾微服务,那么这个AppDynamics你是必买的。AppDynamics就有如一道光穿过整个系统,精确定位到错误,然后你就知道哪个承包商该被炒了。
但是并不是所有人都在这种地方工作,所以我的建议是,如果你有一个好的开发团队,那么就去试试Jaeger,它很便宜,虽然界面有点难看,但是功能基本上还是很全的。
总结
我希望评论里面可以出现我没有提到的一些工具,你要记住的就是如果你想有更全面的监测,那么你就要把时间序列、日志分析和路径跟踪都试一遍。
如果你曾经提倡只是用Splunk来解决任何事情的话,那么现在是时候该反省了。
我并不在意你最终选择了什么,而我的选择是配合Grafana使用Prometheus,配合Kibana和Jaeger使用ElasticSearch。
有很多付费很高的工具可以将所以问题解决,变换一个角度也没有错,但这不是重点,重点是比较之后再选择监控工具是解决这三个领域的最好方法。如果你在一个小公司,那么可能一个工具就够用好长一段时间了,而大多数人应该记住我的警告,分别独立使用各种工具。
如果你想要探索在Kubernetes上有哪些Helm图表可以用于每个类型,你可以看看这里。