LoginSignup
1
1

More than 5 years have passed since last update.

fastlyのログをAWS Kibanaで可視化する

Last updated at Posted at 2018-06-08

1. 概要

1.1. 構成図

スクリーンショット 2018-06-08 15.10.47.png

1.2. 各構成について

(1) fastly

%h %t "%r" %>s "%{Referer}i" "%{User-Agent}i"
```<br />
参考⇒[Custom log formats](https://docs.fastly.com/guides/streaming-logs/custom-log-formats.html)

#### (2) EC2
* rsyslogd で fastlyからのsyslogメッセージを受け取る
* td-agent(fluentd) で json フォーマットに変換してから Kinesis Firehose へ送る

#### (3) Kinesis Firehose
* 東京リージョンに作成する
* 日次でインデックスをローテーションする

#### (4) Amazon Elasticsearch
* 東京リージョンに作成する
* 古いインデックスの削除は、削除バッチを自前で作成して動かす

## 2. 各構成の作成、設定
### 2.1. Amazon Elasticsearch Service
#### ・ドメインの作成(例)

>リージョン
>>東京

> ドメインの定義
>> Elasticsearchドメイン名:fastly
>> Elasticsearchのバージョン:6.2

> クラスターの設定
>> ノードの設定
>>> インスタンス数:1
>>> インスタンスタイプ:m4.large.elasticsearch
>>> 専用マスターの有効化:チェックしない
>>> ゾーン対応の有効化:チェックしない

>> ストレージ設定
>>> ストレージタイプ:EBS
>>> EBSボリュームタイプ:汎用(SSD)
>>> EBSボリュームサイズ:100GB

### 2.2. Amazon Kinesis Firehose
#### ・Delivery stream の作成(例)
>リージョン
>>東京

>New delivery stream
>>Deliery stream name:fastly-accesslog

>Choose source
>>Direct PUT or other sources

>Proccess records
>>Record transformation:Disabled
>>Record format conversion:Disabled

>Select destination
>>Destination:Amazon Elasticsearch Service
>>Amazon Elasticsearch Service destination
>>>Domain:fastly
>>>Index:fastly-accesslog
>>>Index rotation:Every day
>>>Type:fastly-accesslog
>>>Retry duration:300 seconds

### 2.3. EC2
#### ・EC2インスタンスの作成(例)
>OS
>>Amazon Linux AMI release 2018.03

>インスタンスタイプ
>>c5.large<br />・・・CPU、Memoryの他に、Disk I/O やネットワーク帯域も考慮する

>EBSタイプ
>>100GB<br />・・・fastlyのアクセスログをsyslog経由でファイルに出力して、それをfluentdで読み込ませるので、1日分の無圧縮のアクセスログサイズと、1週間分の圧縮されたアクセスログが保存できるくらいの容量

#### ・EIPを新規に作成して割り当てる

#### ・セキュリティグループの作成
>fastlyから514番ポートへの接続を許可する。<br />
>>fastlyのIPアドレス一覧にあるすべてのIPアドレスからの514番接続を許可する
>>https://api.fastly.com/public-ip-list

#### ・rsyslogd の設定(例)
>インストール(不要)
>>デフォルトでインストールされている rsyslogd を使う

>fastly用の設定を入れる
>>/etc/rsyslog.conf<br /><pre>
〜
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
〜
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;!local0.info;mail.none;authpriv.none;cron.none   /var/log/messages
〜
# fastly accessl log
local0.info                                             /var/log/fastly/access.log
</pre>
・fastly からの syslog メッセージのプロトコルは TCP という仕様のため、TCPを有効にする
・fastlyから送られてくる syslog メッセージの facility は local0 で、serverity は info
・デフォルトの設定では、/var/log/messages にも出力されてしまうため、「!local0.info」を追加しておく

> rsyslogd 再起動

#### ・logrotate の設定(例)
>fastly用の設定を入れる
>>>/etc/logrotate.d/fastly<br />
/var/log/fastly/access.log
{
    daily
    rotate 7
    create
    missingok
    notifempty
    dateext
    compress
    create 0644 root root
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
</pre>

#### ・td-agent の設定(例)
>インストール
>># curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
>># service td-agent start
>># chkconfig td-agent on

>プラグインインストール
>># td-agent-gem install fluent-plugin-kinesis
>># td-agent-gem list 2>/dev/null | grep fluent-plugin-kinesis
>>fluent-plugin-kinesis (2.1.1)

>td-agent 設定
>/etc/td-agent/td-agent.conf

type tail path /var/log/fastly/access.log pos_file /var/log/td-agent/fastly-accesslog.pos format /^2\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z\scache-[a-z]+\d+\sfastly-log-collect-rsyslog\[\d+\]: (?[^ ]+) \[(?[^\]]+)\] "(?\S+)(?: +(?[^ ]*) +\S*)?" (?[^ ]*)(?: "(?[^\"]*)" "(?[^\"]*)")?$/ time_format %d/%b/%Y:%H:%M:%S %z tag file.output.fastly tag record.reformer.fastly type record_reformer enable_ruby true @timestamp ${time.strftime('%Y-%m-%dT%H:%M:%S%z')} tag firehose.output.fastly type kinesis_firehose delivery_stream_name fastly-accesslog region ap-northeast-1 flush_interval 1 buffer_chunk_limit 1m try_flush_interval 0.1 queued_chunk_flush_interval 0.01 num_threads 15 ``` > td-agent 再起動

・インデックス削除バッチ(例)

/home/ec2-user/scripts/elasticsearch/delete-indices.sh

#!/bin/bash
ESDOMAIN="search-fastly-**************************.ap-northeast-1.es.amazonaws.com"
INDEXNAME=(
    "fastly-accesslog-"
)
DATA=`date -d '7 days ago' +"%Y-%m-%d"`
for INDEX in ${INDEXNAME[@]}; do
    echo "######################################################################"
    echo "#"
    echo "#  ${INDEX}${DATA}"
    echo "#"
    echo "######################################################################"
    curl -XDELETE https://${ESDOMAIN}/${INDEX}${DATA}
    echo ""
done
echo "######################################################################"
echo "######################################################################"
echo "##"
echo "##  curl -XGET https://${ESDOMAIN}/_aliases?pretty"
echo "##"
echo "######################################################################"
echo "######################################################################"
curl -XGET 'https://search-fastly-**************************.ap-northeast-1.es.amazonaws.com/_aliases?pretty' | grep -v '}' | sort
exit

cron設定

30 21 * * * /home/ec2-user/scripts/elasticsearch/delete-indices.sh

2.4. fastly

・Logging設定

logging endpoint

Syslog

Log format

%h %t "%r" %>s "%{Referer}i" "%{User-Agent}i"

Address

EC2のEIP:514

Log line format

Classic

3. Kibana

3.1. インデックスパターンの作成

Amazon Elasticsearch Service のダッシュボードから、作成したドメインの設定ページに行き、Kibanaのリンクに飛ぶ

image.png

Management ⇒ Index Patterns

image.png

Create Index

image.png

Index pattern の欄に "fastly-accesslog-*" を入力する

image.png

Time Filter field name の欄から 「@timestamp」を選択する

・・・
うーむ、、Kibanaのグラフ作成手順載せようとしたら、画像がこれ以上アップロードできないらしい。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1