1. 概要
1.1. 構成図
1.2. 各構成について
(1) fastly
- Syslog形式でログを出力
参考⇒Log streaming: Syslog - ログフォーマットの設定
%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
[^ ]*)(?: "(?[^\"]*)" "(?[^\"]*)")?$/
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のリンクに飛ぶ
↓
↓
Management ⇒ Index Patterns
↓
↓
Create Index
↓
↓
Index pattern の欄に "fastly-accesslog-*" を入力する
↓
↓
Time Filter field name の欄から 「@timestamp」を選択する
↓
・・・
うーむ、、Kibanaのグラフ作成手順載せようとしたら、画像がこれ以上アップロードできないらしい。。