速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

华为云 AOM 立体运维系列 -- 云上 CMDB 设计与应用全景可视化运维

  • 2020-03-30
  • 本文字数:3456 字

    阅读完需:约 11 分钟

华为云AOM立体运维系列--云上CMDB设计与应用全景可视化运维

上一期分享了华为云 AOM 立体运维的架构与设计目标,接下来从各子模块的角度,持续的解析下立体运维的特性。本篇从应用运维可视化的出发,分享一下 AOM 的服务自动发现功能以及基于云应用特点的 CMDB 的设计思想。

一、立体运维可视化之应用全景视图

通常情况下,企业在云上可以部署多个应用,站在运维管理员的视角,需要能够快速判断整体资源的运行情况,基于这个诉求,AOM 推出了一个涵盖了企业全部应用资源运行状态的分层全景视图,我们称为应用全景图。在应用全景中,您可以选中任意一段时间来查看历史资源的快照及最新资源的运行状态。通过双击任意一个资源标识,可以快速查看关联资源状态及各种指标,这个场景对于快速分析故障影响的资源范围非常有用,可以快速缩短定位时间。


如下为应用全景的截图,可以看到界面上分层展示了资源的列表及蜂巢图表示的资源运行状态。



通过双击异常节点,快速关联出受影响的资源,如下所示,通过双击异常服务,关联出当前异常涉及到的实例异常,但实例所在主机并无异常,因此可以进一步通过实例的指标来进行分析



通过单击实例节点上的详情图标(如下)



打开资源指标详情界面,查看实例的各类指标是否正常,这里发现指标已经没有了,因此可以跳转到这个实例的详细监控界面去查看对应的日志及告警和阈值等信息。另外在这个界面,可以将用户常用的指标创建为一个视图模板保存起来以便下次分析,还可以直接加入到仪表盘中进行日常运维。



实例监控详情界面示意,可以同时查看实例的告警,日志及指标数据:



以上应用全景图将用户的云应用分为了应用、服务、实例、主机及云服务五层,这五层称为 AOM 的业务模型,通过将用户的容器实例或者 VM 进程按逻辑分组,分别对应到这五层中去运维。


因为应用全景中有大量的资源,如果不能自动将应用发现并匹配到对应的业务模型中去,对用户使用来说这个将是巨大的障碍。所以在这个功能的背后,有两个问题需要解决:


1)服务自动发现


2)存量资源(CMDB)管理及模型匹配

二、为什么需要服务自动发现

容器技术正在快速改变着公司和用户创建,发布,运行分布式应用的方式。容器技术改变了开发者的能力,对于公司来说,投入产出比大大提高。华为提供的云容器引擎服务(CCE)正越来越快的向各种领域提供支持,如游戏、视频,电商及汽车等领域,已经大规模的应用容器技术。但是,基于容器技术(docker)支持的服务通常监控起来更加复杂,首先容器比传统的虚拟机应用相比,相同配置主机可以运行更多容器,其次对于管理容器的 Kubernetes,Mesos 和 ECS 等编排系统,用户只需要按规则部署,甚至可能不知道容器在任何给定时刻的运行位置(参考下图中所示的副本管理机制),因此当容器出现问题时,如果不能获取容器当时的快照,对于问题分析或者定位都造成一定程度的困难。这种场景下,传统的手动监控配置很难满足需求。



一个 Kubernetes 按副本数管理容器的示例


另外,当我们构建面向容器监控的服务发现能力时,虚拟机上的普通服务也应当被考虑到,需要支持用户按同样的业务模型去运维应用,基于以上背景,我们设计了服务自动发现的功能。

三、服务自动发现的功能设计

服务发现的功能被设计为一个运行于采集器之中的插件,通过执行服务端下发的规则进行动态的扫描,以匹配哪些容器或者进程满足被监控的条件,部署示意图如下:



要动态执行服务发现规则,首先要解决的就是规则下发问题。采集器不能一直请求服务端来获取最新规则,而是以如下方式去获取。采集器会以管理员权限运行,在与服务端保持心跳的过程中,通过服务端返回的状态码来判断是否需要更新插件或者某些配置,如果发现有服务端有新的服务发现规则,就会在心跳返回后,再发起一次请求来获取当前主机需要执行的最新的服务发现规则列表。


