Lync QoE (Monitoring und CDR)

Die Überwachung der "Qualität" ist insbesondere beim Einsatz von Audio und Video erforderlich. Wer eine größere VoIP-Umgebung ohne ein entsprechendes Monitoring betreibt, handelt aus meiner Sicht fahrlässig. Mit Lync 2013 ist für das Monitoring kein eigener Lync Server mehr erforderlich sondern die Frontend Server protokollieren die ihnen gesendeten Daten in eine bereitgestellte SQL-Datenbank auf einem vollwertigen SQL-Server

Hinweis:
Dieses "Monitoring" bezieht sich nicht auf die Überwachung der Funktion von Lync und den Diensten oder der Bandbreiten auf dem LAN, sondern der Protokollierung der verschiedenen Kommunikationen durch den Monitoring Server.

Die Erfassung dieser Daten unterliegt strengen Schutzanforderungen, da sie auch für Einzelverbindungsnachweise o.ä. herangezogen werden können. Dies ist aber keine Lync -spezifische Funktion. Auch klassische TK-Anlagen erfassen solche Daten.

Erst mit diesen Daten können sie auch rückwirkend Probleme mit Lync Verbindungen nachverfolgen.

Zusammenhänge

Damit Monitoring funktioniert, müssen mehrere Schritte durchgeführt werden:

  1. SQL-Datenbank
    Auch wenn Lync 2013 Monitoring nun im Frontend integriert ist und damit kein eigener Server mehr erforderlich ist, benötigen Sie dennoch eine SQL-Instanz zur Ablage der CDR und QoE Daten
  2. Topology: Monitoring Konfiguration
    Dann müssen Sie in der Lync 2013 Topologie die Monitoring-Datenbank addieren, an den Pool aktiveren und zuweisen und veröffentlichen. Dabei wird auch die Datenbank auf dem interlegten SQL-Server angelegt.
  3. Deployment: Installation
    Nach Abschluss der CMS-Replication sollten sie auf allen Servern den Deployment-Schritt erneut durchführen. Nur so werden auf den Frontend-Servern die vorab fehlenden Dienste installiert. Denken Sie daran, dass Sie wie beim letzten Update eventuell einen "install-csdatabase" durchführen müssen.
    Bei Lync 2010 müssen Sie den gesonderten Monitoring-Server installieren und auch MSMQ als Transportkomponente einrichten. Bei Lync 2013 entfällt dies.
  4. Lync Clients: Provisioning
    Die nun bereitgestellten Monitoring-Dienste werden den Clients über Lync Provisioning mitgeteilt.
  5. QoE-Report am Ende der Verbindung
    Nachdem eine Verbindung mit einem BYE abgebaut wird, senden die Endpunkte einen QoE-Report als "SIP-SERVICE-Paket" zum Frontend Server
  6. Transfer und Einbuchen in SQL-Datenbank
    Der Frontend Server stellt diese Daten dann über das Lync Storage System in die SQL-Datenbank ein.
  7. Auswerten mit Reports
    Die Daten in der Datenbank können Sie natürlich mit eigenen Abfragen auswerten

Topologie-Builder

Nachdem Sie passenden SQL-Server bereitgestellt haben, können Sie im Topologie-Builder anfangen die QoE-Datenbanken einzutragen und zu konfigurieren. Auf den Eigenschaften des Servers oder Pools wird die Verbindung zum Monitoring-SQL-Store hinterlegt.

Beim "Publish" legt der Topologie-Builder die entsprechenden Datenbanken an. Denken Sie daran, dass ggfls. Updates von Lync auch diese Datenbanken betreffen

Lync CSCP / PowerShell

Weitere QoE-Einstellungen finden Sie dann über das Lync Control Panel oder die Lync PowerShell

Stellen Sie sicher, dass hier global oder pro Pool das Monitoring auch aktiviert ist. Zudem können Sie hier einstellen, wann die Daten "gelöscht" werden. Das spart Platz in der Datenbank aber vor allem auch werden so Daten von Benutzern und Verbindungen besser geschützt. Das geht natürlich auch per PowerShell:

