跳过主要内容

自动监测框架中生产能力利用率

·6分钟阅读
大卫·霍瓦斯(David Horvath)

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对象正确。

图1. Slack中的脚本开始消息

图1. Slack中的脚本开始消息

接下来,我们开始一个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
{
如果(($ iID-ne$ null
{
$ req_string=“ https://api.console.nutanix.com/v1/pools/”+$ iID+“/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$ iexternal_id

现在,如果达到阈值,我们可以检查百分比并将消息发送给Slack。

如果(([int](($会议*100/$ result1max_servers-gt$ session_threshold
{
$ the_text=$ acct_name++$ i姓名+“游泳池在``''+[int](($会议*100/$ result1max_servers+````'出版能力的百分比。”
$ body_text= @{
文字=$ the_text
}|convert依
#写入主持人$ body_text
Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text
}

该消息显示如下所示。

图2.松弛警报消息

图2.松弛警报消息

一旦检查了所有游泳池,脚本就会入睡以进行轮询间隔。

开始时-(($ poll_interval*60

当循环完成后,我们将关闭消息发送给Slack,如下所示。

$ the_text=“完成监视”+$ acct_name
$ body_text= @{
文字=$ the_text
}|convert依

Invoke-Restmethod-Uri$ slack_webhook-方法帖子-身体$ body_text

图3.关闭松弛消息

图3.关闭松弛消息

结论

脚本确实是为了进行调试目的而将输出写入外壳的,但如果将这些消息作为计划任务运行,则不会有用。通过修改发送的文本字符串,可以通过搜索Slack的文档来实现更复杂的格式来轻松实现。此外,只要通过PowerShell Works触发它们,就可以使用其他非偏斜通知方法。仅运行24小时的脚本的想法允许自定义监视期以满足企业的需求。例如,也许周一至周五的时间表是合适的,并且在周末少进行监控。在弹性博客(上面链接)中,我演示了如何创建可以通过内置Windows任务调度程序计划的.cmd文件。

作者

大卫·霍瓦斯(David Horvath)
David Horvath是Nutanix框架的高级解决方案建筑师。他已经成为框架团队的一部分已有近五年了,在此之前,他花了20年的时间与美国情报界的各种信息技术项目进行咨询。
©2020-2022 Nutanix,Inc。保留所有权利。Nutanix,Nutanix徽标和所有Nutanix产品,此处提到的功能和服务名称是美国和其他国家的Nutanix,Inc。的注册商标或商标。本文提到的所有其他品牌名称仅用于识别目的,可能是其各自持有人的商标。这篇文章可能包含指向不属于Nutanix.com一部分的外部网站的链接。Nutanix不控制这些站点,并对任何外部站点的内容或准确性不承担所有责任。我们决定链接到外部站点的决定不应被视为对该站点上任何内容的认可。本文中包含的某些信息可能与从第三方来源以及我们自己的内部估计和研究获得的研究,出版物,调查和其他数据有关。尽管我们认为这些第三方研究,出版物,调查和其他数据是在本文之日起可靠的,但它们尚未独立验证,并且我们对任何信息的充分性,公平性,准确性或完整性都没有任何陈述从第三方来源获得。
Baidu