下发通道打通后,接下来通过对服务发现规则进行抽象建模,设计规则本身的模型。见下图:


服务发现规则由发现规则与命名规则两部分组成,分别完成不同阶段的不同功能。



规则被定义后,接着分析规则的执行流程



通过以上分析,我们抽象出的服务发现规则的模型如下(JSON 格式):


一个完整的服务发现规则,包括应用类型的定义,进程发现规则的定义,进程属性的抽取,命名规则的定义。



完成以上模型设计后,针对服务自动发现还要解决以下问题:


  1. 0 配置发现容器应用

  2. 通过插件监控 docker 的 unix socket 接口curl --unix-socket /var/run/docker.sock

  3. 来监控是否有容器变更的事件,通过具体的容器详情接口,获取容器编排的属性,如 Kubernetes 属性。

  4. 支持容器的自定义指标及日志采集

  5. 当前仅支持对于 Kubernetes 编排的容器,通过 POD 属性中的 annotation 标签获取自定义指标的采集 Endpoint。


配置方法示例:


annotations:metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"9121","names":[" redis_used_cpu_user "," redis_used_cpu_user_children "]}]'
复制代码


通过 POD 中定义的 logploicy 来获取自定义日志的采集路径


配置方法示例:



3.免配置或少配置支持非容器的普通 VM 进程发现


对于常见语言开发的应用,如 java, go, python 提供默认发现规则,通过运行时容器或者二进制中的版本信息来决定匹配哪种技术栈,然后执行对应的默认发现规则,通过常见的方法如 jar 包名称或者 main 方法名称来命名发现的服务,然后支持别名和改名的操作。也给非容器用户开箱即用的良好体验。


4.支持发现范围配置


对于某些规则来讲,可能不需要在全局生效,用户可以指定在某些主机上去执行,通过发现规则中的 scope 及 hostID 配置,使主机在收到规则时可以检测规则的支持范围,如果不支持则不再执行。


5.支持发现规则优先级管理


配置多条服务发现规则后,可能由于不同规则的匹配规则发生交叉,将影响匹配到的结果,因此对于多条规则的执行顺序,要能通过优先级进行排序,执行流程参考上述的执行流图。通过在规则中增加 priority 来设置优先级。

四、如何使用服务发现功能

AOM 提供了向导式的配置功能,通过 4 步完成服务发现的设置功能。


第一步:如下图所示,首先通过一个预探测的节点来为后续规则提供验证环境



第二步:通过在这个主机上执行定义好的发现规则来发现进程(这一步同时可以关联到进程默认打开的日志文件,用户可以在这里决定是否采集日志文件进行分析)



第三步:通过命名规则来为每一个实例生成一个服务名称,以便发现后在对应的业务模型下去监控用户的进程



第四步:通过设置优先和探测范围来管理这一条规则



基于以上四步即可完成一个规则的配置及最终效果的预览

五、存量资源的管理(CMDB)

服务被发现后,服务的详细信息将被发送到 AOM 的管理面,在上一篇文章的介绍中,AOM 中有一个 INV 的存量服务用于管理这些信息,这个服务也称为 AOM 的 CMDB,这个服务需要实现以下功能:


  • 分离业务模型与存量资源模型

  • 存量模型能表述不同的云服务下的不同云资源

  • 支持对云服务内云资源建立映射关系

  • 支持对跨云服务的资源建立映射关系

  • 支持云资源标签管理(打标签,同步标签,按标签查询)

  • 支持历史资源快照


下面通过几张图描述下 AOM 的 CMDB 是如何支撑这个功能的


1、存量模型与业务模型的概念


首先,我们认为各种应用及不同的编排系统都有其各自的模型(我们称为存量模型),因此在资源的配置 config 里我们提供了一种弹性的 schema,用来描述每个资源的不同的模型,因此,后端的数据库选用了 ES,在 schema 中通过 alias 标记的范围的 kv 字段来实现打标签的功能。


业务模型在第一节已经有所界面,当前在 AOM 中分为五层模型,但是这个模型不是固定不变的,随着业务发展可能出现新增模型的场景,所以在设计中,对于业务模型也要求支持扩展。


下图所示为一个存量模型与业务模型的映射关系。



因此,对于不同资源,我们可以通过设置映射规则来将存量模型与业务模型匹配到一起。