PS C:\> Get-CsQoEConfiguration

Identity                     : Global
ExternalConsumerIssuedCertId :
EnablePurging                : True
KeepQoEDataForDays           : 60
PurgeHourOfDay               : 1
EnableExternalConsumer       : False
ExternalConsumerName         :
ExternalConsumerURL          :
EnableQoE                    : True

Client Provisioning und Logging

Wer auf dem Lync Client das Logging eingeschaltet hat, finde im Verzeichnis C:\Users\%username%\Tracing\ Dateien wie "Communicator-uccapi-2.uccapilog" u.a. die sich mit dem Snooper aber genau so mit Notepad öffnen können. Suchen Sie da einfach mal nach "UccAudioVideoMediaQualityEvent". In der Regel finden Sie hier dann entsprechende Daten. Hier ein paar Beispiele:

  • Fehlerhafte Konfiguration
    Hier gelingt es dem Lync Client nicht die URL für den Monitoring Server in Erfahrung zu bringen.
10/12/2013|09:10:13.390 C9C:E98 INFO  :: Function: CUccServerConfigurationCategory::get_QualityMonitoringServerUri
10/12/2013|09:10:13.390 C9C:E98 ERROR :: HRESULT API failed: 80ee0058 = GetConfigItemString( scisQualityMetricsServerUri, &sbstrQualityMetricsUri)

Aber auch wenn es keinen QoE-Server gibt, finden sich im UCCAPI-Log des Clients durchaus Hinweise auf Ergebnisse der Audio-Bewertung.

Sie werden dann nur leider nicht an die nächste Instanz gemeldet.

Wenn in Lync die Konfiguration korrekt hinterlegt ist, dann kann der Client dies im Log ebenfalls sehen. Wenn sich der Client anmeldet, sendet er SERVICE-Requests an den Server, damit der Server die Provisioning-Informationen an den Client ausliefert. Ein gutes Suchkriterium ist daher "<qosURI>

SIP/2.0 200 OK
From: "Carius, Frank"<sip:frank.carius@msxfaq.de>
To: <sip:frank.carius@msxfaq.de>
CSeq: 1 SUBSCRIBE
Expires: 0
Content-Type: application/vnd-microsoft-roaming-provisioning-v2+xml
Event: vnd-microsoft-provisioning-v2
subscription-state: terminated;expires=0

<provisionGroupList xmlns="http://schemas.microsoft.com/2006/09/sip/provisiongrouplist-notification"> 
  <provisionGroup name="ServerConfiguration" >
    <qosUri>sip:lyncfe.msxfaq.de@msxfaq.de;gruu;opaque=srvr:HomeServer:xJwcSrHKfxxxxxeMdwAA</qosUri>
  </provisionGroup>
</provisionGroupList> 

Client Reporting

Hinweis
Diesen Report des Clients an den Lync Server erhalten Sie nur, wenn auf dem Pool des Benutzers auch QoE-Monitoring aktiv ist. Wenn sie keine QoE-Datenbank haben, dann unterlässt der Lync Client diese Meldung.

Am Ende einer Verbindung senden alle Clients, die QoE unterstützen einen XML-Datensatz an den Lync Server zurück. Sie erkennen diesen Datensatz als "SERVICE"-Anfrage an den Server mit dem "Content-Type: application/vq-rtcpxr+xml". Hier die Ansicht im Snooper:

An der Stelle können sie nicht wirklich viel eingreifen. Besonders auf dem Client gibt es hier nicht vor zu konfigurieren, so dass ich hier einfach mal einen Beispiel-Request bereitstelle. Ausgehend von SIP-Header sehen Sie sehr bald, dass eine XML-Struktur quasi als "Anlage" angefügt wird. Die XML-Datei ist sogar recht einfach lesbar.

SERVICE sip:lyncpool.msxfaq.de@msxfaq.de;gruu;opaque=srvr:HomeServer:LHz94EO-YFGZTGKd5yQURQAA SIP/2.0
Via: SIP/2.0/TLS 10.0.0.101:8080
Max-Forwards: 70
From: <sip:user1@msxfaq.de>;tag=da947a7ad4;epid=49a00b99b2
To: <sip:lyncpool.msxfaq.de@msxfaq.de;gruu;opaque=srvr:HomeServer:LHz94EO-YFGZTGKd5yQURQAA>
Call-ID: 898abb9b974e49de8cbbef39ca04ea58
CSeq: 1 SERVICE
Contact: <sip:user1@msxfaq.de;opaque=user:epid:77r_H3qmZ123gcZMQGNURwAA;gruu> user-Agent: UCCAPI/4.0.7577.314 OC/4.0.7577.314 (Microsoft Lync 2010)
Proxy-Authorization: TLS-DSK qop="auth", realm="SIP Communications Service", opaque="B555416B", 
    targetname="CS-FE02.Msxfaq.de", crand="a7c51f33", cnum="114", response="e60ced9"
Content-Type: application/vq-rtcpxr+xml
Content-Length: 6309
<?xml version="1.0"?>
<VQReportEvent xmlns="ms-rtcp-metrics" xmlns:v2="ms-rtcp-metrics.v2" v2:SchemaVersion="2.0">
  <VQSessionReport SessionId="de10764ad7e543e6ba40447f63f38356;from-tag=4374615b1a;to-tag=dbed30ff38">
    <Endpoint xmlns="ms-rtcp-metrics" 
              xmlns:v2="ms-rtcp-metrics.v2" 
              Name="CLIENT01" 
              v2:OS="Windows 6.1.7601 SP: 1.0 Type: 1(Workstation) Suite: 00000100 Arch: x64 WOW64: True" 
              v2:CPUName="CPU Brand GenuineIntel Family 0x6 Model 0x17 EM64T MaxFunc 0xd MaxFuncExt 0x80000008" 
              v2:CPUNumberOfCores="4" 
              v2:CPUProcessorSpeed="2660"
              v2:VirtualizationFlag="0"/>
      <DialogInfo CallId="de10764ad7e543e6ba40447f63f38356" 
              FromTag="4374615b1a" 
              ToTag="dbed30ff38" 
              Start="2011-12-15T05:51:17.0435Z" 
              End="2011-12-15T05:57:26.0208Z">
        <FromURI>sip:user1@msxfaq.de</FromURI>
        <ToURI>sip:USER1@msxfaq.de;gruu;opaque=app:conf:audio-video:id:N0CYDSZD</ToURI>
        <Caller>true</Caller>
        <LocalContactURI>sip:user1@msxfaq.de;opaque=user:epid:77r_H3qmZ123gcZMQGNURwAA;gruu</LocalContactURI>
        <RemoteContactURI>sip:user1@msxfaq.de;gruu;opaque=app:conf:audio-video:id:N0CYDSZD</RemoteContactURI>
        <LocalUserAgent>UCCAPI/4.0.7577.314 OC/4.0.7577.314 (Microsoft Lync 2010)</LocalUserAgent>
        <RemoteUserAgent>RTCC/4.0.0.0 AV-MCU</RemoteUserAgent>
        <ConfURI>sip:USER1@msxfaq.de;gruu;opaque=app:conf:audio-video:id:N0CYDSZD</ConfURI>
        <v2:MediationServerBypassFlag>false</v2:MediationServerBypassFlag>
        <v2:Separator/>
        <v2:RegisteredInside>true</v2:RegisteredInside>
      </DialogInfo>
      <MediaLine xmlns="ms-rtcp-metrics" xmlns:v2="ms-rtcp-metrics.v2" Label="main-audio">
        <Description>
            <Connectivity>
              <Ice>DIRECT</Ice>
              <IceWarningFlags>0</IceWarningFlags>
            </Connectivity>
            <Security>None</Security>
            <Transport>UDP</Transport>
            <NetworkConnectivityInfo>
              <NetworkConnection>wired</NetworkConnection>
              <VPN>false</VPN>
              <LinkSpeed>100000000</LinkSpeed>
            </NetworkConnectivityInfo>
            <LocalAddr>
              <IPAddr>10.0.0.101</IPAddr>
              <Port>10870</Port>
              <SubnetMask>255.255.0.0</SubnetMask>
              <v2:MACAddr>00-26-B9-86-37-0D</v2:MACAddr>
            </LocalAddr>
            <RemoteAddr>
              <IPAddr>10.0.0.22</IPAddr>
              <Port>53684</Port>
            </RemoteAddr>
            <CaptureDev>
              <Name>Desktop Microphone (Cinema - Microsoft LifeCam.)</Name>
              <Driver>Microsoft: 6.3.6002.0</Driver>
            </CaptureDev>
            <RenderDev>
              <Name>Speakers (SoundMAX Integrated Digital High Definition Audio)</Name>
              <Driver>AnalogDevices: 6.10.2.7250</Driver>
            </RenderDev>
        </Description>
        <InboundStream Id="586196451">
            <Network>
              <Jitter>
                  <InterArrival>0</InterArrival>
                  <InterArrivalMax>1</InterArrivalMax>
              </Jitter>
              <PacketLoss>
                  <LossRate>0</LossRate>
                  <LossRateMax>0</LossRateMax>
              </PacketLoss>
              <BurstGapLoss>
                  <BurstDensity>0</BurstDensity>
                  <BurstDuration>0</BurstDuration>
                  <GapDensity>0</GapDensity>
                  <GapDuration>31040</GapDuration>
              </BurstGapLoss>
              <Utilization>
                  <Packets>1619</Packets>
              </Utilization>
              <v2:RatioConcealedSamplesAvg>0.0006203474</v2:RatioConcealedSamplesAvg>
              <v2:RatioStretchedSamplesAvg>0.001861042</v2:RatioStretchedSamplesAvg>
              <v2:RatioCompressedSamplesAvg>0.001550869</v2:RatioCompressedSamplesAvg>
            </Network>
            <Payload>
              <Audio>
              <PayloadType>9</PayloadType>
              <PayloadDescription>g722</PayloadDescription>
              <SampleRate>16000</SampleRate>
                  <Signal>
                    <SignalLevel>-11</SignalLevel>
                    <NoiseLevel>-63</NoiseLevel>
                    <SpeakerGlitchRate>0</SpeakerGlitchRate>
                    <v2:InitialSignalLevelRMS>0</v2:InitialSignalLevelRMS>
                    <v2:AudioTimestampDriftRateSpk>1.721137E-005</v2:AudioTimestampDriftRateSpk>
                    <v2:AudioTimestampErrorSpkMs>0.007327725</v2:AudioTimestampErrorSpkMs>
                  </Signal>
              </Audio>
            </Payload>
            <QualityEstimates>
              <Audio>
              <RecvListenMOS>3.41</RecvListenMOS>
              <RecvListenMOSMin>3.31</RecvListenMOSMin>
                  <NetworkMOS>
                    <OverallAvg>4.27</OverallAvg>
                    <OverallMin>4.23</OverallMin>
                    <DegradationAvg>0.02</DegradationAvg>
                    <DegradationMax>0.06</DegradationMax>
                    <DegradationJitterAvg>0</DegradationJitterAvg>
                    <DegradationPacketLossAvg>0</DegradationPacketLossAvg>
                  </NetworkMOS>
              </Audio>
            </QualityEstimates>
        </InboundStream>
        <OutboundStream Id="1914550051">
            <Network>
              <Jitter>
                  <InterArrival>2</InterArrival>
                  <InterArrivalMax>4</InterArrivalMax>
              </Jitter>
              <PacketLoss>
                  <LossRate>0</LossRate>
                  <LossRateMax>0</LossRateMax>
              </PacketLoss>
              <Delay>
                  <RoundTrip>1</RoundTrip>
                  <RoundTripMax>4</RoundTripMax>
              </Delay>
              <Utilization>
                  <Packets>7565</Packets>
                  <BandwidthEst>98365120</BandwidthEst>
              </Utilization>
              <v2:RatioConcealedSamplesAvg>0.001583913</v2:RatioConcealedSamplesAvg>
              <v2:RatioStretchedSamplesAvg>0.009503478</v2:RatioStretchedSamplesAvg>
              <v2:RatioCompressedSamplesAvg>0.00750637</v2:RatioCompressedSamplesAvg>
            </Network>
            <Payload>
            <Audio>
              <PayloadType>9</PayloadType>
              <PayloadDescription>g722</PayloadDescription>
              <SampleRate>16000</SampleRate>
              <Signal>
                  <SignalLevel>-14</SignalLevel>
                  <NoiseLevel>-55</NoiseLevel>
                  <MicGlitchRate>0</MicGlitchRate>
                  <v2:AudioTimestampDriftRateMic>1.919068E-005</v2:AudioTimestampDriftRateMic>
                  <v2:AudioTimestampErrorMicMs>0.04675624</v2:AudioTimestampErrorMicMs>
                  <v2:VsEntryCauses>0</v2:VsEntryCauses>
                  <v2:EchoEventCauses>0</v2:EchoEventCauses>
              </Signal>
              <v2:AudioFECUsed>false</v2:AudioFECUsed>
            </Audio>
            </Payload>
            <QualityEstimates>
              <Audio>
                  <SendListenMOS>2.76</SendListenMOS>
                  <SendListenMOSMin>1.13</SendListenMOSMin>
              </Audio>
            </QualityEstimates>
        </OutboundStream>
        <v2:AppliedBandwidthLimit>150800</v2:AppliedBandwidthLimit>
        <v2:AppliedBandwidthSource>StaticMax</v2:AppliedBandwidthSource>
        <v2:LocalClientEvent>
            <v2:NetworkSendQualityEventRatio>0</v2:NetworkSendQualityEventRatio>
            <v2:NetworkReceiveQualityEventRatio>0</v2:NetworkReceiveQualityEventRatio>
            <v2:NetworkDelayEventRatio>0</v2:NetworkDelayEventRatio>
            <v2:NetworkBandwidthLowEventRatio>0</v2:NetworkBandwidthLowEventRatio>
            <v2:CPUInsufficientEventRatio>0</v2:CPUInsufficientEventRatio>
            <v2:DeviceHalfDuplexAECEventRatio>0</v2:DeviceHalfDuplexAECEventRatio>
            <v2:DeviceRenderNotFunctioningEventRatio>0</v2:DeviceRenderNotFunctioningEventRatio>
            <v2:DeviceCaptureNotFunctioningEventRatio>0</v2:DeviceCaptureNotFunctioningEventRatio>
            <v2:DeviceGlitchesEventRatio>0</v2:DeviceGlitchesEventRatio>
            <v2:DeviceLowSNREventRatio>0</v2:DeviceLowSNREventRatio>
            <v2:DeviceLowSpeechLevelEventRatio>0</v2:DeviceLowSpeechLevelEventRatio>
            <v2:DeviceClippingEventRatio>0</v2:DeviceClippingEventRatio>
            <v2:DeviceEchoEventRatio>0</v2:DeviceEchoEventRatio>
            <v2:DeviceNearEndToEchoRatioEventRatio>0</v2:DeviceNearEndToEchoRatioEventRatio>
            <v2:DeviceMultipleEndpointsEventCount>0</v2:DeviceMultipleEndpointsEventCount>
            <v2:DeviceHowlingEventCount>0</v2:DeviceHowlingEventCount>
        </v2:LocalClientEvent>
      </MediaLine>
  </VQSessionReport>
</VQReportEvent>

Wer diesen Report genau ansieht wird rausfinden, dass es ein Ast einer Audiokonferenz war, die hier berichtet wird.

System-wide Troubleshooting: Lync Call Connectivity
http://content3.catalog.video.msn.com/e2/ds/03bfbee4-8205-49cc-aecb-b3528d767fc8.wmv

Help Desk Troubleshooting: Lync Call Issues
http://content5.catalog.video.msn.com/e2/ds/6da747fe-db85-4284-8fe1-5bfc0a99ca37.wmv

Monitoring and Managing Jitter für VoIP
http://content5.catalog.video.msn.com/e2/ds/cee7449a-eaa5-423a-81db-3cbd96972584.wmv

Andere Clients

Die ganze QoE-Auswertung funktioniert natürlich nur mit entsprechenden Clients. Und hier gibt es durchaus mehr als "nur" den Windows Communicator. Aber beileibe nicht alle Clients erstellen am Ende einen passenden QoE-Report. Diese Reports sind nicht "Standardisiert", sondern eine Besonderheit von Lync. Das soll aber nicht heißen, dass nicht andere Produkte ähnliche Wege können. nur sind diese nicht immer mit Lync kompatibel. Wie wichtig ein QoE-Report ist, müssen Sie selbst bewerten und entsprechend die Endgeräte auswählen.

