解析nginx日志并导出到BigQuery

时间:2017-09-29 11:27:30

标签: json parsing nginx logging google-bigquery

我有包含以下模式的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可以轻松地摄取它。

任何方便的解决方案?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以将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中。这是示例存储库:https://github.com/markhilton/docker-fluent-bigquery

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

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