Programmässig åtkomst
Du kan komma åt telemetridata för meddelandehubbar programmässigt, vilket motsvarar Microsoft Azure Service Bus mått (med hjälp av REST-identifierarna i föregående tabeller för att få åtkomst till respektive mått).
Steg 1: Skapa ett certifikat
Skapa först ett certifikat för att få åtkomst till dina Azure-prenumerationsresurser. Gör följande i Windows:
Öppna kommandotolken Visual Studio administratör och skriv följande kommando:
makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
Kör Certmgr.msc, klicka på Personligt på vänster sida, högerklicka sedan på certifikatet du skapade och klicka på Alla aktiviteter och sedan exportera.
Följ guiden och välj alternativet att inte exportera den privata nyckeln. Välj alternativet för att exportera ett CER-certifikat och ange sedan ett filnamn som slutar med
.cer
.Upprepa exportprocessen och välj den här gången att exportera den privata nyckeln i en PFX-fil. Välj sedan ett namn som slutar med
.PFX
.
Steg 2: Upload certifikatet till Azure
Ladda nu upp din . CER-fil för att aktivera certifikatet för att utföra åtgärder på dina Azure-resurser.
I Azure-hanteringsportalen klickar du på Inställningar till vänster och sedan på Hanteringscertifikat.
Klicka på Upload längst ned på skärmen och välj sedan din . CER-fil.
Anteckna ditt prenumerations-ID som du vill hantera.
Anteckning
Prenumerations-ID:t måste vara för den prenumeration som innehåller meddelandehubben.
Steg 3: Få åtkomst till mått via ett REST-gränssnitt
För att kunna läsa telemetri måste du utfärda REST-anrop till en URL som skapats enligt de regler som anges i Microsoft Azure Service Bus mått (med hjälp av måttnamnen som rapporterades i föregående avsnitt).
Följande kod är ett exempel som hämtar antalet lyckade push-meddelanden aggregerade i 5-minutersintervall sedan 2013-08-06T21:30:00Z (kom ihåg att ersätta subscriptionIds, namespace name, notification hub name och pfx cert path med dina värden).
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Syndication;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace telemetry1
{
class Program
{
[DataContract(Name = "properties", Namespace = "https://schemas.microsoft.com/ado/2007/08/dataservices")]
public class MetricValue
{
[DataMember(Name = "Timestamp")]
public DateTime Timestamp { get; set; }
[DataMember(Name = "Min")]
public long Min { get; set; }
[DataMember(Name = "Max")]
public long Max { get; set; }
[DataMember(Name = "Total")]
public long Total { get; set; }
[DataMember(Name = "Average")]
public float Average { get; set; }
}
static void Main(string[] args)
{
string uri = @"https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespaceName}/NotificationHubs/{hubName}/metrics/outgoing.allpns.success/rollups/PT5M/Values?$filter=Timestamp%20gt%20datetime'2014-08-06T21:30:00Z'";
HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(uri);
sendNotificationRequest.Method = "GET";
sendNotificationRequest.ContentType = "application/xml";
sendNotificationRequest.Headers.Add("x-ms-version", "2015-01");
X509Certificate2 certificate = new X509Certificate2(@"{pathToPfxCert}", "{certPassword}");
sendNotificationRequest.ClientCertificates.Add(certificate);
try
{
HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();
using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), new XmlReaderSettings { CloseInput = true }))
{
SyndicationFeed feed = SyndicationFeed.Load<SyndicationFeed>(reader);
foreach (SyndicationItem item in feed.Items)
{
XmlSyndicationContent syndicationContent = item.Content as XmlSyndicationContent;
MetricValue value = syndicationContent.ReadContent<MetricValue>();
Console.WriteLine(value.Total);
}
}
}
catch (WebException exception)
{
string error = new StreamReader(exception.Response.GetResponseStream()).ReadToEnd();
Console.WriteLine(error);
}
}
}
}