大量的资源的匹配,对于检索来讲会相当复杂,如何能在最快的时间内通过 ES 将各种关联资源检索出来成为下一个要解决的问题,这里我们采用了图数据库的思想,将上述的存量模型按以下规则存储


1)通过两张表分别来存储存量类型,业务类型并编号,再通过一张表来保存映射关系


2)通过将资源视为点,关系视为边,构建一个图数据库模型



3)在边的关系生成时,通过存量模型 ID 与业务模型 ID 分别放置在 Long 的高低位上的设计,来使查询请求能按规则生成出 edgeType 的值,从而直接根据边去找点,快速查询出关联资源。



通过上述几个关键的设计点,我们实现了第一小节您所看到应用全景的视图展示与关联查询。更多的功能也在设计中。


本文转载自 华为云产品与解决方案 公众号。


原文链接:https://mp.weixin.qq.com/s/EcD9oWwXkp6YJGiK-xR3wg


2020-03-30 10:462288

评论

发布
暂无评论
发现更多内容

前后端分离的低代码快速开发框架

树上有只程序猿

前后端分离 低代码开发 JNPF

狂热过后,RPA到底是什么?

金小K

RPA RPA评测 RPAxAI

Golang微服务框架Kratos应用NSQ消息队列

golang nsq Kratos #微服务

IPA文件重签名教程:使用Ipa Guard进行签名和安装到设备的详细步骤

选择住宅ip代理还是数据中心代理?

巨量HTTP

代理IP http代理

使用 Databend 加速 Hive 查询

Databend

LP流动性挖矿defi质押挖矿软件开发,链上挖矿平台搭建

V\TG【ch3nguang】

C++输入流和输出流介绍

梦笔生花

Golang微服务框架Kratos应用RabbitMQ消息队列

golang RabbitMQ Kratos #微服务

PostgreSQL 技术内幕(十)WAL log 模块基本原理

酷克数据HashData

低代码平台:构建应用程序的“银弹”

互联网工科生

软件开发 低代码 企业数字化

华为云,让AI算力入山河

脑极体

云计算

下一个时代的船舵,李彦宏握住AI原生应用

脑极体

AI

杭州悦数加入龙蜥社区,共同探索图数据库的未来

OpenAnolis小助手

数据库 开源 操作系统 龙蜥社区 杭州悦数

华为“轻松打卡全世界”活动提供一站式出境服务,全球酒店预订85折起

最新动态

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?

3DCAT实时渲染

虚拟现实 虚拟仿真 实时云渲染

SwitchResX for Mac(屏幕分辨率修改工具)v4.13.2正式激活版

mac

苹果mac Windows软件 switchresx 屏幕分辨率修改工具

如何出色的进行“自我介绍”?

王磊

Java java面试

TiDB 7.1.0 LTS 特性解读丨关于资源管控 (Resource Control) 应该知道的 6 件事

PingCAP

数据库 TiDB

"开源奥斯卡”认可!天谋科技 IoTDB 企业版荣获 OSCAR 开源尖峰案例开源技术创新(商业产品)奖

Apache IoTDB

Golang微服务框架Kratos应用Kafka消息队列

golang kafka Kratos 消息列队 #微服务

CIIS 2023丨聚焦文档图像处理前沿领域,合合信息AI助力图像处理与内容安全保障

合合技术团队

人工智能 文档 智能 多模态 大模型

Linux 爱好者线下沙龙:LLUG 2023 深圳硬核来袭 | 第三站

OpenAnolis小助手

沙龙 龙蜥社区 开源操作系统 LLUG Linux中国

API网关是如何提升API接口安全管控能力的?

不思jo

安全 API

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

Golang微服务框架Kratos应用RocketMQ消息队列

golang RocketMQ 消息队列 Kratos #微服务

[文本提取]基于Apache Tika的文本内容提取

alexgaoyh

Java nlp tika 文本提取 内容提取

Golang微服务框架Kratos应用MQTT消息队列

golang mqtt Kratos #微服务

Golang微服务框架Kratos应用Pulsar消息队列

golang pulsar Kratos #微服务

Golang微服务框架Kratos应用NATS消息队列

golang 消息队列 Kratos #微服务

华为云AOM立体运维系列--云上CMDB设计与应用全景可视化运维_语言 & 开发_华为云产品与解决方案_InfoQ精选文章