Help us understand the problem. What is going on with this article?

【小ネタ】fastlyで柔軟なログ出力をするための方法

More than 1 year has passed since last update.

fastly導入にあたり、アクセスログはfastly経由のものを使うようにしようと計画している。

今回は、かなり小ネタだが、柔軟なアクセスログを出力する為の基本設定について書く。

  • LogFormatのバージョンアップ
  • s3の保存先に日付フォーマットを入れる(Athena)

ログを柔軟に操れるのは、Akamaiでは出来ないのでかなり優位な点かと思っている。

fastlyログのs3への出力設定は下記投稿が詳しい。
http://qiita.com/Satoshi-Ishii/items/1ec701a5d823807a3a78

LogFormatのバージョンアップ

fastlyのログフォーマットについて

fastlyには、ログのformatとして、v1とv2がある。
公式ドキュメントにあるとおり、デフォルトはv1になっており出力項目にかなり制限がありアクセスログとしてみた時に少し情報が少ない。。。

只、ログフォーマットを変更する事で、柔軟なログ出力が可能となるので今回はその手順を備忘録として書いておく。

  • 変更は、API経由で行う。
  • サービス毎に、設定を持っているので、service ID単位に設定を行う必要がある。

更新手順

ServiceIDとlog type(s3,ftp,,,)毎にカスタムログのversionを持っている模様。
イメージとしては、fastly上で先にログの設定を投入し、そのログプロファイルのformatをバージョンアップするようなイメージ

curl -X PUT -H 'Fastly-Key: <your Fastly API key>' -H 'Content-Type: application/json' 'https://api.fastly.com/service/<your Fastly service ID>/version/<version number/logging/<log type>/<log name>' --data-binary '{"format_version":"2"}'

現在の設定の確認

curl -X GET -H 'Fastly-Key: <your Fastly API key>'  'https://api.fastly.com/service/<your Fastly service ID>/version/<version number>/logging/<log type>/<log name>'|jq .

レスポンスをjqで表示するとざっくりこんな感じ

formatバージョンが変わっていれば成功!!

{
  "placement": null,
  "format_version": "2",  ##ここが2になっていればバージョンアップ成功
  "response_condition": "",
  "gzip_level": "0",
  "server_side_encryption_kms_key_id": null,
  "secret_key": "***",
  "public_key": null,
  "updated_at": "2017-02-06T08:22:42+00:00",
  "message_type": "classic",
  "period": "3600",
  "name": "ログプロファイル名",
  "server_side_encryption": null,
  "bucket_name": "s3のバケット名",
  "timestamp_format": "%Y-%m-%dT%H:%M:%S.000",
  "service_id": "***",
  "domain": "s3-ap-northeast-1.amazonaws.com",
  "redundancy": "standard",
  "version": "26",
  "path": "/***/",
  "deleted_at": null,
  "created_at": "2017-01-20T09:07:48+00:00",
  "access_key": "***",
  "format": "%t %m %U %q %a"
}

s3バケットの保存先に日付フォーマットを入れる

s3には、Athenaというサービスがあり、バケットに保存したデータにそのままSQL発行が出来る。

只、データを溜めるだけだとスキャン量が膨大になるので、hiveフォーマットのディレクトリ構造にデータを保管しパーティショニングするのが定石となっている。

今回、fastlyのエンジニアの方に日付フォーマットがログの出力先に使える事を聞いたので、その方法も書いておく。

設定

fastlyのログのAdvanced optons画面で下記のように書く事で日付毎のディレクトリ階層に出力が可能になる。

Fastly__Configure__strestaurant_ikyu_com_.jpg

Hiveフォーマット

dt=yyyy-mm-dd(-HH-MM-SS)

AthenaでCREATE EXTERNAL TABLEする時に、下記のようにパーティションを設定すると良い。

CREATE EXTERNAL TABLE 
...
...
PARTITIONED BY (dt string)

↓パーティショニングする

MSCK REPAIR TABLE [テーブル名]

クエリには、where句でスキャン対象のパーティションを指定してあげると対象を絞ってのクエリ発行が可能になる。

where dt<'2016-12-12' and dt>='2016-12-13'

今回は、かなり小ネタだったが、最終的には、elastic cloudにログを持っていこうと思っているのでそれはまた別の機会に書こうと思う。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away