一、背景
为了更好的统计云桌面使用率,管理员需要调查本账户内所有云桌面在某个时间范围内的运行时长,此时可通过CloudWatch查询统计数据。
二、从图形界面查询方法
1、生成使用量曲线
进入CloudWatch主界面,点击使用新界面按钮。如下截图。

点击左侧全部指标菜单,再右侧浏览位置,向下滚动屏幕,找到Workspaces
按钮。点击进入。如下截图。

在Workspaces下级菜单选项中,点击按WorkSpace ID
。如下截图。

在搜索框中,输入UserConnected
。这个字段意味着查找所有桌面的用户连接数。输入后按回车键。如下截图。

输入后按回车键,查询到现有的桌面的名字,每个桌面有独一无二的名字。然后选中它。这里可以多选。然后点击右上角的操作
按钮,再点击添加到控制面板
按钮。

在弹出的添加到控制面板按钮上,输入控制面板的名字,点击新建
按钮,然后点击右下角的添加到控制面板
。如下截图。

现在进入控制面板界面,即可看到刚才添加的桌面的使用情况的曲线。

2、如何观察曲线
每个Workspaces被设计为只有一个用户可以登陆,因此有几个用户就有有几个名称ID独一无二的桌面。通过上述控制面板,查看UserConnected
监控参数,数据为1
则表示用户正在使用桌面,数据为0
则表示用户没有使用桌面。由此即可获得用户使用情况。
三、通过CLI查询数据
首先安装部署AWSCLI并配置正确的AKSK。此部分内容请参考有关文档。
然后构建如下命令:
aws cloudwatch get-metric-statistics --namespace "AWS/WorkSpaces" --dimensions Name=WorkspaceId,Value=ws-kjcyqj9c2 --metric-name UserConnected --statistics Maximum --start-time 2022-08-01T00:00:00 --end-time 2022-08-05T00:00:00 --period 300 --output table | sort
请替换如上命令中的桌面ID也就是ws-kjcyqj9c2
为要查询的ID,替换start-time和end-time定义的时间窗口,注意T00是表示格林尼治标准时间,+8小时即可换算为北京时间。
查询结果如下:

由此即可获得本桌面的使用数据,第一列Lable显示为0
则表示这个时间点没有人登陆,显示为1
则表示有用户登陆。
需要注意的是,AWSCLI一次仅能获取1440个数据点,那么对于一个月有720小时,每小时60分钟,数据点事远大于1440的,因此并不足以一次导出一个桌面的整个月的使用量数据。因此一般CLI只用于查询小范围的时间数据。
四、通过Python程序查询数据
通过Python代码调用AWS SDK可以获取CloudWatch数据,其方法与上一步通过AWSCLI获取是一样的,也需要注意一次只能获取1440个数据点。但是Python程序会更方便进行批量处理。以下为获取数据的代码样本。
import boto3
import json
from datetime import datetime
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import sys
instanceid = "ws-kjcyqj9c2"
cloudwatch = boto3.client('cloudwatch')
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, date):
return obj.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, obj)
response = cloudwatch.get_metric_statistics(
Namespace='AWS/WorkSpaces',
MetricName='UserConnected',
Dimensions=[
{
'Name': 'WorkspaceId',
'Value': instanceid
},
],
StartTime = datetime(2022,7,25,0,00,0),
EndTime = datetime(2022,7,26,0,00,0),
Period=300, # Duraiton 300秒
Statistics=[
'Maximum',
],
Unit='Count'
)
print(json.dumps(response, cls=ComplexEncoder, indent=4))
返回示例结果如下。

在此场景下,用户可自行调整Python代码,多批次取回数据,然后根据需要进行时间运算。
全文完。