Configurazione della telemetria di Servizi multimediali di Azure con .NETConfiguring Azure Media Services telemetry with .NET

Questo articolo descrive i passaggi generali che è possibile eseguire quando si configura la telemetria di servizi multimediali di Azure (AMS) mediante .NET SDK.This article describes general steps that you might take when configuring the Azure Media Services (AMS) telemetry using .NET SDK.

Nota

Per una descrizione dettagliata dei dati di telemetria AMS e come utilizzarla, vedere il Panoramica articolo.For the detailed explanation of what is AMS telemetry and how to consume it, see the overview article.

I dati di telemetria possono essere usati in uno dei modi seguenti:You can consume telemetry data in one of the following ways:

  • Leggere i dati direttamente da Archiviazione tabelle di Azure (ad esempio, tramite il SDK di archiviazione).Read data directly from Azure Table Storage (for example, using the Storage SDK). Per la descrizione delle tabelle di archiviazione di dati di telemetria, vedere il utilizzo delle informazioni di telemetria in questo articolo.For the description of telemetry storage tables, see the Consuming telemetry information in this article.

OppureOr

  • Usare il supporto presente nell'SDK di Servizi multimediali per .NET per la lettura dei dati di archiviazione.Use the support in the Media Services .NET SDK for reading storage data. In questo articolo viene illustrato come attivare la telemetria per l'account di sistema AMS specificato e come eseguire una query di metriche usando Azure Media Services .NET SDK.This article shows how to enable telemetry for the specified AMS account and how to query the metrics using the Azure Media Services .NET SDK.

Configurazione della telemetria per un account di Servizi multimedialiConfiguring telemetry for a Media Services account

Per abilitare la telemetria sono necessari i passaggi seguenti:The following steps are needed to enable telemetry:

  • Ottenere le credenziali dell'account di archiviazione collegato all'account di Servizi multimediali.Get the credentials of the storage account attached to the Media Services account.
  • Creare un endpoint di notifica con EndPointType impostato su AzureTable ed endPointAddress che punta alla tabella di archiviazione.Create a Notification Endpoint with EndPointType set to AzureTable and endPointAddress pointing to the storage table.

      INotificationEndPoint notificationEndPoint = 
                    _context.NotificationEndPoints.Create("monitoring", 
                    NotificationEndPointType.AzureTable,
                    "https://" + _mediaServicesStorageAccountName + ".table.core.windows.net/");
    
  • Creare una monitoraggio impostazione di configurazione per i servizi che si desidera monitorare.Create a monitoring configuration setting for the services you want to monitor. Impostazione di configurazione non più di un monitoraggio è consentita.No more than one monitoring configuration setting is allowed.

      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 telemetriaConsuming telemetry information

Per informazioni sull'utilizzo delle informazioni di telemetria, vedere questo articolo.For information about consuming telemetry information, see this article.

Creare e configurare un progetto di Visual StudioCreate and configure a Visual Studio project

  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.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

  2. Aggiungere il seguente elemento alla sezione appSettings definita nel file app.config:Add the following element to appSettings defined in your app.config file:

EsempioExample

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.The following example shows how to enable telemetry for the specified AMS account and how to query the metrics using the Azure Media Services .NET SDK.

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["AMSAADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["AMSRESTAPIEndpoint"];
        private static readonly string _AMSClientId =
            ConfigurationManager.AppSettings["AMSClientId"];
        private static readonly string _AMSClientSecret =
            ConfigurationManager.AppSettings["AMSClientSecret"];

        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)
        {
            AzureAdTokenCredentials tokenCredentials =
                new AzureAdTokenCredentials(_AADTenantDomain,
                    new AzureAdClientSymmetricKey(_AMSClientId, _AMSClientSecret),
                    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 successiviNext steps

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories: