亚马逊AWS官方博客

利用 serverless 服务布署非组织且多账户的 Health 事件监控面板

一. 前言

亚马逊云科技始终坚持创新为导向,竭力帮助客户寻找到统一高效的方法并及时分享给客户,希望他们借此获得受益。集中化管理是当今运维实施的基本措施,这里我们分享的一个例子,即是使用 AWS Health API、CloudFormation、EventBridge、Lambda、S3 和 QuickSIght 创建非组织且多账号的 AWS Health 状态监控面板。

目前亚马逊云科技提供对组织内账户 Health Event 的查询,但客户的大多数账户可能是分散且不存在组织关联,特别对于许多亚马逊云科技的合作伙伴来说,需要及时从多个独立子账户搜集 Health Event 信息并快速浏览和处理。但面对众多的独立账户,运维人员就承载着比较大的工作量去了解和分析此类事件。在此博客里,您可以通过利用相关 serverless 服务来实现集中化搜集 Health 状态信息,并通过图形化显示来定制你想要关注的特定分类信息,例如服务的计划性降级、资源的计划性维护等等,利用这些手段分辨出潜在业务影响的事件,并及时通知相应生产部门做好准备来避免业务受损。特别对于亚马逊云科技的大型客户或其合作伙伴,它们的账户众多且管理权限复杂,同时由于每月就会有数百甚至数千条通告信息,集中查看 Health 事件并定制化展示和分类是具有价值的,下面我们就将展示如何利用无服务器服务自动化布署并收集 Health 状态信息,同时定制化适合自己业务需求的监控面板,以此来准确掌控 Health 事件信息(如下是面板示例)。

二. 方案概览

这里是展示了一个在非组织但多账户下实现中心化 Health 状态管理的面板设计应用架构,其中集成了 AWS Health API、CloudFormation、Lambda、Amazon S3、EventBridge、QuickSight 等服务组件:

此方案布署前需要进行一些角色的初步配置,即为了能够具备跨账户获取 Health 内容的权限,需要在子帐户中创建了一个 IAM 角色。然后允许它们被主账户 IAM 角色用 assume role 方式来访问。

三. 前提条件

使用此方案有如下要求:

  • 账户需要在 AWS Support 服务中具有 Business,Enterprise on Ramp 或者 Enterprise 支持计划(Health API 的要求
  • 对于 Master account/Sub-Account 的相应角色允许使用 Assume Role
  • 建议在 Master account 里 Enable QuickSight 企业级版本(版本差别说明

四. 具体实现过程

1)配置子账户的 role

在 sub-account 里创建 CloudFormation stack,以便能允许 master-account 用 assume role 方式来调用 Health API 查询 Health 事件情况。

注:其中的 Template 的参考文件可以从这里获得。

输入 Master Account ID:

如上请保持 role name 不变,并输入 master-account 的账户 ID,然后点 Next,直到 stack 创建完成。

2)用 CloudFormation 布署 lambda 和 EventB­ridge 服务

a)先在 master account 里创建执行 Lambda 的 role ex. “executionforeventlambda” (其应包含 Assume Role、lambda basic execution、SES 和 S3 的 permission 的权限)及存放事件数据的 S3 存储桶。

b)在 Master 账户里创建 CloudFormation stack,它会布署定期搜集各子账户的 health 事件信息。

注:其中的 Template 的参考文件可以从这里获得。
模板里默认每天早上 10 点触发 health 信息收集,此外默认 SES region 为‘us-east-1’,这些都可以在布署后的 lambda 里作变更。


Stack 中对应的参数说明如下:

Bucket Name:存取所有文件 S3 存储桶名

Event File Name:存取搜集 Event 事件的文件名

Execution Role Name:执行 Lambda 的角色名

ID File:存取所有子账户 ID 的文件名(搜集事件信息的对象账户)

SES SEND FROM:SES 发送地址

SES SEND TO:SES 接收地址

Switch Role Name:切换到子账户的角色名

其它参数及选项保持不变,然后点 Next,直到 stack 创建完成。

3)QuickSight 的初始设定

a)在 Amazon QuickSight console 中创建 QuickSight 账号,选择 Enterprise,然后选择 Continue

b)在 QuickSight account name 中输入 Health-Dashboard

c)在 Notification email address 中输入可接受 QuickSight 通知消息的邮箱地址

d)选择 Finish 来完成 QuickSight 注册

e)您现在可以开始设置允许 QuickSight 来访问储存在 S3 中的数据文件

f)在 QuickSight Console 的右上角,点击 User 图标,选择 Manage QuickSight

g)在左边的导航栏选在 Security & Permissions,然后在右边 QuickSight access to AWS services 下选择 Manage

h)在 Amazon S3 下选择 Select S3 buckets

i)选中您存有 Health Event 数据文件的 S3 桶,点击 Finish,再点击 Save。现在 QuickSight 就可以访问您存放在 S3 桶中的 Health Event 数据

