Configurazione della telemetria di Servizi multimediali di Azure con .NET

Questo argomento descrive la procedura generale da seguire per la configurazione della telemetria di Servizi multimediali di Azure (AMS) con .NET SDK.

Nota

Per una spiegazione dettagliata della telemetria di Servizi multimediali di Azure e di come usarla, vedere l'argomento relativo alla panoramica.

I dati di telemetria possono essere usati in uno dei modi seguenti:

  • Leggere i dati direttamente da Archiviazione tabelle di Azure tramite, ad esempio, Storage SDK. Per la descrizione delle tabelle di archiviazione di dati di telemetria, vedere Uso delle informazioni di telemetria in questo argomento.

Oppure

  • Usare il supporto presente nell'SDK di Servizi multimediali per .NET per la lettura dei dati di archiviazione. Questo argomento illustra come abilitare la telemetria per gli account di Servizi multimediali di Azure specificati e come eseguire query sulle metriche con l'SDK di Servizi multimediali per .NET.

Configurazione della telemetria per un account di Servizi multimediali

Per abilitare la telemetria sono necessari i passaggi seguenti:

  • Ottenere le credenziali dell'account di archiviazione collegato all'account di Servizi multimediali.
  • Creare un endpoint di notifica con EndPointType impostato su AzureTable ed endPointAddress che punta alla tabella di archiviazione.

      INotificationEndPoint notificationEndPoint = 
                    _context.NotificationEndPoints.Create("monitoring", 
                    NotificationEndPointType.AzureTable,
                    "https://" + _mediaServicesStorageAccountName + ".table.core.windows.net/");
    
  • Creare un'impostazione di configurazione del monitoraggio per i servizi da monitorare. È consentita una sola impostazione di configurazione del monitoraggio.

      IMonitoringConfiguration monitoringConfiguration = _context.MonitoringConfigurations.Create(notificationEndPoint.Id,
          new List<ComponentMonitoringSetting>()
          {
              new ComponentMonitoringSetting(MonitoringComponent.Channel, MonitoringLevel.Normal),
              new ComponentMonitoringSetting(MonitoringComponent.StreamingEndpoint, MonitoringLevel.Normal)
          });
    

Uso delle informazioni di telemetria

Per informazioni sull'uso dei dati di telemetria, vedere questo argomento.

Creare e configurare un progetto di Visual Studio

  1. Configurare l'ambiente di sviluppo e popolare il file app.config con le informazioni di connessione, come descritto in Sviluppo di applicazioni di Servizi multimediali con .NET.

  2. Aggiungere il seguente elemento alla sezione appSettings definita nel file app.config:

Esempio

L'esempio seguente illustra come abilitare la telemetria per l'account di Servizi multimediali di Azure specificato e come eseguire query sulle metriche con l'SDK di Servizi multimediali per .NET.

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using Microsoft.WindowsAzure.MediaServices.Client;

namespace AMSMetrics
{
    class Program
    {
    private static readonly string _AADTenantDomain =
        ConfigurationManager.AppSettings["AADTenantDomain"];
    private static readonly string _RESTAPIEndpoint =
        ConfigurationManager.AppSettings["MediaServiceRESTAPIEndpoint"];

    private static readonly string _mediaServicesStorageAccountName =
        ConfigurationManager.AppSettings["StorageAccountName"];

    // Field for service context.
    private static CloudMediaContext _context = null;

    private static IStreamingEndpoint _streamingEndpoint = null;
    private static IChannel _channel = null;

