汇总新旧事件的统计数据

我们希望将CDN日志提供给Graphite,并在其中find汇总数字(不同HTTP状态代码的比率,平均响应大小,平均caching命中率等)

但是,日志只会偶尔上传到我们,甚至有时甚至出现故障 – 有时候,上午的日志可以在晚上上传,几个小时后,上传和处理日志。 而且,由于CDN(显然)有多个服务器和数据中心,不同的日志可以覆盖重叠的时间段。

这意味着,任何聚合器需要保持对所有早期统计信息的访问,以便能够在处理新日志时增加聚合。

什么 – 如果有的话 – 可以做到这一点? 我该如何configurationlogstash来进入呢? 谢谢!

如你所知,这是一个复杂的问题。 你在你的问题上标记了Logstash,所以我会假设你有这个问题。

摄取日志是Logstash所做的。 它有一个file {}input插件只是为了:

 input { file { path => [ '/opt/export/cdn_logs/*.csv' tags => [ 'cdnlogs' ] } } 

还有一个csv {}filter,可以轻松摄取CSV数据。

 filter { if 'cdnlogs' in [tags] { csv { source => "message" columns => [ 'cdndate', 'host_server', [...] 'response_time' ] } } } 

如果你没有CSV数据,也许这些线条是相当正常的Apache格式,都不会丢失。 你可能需要花时间与grok。 这是它自己的东西。

datesorting不是一个问题,只要你注意保留你的时间戳,不要使用明显不能保存它们的statsd 。 如果您还没有这样做,Logstash可以在日志文件中获取date,并将其作为事件的date/时间戳记。

 filter { date { match => [ "cdndate", "ISO8601" ] } } 

这将获取日志的date/时间戳作为事件的时间戳。 很酷,现在把它变成有用的东西。

Logstash的股票数据存储是elasticsearch,Elastic(公司)正在忙于将时间序列数据存储与InfluxDB或OpenTSDB这样的专用工具进行比较。 虽然以我的经验来看,这可能是专门制造的更好。 所有这些都可以,假设你input正确,按正确的顺序存储乱序事件,以便以后的查询可以同化新的信息。

来自Logstash的graphite {}输出将保留时间戳,这允许您使用石墨作为您的后备存储。

influxdb {}opentsdb {}输出插件存在,将您的数据转换为真正的时间序列数据库。

从那里,应该在查询时间内完成近期数据(从您的解释开始几天)的汇总/汇总。 像grafana这样的工具可以面对这些数据存储的几个,使显示更容易。 一旦经过日志到达风险区域,就可以运行更高版本的ETL过程,根据完整的数据集生成数据库内聚合/汇总。 然后根据需要清除完整详细的日志。

总之,方法:

  1. 使用Logstash接收文件。
  2. 利用过滤从CDN日志文件中提取字段。
  3. 使用date {}filter将日志的时间戳记拉到事件的时间戳中。
  4. 将数据导出(弹性,石墨或其他时间序列数据库)
  5. 显示工具使用实时聚合查询向消费者显示数据,至less对于近期数据。
  6. 经过一段时间(可能需要几天),脚本或其他自动化过程会生成聚合并将其input到数据存储中。
  7. 经过更多时间后,全分辨率数据将被清除,只剩下汇总的数据。