解析 nginx 日志并导出到 BigQuery

Posted

技术标签:

【中文标题】解析 nginx 日志并导出到 BigQuery【英文标题】:Parse nginx log and export to 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 可以轻松地摄取它。

任何方便的解决方案?

【问题讨论】:

是的,你可以看到这个blog.pkhamre.com/logging-to-logstash-json-format-in-nginx 这不是问题。问题是我已经有了日志,想转换成 Json 格式。 是的,log stash 可以做到这一点。您可以从现有文件中读取输入,然后将其输出到标准输出或输出到 JSON 文件 【参考方案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 日志负载访问特定指标。

【讨论】:

以上是关于解析 nginx 日志并导出到 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

Graylog2进阶 通过正则解析Nginx日志

Nginx日志数据的清洗,及所需数据的汇总与导出存储

使用Python解析nginx日志文件

python获取nginx子请求

python [解析python中的nginx访问日志]解析python #log中的nginx访问日志

LNMP 静态文件不记录日志和过期时间Nginx防盗链Nginx访问控制解析php