六个人如何运维一万台服务器?(8)
在上面的集群架构图里,最下边绿色的是 Graphite 原有的组件,在原有组件上我们自己开发了几个相关的组件。 第一个是 Relay ,每个指标打过来之后,我们通过 Relay 把指标分布在多台机器上,这个是通过一致性哈希来实现的。 等我们取数的时候, Graphite-api 这部分也是我们自己开发的, Graphite-api 里也有同样的一致性哈希算法,通过这个算法找到这个指标在这个集群的哪一个机器上,调用这个机器上的 Graphite-web 下的 api,然后拿相关的数据。 这是一个集群的架构,我们有多个集群。Watcher 要做一个统一的界面,在这个界面上配置自己的监控的时候,选择数据源,对于打数的人他清楚这个指标在什么地方。 能不能做一个统一的数据源,让用户来使用,这样我们就在组件里加上了一个纯指标的数据库,每次流量过来之后,我们就会把这个指标的名称写到我们数据库里一份,同时记录它在哪个集群。 这样我们就可以对外报一个统一的 Graphite-api ,假如说一个指标我们要起 s.flat-xx 的指标,首先是调用api,去找 s.flat-xx 这个指标在什么集群里,发现在机票的集群里,再通过一致性哈希就可以把这个指标取出来了。 Graphite-api 上第一部分是借这个 Dashboard 来报警。讲完整个的 Watcher 架构,下面看一下主机监控是怎么做的? 首先有一个硬件管理平台,维护着主机监控的相关信息。 最主要的是会编排代理,去维护代理的版本配置,会不停的去扫描这个主机,往主机上部署,也会定时检查指标是否收集了。 假如这个主机指标出现断点了或者有问题了,会报警去检查,到底是 Collectd 出问题了还是系统出问题了还是网络出问题了。 每个主机上部署 Collectd 之后会根据不同的配置打不同的指标,比如 CPU 的使用情况,内存的使用情况,网络带宽的使用情况,这些都将指标打成了 Watcher。 每个主机的指标可能都是相同的,怎么区分不同主机的指标,我们就以主机的名称作为区分。接入到 Watcher 之后,我们就可以调用 api,在 Dashboard 上调用。 业务监控也是比较类似的,应用接入之后会暴露出 api,里面就是最近 1 分钟之内应用的监控数据,每分钟 Qmonitor server 从所有的机器上去拉这个文件,拿了文件之后做集中的分析,分析完之后做相应的处理。 比如说对应用进行计数,算完之后以 Appcode 作为标识来区分不同的指标,将指标推送到 Watcher。推送到 Watcher 之后,同样可以查询监控,检查应用指标的健康状态。 数据互通下面讲一下我们怎么在整个运维平台实现数据互通的。我们在监控报警和主机管理里都提到了一个 Appcode ,在去哪儿网 Appcode 到底是什么? 其实它就是唯一的一个标识应用,我们将一个应用进行了抽象化,意思更加广义了。 在去哪儿网一个应用可以是一个 Web 服务,也可以是一个 GPU 云实例,也可以是 MySQL 实例,甚至可以是一组交换机,还可以是其他的。 (编辑:ASP站长网) |