AzureからWADLogsTableの情報を取得する

スポンサーリンク

お久しぶりの投稿です。

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みたいにデータが取得できます。
これでログ監視も楽ちん。

コメント