Beim Einsatz mit MediaBypass wäre es schon interessant die Performance zwischen Endgerät und Gateway/SBC zu erhalten. Allerdings kommt MediaBypass in der Regel sowieso nur innerhalb eines Standorts zustande und hier sollte Bandbreite kein Problem sein. Ein entfernter Client sendet die Daten dann über den Mediation Server, der QoE-Daten liefert. Der Weg vom Mediation Server zum Gateway, SIP-Trunk oder SBC sollte "nahe" und unkritisch sein. Hier wäre es dann zu verschmerzen. Anders sieht es natürlich für Clients "in der Welt" aus, also Lync Client aber auch Telefone verschiedener Hersteller.

Hier der Versuch einer Übersicht, welche Clients QoE-konforme Reports an Lync melden.

Client Typ Lync QoE Bemerkungen

Communicator 2010/2013

Software

Ja

Nein

OCS Communicator

Software

Nein

Nein

Lync A/V MCU

Software

Ja

Nein

Lync Mediation Server

Software

Ja

Nein

Snom

Telefon

Nein

RTCP XR, Syslog

Polycom

Telefon

Nein

 

Audiocodes 420HD

Telefon

Ja

Die Firmware "AUDC-IPPhone-420HD_UC_2.0.11.194.2.6/1.0.0000.0" meldet einen VQReportEvent

