我们希望将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过程,根据完整的数据集生成数据库内聚合/汇总。 然后根据需要清除完整详细的日志。
总之,方法:
date {}
filter将日志的时间戳记拉到事件的时间戳中。