お久しぶりの投稿です。
Azureの監視方法を策定しておりまして、AzureStorageにあるLogsTableから情報を取得する方法が解ったので取り敢えず備忘。
前提としてAzureSDKがインストールされているVSであることは必須ですよ。
まず、WindowsAzure.SotrageClient.TableSerrviceContextを継承したWADLogsTableContextクラスを作成します。
次に取得したデータを格納するためのEntityクラスを作成します。
public class WADLogEntity : TableServiceEntity { public long EventTickCount { get; set; } public string DeploymentId { get; set; } public string Role { get; set; } public string RoleInstance { get; set; } public int Level { get; set; } public int EventId { get; set; } public int Pid { get; set; } public int Tid { get; set; } public string Message { get; set; } } public class WADLogsTableContext : Microsoft.WindowsAzure.StorageClient.TableServiceContext { public WADLogsTableContext(string baseAddress,StorageCredentials credentials) : base(baseAddress,credentials) { } public IQueryable WADLogsTable { get { return this.CreateQuery("WADLogsTable"); } } }
次に実行するプログラムを作ります。
string accountName = this.txtStrageName.Text; string key = this.txtStorageKey.Text; StorageCredentialsAccountAndKey storageCredentialsAccountAndKey = new StorageCredentialsAccountAndKey(accountName, key); CloudStorageAccount csa = new CloudStorageAccount(storageCredentialsAccountAndKey, true); WADLogsTableContext logsContext = new WADLogsTableContext(csa.TableEndpoint.ToString(),csa.Credentials); //過去7日間分のwarn,error,criticalを取得。 var dt = DateTime.UtcNow.AddDays(-7); //linqで情報取得 var alerts = (from row in logsContext.WADLogsTable where string.Compare(row.PartitionKey, "0" + dt.Ticks.ToString()) && row.Level > 3 select row).ToList().OrderByDescending(a => a.Timestamp); //リストに変換 List list = new List(); list = alerts.ToList();
※コントロール類は適当に作ってください。 後は実行するとAzureStorageExploreみたいにデータが取得できます。 これでログ監視も楽ちん。