Aries

Telefon

Ja

Es hängt wohl von der Firmware ab. "CPE/4.0.7577.4455 OCPhone/4.0.7577.4455 (Microsoft Lync Phone Edition)" meldet QoE Reports

Audiocodes Mediant

Gateway/SBC

Nein

Syslog, Audiocodes QoE Report

  • Configuration->VoIP->Media->Media Quality of experience
  • Configuration->VoIP->SIP Definitions->Advanced Parameters
  • Audiocodes QoS

Sonus

Gateway/SBC

Ja

Ferrari

Gateway/SBC

Nein

 

AnyNode

Gateway/SBC

?

 

ACME

SBC

?

 

<weitere Geräte>

<?>

<?>

weitere Geräte addiere ich gerne.

Lync ist natürlich nicht das alleinige Maß aller Dinge. Es gibt durchaus auch andere Produkte, die z.B. die RTCP-Rückmeldungen auswerten oder eigene Protokollfunktionen nutzen.

Backend

Bei Lync 2013 sammelt der "UDC Agent" auf dem Frontend Server die Daten des Clients ein und leider diese an LySS asynchron an eine AsyncDB weiter, die aus HA-Überlegungen innerhalb des Pools weiter. LySS synchronisiert die Daten dann letztlich in die SQL-Datenbank in die Tabellen QoE und CDR.

Die beiden Datenbanken ergänzen sich, wobei ich hier nun nicht auf die einzelnen Tabellen eingehen möchte. Die LcsCDR-Datenbank hat über 63 Tabellen und über 180 Stored Procedures. Die QoE-Datenbank steht mit etwas über 60 Tabellen und über 140 Stored Procedures nicht viel hintendran. für die Auswertung dieser Reports eignen sich die von Lync mitgelieferten Reports für die SQL-Reportings Services.

SCOM

Die Daten in den Datenbanken können sie natürlich auch anderweitig auswerten. SCOM ist z.B. ein Beispiel, welches regelmäßig die QoE-Reports nutzt, um Grenzwertüberschreitungen zu finden und entsprechend zu melden:

