2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

华为云 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:462502

评论

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

微信朋友圈高性能复杂度分析

王大胖

APICloud AVM框架列表组件list-view的使用、flex布局教程

YonBuilder低代码开发平台

前端开发 前端框架 APP开发 APICloud 跨端开发

如何提升本地开发联调效率|阿里巴巴DevOps实践指南

阿里云云效

阿里云 DevOps 云原生 研发 本地开发

DDD[1]·区分系统与业务行为

陆乘风

领域驱动设计 领域驱动设计DDD 领域驱动

营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理

华为云开发者联盟

MySQL 磁盘 数据读写 日志顺序读写 数据文件随机读写

前端培训:分享web前端面试“区别”题

@零度

前端开发 前端面试

做到这4点,才是真正的持续交付| 研发效能提升36计

阿里云云效

阿里云 云原生 持续交付 云平台 研发

react源码解析2.react的设计理念

buchila11

React React Hooks

有了堡垒机,运维工程师们不再是背锅侠啦!

行云管家

使用JMX Exporter监控Rainbond上的Java应用

北京好雨科技有限公司

Swagger通过拦截器(Interceptor)配置默认请求头

为自己带盐

swagger 2月月更

Spring Boot Serverless 实战系列 | 性能调优

Serverless Devs

springboot Java web 2月月更

经验分享 | TDengine在智能船舶领域的实践手册

TDengine

数据库 大数据 tdengine 物联网 时序数据库

恒业资本江一:ToB长期主义不是经营无能的遮羞布

ToB行业头条

使用craco对cra项目进行构建优化

CRMEB

15倍提升 & 40倍存储优化,TDengine在领益智造的实践

TDengine

数据库 大数据 tdengine 开源 物联网

效能时代,数栈专属DevOps跑出加速度

袋鼠云数栈

DevOps 智能运维

高性能系统开发的几个手段

漫游指南

性能优化

java培训:Java堆和栈区分出来的原因

@零度

JAVA开发

Lazada 容器深度优化之旅

阿里巴巴终端技术

容器 优化业务 客户端开发 移动应用开发

Hive往表写入数据的八种方法

编程江湖

云原生时代,软件交付有何不同 | 研发效能提升36计

阿里云云效

阿里云 云原生 持续交付 云平台 研发

国内堡垒机品牌你给推荐哪款?我推荐行云管家!

行云管家

ClickHouse 在UBA系统中的字典编码优化实践

字节跳动数据平台

大数据 字节跳动 Clickhouse 用户行为分析

阿里巴巴移动技术 2021 年终盘点

阿里巴巴终端技术

ios android 客户端 移动应用开发 年终盘点

字节、阿里等大厂的技术如何?看看这些Java程序员的自学笔记

进击的王小二

程序员 面试

构建制品不一致,后续工作都是白费 | 研发效能提升36计

阿里云云效

阿里云 云原生 持续交付 云平台 研发

恒源云(GPUSHARE)_可构建AI的「AI」诞生?

恒源云

神经网络 深度学习

混合云模式下,如何定义一款好的 API 网关

API7.ai 技术团队

流量控制 api 网关 微服务治理 Apache APISIX

带你读AI论文:NDSS2020 UNICORN: Runtime Provenance-Based Detector

华为云开发者联盟

漏洞 apt APT攻击 UNICONRN 数据来源分析

11亿条数据压缩到12GB,TDengine在陕煤矿山项目的落地实践

TDengine

数据库 大数据 tdengine 开源 物联网

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