在上一篇文章中,我们使用Grafana从SQL Server的表中取数,然后通过Dashboard实现了对Lync/Skype服务器的实时用户/设备连接数的监控。那么在本篇文章中,我们将继续使用Grafana来实现对Lync/Skype服务器的实时会议数据的监控。
如何使用Grafana监控Lync/Skype服务器的实时会议数
Skype服务器的实时会议数来源
Skype服务器的实时会议数主要来源于Skype服务器自带的Powershell命令,我们可以通过以下Powershell命令获取:
- RTCAVMCU 代表当前正在进行的A/V会议
- RTCIMMCU 代表当前正在进行的IM会议
- RTCASMCU 代表当前正在进行的共享会议
Get-CsWindowsService -ComputerName FrontEndServer -Name RTCAVMCU | select Name,ActivityLevel
Get-CsWindowsService -ComputerName FrontEndServer -Name RTCIMMCU | select Name,ActivityLevel
Get-CsWindowsService -ComputerName FrontEndServer -Name RTCASMCU | select Name,ActivityLevel
多台Skype前端服务器的数据获取
当我们有多台Skype前端服务器时,我们可以对上一步骤中的命令进行扩展,生成一个脚本来遍历这些前端服务器,之后将数据存储在array中,代码如下:
$array = @()
foreach($FrontEndServer in (Get-CsPool -Identity FrontEndPoolFQDN).Computers){
$RTCAVUCU = Get-CsWindowsService -ComputerName $FrontEndServer -Name RTCAVMCU | select Name,ActivityLevel
$RTCIMMCU = Get-CsWindowsService -ComputerName $FrontEndServer -Name RTCIMMCU | select Name,ActivityLevel
$RTCASMCU = Get-CsWindowsService -ComputerName $FrontEndServer -Name RTCASMCU | select Name,ActivityLevel
$RTCAVUCUConfCount = $RTCAVUCU.ActivityLevel.Split(',')[0].split('=')[1]
$RTCAVUCUUserCount = $RTCAVUCU.ActivityLevel.Split(',')[1].split('=')[1]
$RTCIMMCUConfCount = $RTCIMMCU.ActivityLevel.Split(',')[0].split('=')[1]
$RTCIMMCUUserCount = $RTCIMMCU.ActivityLevel.Split(',')[1].split('=')[1]
$RTCASMCUConfCount = $RTCASMCU.ActivityLevel.Split(',')[0].split('=')[1]
$RTCASMCUUserCount = $RTCASMCU.ActivityLevel.Split(',')[1].split('=')[1]
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name ServerName -Value $FrontEndServer
$obj | Add-Member -MemberType NoteProperty -Name RTCAVUCUConfCount -Value $RTCAVUCUConfCount
$obj | Add-Member -MemberType NoteProperty -Name RTCAVUCUUserCount -Value $RTCAVUCUUserCount
$obj | Add-Member -MemberType NoteProperty -Name RTCIMMCUConfCount -Value $RTCIMMCUConfCount
$obj | Add-Member -MemberType NoteProperty -Name RTCIMMCUUserCount -Value $RTCIMMCUUserCount
$obj | Add-Member -MemberType NoteProperty -Name RTCASMCUConfCount -Value $RTCASMCUConfCount
$obj | Add-Member -MemberType NoteProperty -Name RTCASMCUUserCount -Value $RTCASMCUUserCount
$array += $obj
}
执行这段代码之后,我们就能得到前端池上的所有实时会议以及用户数,并存储在$array变量中,如下为结果示例:
在SQL Server中为数据存储创建表格
我们获取到上面步骤的数据之后,接下来我们就要到SQL Server中创建一个表格,用于将这些数据导入进去,并为之后Grafana取数来使用,创建表格SQL语句如下:
Create Table Skype_GrafanaDS_ConfCountAndUserCount
(
Date datetime,
Server nvarchar(450),
RTCAVUCUConfCount int,
RTCAVUCUUserCount int,
RTCIMMCUConfCount int,
RTCIMMCUUserCount int,
RTCASMCUConfCount int,
RTCASMCUUserCount int
)
将数据导入至SQL Server表中
SQL表创建完成后,我们可以使用如下Powershell脚本,来将导出的数据导入进去,脚本如下:
#Connect to SQL database
Function SQLConnectionSQL
{
param
(
[string]$server,
[string]$database,
[string]$uid,
[string]$pwd
)
$SQLCon = New-Object System.Data.SqlClient.SqlConnection
$SQLCon.ConnectionString = "Data Source=$server;Initial Catalog=$database;User ID=$uid;pwd=$pwd;"
try
{
$SQLCon.Open()
return $SQLCon
}
catch [exception]
{
Write-Warning ('Connect to database failed with error message:{0}' -f ,$_)
$SQLCon.Dispose()
return $null
}
}
$converttime = (get-date).AddHours(-8) | Get-Date -format "yyyy-MM-dd HH:mm:ss"
$Server = 'SQLServerName'
$DBName = 'DBName'
$userName = "UserName"
$Cred = "Password"
$conn = SQLConnectionSQL -server $Server -database $DBName -uid $userName -pwd $Cred
foreach($i in $array){
$ServerName = $i.ServerName
[int]$RTCAVUCUConfCount = $i.RTCAVUCUConfCount
[int]$RTCAVUCUUserCount = $i.RTCAVUCUUserCount
[int]$RTCIMMCUConfCount = $i.RTCIMMCUConfCount
[int]$RTCIMMCUUserCount = $i.RTCIMMCUUserCount
[int]$RTCASMCUConfCount = $i.RTCASMCUConfCount
[int]$RTCASMCUUserCount = $i.RTCASMCUUserCount
$cmd = "INSERT INTO Skype_GrafanaDS_ConfCountAndUserCount VALUES ('$converttime','$ServerName','$RTCAVUCUConfCount','$RTCAVUCUUserCount','$RTCIMMCUConfCount','$RTCIMMCUUserCount','$RTCASMCUConfCount','$RTCASMCUUserCount')"
SQLCommand -SQLConnection $conn -command $cmd
}
导入完成后,我们看到的示例数据如下,其中包括了每台前端服务器的实时会议和用户数:
创建一个自动化任务计划(Task Schedule)
当我们将以上脚本各个部分整合之后,会形成一个完整的脚本,实现从数据采集到导入数据至SQL Server表中。那么为了实时获取到这些数据,我们需要创建一个任务计划,来设置为每15分钟采集一次数据。
任务计划的主要配置如下:
字段信息示例如下:
- Porgram/script : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- Add Arguments(optional):-File D:\scrpit\GetSkypeConfCount.ps1
在Grafana中添加数据源
当我们做完以上所有工作后,我们实现了:
从Skype前端服务器获取数据->将数据每间隔15分钟,导入至SQL Server表中。那么接下来,我们需要在Grafana中添加数据源。这一部分和之前文章描述一样,不在此赘述。此文假定您已经将SQL Server数据源加入到了Grafana中。
为Grafana配置变量
由于我们之前已经在该系列文章中的第一篇配置了变量,故不在此赘述。
在Grafana中创建Dashboard
变量创建完成后,我们即可到Dashboard界面创建我们的第一个Dashboard。
点击左侧的➕:
在弹出的New Panel界面,选择Add Query:
我们在Query的配置界面,选择之前添加的对应的SQL数据源,之后输入以下SQL查询语句,并选择时序(Time series)格式:
select $__timeEpoch(Date),
RTCAVUCUConfCount,
RTCAVUCUUserCount,
RTCIMMCUConfCount,
RTCIMMCUUserCount,
RTCASMCUConfCount,
RTCASMCUUserCount
from [DB].[dbo].[TableName]
Where Server = '$FrontEndServers'
order by Date ASC
在Visualization界面,我们选择Bar Gauge,并进行如下配置:
在General界面,为Dashboard起一个Title,之后保存:
Dashboard效果展示
最终我们将得到下面的一个Dashboard。同时由于我们设置了变量,可以点击箭头的位置来进行服务器切换以查看不同服务器的实时会议以及用户数:
本章总结
在此篇文章中,我们了解了:
- 如何获取Skype服务器实时会议和用户数
- 如何将数据导入SQL Server表
- 如何通过Grafana展示数据
在此系列文章的下一部分,我们将更加深入的使用Grafana来展示Skype点对点(Peer-to-Peer)的通话质量数据。