Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FluentdとAWS Athenaでログ集約してみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
YouYou
December 12, 2020
Technology
4.4k
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
290
今インフラ技術をイチから学び直すなら
yuhta28
1
300
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
3
680
Datadog外形監視基盤をEC2から ECSへ移行してみた
yuhta28
0
1.8k
アウトプット頑張ったら企業からLT登壇の依頼がきた話
yuhta28
1
1.8k
小さなことから始めるAWSコスト最適入門
yuhta28
1
1.4k
Datadogのコストも監視しよう
yuhta28
1
1.1k
Rcloneを使った定期的なストレージ同期
yuhta28
0
840
Pulumiを触ってみよう
yuhta28
1
2.7k
Other Decks in Technology
See All in Technology
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
1.1k
ご挨拶「10周年を迎える共創ラボのこれまでとこれから」
iotcomjpadmin
0
150
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
160
Why is RC4 still being used?
tamaiyutaro
0
100
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
AIは、人間らしい仕事の夢を見るか?─ AI時代のtoB/toEプロダクトを再設計する
techtekt
PRO
0
160
秘密度ラベル初心者が第1歩でつまづかないための「設計・運用」ポイント
seafay
PRO
1
510
Agile and AI Redmine Japan 2026
hiranabe
4
500
【FinOps】データドリブンな意思決定を目指して
z63d
2
480
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
620
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
120
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
280
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Limits of Empathy - UXLibs8
cassininazir
1
370
Product Roadmaps are Hard
iamctodd
PRO
55
12k
The Invisible Side of Design
smashingmag
301
52k
So, you think you're a good person
axbom
PRO
2
2.1k
Unsuck your backbone
ammeep
672
58k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Technical Leadership for Architectural Decision Making
baasie
3
420
Documentation Writing (for coders)
carmenintech
77
5.4k
Rails Girls Zürich Keynote
gr2m
96
14k
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