Azure: программно запрашивает WADLogsTable для данных трассировки - PullRequest
6 голосов
/ 15 марта 2012

Я пытаюсь использовать следующий код для получения всех данных трассировки за последний час из Azure:

                StorageCredentialsAccountAndKey storageCredentialsAccountAndKey = new StorageCredentialsAccountAndKey(accountName, key);
                CloudStorageAccount csa = new CloudStorageAccount(storageCredentialsAccountAndKey, true);
                TableServiceContext tableServiceContext = new TableServiceContext(csa.TableEndpoint.ToString(), csa.Credentials);
                var results = tableServiceContext.CreateQuery<TableServiceEntity>("WADLogsTable").Where(
                    x => x.Timestamp > DateTime.UtcNow.AddHours(-1)).ToList();

Однако я обнаружил, что никаких результатов не найдено, когда я знаю, что естьданные в таблице за последний час (я сравниваю выходные данные с менеджером диагностики Azure в Cerebrata).

У меня два вопроса:

  1. Это правильный способ запроса WADLogsTable?Почему я не вижу результатов?
  2. Какой правильный тип должен быть указан в качестве универсального параметра?TableServiceEntity - это базовый класс, который определяет только три столбца.Я хотел бы знать, если есть тип, который представляет сущность WADLogsTable специально.Должен ли я просто создать тип со свойствами, такими же, как имена столбцов?

Ответы [ 2 ]

11 голосов
/ 15 марта 2012

Нет стандартного типа (класса), который представлял бы сущность WADLogs.Используя базовый класс, вы получите только свойства PartionKey, RowKey и Timestamp.Вы должны определить это самостоятельно.Вот пример, который я использую:

public class WadLogEntity
       : Microsoft.WindowsAzure.StorageClient.TableServiceEntity
    {
        public WadLogEntity()
        {
            PartitionKey = "a";
            RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid());
        }

        public string Role { get; set; }
        public string RoleInstance { get; set; }
        public int Level { get; set; }
        public string Message { get; set; }
        public int Pid { get; set; }
        public int Tid { get; set; }
        public int EventId { get; set; }
        public DateTime EventDateTime
        {
            get
            {
                return new DateTime(long.Parse(this.PartitionKey.Substring(1)));
            }
        }
    }

Также, когда я боролся с таблицей WADLogs, мне удалось получить ее, показывающую результаты (за последние 24 часа) с этим кодом:

  var dtThen = DateTime.UtcNow.AddHours(-24);
                var dtNow = DateTime.UtcNow;

                var logs = this._wadLogs.WadLogs.Where(
                    wl => 
                        wl.Level == 2 
                        && String.Compare(wl.PartitionKey,"0" + dtThen.Ticks.ToString()) >=0
                        && String.Compare(wl.PartitionKey, "0" + dtNow.Ticks.ToString()) < 0
                    ).Take(200);

Я заметил, что в ключе раздела есть префикс "0" до подсчета тиков.

0 голосов
/ 04 февраля 2015

Для пользователей самого последнего (2014 г.) клиента хранилища Azure:

http://blogs.msdn.com/b/tilovell/archive/2014/02/11/how-to-view-azure-diagnostics-traces-from-wadlogstable-in-your-local-console-app.aspx

tl; др вы можете использовать отметку времени для фильтрации.

...
var query = table.CreateQuery<GenericTableEntity>()
    .Where(e => e.Timestamp > DateTime.UtcNow.AddMinutes(-120));

Расширяя сущность в связанном примере, вы можете выставить переменные Message и Date:

public class LogEntity : GenericTableEntity 
{
    // Since Timestamp is a DateTimeOffset
    public DateTime LogDate
    {
        get { return Timestamp.UtcDateTime; }
    }

    public string Message
    {
        get { return Properties["Message"].StringValue; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...