在上一篇文章中,我们使用Grafana从SQL Server的表中取数,然后通过Dashboard实现了对Lync/Skype服务器的会议质量的监控。那么在本篇文章中,我们将继续使用Grafana来实现对Lync/Skype的功能状态进行监控。
如何使用Grafana监控Lync/Skype服务器的功能状态
Skype服务器的功能状态数来源
Skype服务器的功能状态可以使用自带的Powershell命令来进行测试并返还,主要的功能测试命令如下:
#Presence功能#
Test-CsPresence -TargetFqdn FrontEndPoolFQDN -SubscriberSipAddress "sip:TestUser@contoso.com" -SubscriberCredential $UserCredential -PublisherSipAddress "sip:TestUser@contoso.com" -PublisherCredential $UserCredential | select -ExpandProperty Result
#AV会议功能#
Test-CsAVConference -TargetFqdn FrontEndPoolFQDN -SenderSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn -ReceiverSipAddress sip:TestUser2@contoso.com | select -ExpandProperty Result
#地址簿功能#
Test-CsAddressBookService -TargetFqdn FrontEndPoolFQDN -UserSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn | select -ExpandProperty Result
#A/V边缘功能#
Test-CsAVEdgeConnectivity -TargetFqdn FrontEndPoolFQDN -UserSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn | select -ExpandProperty Result
#IM即时消息功能#
Test-CsIM -TargetFqdn FrontEndPoolFQDN -SenderSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn -ReceiverSipAddress sip:TestUser2@contoso.com | select -ExpandProperty Result
#点对点A/V功能#
Test-CsP2PAV -TargetFqdn FrontEndPoolFQDN -SenderSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn -ReceiverSipAddress sip:TestUser2@contoso.com | select -ExpandProperty Result
#点对点PSTN呼叫功能#
Test-CsPstnPeerToPeerCall -TargetFqdn FrontEndPoolFQDN -SenderSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn -ReceiverSipAddress sip:TestUser2@contoso.com | select -ExpandProperty Result
#用户登陆功能#
Test-CsRegistration -TargetFqdn FrontEndPoolFQDN -UserSipAddress sip:TestUser@contoso.com@bmw-brilliance.cn | select -ExpandProperty Result
获取功能状态数据导入数据库
当我们使用这些命令之后,获取到功能状态数据,即可通过Powershell脚本导入到SQL数据库中,脚本如下:
#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
}
}
Function SQLCommand
{
param
(
[System.Data.SqlClient.SqlConnection]$SQLConnection,
[string]$command
)
$dataset = New-Object System.Data.DataSet
$dataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($command,$SQLConnection)
$dataAdapter.Fill($dataset) | Out-Null
return $dataset.Tables[0]
}
#Test Presence
$User = "domainusername"
$PWord = ConvertTo-SecureString -String "Password" -AsPlainText -Force
$UserCredential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User,$PWord
#$TestPresence = Test-CsPresence -TargetFqdn FrontendPoolFQDN -SubscriberSipAddress "sip:user@contoso.com" -SubscriberCredential $UserCredential -PublisherSipAddress "sip:user@contoso.com" -PublisherCredential $UserCredential | select -ExpandProperty Result
#Test AV Conf
$TestAVConf = Test-CsAVConference -TargetFqdn FrontendPoolFQDN -SenderSipAddress sip:Testuse1@Contoso.com -ReceiverSipAddress sip:Testuse2@Contoso.com | select -ExpandProperty Result
#Test ABS
$TestABS = Test-CsAddressBookService -TargetFqdn FrontendPoolFQDN -UserSipAddress sip:Testuse1@Contoso.com | select -ExpandProperty Result
#Test AV Edge
$TestAVEdge = Test-CsAVEdgeConnectivity -TargetFqdn FrontendPoolFQDN -UserSipAddress sip:Testuse1@Contoso.com | select -ExpandProperty Result
#Test IM
$TestIM = Test-CsIM -TargetFqdn FrontendPoolFQDN -SenderSipAddress sip:Testuse1@Contoso.com -ReceiverSipAddress sip:Testuse2@Contoso.com | select -ExpandProperty Result
#Test p2p AV
$TestP2PAV = Test-CsP2PAV -TargetFqdn FrontendPoolFQDN -SenderSipAddress sip:Testuse1@Contoso.com -ReceiverSipAddress sip:Testuse2@Contoso.com | select -ExpandProperty Result
#Test PSTN P2P
$TestPstnP2P = Test-CsPstnPeerToPeerCall -TargetFqdn FrontendPoolFQDN -SenderSipAddress sip:Testuse1@Contoso.com -ReceiverSipAddress sip:Testuse2@Contoso.com | select -ExpandProperty Result
#Test Registration
#$TestRegistration = Test-CsRegistration -TargetFqdn FrontendPoolFQDN -UserSipAddress sip:Testuse1@Contoso.com | select -ExpandProperty Result
$array = @{
"Presence" = "$TestPresence";
"AVConf" = "$TestAVConf";
"ABS" = "$TestABS";
"AVEdge" = "$TestAVEdge";
"IM" = "$TestIM";
"P2PAV" = "$TestP2PAV";
"PstnP2P" = "$TestPstnP2P";
"Registration" = "$TestRegistration"
}
$converttime = (get-date).AddHours(-8) | Get-Date -format "yyyy-MM-dd HH:mm:ss"
$Server = 'DBServer'
$DBName = 'DBName'
$userName = "Username"
$Cred = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString $EncryptedPassword)))
$conn = SQLConnectionSQL -server $Server -database $DBName -uid $userName -pwd $Cred
$num = 10
foreach($i in $array.Keys){
#$num += 1
$FunctionName = $i
$Result = $i+": "+ $array[$i]
$cmd = "INSERT INTO Skype_FunctionCheck VALUES ('$converttime','$num','$Result')"
SQLCommand -SQLConnection $conn -command $cmd
}
导入完成后,我们看到的示例数据如下,其中包括了Skype服务器的功能状态数据:
创建自动化任务计划(Task Schedule)
之后我们即可创建一个任务计划,以调用前文中的脚本,将数据导入到SQL表中。由于任务计划在此系列前面的文章中已经有所展示,将不在此文中赘述。
在Grafana中创建Dashboard
我们导航到Grafana Dashboard界面,之后点击左侧的➕:
在弹出的New Panel界面,选择Add Query:
我们在Query的配置界面,选择之前添加的对应的SQL数据源,之后输入SQL查询语句,然后选择时序(Time series)格式:
在Visualization界面,我们选择Graph,并进行如下配置:
在General界面,为Dashboard命名,之后保存:
Dashboard最终效果展示
最终我们得到了如下展示Skype功能状态的Dashboard,效果如下:
本章总结
在此篇文章中,我们了解了:
- 如何获取Skype功能状态数据
- 如何将数据导入到SQL Server表
- 如何通过Grafana展示实时状态
此系列的下一章,也将是我们系列文章的最后一篇,我们将继续使用Grafana来展示Skype服务器端的报错TOP 10以及用户TOP的监控数据。
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com