Лучший способ собрать данные из Amazon Cloudwatch? - PullRequest
0 голосов
/ 21 марта 2019

Я использую AWS Cloudwatch для хранения данных журналов.Данные хранятся в каждом событии в LogStream.Сохраненные данные имеют другой формат Json , и, скажем, мы не можем разбить их на несколько LogStream или LogGroup.На основании этой документации AWS SDK я могу использовать следующие методы (для .Net Core) для сбора данных:

  1. FilterLogEventsAsync (FilterLogEventsRequest, CancellationToken)
  2. GetLogEventsAsync (GetLogEventsRequest, CancellationToken)

Если я использую FilterLogEventAsync , тогда я могу использовать шаблон фильтра и получить определенный формат журналов.Но ответ упорядочен по дате, и мне нужно отобразить данные, упорядоченные по запросу.На самом деле, если я смогу получить все данные из этого метода, это будет совершенством.Но есть ограничение.Оба метода могут передавать 1 МБ только для каждого запроса, и у меня есть большие данные.Итак, мне нужно сделать цикл, чтобы получить все данные.

Если я использую GetLogEventsAsync , тогда я могу получить все события из logStream.Я могу установить данные ответа, упорядоченные по asc или desc.Но мне нужно отфильтровать все события самостоятельно.

Например: у меня есть 10 данных, которые сохранены в logStream

event 1 -> {event.datetime : "18 March 2019", event.message : <jsonFormat1>} -> 256KB 
event 2 -> {event.datetime : "18 March 2019", event.message : <jsonFormat2>} -> 100KB
event 3 -> {event.datetime : "19 March 2019", event.message : <jsonFormat1>} -> 256KB
event 4 -> {event.datetime : "19 March 2019", event.message : <jsonFormat2>} -> 100KB
event 5 -> {event.datetime : "20 March 2019", event.message : <jsonFormat1>} -> 256KB
event 6 -> {event.datetime : "20 March 2019", event.message : <jsonFormat2>} -> 100KB
event 7 -> {event.datetime : "21 March 2019", event.message : <jsonFormat1>} -> 256KB
event 8 -> {event.datetime : "21 March 2019", event.message : <jsonFormat2>} -> 100KB
event 9 -> {event.datetime : "21 March 2019", event.message : <jsonFormat1>} -> 256KB
event 10 -> {event.datetime : "21 March 2019", event.message : <jsonFormat2>} -> 100KB

На основании данных выше, если я хочу получить данные с помощью jsonFormat1 use FilterLogEventAsync .Я могу использовать filterpattern, чтобы получить jsonFormat1 .Но я могу получить только 4 события (1,3,5,7), и у меня есть следующий токен.Итак, мне нужно сделать цикл метода со следующим данным токеном.После получения всех данных я могу заказать их по деск.

Если я хочу получить данные с помощью jsonFormat1 , используйте GetLogEventsAsync .Мне нужно сделать цикл метода со следующим данным токеном, то есть я получу все события (10,9,8,7,6,5,4,3,2,1).Затем мне нужно отфильтровать данные с помощью jsonFormat1 самостоятельно.К счастью, по умолчанию данные ответов уже упорядочены по desc.

Данные десериализуются в объект FirstLogs .

Public static class FirstLogs {

  public string BranchId { get; set; }

  public string BranchAddress { get; set; }

  public string BranchName { get; set; }

  public List<Item> Items { get; set; }

}

Public static class Item {

  public string ItemId { get; set; }

  public string ItemName { get; set; }

  public string TotalItems { get; set; }

}

Если я использую FilterLogEventAsync , я могу добавить BranchId , BranchName или BranchAddress в filterpattern .Итак, мне не нужно фильтровать это снова.Но мне нужно собрать все данные, затем я могу заказать их по desc.

Если я использую GetLogEventsAsync , я могу использовать Limit из запроса, потому что данные ответа уже упорядочены по desc.Итак, это значит, что мне не нужно получать все данные.Но мне нужно отфильтровать BranchId , BranchName или BranchAddress .

Итак, я думаю, для небольших данных, FilterLogEventAsync лучше.Но для больших данных я не знаю, какой из них лучше.Пожалуйста, дайте мне несколько советов.

Какой метод лучше?

или

Совет по другим методам

...