从Amazon Cloudwatch收集数据的最佳方法?

时间:2019-03-21 07:22:07

标签: c# amazon-web-services asp.net-core-2.1 amazon-cloudwatchlogs

我正在使用AWS Cloudwatch存储日志数据。数据存储在LogStream的每个事件中。存储的数据具有不同的Json格式,可以说我们不能将其拆分为多个LogStream或LogGroup。基于此文档AWS SDK,我可以使用以下方法(针对.Net Core)收集数据:

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

如果我使用 FilterLogEventAsync ,则可以使用过滤器模式并获取特定的日志格式。但是,响应按日期按asc排序,并且我需要显示按desc排序的数据。实际上,如果我可以从这种方法中获取所有数据,那将是一个完美的选择。但是,有一个限制。两种方法只能为每个请求流1MB,并且我有一些大数据。因此,我需要执行循环以获取所有数据。

如果我使用 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 获取数据,请使用 FilterLogEventAsync 。我可以使用filterpattern获取 jsonFormat1 。但是,我只能得到4个事件(1、3、5、7),并且我有下一个标记。因此,我需要使用给定的下一个标记来对方法进行循环。获得所有数据后,我可以按desc排序。

如果我想使用 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 更好。但是,对于大数据,我不知道哪个更好。请给我一些建议。

  

哪种方法更好?

  

对其他方法的建议

0 个答案:

没有答案