AWS事業本部コンサルティング部 にしざわ
インフラエンジニアのための
AWSサービスを利⽤したログ分析はじめの⼀歩
⾃⼰紹介 2
⻄澤 徹訓
• クラスメソッド株式会社
• AWS事業本部
• コンサルティング部⻑
• 2015年8⽉⼊社
• デリバリーチームリーダー
• “⼤盛無料"と聞くと喜びます
本⽇のテーマ 3
•インフラエンジニアのための
•AWSを利⽤しているインフラ運⽤担当を想定
•AWS、インフラ、SQLちょっとわかる
•AWSサービスを利⽤した
•AWSサービス以外の話はしません
•ログ分析
•今回はELBログ分析を例として扱います
•はじめの⼀歩
•初⼼者向け、アドホック分析、やること決まってない
本⽇のサブテーマ 4
•詳しく知らない⼈が聞いても興味が沸く
ような情報を提供したい
•分析やレポートの⽅針を定める為のアド
ホックな調査の⾜がかりにして欲しい
•これをきっかけに使ったことがないAWS
サービスを試してもらえたら最⾼
注意事項 5
•使う側の視点でポイントを絞ることを
重視した為、網羅性を意識した補⾜や
技術的な背景の説明は省略しています
•スピーカーの個⼈的な考えもあえて含
めた表現を⽤いています
本⽇とりあげるAWSサービス 6
•CloudWatch
•Athena
•QuickSight
Amazon CloudWatch
CloudWatchとは 8
•AWSの各種リソースを監視するため
のマネージドサービス
•収集データをグラフで参照、しきい
値を元にアラーム通知、等が可能
CloudWatchの良いところ1 9
•何もしなくても勝⼿にデータを取得し
て蓄積してくれる(標準メトリクス)
✦1 分ごとのデータポイントを 15 ⽇間保存
✦5 分ごとのデータポイントを 63 ⽇間保存
✦1 時間ごとのデータポイントを 455 ⽇間保存
CloudWatchの良いところ2 10
•安い
✦無料で始められる
✦⽉間メトリクス送信、APIコール数、アラーム
数等に応じて従量課⾦
おいおいおい︕ 11
•ログ分析の話じゃなかったの︖
•なんでいきなりCloudWatchの話が
始まるの︖
CloudWatchでもレポートはできる 12
•CloudWatchはレポートツールです
•ダッシュボード機能で可視化できます
(APIはいいけど、正直微妙なところも)
•APIベースで期間に応じた”Sum”
や”Average”を簡単に取得することがで
きます(ここを侮ってはいけない)
AWS CLIを使ったCloudWatchの統計情報取得(例) 13
$ aws cloudwatch get-metric-statistics 
--namespace "AWS/ApplicationELB" 
--dimensions Name=LoadBalancer,Value=app/my-alb-name/1234xxxx1234xxxx 
--metric-name HTTPCode_ELB_5XX_Count 
--statistics "Sum" 
--start-time "2017-12-21T00:00:00Z" 
--end-time "2018-01-01T00:00:00Z" 
--period $((60 * 60 * 24)) 
--query "sort_by(Datapoints,&Timestamp)[][Timestamp,Sum]" 
--output text
AWS CLIを使ったCloudWatchの情報取得結果(例) 14
2017-12-21T00:00:00Z 1133.0
2017-12-22T00:00:00Z 117.0
2017-12-23T00:00:00Z 29.0
2017-12-24T00:00:00Z 335.0
2017-12-25T00:00:00Z 610.0
2017-12-26T00:00:00Z 160.0
2017-12-27T00:00:00Z 63.0
2017-12-28T00:00:00Z 148.0
2017-12-29T00:00:00Z 195.0
2017-12-30T00:00:00Z 40.0
CloudWatchからの情報取得ポイント 15
•⼿作業でやるにはパラメータが多くて⾯倒
•特にNamespace,Dimensionsの指定が難しい
(GetMetricStatistics APIで確認しながらやる)
•period(期間)とstatistics(Sum/Average/
Maximum/…)の設定を組み合わせれば、簡単な
統計情報がすぐに取り出せる
•簡単に始められるAWS CLIはオススメ
ブログの宣伝1 16
https://dev.classmethod.jp/cloud/aws/getting-cloudwatch-elb-statistics-by-aws-cli/
もっとがんばりたい⽅は 17
•GetMetricData APIを使えば、より多くのメト
リクスから同時に情報を取得したり
•Metric Mathを使った計算式を利⽤した情報取
得も可能です(私は試したことはありません)
https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html
Amazon Athena
Athenaとは 19
•S3上のデータに対して、SQLクエリ
を実⾏して分析を⾏うためのマネー
ジドサービス
Athenaの良いところ 20
•フルマネージド、インフラ管理不要
でクエリが実⾏できる
•S3にデータを置くだけで始められる
•圧縮データでも直接クエリできる
•安い、速い
Athenaを使うときの最初のつまづき 21
•テーブル定義しないと何も始められな
いのに、HiveのDDLとかわからない
HiveのDDLとかわからない 22
•テーブル定義は最初の1回だけなのでここはがんばる
•ALBログ等であれば公式ドキュメントやDevelopers.IO
にもたくさんサンプルがあるので、ほとんどのケース
ではパクって使えばOK
•これくらい覚えればとりあえずは困らないはず
•LazySimpleSerDe(区切り⽂字で)
•RegexSerDe(正規表現で)
•CloudTrailSerde(CloudTrail専⽤)
とりあえずALBログであれば 23
•公式ページに情報あるのでそのまま使える
•ALBのログフォーマット変わることもあるので注意
(RegexSerDe)
•正規表現は読むのが⾟い
•LOCATIONはフォルダである必要がある(⽇付別のフォル
ダ構成となっている為、そのまま取り扱える)
•テーブル定義が誤っていると件数不⼀致が起こるケースも
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/application-load-balancer-logs.html
DDL⽂サンプル 24
CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs (
type string,
time string,
elb string,
:::(省略)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) :::(省略)
LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-
ID>/elasticloadbalancing/region';
Athenaを使うときの2番⽬のつまづき 25
•クエリ課⾦って怖くて使えない
クエリ課⾦怖い 26
•⼩さいデータで動作確認すればまったく怖くな
い
•$5/TB=$0.005/GB
•LOCATIONに指定したS3フォルダ配下のデータ
が少ないところで試してから使えばOK
•逆に⾔うと、LOCATION配下のデータはすべて
スキャン対象になると考えた⽅が良い
Athenaを使うときの3番⽬のつまづき 27
•クエリ書くときにどんな関数が使える
かわからない
どんな関数が使えるかわからない 28
•クエリエンジンは、Presto 0.172
ベースにしたその⼀部の機能が利⽤で
きる
VPC Flow Logsに対するクエリサンプル 29
SQL クエリ、関数、および演算⼦ - Amazon Athena
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/functions-operators-reference-section.html
SELECT sourceaddress, COUNT(*) as count
FROM vpc_flow_logs
WHERE ts
BETWEEN concat(cast(current_date AS VARCHAR),'T','06:00:00.000Z')
AND concat(cast(current_date AS VARCHAR),'T','12:00:00.000Z')
GROUP BY sourceaddress
ORDER BY count DESC
Athenaを使うときの稀にあるつまづき 30
• パーティション考えたことなかったから
フラットにデータ配置していた
フラットに配置したデータのスキャン 31
•S3フォルダ内にフラットに配置したデータは原
則全スキャンになる
•クエリ範囲を限定する為には、⼀時的に対象の
データのみを別フォルダに移動してクエリ実⾏
する必要がある ※prefix指定等によるフィルタ
は不可
•シンボリックリンクを使った⽅法も
ブログの宣伝2 32
https://dev.classmethod.jp/cloud/aws/create-athena-table-with-symboliclink/
もっとがんばりたい⽅は 33
•パーティションを意識してデータを格納するように
する ※あとからやるのは⼤変だけど難しくはない
•列指向フォーマット(Parquet,ORC,等)に変換して
おく ※対応効果は⾼い(スキャン範囲が限定でコス
ト節約かつクエリ⾼速化)けど難しい
Amazon Athena のパフォーマンスチューニング Tips トップ 10 | Amazon Web Services ブログ
https://aws.amazon.com/jp/blogs/news/top-10-performance-tuning-tips-for-amazon-athena/
Amazon QuickSight
QuickSightとは 35
•フルマネージドなクラウドBIサービス
QuickSightの良いところ 36
•フルマネージド、インフラ管理不要
•複数のデータソースに対応
•⾼速なSPICEエンジン
•可視化した分析結果を共有できる
QuickSightのデータソース 37
•S3(CSV/TSV/ELF/CLF JSON/XLSX/等)
•Athena
•Redshift
•RDS
•等
ALBログの場合 38
•スペース区切りのため、CSV/TSVのいずれにも合致せ
ず、そのままではQuickSightに取り込むことができない
•Athenaで定義したデータとして取り込みを⾏う必要が
ある
•タイムスタンプをDateタイプとして利⽤するのに
ちょっとしたノウハウが必要
[TIPS] ELB のアクセスログのタイムスタンプを QuickSight で Date タイプとして利⽤する | Developers.IO
https://dev.classmethod.jp/cloud/aws/tips-quicksight-date-type-format/
QuickSight可視化サンプル1 39
QuickSight可視化サンプル2 40
ブログの宣伝3 41
https://dev.classmethod.jp/cloud/aws/20170226-quicksight-elb/
QuickSightに期待しすぎてはダメ 42
•シンプルな可視化はお⼿軽
•リアルタイム処理はできない(データ
ソースの⽇次更新は可能)
•リアルタイム性や検索なら、Amazon
Elasticsearch Serviceも検討
•より⾼度な分析は商⽤BIツールが便利
まとめ
ログ分析のはじめの⼀歩まとめ 44
•ログを取る->とりあえずS3に
•溜まったログを⾒る、調べる
•安く速く使える便利なサービスがたくさんあ
るので、AWSサービスを使いたおして試す
•⽅針が決まるまで、試⾏錯誤を⾏うことでク
ラウドのメリットを活かしましょう
最後に 45
• AWSに移⾏することでエンジニアが元気になっ
た、新しい技術に興味を持つようになった、と
いう声をよく聞きます。
• 私もその⼀⼈です。
• 情報発信/情報交換し、AWS好きが増え、元気
になるエンジニアが少しでも増えていったら嬉
しいです。
インフラエンジニアのためのAWSサービスを利用したログ分析はじめの一歩

インフラエンジニアのためのAWSサービスを利用したログ分析はじめの一歩