AWS

Apacheログ分析 Fluentd+S3+Athena

 

条件

  • EC2に割り当てるIAMロール
    AmazonS3FullAccess
  • S3にリージョン米国西部(オレゴン)でバケットを作成
    sgapache
  • Athena Location of Input Data Set
    s3://sgapache25254649/athena_apache/

 

 

Amazon Linux2設定

 

Apache, td-agentの導入

 

時刻設定 JST

$ sudo vi /etc/sysconfig/clock

ZONE="Asia/Tokyo"
UTC=true

 

$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo reboot

 

Apacheのインストール

yum install httpd
systemctl start httpd
systemctl enable httpd

 

 

td-agentのインストール

curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh

// Redhatの場合
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

 

# usermod -a -G apache td-agent
# chown apache:apache /var/log/httpd/
# chmod g+rx /var/log/httpd

 

設定を作成

# vi /etc/td-agent/td-agent.conf


<source>
  @type tail
  path "/var/log/httpd/access_log"
  pos_file "/var/log/td-agent/access_log.pos"
  tag log.access
  format apache2
</source>
<match log.access>
  @type s3
  s3_bucket sgapache25254649 ←バケット名
  path "athena_apache/"
  s3_object_key_format %{path}%{time_slice}/access_%{index}.%{file_extension}

   buffer_path /var/log/td-agent/s3/access
   time_slice_format year=%Y/month=%m/day=%d/hour=%H/minute=%M
   time_slice_wait 10s
   buffer_chunk_limit 64m
   format json
   include_time_key true
   time_key log_time

</match>

 

設定の読み込み/起動

systemctl restart td-agent
systemctl enable td-agent

 

アクセスしてApacheログに書き込みを行う

http://IPアドレス/

 

ログがS3に数分待ってもPUTされない場合はログを確認する

# tail -n 200 /var/log/td-agent/td-agent.log

 

S3にログが出力されていたら成功

 

 

 

Athena

データベースの作成

 

CREATE DATABASE IF NOT EXISTS yuuDb;

 

 

テーブルの作成

CREATE EXTERNAL TABLE IF NOT EXISTS yuuDb.apache_access (
  `host` string,
  `user` string,
  `log_time` string,
  `method` string,
  `path` string,
  `code` int,
  `size` int,
  `referer` string,
  `agent` string 
) 
PARTITIONED BY (
    year int, 
    month int, 
    day int, 
    hour int, 
    minute int
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH serdeproperties ( 'paths'='host, user, log_time, method, path, code, size, referer, agent' )
LOCATION 's3://sgapache25254649/athena_apache/';

 

 

データのロード

MSCK REPAIR TABLE yuuDb.apache_access;

 

 

セレクト

SELECT * from yuuDb.apache_access LIMIT 10;

 

 

結果

 

 

よく使うクエリ

2019年2月7日木曜日18時10分から~19時00分までのログを2000行降順で抽出

SELECT * FROM yuuDb.apache_access
where log_time < '2019-02-07T18:10:00'
AND log_time < '2019-02-07T19:00:00'
ORDER BY log_time DESC LIMIT 2000;

 

 

気をつけたい

最新のデータで検索したい時はテーブルを更新する必要があります。

 

テーブルの洗い替え

CREATE EXTERNAL TABLE IF NOT EXISTS yuuDb.apache_access (
  `host` string,
  `user` string,
  `log_time` string,
  `method` string,
  `path` string,
  `code` int,
  `size` int,
  `referer` string,
  `agent` string 
) 
PARTITIONED BY (
    year int, 
    month int, 
    day int, 
    hour int, 
    minute int
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH serdeproperties ( 'paths'='host, user, log_time, method, path, code, size, referer, agent' )
LOCATION 's3://sgapache25254649/athena_apache/';

 

データのロード

MSCK REPAIR TABLE yuuDb.apache_access;

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)