Sie können natürlich auch eigene Reports aus den Daten generieren. Das Datenmodell ist durchaus offengelegt und es gibt auch andere Produkte und Skripte, die auf diese Daten zugreifen:

Microsoft Lync Server 2010: using Monitoring Server Reports
http://www.microsoft.com/en-us/download/details.aspx?id=890

Health Service Script

Passend Dazu habe ich auch noch vom Operation Manager ein Skript gesehen, welches die QoE-Datenbank auswertet und eine XML an SCOM zurück gibt. Im Eventlog findet sich dazu:

Log Name:      Operations Manager
Source:        Health Service Script
Date:          30.09.2015 10:46:28
Event ID:      225
Task Category: None
Level:         Information
Keywords:      Classic
User:          N/A
Computer:      NAWLYNC002.netatwork.de
Description:
DiscoverAlertQoE.ps1 : 

--------------------------------------------------------------------------------
-Script Name:      Skype für Business Server 2015 MP QoE Alert Discovery
-Run as account:   nt authority\network service
-Execution Policy: Unrestricted
--------------------------------------------------------------------------------
Value of Source Id is {3AE1A465-F77A-977F-7B59-17BD03590962}.
Value of ManagedEntity Id is {8264F207-9EDE-5D87-5344-C8F692274562}.
Value of Target Computer is NAWLYNC002.netatwork.de.
+++ SCRIPT PARAMETERS +++
SourceId={3AE1A465-F77A-977F-7B59-17BD03590962}
ManagedEntityId={8264F207-9EDE-5D87-5344-C8F692274562}
ComputerName=NAWLYNC002.netatwork.de
SQLInstance=nawsql003.netatwork.de\nawlync
MirrorSQLInstance=
Default_MinutesToQuery=120
Default_MinCallsAffected=50
Default_MinUsersAffected=2
Default_WarningAlertThresholdPercentage=14
Default_CriticalAlertThresholdPercentage=20
Default_IncludeWIFICalls=false
Default_IncludeVPNCalls=false
Default_IncludeExternalCalls=false
AVConf_WarningAlertThresholdPercentage=-1
AVConf_CriticalAlertThresholdPercentage=-1
AVConf_ExcludeInstances=
MediationServer_WarningAlertThresholdPercentage=-1
MediationServer_CriticalAlertThresholdPercentage=-1
MediationServer_ExcludeInstances=
GatewayMS_WarningAlertThresholdPercentage=-1
GatewayMS_CriticalAlertThresholdPercentage=-1
GatewayMS_ExcludeInstances=
GatewayClient_WarningAlertThresholdPercentage=-1
GatewayClient_CriticalAlertThresholdPercentage=-1
GatewayClient_ExcludeInstances=
InterRegion_WarningAlertThresholdPercentage=-1
InterRegion_CriticalAlertThresholdPercentage=-1
InterRegion_ExcludeInstances=
InterUserSite_WarningAlertThresholdPercentage=-1
InterUserSite_CriticalAlertThresholdPercentage=-1
InterUserSite_ExcludeInstances=
IntraUserSite_WarningAlertThresholdPercentage=-1
IntraUserSite_CriticalAlertThresholdPercentage=-1
IntraUserSite_ExcludeInstances=
Subnet_WarningAlertThresholdPercentage=-1
Subnet_CriticalAlertThresholdPercentage=-1
Subnet_ExcludeInstances=
--- SCRIPT PARAMETERS ---

=============================================================

Successfully initialize discovery data.
AlertSettingsXML=
    <AlertSetting>
        <Settings
            MinCallsAffected="50"
            MinUsersAffected="2"
            IncludeWIFICalls="0"
            IncludeVPNCalls="0"
            IncludeExternalCalls="0"
        />    
        <CategoryThresholds> 
            
            <CategoryThreshold
                 Category="Subnet"
                 CategoryId="5"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="MediationServer"
                 CategoryId="1"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="InterUserSite"
                 CategoryId="7"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="AVConf"
                 CategoryId="2"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="InterRegion"
                 CategoryId="8"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="GatewayClient"
                 CategoryId="4"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="GatewayMS"
                 CategoryId="3"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />
 
            <CategoryThreshold
                 Category="IntraUserSite"
                 CategoryId="6"
                 WarningThreshold="14"
                 CriticalThreshold="20"
            />

        </CategoryThresholds>
        <ExcludeInstances>
            
        </ExcludeInstances>
    </AlertSetting>

