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
310
今インフラ技術をイチから学び直すなら
yuhta28
1
310
AWSに詳しくない人でも始められるコスト最適化ガイド
yuhta28
3
690
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
880
Pulumiを触ってみよう
yuhta28
1
2.8k
Other Decks in Technology
See All in Technology
AI時代、データエンジニアが一番おもろい
genshun9
0
670
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.7k
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.1k
beyond jj: config & tools ecosystem
indirect
0
5k
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
220
SREの視点で考えるSIEM活用術 〜AWS環境でのセキュリティ強化〜
cscengineer
PRO
0
110
事業課題から技術的負債に向き合う
sansantech
PRO
2
2k
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
750
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
120
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
おい、エージェントを使って終わらせろ
nwiizo
1
690
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
1
2.3k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Rails Girls Zürich Keynote
gr2m
96
14k
Prompt Engineering for Job Search
mfonobong
0
450
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
sira's awesome portfolio website redesign presentation
elsirapls
0
410
A better future with KSS
kneath
240
18k
Agile that works and the tools we love
rasmusluckow
331
22k
Designing for humans not robots
tammielis
254
26k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
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