Add logsource hostname to record
bigqueryに送るレコードに送り元のホスト名を追加してみます。
送り元ホストを条件に検索できるようになります。今のところ個人で複数のサーバを運用する予定はないので別に送り元ホストを条件に検索することも無いのですが、こまけーこたぁいいんだよ!
filterプラグイン(組み込み)を利用して実現します。
filterプラグインを使うと、td-agentのレコード(tailしたログファイルの行など)にデータを追加することが出来ます。
イメージ的には以下のような感じでしょうか。
[time, tag, record = {ip: "1.2.3.4", status: "200"}]
↓
[time, tag, record = {ip: "1.2.3.4", status: "200", logsource_hostname: "ponpokopon.me"}]
td-agentの(fluentdの)データ構造については、以下の記事が分かりやすかったです。
設定の差分は↓
td-agent.conf
<source>
@type tail
format /(?<remote_address>[^ ]*) (?<remote_logname>[^ ]*) (?<remote_user>[^ ]*) (?<request_time>[^\]]*) (?<request_line>[^ ]* +\S* +\S*) (?<status_code>[^ ]*) (?<size_of_the_response_body>[^ ]*) "(?<user_agent>[^\"]*)" "(?<referer>[^\"]*)"/
path /var/log/h2o/access.log
tag h2o.access
pos_file /var/log/td-agent/h2o.access.pos
</source>
+ <filter h2o.**>
+ @type record_transformer
+ <record>
+ logsource_hostname ${hostname}
+ </record>
+ </filter>
<match h2o.**>
@type bigquery
method insert
auth_method json_key
json_key キー
project プロジェクトID
dataset prod
table h2o_access_log_%Y_%m_%d
auto_create_table true
schema_path /etc/td-agent/schema-bigquery-h2o.json
</match>
スキーマ定義ファイルも忘れずに!
schema-bigquery-h2o.json
[
{
"name": "remote_address",
"type": "STRING"
},
...
{
"name": "referer",
"type": "STRING"
- }
+ },
+ {
+ "name": "logsource_hostname",
+ "type": "STRING"
+ }
]
注意点としては、matchの後にfilterを書くと読み込まれないという点でしょうか。これはハマりました。
bqコマンドで確認。
$ bq query "SELECT logsource_hostname,request_line,status_code FROM prod.h2o_access_log_2016_10_20 LIMIT 10"
Waiting on bqjob_qwertyuiopasdfghj_qwertyuiopasdfghj_0 ... (0s) Current status: DONE
+--------------------+------------------------------------------------------------------------------------------------+-------------+
| logsource_hostname | request_line | status_code |
+--------------------+------------------------------------------------------------------------------------------------+-------------+
| ponpokopon.me | "GET /content/images/2016/10/photo-1470681151804-311e1b738c23.jpeg HTTP/1.1" | 200 |
| ponpokopon.me | "GET /song/song-sanam-rey.html HTTP/1.1" | 302 |
| ponpokopon.me | "GET / HTTP/1.1" | 200 |
| ponpokopon.me | "GET /author/lorentzca/ HTTP/1.1" | 200 |
| ponpokopon.me | "HEAD / HTTP/1.1" | 302 |
| ponpokopon.me | "HEAD / HTTP/1.1" | 302 |
| ponpokopon.me | "GET /assets/css/escoreUi.css/ HTTP/1.1" | 301 |
| ponpokopon.me | "GET /search/Qelt+Noom+Shereen+2014/feed/rss2/ HTTP/1.1" | 302 |
| ponpokopon.me | "GET /online-cv-template/creative-cv-template-18-for-hotel-and-restaurant-in-yellow/ HTTP/1.1" | 404 |
| ponpokopon.me | "GET /song/download-bokep-sd.html HTTP/1.1" | 302 |
+--------------------+------------------------------------------------------------------------------------------------+-------------+
やったね!