Frame®桌面AS-A-Service(DAAS)提供了详细的调度功能,以确保框架帐户能够交付及时的时间生产能力同时最大程度地减少了具有空闲云容量的额外成本。但是,当现有生产池用尽了配置能力时,框架目前没有内置功能来提醒管理员。这可能会导致用户无法连接到会话,因为生产池中的所有VM都在使用时间。该博客将演示如何使用帧管理API监视并发会话的实际数量,并在活动会话数量达到一定百分比的一定百分比的框架生产池的配置能力的一定百分比时,将消息发送到Slack®频道。
解决方案体系结构
对于此解决方案,我选择使用Windows®PowerShell®脚本在框架实用服务器上运行,因为我已经开发了一个弹性管理解决方案这是在框架实用程序服务器上作为计划任务运行的。与该脚本一样,我们需要收集一些值,以便成功运行该帐户上的帧admin API。
$ clnt_id=“ ”
$ clnt_secret=“ ”
$ acct_id=“
当超过阈值时,我们还需要一种发送通知的方法。对于此博客,我选择使用Slack Webhook。Slack Webook允许您“发布”数据,然后将其显示为Slack Channel中的消息。这松懈的文章说明如何设置Slack Webhook。
我开发的脚本将在24小时内定期进行轮询,如果与框架帐户相关的任何生产池中的活动池中的活动数量大于固定百分比,则将警报发送给Slack。您可以下载完整的脚本但是我将分解下面的各个部分(请注意,下面的摘要不能独立运行,而是出于说明目的。
剧本
该脚本具有两个环境变量定义。
$ session_threshold= 50
$ poll_interval= 15
这些变量表明,脚本将每15分钟检查一次以50%容量的活动会话的池,并提醒是否找到。
对于这两个参数,脚本要做的第一件事是获取框架帐户的名称,并向Slack发送一条消息以确认其正在监视框架帐户。
#获取有关帐户ID的名称,并提醒Slack频道开始监视
$ req_string=“ https://api.console.nutanix.com/v1/accounts/”+$ acct_id
$ res=获取Frameapicall-client_id$ clnt_id-client_secret$ clnt_secret-API$ req_string
$ acct_name=$ res。姓名
$ the_text=“开始监视”+$ acct_name+“有一个阈值”+$ session_threshold+“公布能力的百分比。”
$ body_text= @{
文字=$ the_text
}|convert依
Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text
现在,如果达到阈值,我们可以检查百分比并将消息发送给Slack。
#获取有关帐户ID的名称,并提醒Slack频道开始监视
$ req_string=“ https://api.console.nutanix.com/v1/accounts/”+$ acct_id
$ res=获取Frameapicall-client_id$ clnt_id-client_secret$ clnt_secret-API$ req_string
$ acct_name=$ res。姓名
$ the_text=“开始监视”+$ acct_name+“有一个阈值”+$ session_threshold+“公布能力的百分比。”
$ body_text= @{
文字=$ the_text
}|convert依
Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text
我们使用框架管理API调用来获取帐户的“通用名称”以提高可读性,并且由于Slack希望该帖子的正文成为JSON对象正确。
接下来,我们开始一个24小时的循环,并获取框架帐户的生产池列表。
为了(($民意调查= 0;$民意调查-lt[int]((((60*24)/$ poll_interval);$民意调查++)
{
#获取生产池清单
$ req_string=“ https://api.console.nutanix.com/v1/accounts/”+$ acct_id+“/pools?kint =生产”
$ res=获取Frameapicall-client_id$ clnt_id-client_secret$ clnt_secret-API$ req_string
如果使用不同的实例类型,并且每个池都有自己的最大容量,则框架帐户可以具有多个生产池。
foreach(($ i在$ res)
{
如果(($ i。ID-ne$ null)
{
$ req_string=“ https://api.console.nutanix.com/v1/pools/”+$ i。ID+“/Elasticity_settings”
$ result1=获取Frameapicall-client_id$ clnt_id-client_secret$ clnt_secret-API$ req_string
#写入host $ i.external_id“ -------” $ result1.max_servers
$会议= count-ActivePoolSessions-client_id$ clnt_id-client_secret$ clnt_secret-acct_id$ acct_id-ext_pool_id$ i。external_id
现在,如果达到阈值,我们可以检查百分比并将消息发送给Slack。
如果(([int](($会议*100/$ result1。max_servers)-gt$ session_threshold)
{
$ the_text=$ acct_name+“+$ i。姓名+“游泳池在``''+[int](($会议*100/$ result1。max_servers)+````'出版能力的百分比。”
$ body_text= @{
文字=$ the_text
}|convert依
#写入主持人$ body_text
Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text
}
该消息显示如下所示。
一旦检查了所有游泳池,脚本就会入睡以进行轮询间隔。
开始时-秒(($ poll_interval*60)
当循环完成后,我们将关闭消息发送给Slack,如下所示。
$ the_text=“完成监视”+$ acct_name
$ body_text= @{
文字=$ the_text
}|convert依
Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text
结论
脚本确实是为了进行调试目的而将输出写入外壳的,但如果将这些消息作为计划任务运行,则不会有用。通过修改发送的文本字符串,可以通过搜索Slack的文档来实现更复杂的格式来轻松实现。此外,只要通过PowerShell Works触发它们,就可以使用其他非偏斜通知方法。仅运行24小时的脚本的想法允许自定义监视期以满足企业的需求。例如,也许周一至周五的时间表是合适的,并且在周末少进行监控。在弹性博客(上面链接)中,我演示了如何创建可以通过内置Windows任务调度程序计划的.cmd文件。