お久しぶりの投稿です。
Azureの監視方法を策定しておりまして、AzureStorageにあるLogsTableから情報を取得する方法が解ったので取り敢えず備忘。
前提としてAzureSDKがインストールされているVSであることは必須ですよ。
まず、WindowsAzure.SotrageClient.TableSerrviceContextを継承したWADLogsTableContextクラスを作成します。
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");
}
}
}
次に取得したデータを格納するためのEntityクラスを作成します。
次に実行するプログラムを作ります。
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みたいにデータが取得できます。
これでログ監視も楽ちん。
コメント