写点什么

面向 Amazon CloudWatch 控制面板的 API 和 CloudFormation 支持

  • 2019-11-13
  • 本文字数:3405 字

    阅读完需:约 11 分钟

面向 Amazon CloudWatch 控制面板的 API 和 CloudFormation 支持

我们在几年前发布了 CloudWatch 控制面板。在专为这次发布撰写的文章中,我介绍了如何以交互方式创建控制面板,以便以图形形式显示所选的 CloudWatch 指标。发布之后,我们增加了其他功能,包括全屏模式、深色主题、控制 Y 轴的范围、简化的重命名、持久性存储和新的可视化选项


新 API 和 CLI


虽然控制台支持非常有利于交互式使用,但许多客户要求我们提供对控制面板及其中小部件的编程式创建和操作的支持。这些客户想要动态构建和维护控制面板,从而在创建和销毁相应的 AWS 资源时添加和删除小部件。其他客户则希望在两个或多个 AWS 账户中设置和维护一组一致的控制面板。


我非常高兴地宣布,面向 CloudWatch 控制面板的 API、CLI 和 AWS CloudFormation 支持现已推出,您可以立即开始使用!


我们新增了四个 API 函数 (和等效的 CLI 命令):


[](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListDashboards.html "undefined") / aws cloudwatch list-dashboards – 用于提取账户内所有控制面板的列表,或共享通用前缀的子集。


[](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetDashboard.html "undefined") / aws cloudwatch get-dashboard – 用于提取单个控制面板的详细信息。


[](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutDashboard.html "undefined") / aws cloudwatch put-dashboard – 用于创建新控制面板或更新现有控制面板。


[](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DeleteDashboards.html "undefined") / aws cloudwatch delete-dashboards – 用于删除一个或多个控制面板。


控制面板概念 我将要向您展示如何使用这些函数和命令。在转入正题之前,我应该介绍几个重要的控制面板概念和属性。



全局 – 控制面板是 AWS 账户的一部分,但未与特定 AWS 区域关联。每个账户最多可以包含 500 个控制面板。


命名 – 每个控制面板都有一个在 AWS 账户内唯一的名称。名称最长可达 255 个字符。


网格模式 – 每个控制面板都由网格单元格组成。网格包括 24 个单元格,高度可根据需要调整。控制面板中的每个小部件可位于一组特定的网格坐标上,大小可跨越一个整数的网格单元格。


小部件 (可视化) – 每个小部件可以显示文本或一组 CloudWatch 指标。文本通过 Markdown 指定;指标可以显示为单个值,或以折线图或堆积面积图的形式显示。每个控制面板最多可以包含 100 个小部件。显示指标的小部件还可以与 CloudWatch 警报相关联。控制面板有 JSON 表示形式,现在您可以在控制台中看到并编辑它。只需单击 Action 菜单并选择 View/edit source 即可:



下面是我的控制面板源:



您可以使用此 JSON 作为您自己的应用程序的起点。如您所见,控制面板中每个小部件的 widgets 数组中都有一个条目;每个条目描述一个小部件,从其类型、位置和大小开始。


使用 API 创建控制面板


假设我要在特定区域为我的每个 EC2 实例创建一个含有小部件的控制面板。我会使用 Python 和适用于 Python 的 AWS 软件开发工具包,然后按如下所示开始创建 (请原谅我的代码不够专业):


Python


import boto3import json
cw = boto3.client("cloudwatch")ec2 = boto3.client("ec2")
x, y = [0, 0]width, height = [3, 3]max_width = 12widgets = []
复制代码


接着,我直接对实例进行迭代,以便为每个实例创建 widget 词典,并将其附加在 widgets 数组中:


Python


instances = ec2.describe_instances()for r in instances['Reservations']:    for i in r['Instances']:
widget = {'type' : 'metric', 'x' : x, 'y' : y, 'height' : height, 'width' : width, 'properties': {'view' : 'timeSeries', 'stacked' : False, 'metrics' : [['AWS/EC2', 'NetworkIn', 'InstanceId', i['InstanceId']], ['.', 'NetworkOut', '.', '.'] ], 'period' : 300, 'stat' : 'Average', 'region' : 'us-east-1', 'title' : i['InstanceId'] } }
widgets.append(widget)
复制代码


我更新循环内的位置 (xy),并形成一个网格 (如果我不指定位置,则小部件会从左向右、从上至下进行排列):


Python


x += width        if (x + width > max_width):            x = 0            y += height
复制代码


处理完所有实例后,我创建一个 JSON 版本的小部件数组:


Python


body   = {'widgets' : widgets}body_j = json.dumps(body)
复制代码


接下来,我创建或更新我的控制面板:


Python


cw.put_dashboard(DashboardName = "EC2_Networking",                 DashboardBody = body_j)
复制代码


运行代码后,会获得以下控制面板:



CloudWatch 团队建议,以编程方式创建的控制面板应包括文本小部件 (用于说明控制面板是自动生成的) 以及指向所使用的源代码或 CloudFormation 模板的链接。这样可防止用户在外部对控制面板进行手动更改。如前所述,每个指标小部件还可以与一个 CloudWatch 警报相关联。您可以通过编程方式或使用 CloudFormation 模板来创建警报,如示例 CPU 使用率警报。如果您决定这样做,则警报阈值会显示在小部件中。要详细了解此操作,请阅读 Tara Walker 近期发布的文章 Amazon CloudWatch 发布了控制面板警报功能。更进一步的操作是,我可以使用 CloudWatch Events 和 Lamba 函数来跟踪某些资源的创建与删除,并在发生更改时更新控制面板。要了解如何执行此类操作,请阅读使用 AWS Lambda 让 CloudWatch 控制面板保持最新


使用 CLI 访问控制面板 我还可以通过命令行访问和操作我的控制面板。例如,我可以生成一个简单的列表:


Bash


$ aws cloudwatch list-dashboards --output table----------------------------------------------|               ListDashboards               |+--------------------------------------------+||             DashboardEntries             |||+-----------------+----------------+-------+|||  DashboardName  | LastModified   | Size  |||+-----------------+----------------+-------+|||  Disk-Metrics   |  1496405221.0  |  316  ||||  EC2_Networking |  1498090434.0  |  2830 ||||  Main-Metrics   |  1498085173.0  |  234  |||+-----------------+----------------+-------+|
复制代码


然后,我删除 Disk-Metrics 控制面板:


Bash


$ aws cloudwatch delete-dashboards --dashboard-names Disk-Metrics
复制代码


此外,也可以检索用于定义控制面板的 JSON:



使用 CloudFormation 创建控制面板


控制面板还可以在 CloudFormation 模板中进行指定。下面是一个简单的 YAML 格式的模板 ( DashboardBody 仍以 JSON 指定):


YAML


Resources:  MyDashboard:    Type: "AWS::CloudWatch::Dashboard"    Properties:      DashboardName: SampleDashboard      DashboardBody: '{"widgets":[{"type":"text","x":0,"y":0,"width":6,"height":6,"properties":{"markdown":"Hi there from CloudFormation"}}]}'
复制代码


我将模板放置在一个文件中,然后使用控制台或 CLI 创建堆栈:


Bash


$ aws cloudformation create-stack --stack-name MyDashboard --template-body file://dash.yaml{    "StackId": "arn:aws:cloudformation:us-east-1:xxxxxxxxxxxx:stack/MyDashboard/a2a3fb20-5708-11e7-8ffd-500c21311262"}
复制代码


下面是控制面板:



现已推出


此功能现已推出,您可以立即开始使用。您可以免费创建 3 个控制面板,每个控制面板最多包含 50 项指标;如果创建的控制面板超过 3 个,则每月需支付 3 USD (相关价格信息,请访问 CloudWatch 定价页面)。您每月最多可以免费调用 100 万次新 API 函数;如果超出此范围,则每调用 1000 次需支付 0.01 USD。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/new-api-cloudformation-support-for-amazon-cloudwatch-dashboards/


2019-11-13 08:00840

评论

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

第十周学习总结

饭桶

Canal 组件简介与 vivo 帐号实践

vivo互联网技术

数据库 分布式 数据存储

CAP理论

DL

薇娅携手中国航天基金会与我们的太空 带你“益起探月,共舞九天“

深度剖析,为何C语言在开发领域的地位如此稳固

Philips

Python .net rust C语言 Go 语言

智慧公安大数据可视化分析系统搭建

t13823115967

云算力矿机系统开发,区块链挖矿平台搭建

薇電13242772558

区块链 云算力

解密智联招聘的大前端架构Ada

智联大前端

Serverless 大前端 开发工具

Mysql数据备份与恢复

张攀钦

MySQL

我是如何使计算时间提速25.6倍的

白日梦想家

Python 代码优化 Numpy 代码加速

排查指南 | mPaaS 小程序提示“网络不给力”时该如何排查?

蚂蚁集团移动开发平台 mPaaS

小程序 网络 小程序生态 mPaaS

一线大厂欺负程序员?京东单方面辞退38岁P7员工三次败诉

Java架构师迁哥

shell脚本的使用该熟练起来了,你说呢?(篇一)

良知犹存

Linux shell脚本编写

身为程序员还记得C语言经典算法(附带答案)吗?

ShenDu_Linux

c c++ 算法 编程语言

Linux 笔记(三): 软件安装

Leo

Linux 学习 大前端

Mac下Docker Desktop配置阿里云镜像加速器

jiangling500

Docker 阿里云镜像加速器

接口测试如何在json中引用mock变量

测试人生路

json 接口测试 Mock

不懂源码?来看看阿里P8亲自手码的Spring源码解析整套笔记,高薪offer唾手可得!

比伯

Java 编程 架构 面试 计算机

Kubernetes初体验--用Kubernetes部署一个Web服务

网管

Kubernetes k8s Web 服务 Go 语言

智慧公安二维码定位报警系统开发

t13823115967

架构师训练营第 1 期第 10 周作业

owl

极客大学架构师训练营

架构师训练营第 1 期第 10 周总结

owl

极客大学架构师训练营

第十周课后练习

饭桶

什么是物联网?常见IoT 物联网协议最全讲解

华章IT

物联网 IoT

C++语言中std::array的神奇用法总结,你需要知道!

华为云开发者联盟

容器 数组 函数

《我想进大厂》之Spring夺命连环10问

艾小仙

Java spring 程序员 面试 大厂

「面试必备」最新整理出的腾讯C++后台开发面试笔记

linux大本营

c++ Linux 后台开发 架构师

2020双11,Dubbo3.0 在考拉的超大规模实践

阿里巴巴云原生

阿里云 开源 云原生 dubbo

源码 | 浅谈Webpack原理,以及loader和plugin实现。

梁龙先森

大前端 webpack

架构师训练营第十周作业

文智

极客大学架构师训练营

揭秘11.11监控排障利器 京东高稳定日志服务深度解析

京东科技开发者

云计算 DevOps 日志监控

面向 Amazon CloudWatch 控制面板的 API 和 CloudFormation 支持_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章