    static void Main(string[] args)
    {
        var tokenCredentials = new AzureAdTokenCredentials(_AADTenantDomain, AzureEnvironments.AzureCloudEnvironment);
        var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

        _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

        _streamingEndpoint = _context.StreamingEndpoints.FirstOrDefault();
        _channel = _context.Channels.FirstOrDefault();

        var monitoringConfigurations = _context.MonitoringConfigurations;
        IMonitoringConfiguration monitoringConfiguration = null;

        // No more than one monitoring configuration settings is allowed.
        if (monitoringConfigurations.ToArray().Length != 0)
        {
        monitoringConfiguration = _context.MonitoringConfigurations.FirstOrDefault();
        }
        else
        {
        INotificationEndPoint notificationEndPoint =
                  _context.NotificationEndPoints.Create("monitoring",
                  NotificationEndPointType.AzureTable, GetTableEndPoint());

        monitoringConfiguration = _context.MonitoringConfigurations.Create(notificationEndPoint.Id,
            new List<ComponentMonitoringSetting>()
            {
                new ComponentMonitoringSetting(MonitoringComponent.Channel, MonitoringLevel.Normal),
                new ComponentMonitoringSetting(MonitoringComponent.StreamingEndpoint, MonitoringLevel.Normal)

            });
        }

        //Print metrics for a Streaming Endpoint.
        PrintStreamingEndpointMetrics();

        Console.ReadLine();
    }

    private static string GetTableEndPoint()
    {
        return "https://" + _mediaServicesStorageAccountName + ".table.core.windows.net/";
    }

    private static void PrintStreamingEndpointMetrics()
    {
        Console.WriteLine(string.Format("Telemetry for streaming endpoint '{0}'", _streamingEndpoint.Name));

        DateTime timerangeEnd = DateTime.UtcNow;
        DateTime timerangeStart = DateTime.UtcNow.AddHours(-5);

        // Get some streaming endpoint metrics.
        var telemetry = _streamingEndpoint.GetTelemetry();

        var res = telemetry.GetStreamingEndpointRequestLogs(timerangeStart, timerangeEnd);

        Console.Title = "Streaming endpoint metrics:";

        foreach (var log in res)
        {
        Console.WriteLine("AccountId: {0}", log.AccountId);
        Console.WriteLine("BytesSent: {0}", log.BytesSent);
        Console.WriteLine("EndToEndLatency: {0}", log.EndToEndLatency);
        Console.WriteLine("HostName: {0}", log.HostName);
        Console.WriteLine("ObservedTime: {0}", log.ObservedTime);
        Console.WriteLine("PartitionKey: {0}", log.PartitionKey);
        Console.WriteLine("RequestCount: {0}", log.RequestCount);
        Console.WriteLine("ResultCode: {0}", log.ResultCode);
        Console.WriteLine("RowKey: {0}", log.RowKey);
        Console.WriteLine("ServerLatency: {0}", log.ServerLatency);
        Console.WriteLine("StatusCode: {0}", log.StatusCode);
        Console.WriteLine("StreamingEndpointId: {0}", log.StreamingEndpointId);
        Console.WriteLine();
        }

        Console.WriteLine();
    }

    private static void PrintChannelMetrics()
    {
        if (_channel == null)
        {
        Console.WriteLine("There are no channels in this AMS account");
        return;
        }

        Console.WriteLine(string.Format("Telemetry for channel '{0}'", _channel.Name));

        DateTime timerangeEnd = DateTime.UtcNow; 
        DateTime timerangeStart = DateTime.UtcNow.AddHours(-5);

        // Get some channel metrics.
        var telemetry = _channel.GetTelemetry();

        var channelMetrics = telemetry.GetChannelHeartbeats(timerangeStart, timerangeEnd);

        // Print the channel metrics.
        Console.WriteLine("Channel metrics:");

        foreach (var channelHeartbeat in channelMetrics.OrderBy(x => x.ObservedTime))
        {
        Console.WriteLine(
            "    Observed time: {0}, Last timestamp: {1}, Incoming bitrate: {2}",
            channelHeartbeat.ObservedTime,
            channelHeartbeat.LastTimestamp,
            channelHeartbeat.IncomingBitrate);
        }

        Console.WriteLine();
    }
    }
}

Passaggi successivi

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:

Fornire commenti e suggerimenti

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure. È anche possibile passare direttamente a una delle categorie seguenti: