我尝试使用BigQuery进行日志分析。具体来说,我有一个appengine应用程序和一个将向BigQuery发送日志数据的javascript客户端。在bigquery中,我将完整的日志文本存储在一列中,但也将重要的字段提取到其他列中。然后,我希望能够对这些列进行特殊查询。
两个问题:
1)BigQuery在这个用例中特别好或特别糟糕吗? 2)如何设置旋转日志?即我想只存储最后N个日志或最后X GB的日志数据。我看到不支持删除。
答案 0 :(得分:5)
您知道,有一个很棒的演示,可以通过App Engine MapReduce将App Engine日志数据移动到BigQuery,名为log2bq(http://code.google.com/p/log2bq/)
Re:“用例” - Stack Overflow不是判断最佳或最差判断的好地方,但是Google内部使用BigQuery来分析真正非常大的日志数据。
我没有看到将完整日志文本存储在单个列中的优势。如果您决定必须设置循环“日志”,则可以通过创建单独的BigQuery表(可能每天一个)来摄取每日日志转储,然后在表变旧时删除它们。有关Table.delete方法的详细信息,请参阅https://developers.google.com/bigquery/docs/reference/v2/tables/delete。
答案 1 :(得分:1)
实现之后 - 我们决定开源我们为它构建的框架。您可以在此处查看框架的详细信息:http://blog.streak.com/2012/07/export-your-google-app-engine-logs-to.html
答案 2 :(得分:0)
如果您希望Google App Engine(Google Cloud)项目的日志位于BigQuery中,Google已将此功能内置于新的Cloud Logging系统中。这是一个称为" Logs Export" https://cloud.google.com/logging/docs/install/logs_export
他们总结为:
将您的Google Compute Engine日志和Google App Engine日志导出到Google云端存储分区,Google BigQuery数据集,Google Cloud Pub / Sub主题或这三者的任意组合。
我们将" Stream App Engine日志用于BigQuery"我们的Python GAE项目中的功能。这会将我们的应用程序日志直接发送到BigQuery,因为它们可以在BigQuery数据集中提供接近实时的日志记录。
还有一个页面描述了如何使用导出的日志。 https://cloud.google.com/logging/docs/export/using_exported_logs
当我们想要查询多天(例如上周)导出到BigQuery的日志时,您可以使用带有FROM
子句的SQL查询,如下所示:
FROM
(TABLE_DATE_RANGE(my_bq_dataset.myapplog_,
DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), CURRENT_TIMESTAMP()))