【问题标题】:Parse nginx log and export to BigQuery解析 nginx 日志并导出到 BigQuery
【发布时间】:2017-09-29 11:27:30
【问题描述】:

我有包含以下模式的 nginx 日志文件:

111.111.111.xxx - - [16/Sep/2017:00:00:00 +0000] "GET /some.php?action_name=&idsite=4430 HTTP/1.1" 200 290 .....

我需要将其导入 BigQuery。或者首先我将日志转换为 json 格式,然后 BigQuery 可以轻松地摄取它。

任何方便的解决方案?

【问题讨论】:

  • 这不是问题。问题是我已经有了日志,想转换成 Json 格式。
  • 是的,log stash 可以做到这一点。您可以从现有文件中读取输入,然后将其输出到标准输出或输出到 JSON 文件

标签: json parsing nginx logging google-bigquery


【解决方案1】:

用于解析日志:您可以使用 logstash logstash grok 过滤器解析日志。

Logstash 输出插件:BigQuery 插件可用于将日志发送到 BigQuery。要将数据发送到 BigQuery,数据应该是高度结构化的,因此,我建议将其解析并转换为键值对,然后使用 BigQuery 过滤器发送到 BigQuery。

【讨论】:

    【解决方案2】:

    可以配置Nginx访问日志使用json格式:

    log_format json '{ '
    '"time": "$time_local", '
    '"remote_addr": "$remote_addr", '
    '"remote_user": "$remote_user", '
    '"request_url": "$request", '
    '"request_time": "$request_time", '
    '"response_status": "$status", '
    '"response_size": "$body_bytes_sent", '
    '"referrer": "$http_referer", '
    '"agent": "$http_user_agent", '
    '"forwarded_for": "$http_x_forwarded_for", '
    '"host": "$host" '
    '}';
    access_log /var/log/nginx/access.log json;
    

    您可以使用 Fluentd 对其进行解析并将其直接流式传输到 BigQuery。这是示例 repo:https://github.com/markhilton/docker-fluent-bigquery

    另一种选择是将标准 Nginx 日志流式传输到 BigQuery,然后使用 REGEXP_EXTRACT 对其进行解析并提取特定数据字段。

    我使用 GKE Nginx Ingress 将日志流式传输到 BigQuery,连接为 Google Data Studio 的数据源以呈现报告。在 Data Studio 中,我使用 REGEXP_EXTRACT 添加了自定义公式字段,以从 Nginx 日志负载访问特定指标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-26
      • 2014-11-01
      • 1970-01-01
      • 2013-12-01
      • 2021-01-04
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多