MinimumCallVolume=50
SQLInstance=nawsql003.netatwork.de\nawlync
MirrorSQLInstance=
gQueryStartUTCTime =09/30/2015 06:46:12
gQueryEndUTCTime =09/30/2015 08:46:12
Sproc Execution : exec QoeGetScomInstances @AlertSettingsXML='    <AlertSetting>        <Settings            MinCallsAffected="50"            MinUsersAffected="2"            IncludeWIFICalls="0"            IncludeVPNCalls="0"            IncludeExternalCalls="0"        />            <CategoryThresholds>                         <CategoryThreshold                 Category="Subnet"                 CategoryId="5"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="MediationServer"                 CategoryId="1"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="InterUserSite"                 CategoryId="7"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="AVConf"                 CategoryId="2"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="InterRegion"                 CategoryId="8"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="GatewayClient"                 CategoryId="4"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="GatewayMS"                 CategoryId="3"                 WarningThreshold="14"                 CriticalThreshold="20"            />             <CategoryThreshold                 Category="IntraUserSite"                 CategoryId="6"                 WarningThreshold="14"                 CriticalThreshold="20"            />        </CategoryThresholds>        <ExcludeInstances>                    </ExcludeInstances>    </AlertSetting>'
Read Row (CategoryId:3;Name=Healthy Instances)
Discovered (GatewayMS)Healthy Instances
Read Row (CategoryId:4;Name=Healthy Instances)
Discovered (GatewayClient)Healthy Instances
Read Row (CategoryId:5;Name=Healthy Instances)
Discovered (Subnet)Healthy Instances
=============================================================

Finished Discovery für QoE instances

--------------------------------------------------------------------------------

Allerdings habe ich das Skript selbst auf dem Server gar nicht finden können.

Offen

So schön die QoE-Reports von Lync sind, so beschränkt ist doch ihre Einsatzfähigkeit, bedingt durch einige fehlende Funktionen:

  • Nicht Realtime, Nur "Post Call"
    Die QoE-Daten werden am Ende der Verbindung zurück gemeldet. Leider gibt es keine Zwischenberichte etc.
  • Nur Zusammenfassungen
    Hinzu kommt, dass die QoE-Reports auch wirklich nur eine "Endsumme" liefert über den gesamten Call. Gerade bei längeren Gesprächen oder Konferenzen sind kürzere Probleme durchaus stören, aber werden im QoE-Report nicht immer bei der Mittelwertbildung sichtbar.
    Allerdings werden bei Konferenzen ab und wohl auch QoE-Reports während der Konferenz gesendet.
  • Keine Messung bei "Idle"
    Verständlicherweise kann Lync nur QoE-Reports generieren, wenn auch Verbindungen aufgebaut und abgebaut wurden. Da Lync aber nicht im Hintergrund einen RTP-Datenstrom für Meßzwecke aufbaut, enthalten die Reports also nur die Zeiten von aktiven Gesprächen. für die Ausmessung eines Netzwerk bezüglich seiner VoIP-Tauglichkeit ist QoE weniger geeignet.
  • Keine Meldung bei Abbruch der Verbindung
    Wenn ein Client seine Netzwerkverbindung während eines Gesprächs verliert, dann sind die QoE-Daten nur partiell vorhanden. Sicher bemerkt die Gegenstelle an den Ausbleibenden RTCP-Paketen, dann der Gegenüber nicht mehr online ist und baut die Verbindung nach einiger Zeit ab. Aber die andere Seite puffert nicht ihre Daten, bis die Verbindung wird kommt. Der Report ist also nur "halbseitig".

Es bleibt also durchaus noch Potential.

Weitere Links