【问题标题】:Using BigQuery for logs analysis使用 BigQuery 进行日志分析
【发布时间】:2012-05-11 10:51:38
【问题描述】:

我正在尝试使用 BigQuery 进行日志分析。具体来说,我有一个 appengine 应用和一个 javascript 客户端,它们会将日志数据发送到 BigQuery。在 bigquery 中,我会将完整的日志文本存储在一列中,但也会将重要字段提取到其他列中。然后我希望能够对这些列进行临时查询。

两个问题:

1) BigQuery 在这个用例中是特别好还是特别差? 2) 如何设置循环日志? IE。我只想存储最后 N 个日志或最后 X GB 的日志数据。我看到不支持删除。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:
    1. 请注意,有一个出色的演示,它通过名为 log2bq (http://code.google.com/p/log2bq/) 的 App Engine MapReduce 将 App Engine 日志数据移动到 BigQuery

    2. 回复:“用例”- Stack Overflow 不是判断最佳或最差的好地方,但 Google 内部使用 BigQuery 来分析非常大的日志数据。

    3. 我没有看到将完整日志文本存储在单个列中的优势。如果您决定必须设置循环“日志”,则可以通过创建单独的 BigQuery 表(可能每天一个)来提取每日日志转储,然后在表变旧时将其删除。有关 Table.delete 方法的更多信息,请参阅https://developers.google.com/bigquery/docs/reference/v2/tables/delete

    【讨论】:

    • 3.将全文存储在一列中并从中提取一些有用信息并将其存储在其他列中的优点是,如果需要,我们可以看到原始的、经过预处理的日志条目。要设置循环日志,如果我们每天使用一张表 - 我们如何查询多天?
    • 好问题,如果表架构相同,您可以使用如下查询:SELECT f1, f2 FROM table_day1, table_day2, table_day3;
    • 嗯。有什么限制吗?如果是表,Mac 编号是多少?如果我想要 60 天的循环日志,那么我需要有 60 个表子句,并且每天这些子句都会改变?我想我可以在运行查询时编写脚本。
    • 您可以只在两个表之间旋转。从一个表中选择一个子集(过去 48 小时),然后在一天开始时将其插入到另一个表中。
    • @aloo SQL 语句中表达的表的数量没有限制,但目前最大查询长度为 10KB。
    【解决方案2】:

    在实施之后 - 我们决定开源我们为它构建的框架。你可以在这里查看框架的详细信息:http://blog.streak.com/2012/07/export-your-google-app-engine-logs-to.html

    【讨论】:

    • 博文链接已失效。 “抱歉,您在此博客中查找的页面不存在。”
    【解决方案3】:

    如果您希望 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()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多