4)利用 QuickSight 创建 Health 事件面板

a)在 QuickSight Console 左边的导航栏中选择 Datasets,然后在右上角选择 New dataset

b)选择 S3,然后输入您自定义的 Data source name,并上传 Manifest file 或输入存储 Manifest 文件的 S3 Object URL


c)Manifest file 中内容如下,并请将括弧中 URIs 用存储在 S3 桶中的 Health Event 文件的 Object URL 替换

{
    "fileLocations": [
        {
            "URIs": [
                "<https://example.s3.amazonaws.com/example>"
            ]
        }
    ],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ","
    }
}


d)点击 Connect 后生成新的 dataset,并点击进入 dataset 的 Refresh 页来设置刷新频率

e)点击右上角 Add New Schedule,设定刷新频率及开始时间,点击 save 生效

f)回到 dataset 的 Summary 页,点击右上角 Use In Analysis

g)选择 Interactive sheet,点击 Create

h)现在开始创建可视化图表,首先选择左边的 Visualize,然后选择页面中的 Fields list 下选择 Account-ID,在 Visual types 中选择饼状图,我们就成功创建了显示每个 Account-ID 下的健康事件占比的饼状图

i)接下来在新创建的饼状图的右上角的选项中选择 Duplicate visual,将此图复制

j)选中复制的图表,点击页面上方的 Field wells,点击下拉选项中的 Group/Color 中的 Account-ID,在下拉窗口中,将 Account-ID 替换为 Status,这样我们就成功创建了显示不同事件状态(Closed,Open,Upcoming)下的健康事件占比的饼状图

k)我们用上述同样的方法再创建显示不同 Region 和 Service 下的健康事件占比的饼状图

l)接着我们再复制出一个新的 Account-ID 饼状图,然后在左侧的 Visual Types 中选择第一个闪电状的 AutoGraph,接着我们依次在 Fields List 中点击 Region,Service,Status,Category,Scope,Event-Type,Event-ARN,Updated-Time,Start-Time,End-Time(可根据需求增减),这样我们就创建了一张包含多种维度的健康事件表

m)完成图表创建后,为了进一步便于查看及管理,我们接下来添加一些筛选控制,来帮助我们根据条件筛选出需要关注的事件。首先选中刚刚创建的 Account-ID 饼状图,然后点击左侧的 Filter,然后在 Filters 中点击 ADD Filter,在下拉选项中选择 Account-ID

n)在新加的 filter 右上角选项中,选择 Pin to top

o)点击 Account-ID filter,在 Applied to 中选择 All visuals of this dataset,来将此过滤器应用于所有图表

p)用上述同样的步骤,再创建 status 及 Service, Region,Category 过滤器

q)现在我们完成了所有过滤控制器的创建,点击图表上方的 Controls,可以在下拉窗口中看到创建的 5 个控制器。用户可以通过 Account-ID,Status,Service,Category,Region 这五个控制器,通过精细化筛选,查看指定条件的健康事件,比如可以查看 Account-ID aaaa 下,Region bbbb 中的 Status 为 open,service 为 EC2 的健康事件


r)点击右上角的分享选项,可将此分析分享给指定的用户,也可将此分析发布为 Dashboard 并分享给它人查询(有关 Dashboard 的分享,请参考在线文档 — 在亚马逊共享和订阅数据 QuickSight

五. 总结

客户现在越来越多地关注到账户 Health 事件,而对于拥有多账户的客户,能够快速且及时管理并分析成百上千 Health 事件也由为重要,它是您面临的一个挑战吗?正如以上内容描述,我们利用自动化运维的手段,为您轻松构建可视化的面板,让您能够迅速了解事件的影响、及时做出合理的响应和处理。如果您觉得会从中获得价值并可以打造自己定制的监控面板,请参考以上的方案来尝试看是否能够实现。我们也会通过更多类似的案例分享给用户更多的经验和方法。

更多内容

更多有关 AWS Health SDK 及 Lambda 实现相关内容,请大家参考 AWS SDK,QuickSight 和 Lambda 官方文档和相关博客:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/health/client/describe_events.html

https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents.html

https://docs.aws.amazon.com/zh_cn/quicksight/latest/user/example-analysis.html

https://docs.aws.amazon.com/zh_cn/quicksight/latest/user/refreshing-data.html

https://aws.amazon.com/blogs/mt/use-aws-lambda-and-amazon-quicksight-to-build-a-dashboard-for-aws-health-events-in-organizational-view/

本篇作者

Harris Han

AWS 技术客户经理,负责企业级客户的架构和成本的优化、技术支持与服务等工作,同时致力于亚马逊云科技在国内和全球的应用及企业级服务的推广,并在产品部署、网络安全,桌面云,服务器虚拟化,企业运维管理等领域拥有丰富的设计与实践经验。

Boyun Deng

AWS 技术客户经理,负责企业级客户的架构和成本优化、技术支持等工作。