Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
FluentdとAWS Athenaでログ集約してみた
Search
YouYou
December 12, 2020
Technology
4.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FluentdとAWS Athenaでログ集約してみた
詳細は以下のブログ
https://zenn.dev/yuta28/articles/ae8b1379aa873c
YouYou
December 12, 2020
More Decks by YouYou
See All by YouYou
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
320
今インフラ技術をイチから学び直すなら
yuhta28
1
320
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
3
700
Datadog外形監視基盤をEC2から ECSへ移行してみた
yuhta28
0
1.9k
アウトプット頑張ったら企業からLT登壇の依頼がきた話
yuhta28
1
1.9k
小さなことから始めるAWSコスト最適入門
yuhta28
1
1.5k
Datadogのコストも監視しよう
yuhta28
1
1.1k
Rcloneを使った定期的なストレージ同期
yuhta28
0
890
Pulumiを触ってみよう
yuhta28
1
2.8k
Other Decks in Technology
See All in Technology
[2026 Oracle Technical Deep Dive] AI時代のアプリケーションを支えるCloud NativeとJava EEモダナイゼーション (2026年9月17日開催)
oracle4engineer
PRO
0
110
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
490
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
260
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
190
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
170
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
240
形式手法を使って仕様をコーディングしよう
mikanichinose
0
170
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
580
サーバーフルコンピューティング?AWS Lambda
iwatatomoya
1
200
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
560
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
310
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
433
67k
Deep Space Network (abreviated)
tonyrice
0
350
New Earth Scene 8
popppiees
4
2.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Scaling GitHub
holman
464
140k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
510
Exploring anti-patterns in Rails
aemeredith
4
520
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
430
Transcript
AthenaとFluentdと色々でログ集 約をしてみたお話し
Name:ユータ Occupation:SRE Twitter:@Y0u281 (オーでなくゼロです) ブログ:https://zenn.dev/yuta28 → 普段触るもの:AWS Ansible Linux Mint
自己紹介 Twitter
目次 • 背景 • やったこと • 構築完成予想図 • 運用開始後のフィードバック •
まとめ
背景
やったこと • 各種EC2にFluentdを導入し、ログをS3に転送する • S3に格納されたログをGlueを使ってテーブル定義づけする • Athenaでクエリを発行して、複数ログを検索して一覧化できるようにする • CloudWatch LogsのログはKinesisを用いてS3へ転送
構築完成予想図 • 対象ログ ◦ Apacheログ ◦ Railsログ ◦ Postfixログ ◦
SlowQueryログ ◦ (CloudTrailログ)
運用開始後のフィードバック • ApacheログとRailsの日付ログフォーマットが異なっており、同一時間帯で比較 ができない • Fluentdはログデータを加工された状態で転送するので生データのログも参照で きるようにしたい • SlowQueryログのクエリタイムでソートできるようにしてほしい
日付ログフォーマット異なる問題 Apacheログの日付フォーマット→ Railsログの日付フォーマット→ 08/Dec/2020:19:13:01 +0900 2020-12-08T23:41:30.980713
日付ログフォーマット異なる問題 解決方法① UNIXTIMEを新規にカラムに追加 <inject> time_key fluentd_time time_type unixtime </inject> 2020/12/9
00:29:52なら 1607441392秒となる
ログの生データも検索できるようにしたい time: 1362020400 (28/Feb/2013:12:00:00 +0900) record: { "user" : nil,
"method" : "GET", "code" : 200, "size" : 777, "host" : "192.168.0.1", "path" : "/", "referer": nil, "agent" : "Opera/12.0" } <parse> @type apache2 </parse> ApacheのログはFluentdのプラグインで 綺麗にパースできる。 ログの中身が加工されるが、場合によっては 生データが欲しい場合がある。 https://docs.fluentd.org/config uration/parse-section
ログの生データも検索できるようにしたい 解決方法② raw_data(生データ)というレコードを末尾に追記した。 <filter td.apache.access**> @type record_transformer <record> raw_data ${record["host"]}
${record["user"]} ${record["time"]} ${record["method"]} ${record["path"]} ${record["code"]} ${record["size"]} ${record["referer"]} ${record["agent"]} </record> </filter>
ログの生データも検索できるようにしたい time: 1362020400 (28/Feb/2013:12:00:00 +0900) record: { "user" : nil,
"method" : "GET", "code" : 200, "size" : 777, "host" : "192.168.0.1", "path" : "/", "referer": nil, "agent" : "Opera/12.0" “raw_data” : 192.168.0.1 nil 28/Feb/2013:12:00:00 +0900 GET / 777 nil Opera/12.0 } raw_dataに全て のレコード情報が 書き込まれた
クエリタイムでソートできるようにしたい select query_time,messege from slowquery; みたいにしたい
クエリタイムでソートできるようにしたい 解決方法③ いい手が思いつかず… CWLにSlowQueryログが来たら→の Lambdaを実行してKinesisでS3に転送 import base64 import gzip import
io import json def lambda_handler(event, context): records = [process_record(r) for r in event['records']] return {'records': records } def process_record(record): record_id = record['recordId'] data = base64.b64decode(record['data']) iodata = io.BytesIO(data) with gzip.GzipFile(fileobj=iodata, mode='r') as f: data = json.loads(f.read()) processed_data = process_data(data) + '\n' return { 'data': base64.b64encode(processed_data.encode('utf-8')).decode('utf-8'), 'result': 'Ok', 'recordId': record_id } def process_data(data): return '\n'.join([format_log_event(json) for json in data['logEvents']]) def format_log_event(j): return json.dumps({'timestamp': j['timestamp'], 'message': j['message']})
クエリタイムでソートできるようにしたい 暫定的な対応策としてawslogsを使用(https://github.com/jorgebastida/awslogs) $ awslogs get <SlowQueryログ> --start='MM/DD/YYYY' --end=’MM/DD/YYYY’ <SlowQueryログ> <リージョン>
# Time: 180606 15:00:02 # User@Host: rdsadmin[rdsadmin] @ localhost [] Id: 18 # Query_time: 0.507831 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 SET timestamp=1528297202; FLUSH SLOW LOGS ; 踏み台サーバにインストールして ターミナル上からSlowQueryログの 中身を表示 とは言えAthenaで他のログと 一緒に検索できないのは悔しい
まとめ ・ログを集約することで検索性UP ・SlowQueryログどうしよう
ありがとうございました より詳しい内容は私のブログで⇓ FluentdとAWS Athenaでログ集約 してみた https://zenn.dev/yuta28/articles/a e8b1379aa873c