多云虚拟机统一监控功能详解

本文主要通过总体介绍、核心监控Agent介绍、总结和演示三个部分为大家解析多云虚拟机统一监控的功能。

1、多云虚拟机统一监控

首先,作为一个多云管理平台,统一监控是一个非常必要且重要的功能。

1)架构

云联壹云一直都有统一监控的功能,主要是搜集各个基础设施的监控信息,然后进行统计。

2)过去的实现

之前,进行监控查询、监控报警、监控运维的实现方式是调用各个云厂商的云API,获取其监控数据,这样的实现比较简单自然。

但是缺点也很明显:

第一,监控数据的不统一。阿里云的监控数据和腾讯云的监控数据虽然大体上一致,但是也会有不同之处。

第二,调用云API时,会有调用次数限制。比如阿里云的API会限制每天的调用次数,若调用次数超过限制值,则会导致无法获取数据,所以只能调高调用的间隔,这可能会造成一些数据的缺失。

第三,监控数据的延迟比较高。一方面是因为次数的限制导致它的间隔要调大,我们要不断拉下来,相当于是二手数据,延迟较高,对于告警等会有阻碍作用,因为告警需要即时的数据。

3)现在的实现

现在的实现是给多云虚拟机安装监控Agent,监控Agent会在虚拟机上收集监控数据,然后主动将数据push到云联壹云的数据库中,如此上述的三个缺点即可克服。

因为每个虚拟机都有统一的Agent,所以最终得到的数据也是统一的。

由于不通过云厂商的API,所以也没有调用次数的限制。

是Agent主动push数据,我们也可以控制延迟。

现在的实现是通过监控Agent来做多云虚拟机的统一监控,下面为大家重点介绍监控Agent。

2、监控Agent

监控Agent是运行在虚拟机上的daemon,它的作用是采集监控数据,并把数据传回到云联壹云的influxdb中。

那么如何将Agent安装到虚拟机中?如何让它采集数据?如何把数据传回来?

下面分三点为大家介绍一下整个实现。

1)为虚拟机安装Agent

我们采用Ansible为虚拟机安装Agent。

使用Ansible给这个云上的VPC内部的虚拟机装Agent,需要解决两个比较重点的问题:

第一,怎样确保云联壹云中的这个Ansible组件能够连接到云上的VPC内部的虚拟机,因为网络可能是不通的,VPC内部的网络是一个隔离的网络,所以不一定能够直接连接上。

第二,连接好之后,还需要登录才能使用Ansible安装,如何保证能够登录。

(1)如何登录

关于登录的问题,先假设云联壹云已经能够连接到虚拟机,比如通过NAT网关或者虚拟机已经绑定了EIP等。

登录的问题分为两种,第一种是机器本身就是通过云联壹云平台创建出来的,在这种情况下,登录的问题便已经解决。因为云联壹云平台的虚拟机本身是满足的,云联壹云会在虚拟机上自动创建一个cloudroot用户,cloudroot用户可以通过公钥登录,私钥存储在本地数据库。

但是很多的情况与上述情况不同,比如阿里云的账号刚纳管进来,这些虚拟机都是从阿里云上拉取的数据,这种情况下,并不能满足直接登录的要求。

(2)用户协助配置免密登录

此种情况下需要用户帮助云联壹云配置免密登录,用户协助配置免密登录有两种方式:

第一,用户先暂时告知虚拟机的用户名、密码,使云联壹云能够暂时登录到虚拟机。

云联壹云会使用ansible在目标虚拟机上创建cloudroot用户,设置公钥登录,这样就能满足直接登录的需求。

第二,是直接将此脚本展示给用户,用户只需要把脚本拷贝到自己的虚拟机上去运行,也能达到上述效果,云联壹云也能够免密登录到虚拟机上。

解决了登录问题之后,Agent便可以安装。

当然问题解决的前提是我们之前的假设成立,即连接问题已经解决,网络是通的。

如果网络不通,我们可以使用SSH代理,具体来说是Local Port Forwarding。

(3)Local Port Forwarding介绍

假设网络A和网络B是两个隔离的网络,如果想让VMA能够访问VMB上监听在80端口的web服务应该怎么办?

VMB没有公网IP,只有一个内网IP,我们需要建两个代理。

可以在网络A中建proxyA ,在网络B中建proxyB,proxyB一定要有公网,要使网络A能够访问到proxyB,这时就可以用SSH Local Port Forwarding做一个SSH代理,需要在proxyA上执行这个命令,这个命令就是要建立一个Local Port Forwarding,然后在后台执行。

其实可以分两部分,在第二个冒号之前的部分,是本地有proxyA这里的IP加端口。

冒号之后是在远端实际要访问的IP加端口。

后面的cloudroot是proxyB的登录用户和proxyB的IP。

