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

投稿者: | 2012年9月21日

お久しぶりの投稿です。

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください