如何使用开源建立一个分布式系统监控系统?

  微服务架构带来了分布式系统的运营挑战,当只有单台机器时,出现什么问题打开日志文件就可以发现怎么回事,而如果有很多微服务分布式在一个分布式系统中,你需要集中许多日志在一起才能发现怎么回事,集中这么多服务的日志靠手工几乎是不可能的,当然基于Docker也是另外一种解决方案,这里提供一套基于Cassandra的开源监控系统解决方案.

首先,监控分两个部分:测量Metrics与日志log,所谓测量是指服务器的各种指标,比如哪台机器的磁盘使用率等等,而日志数据是应用系统内部发出的事件。

 

测量

在测量方面,包括三个工作:

  • 收集数据
  • 存储 维护和查询数据
  • 虚拟化图形化显示测量数据

推荐使用 InfluxDB 作为测量数据的存储,适合时间序列的数据。易于使用类似SQL查询,简单易于安装,原生的HTTP API,集成支持各种收集数据工具和协议。

InfluxDB提供一个线协议来收集测量数据,而Ganglia 和 Graphite则正好适合作为它的测量数据输入,下一步还需要一个将各个节点数据以最小耗费资源的方式收集到一起,使用 Riemann, 它是一个从各个安装Riemann客户端节点聚合事件的工具,它是基于TCP和UDP的Protocol Buffer协议,因此轻量且快速。

最后,是图形化显示测量数据,推荐使用 Grafana, 它非常流行强大,可配置界面,能很好支持 InfluxDB 和 Elasticsearch 。

现在,我们有了一个集中化监控服务器系统, Riemann能发送各种我们需要收集的信息,使用Riemann 工具发送 cpu, 磁盘disk, 内存memory 和 网络状态等。

 

日志

日志也分为三个部分:

  • 数据收集
  • 存储 维护和查询
  • 图形化虚拟化日志记录

使用 Elasticsearch 实现存储 维护和查询日志记录, Logstash 提供很多种办法来收集数据 处理和分发记录, Kibana 则帮助我们图形化显示这些记录。Grafana图形化也是相当不错。

现在我们使用InfluxDB能获得各种造成延迟的可能数据,而通过Elasticsearch能查询可能导致这些延迟的各种事件操作,整个一个系统灵活且可扩展。 如果需要收集不同子系统数据,可以通过Kafka + Spark Streaming方式,数据存在 Cassandra中。

 

微服务专题