执行此命令要求proxyA能够以cloudroot的用户正常登录到proxyB上,这可以通过上文讲到的登录方法来解决。

VMA只要访问10.127.30.251:12345就能访问VMB上的web服务。

下面简单地了解一下过程,

在proxyA上执行这个命令之后,首先会在proxyA和proxyB之间建立一个SSH隧道,并在proxyA上创建一个port forwarding,它将监听10.127.30.251:12345,一旦有请求发来,就会通过SSH隧道转发到proxyB,proxyB会将请求转发到172.31.25.194:80。

VMA只要访问10.127.30.251:12345就能访问VMB上的web服务。

(4)云联壹云连接到VPC内部虚拟机

下面将场景进行带入,首先云联壹云内部有一个Ansible组件,阿里云内部有一个需要装Agent的目标虚拟机。

在云联壹云内部做proxy服务,然后在阿里云的VPC内部找一台虚拟机,称之为proxyVM,它要满足两个条件,第一个条件是能够被云联壹云访问,第二点是它能够访问到目标虚拟机,如此即可做Local Port Forwarding。

只需要在proxy上执行刚才的命令,Ansible组件只要访问proxy,就能通过代理访问到目标虚拟机,如此一来即可连接到目标虚拟机进行安装的工作。连接问题和登录问题解决之后,Ansible组件即可正常地将监控Agent安装到虚拟机上。

2)监控Agent如何收集数据

第一版的监控Agent其实是Telegraf,定制配置文件,满足采集数据的需求。

Telegraf是一个开源项目,它的目的是收集、处理、聚合和编写指标的Agent。Telegraf可以灵活地配置,采集什么样的数据,将数据送到哪里,数据添加等。

以下是为每台虚拟机自动生成的配置大体的状况,比如第一页是[global_tags],通过添加标签,例如vm_name=”correhost”表明虚拟机的名称,通过添加标签还可以了解到区域,项目、平台等信息。

查看时即可通过标签查看,查看某个平台或项目都可以做到,另外两个配置比较重要,分别是INPUTS和OUTPUTS。

INPUTS表示都需要什么样的数据,例如第一条inputs.cpu表示需要cpu相关的数据。

OUTPUTS表明数据要送往哪里,这里表示要送到influxdb中。

总之,我们使用telegraf,然后定制一下配置文件,这样就可以达到作为监控Agent的要求

3)监控Agent如何将数据传回来?

这个问题的本质是如何使虚拟机上的Agent服务能够访问到云联壹云中的InfluxDB,这也可以分为两种情况,第一种情况比较简单,能够直接连接,否则,还是使用SSH代理,具体来说是Remote Port forwarding。

(1)SSH Remote Port forwarding 介绍

本次是要网络B中的虚拟机访问网络A中的服务,此时应在 proxyA 上执行:

ssh-NfR172.31.25.194:12345:10.127.40.251:30086 [email protected]

执行上述命令要求 proxyA 能够以 cloudroot 用户正常登录到 proxyB 上,这个可以通过之前讲到的登录方法来解决。

在执行命令之后,proxyA和proxyB之间会建立一条SSH隧道。

port forwarding现在会建在proxyB上,会在 proxyA 和 proxyB 之间建立 SSH隧道,并在 proxyB 上创建一个 port forwarding,它将监听 172.31.25.194:12345,一旦有请求发来,就会通过 SSH 隧道转发到 proxyA,proxyA 会把请求转发到10.172.40.251:80

通过上面的方式,网络B 内部的 VMB 只要访问172.31.25.194:12345 就可以访问到 DB。

(2)通过代理传输数据

整个路线图和刚才类似,SSH隧道仍然需要在两者之间建立,虚拟机可以直接访问proxyVM将数据回传。

3、总结与演示

1)总结

只需要在VPC内部的proxyVM和proxy之间建一个SSH隧道,访问到VM并装上Agent,Agent再通过SSH隧道将数据传到数据库中,这就是总体的解决方案。

Agent共执行三件事,第一是如何将Agent进行安装,第二是怎样采集,第三是数据如何回传。

2)流程演示

(1)首先新建云上的VPC

(2)新建IP子网

(3)新建带有EIP的VM以作为proxyVM

(4)通过云联壹云平台创建的虚拟机本身就是免密登录

(5)转化为proxy

(6)创建VPC内的普通虚拟机

(7)监控

监控界面分为基础监控和Agent监控,基础监控是通过调用云API拿到的监控数据。

Agent监控是运行在虚拟机上的监控Agent传回来的监控数据。

Agent监控需要手动触发安装。

(8)Agent监控需要用户点击一下安装Agent

(9)安装成功之后数据展示情况如下图所示。

了解详情:开源融合云_云联壹云