我正在尝试使用 BigQuery 进行日志分析。具体来说,我有一个 appengine 应用程序和一个 javascript 客户端,它们会将日志数据发送到 BigQuery。在 bigquery 中,我会将完整的日志文本存储在一列中,但也会将重要字段提取到其他列中。然后我希望能够对这些列进行临时查询。
两个问题:
1) BigQuery 在这个用例中是特别好还是特别坏?2) 如何设置循环日志?即我只想存储最后 N 个日志或最后 X GB 的日志数据。我看到不支持删除。
我正在尝试使用 BigQuery 进行日志分析。具体来说,我有一个 appengine 应用程序和一个 javascript 客户端,它们会将日志数据发送到 BigQuery。在 bigquery 中,我会将完整的日志文本存储在一列中,但也会将重要字段提取到其他列中。然后我希望能够对这些列进行临时查询。
两个问题:
1) BigQuery 在这个用例中是特别好还是特别坏?2) 如何设置循环日志?即我只想存储最后 N 个日志或最后 X GB 的日志数据。我看到不支持删除。
如您所知,有一个通过 App Engine MapReduce 将 App Engine 日志数据移动到 BigQuery 的出色演示,称为 log2bq (http://code.google.com/p/log2bq/)
回复:“用例”- Stack Overflow 不是判断最佳或最差的好地方,但 Google 内部使用 BigQuery 来分析非常大的日志数据。
我看不到将完整日志文本存储在单个列中的优势。如果您决定必须设置循环“日志”,则可以通过创建单独的 BigQuery 表(可能每天一个)来提取每日日志转储,然后在表变旧时将其删除。有关 Table.delete 方法的更多信息,请参阅https://developers.google.com/bigquery/docs/reference/v2/tables/delete。
在实现这一点之后——我们决定开源我们为它构建的框架。您可以在此处查看框架的详细信息:http: //blog.streak.com/2012/07/export-your-google-app-engine-logs-to.html
如果您希望 Google App Engine (Google Cloud) 项目的日志包含在 BigQuery 中,Google 已将此功能添加到新的 Cloud Logging 系统中。这是一项称为“日志导出”的测试版功能 https://cloud.google.com/logging/docs/install/logs_export
他们将其总结为:
将您的 Google Compute Engine 日志和 Google App Engine 日志导出到 Google Cloud Storage 存储桶、Google BigQuery 数据集、Google Cloud Pub/Sub 主题或三者的任意组合。
我们在 Python GAE 项目中使用“将 App Engine 日志流式传输到 BigQuery”功能。这会将我们应用的日志直接发送到 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()))