Slide 1

Slide 1 text

© DeNA Co., Ltd. 1 Mobageの監視環境を AWSで構築する話 鈴木 正樹(株式会社ディー・エヌ・エー)

Slide 2

Slide 2 text

© DeNA Co., Ltd. 2 鈴木 正樹 ・Mobage のサーバーサイド運用・管理 ・AWS を用いたソリューション提案・実践 ・AWS 全般/IaC(AWS CDK, SFW)/TypeScript/Perl DeNA エンターテイメント開発事業本部 オープンプラットフォーム 事業部 ゲームプラットフォーム部 サーバーグループ https://github.com/smt7174 @makky12(SUZUKI Masaki@クラウドエンジニア) https://makky12.hatenablog.com © DeNA Co., Ltd. 自己紹介

Slide 3

Slide 3 text

© DeNA Co., Ltd. 3 アジェンダ 多数EC2運用での課題 CloudWatch(監視) CloudWatch エージェント(ログ転送) SNS&Chatbot(Slack 通知)・最終的な構成 5 4 6 補足情報・まとめ・宣伝 3 対応方法 1 2

Slide 4

Slide 4 text

© DeNA Co., Ltd. 4 1 ● 本スライドで紹介する AWS サービスなどの情報は、2023年6月24日現在のものです ○ 今後、変更になる可能性があります ● 本スライドの内容は、あくまで我々の環境での導入事例です ○ これがベストプラクティスとは限りません ● 文字数の関係上、各AWSサービス先頭の「AWS」「Amazon」は省略しています ○ (例) AWS Chatbot → Chatbot、Amazon CloudWatch → CloudWatch etc. ● 本資料は、2023年3月19日に開催された「YAPC::Kyoto 2023」での登壇資料をベース に、Reject Day 2023向けに加筆修正したものになります 発表に際して

Slide 5

Slide 5 text

© DeNA Co., Ltd. 5 1. 多数EC2運用での課題

Slide 6

Slide 6 text

© DeNA Co., Ltd. 6 ● スマホでゲームを中心に各種コンテンツを楽しめるSNS ● PC 向けの Yahoo! モバゲーもある ● https://www.mbga.jp/ (PC版)、 https://sp.mbga.jp/ (スマホ版) Mobage とは 1

Slide 7

Slide 7 text

© DeNA Co., Ltd. 7 ● 2018年〜2021年に、弊社環境をオンプレミスからクラウドに移行 ● 詳細は AWS Summit Online 2021 基調講演 を参照 前提:オンプレミスからクラウドへ 2

Slide 8

Slide 8 text

© DeNA Co., Ltd. 8 4 現在のMobageの構成 ● AWS の VPC + EC2 で構成・稼働 ○ VPC + EC2 のよくある構成 ● 各 EC2 (赤枠内)のログを監視用 内製アプリで監視 ※ 実際のEC2の台数はもっと(という かめちゃくちゃ)多いです 8 3

Slide 9

Slide 9 text

© DeNA Co., Ltd. 9 1 ● 監視アプリの運用コスト ○ 監視アプリ自体の運用管理・監視も必要(本末転倒な状態に) ○ 監視する EC2 の数が膨大(設定が手間、把握が大変) ● 「状態監視」(=ステートフル監視)ができない ○ 「障害が発生し続けているか」の監視ができない ■ 特性上「発生し続けている」ことの監視が必要 ○ 短期的なアクセス集中によるバーストに対応できない ■ (例)ゲームアプリのアップデート・メンテナンス終了直後など 課題 4

Slide 10

Slide 10 text

© DeNA Co., Ltd. 10 1 ● 突発的に1回しきい値をまたいだだけの場合(=バースト)は NG にしたくない ○ 「状態監視」ならば可能だが、「しきい値監視」では不可能 ● 下記のケースで一時的にしきい値をまたぐ状況に対応できない ○ ゲームアプリのアップデート・メンテナンス終了直後の一時的なアクセス集中 ○ 定期バッチ実行による一時的な負荷上昇 etc. 補足:「しきい値監視」と「状態監視」の違い しきい値監視(1回でもしきい値を またいだらアラーム発生) 状態監視(複数回連続してしきい値 をまたいだ場合のみアラーム発生) 5

Slide 11

Slide 11 text

© DeNA Co., Ltd. 11 2. 対応方法

Slide 12

Slide 12 text

© DeNA Co., Ltd. 12 1 ● ログ監視をAWS の各種マネージドリソースに完全移行 ○ CloudWatch という優れた監視サービスがあるわけだし ● AWS リソースに任せられる業務は任せる(任せたい) ○ 本来工数を使うべきタスクにメンバーの工数を集中させる ○ AWS の考えの根本である「プロダクトの開発作業にフォーカス」する ● 退屈なことは python AWSにやらせよう ○ 「退屈」って言ったらダメだけど... ソリューション:AWS によるフルマネージド化 1

Slide 13

Slide 13 text

© DeNA Co., Ltd. 13 1 ● CloudWatch(監視) ○ ログ管理(Logs) ○ 監視項目設定(Metrics) ○ 監視&アラーム発生(Alarm) ● CloudWatch エージェント(ログ転送) ○ EC2 内のログを CloudWatch Logs に転送 ● SNS&Chatbot(Slack 通知) ○ 専用 Slack チャンネルへの自動メッセージ送信 導入したリソース 2

Slide 14

Slide 14 text

© DeNA Co., Ltd. 14 3. CloudWatch(監視)

Slide 15

Slide 15 text

© DeNA Co., Ltd. 15 1 CloudWatch の利用 ● AWS で「監視」といえば、まずは CloudWatch ● 今回は下記の機能を使用 ○ Logs:ログの保管・管理 ○ メトリクスフィルタ:ログの特定文字列の出現回数をメトリクスとして監視 ○ Metirc Math:メトリクスの値に各種数式を適用 ■ 今回は「FILL(m1, 0)」を設定し、データ欠落時は「異常未発生」とする ○ Alarm:アラーム発生(および収束)条件設定・発生など ● 監視対象の項目(メトリクス)を監視 ○ 多くのメトリクスは、初めから用意されている (CPU使用率など) ○ メトリクスの自作も可能(「メトリクスフィルタ」など) 1

Slide 16

Slide 16 text

© DeNA Co., Ltd. 16 4 CloudWatch のメリット ● 状態監視ができる ○ 「アラームを実行するデータポイ ント」で指定可能 ○ 「m回中n回」のような指定も可能 ● 細かい管理が不要 ○ 設定さえ行えばOK ○ 設定は CloudFormation や AWS CDK など IaC(Infrastructure as Code)を活用 16 2

Slide 17

Slide 17 text

© DeNA Co., Ltd. 17 4. CloudWatch エージェント (ログ転送)

Slide 18

Slide 18 text

© DeNA Co., Ltd. 18 1 CloudWatch エージェントとは ● EC2やオンプレサーバーのログを CloudWatch Logs に送信するAWS 公式ツール ● ログ送信以外に、下記が可能 ○ 送信するログファイルの指定・ログ内容でのフィルタリング ■ (例)「error」という文字が含まれるログ...など ○ 送信先 CloudWatch Logs のロググループ・ログストリームの指定 ● Systems Manager (以下「SSM」) による操作が可能(インストール・設定更新等) ● クロスアカウント対応(EC2 と CloudWatch Logs のアカウントが別でも送信可能) ● 参考:CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミス サーバーからメトリクスとログを収集する 1

Slide 19

Slide 19 text

© DeNA Co., Ltd. 19 2 メリット1:SSMによる操作が可能 ● SSMの「Run Command」により、インストール・設定変更などの各種操作が可能 ● 監視対象の全 EC2 に「Run Command」 1回だけで反映可能 ○ グループの登録が可能(リソース種別(=EC2)、タグなど) ● 設定値は SSM のパラメータストアに保管可能 ○ パラメータストアの設定も「Run Command」 1回で全 EC2 に一括適用可能 ● 結果として、導入&運用管理工数が大幅に削減できる ● 参考:CloudWatch エージェントで使用する IAM ロールとユーザーを作成する 2

Slide 20

Slide 20 text

© DeNA Co., Ltd. 20 2 メリット2:クロスアカウント対応 ● 送信元 EC2 と違うアカウントの CloudWatch Logs にもログを送信可能 ○ 「1つの監視用アカウントで一括監視」という運用が可能 ● 下記の IAM Role 設定のみで実施可能 (Assume Role) ○ 送信元および送信先での IAM Role 設定 ○ 送信元 CloudWatch エージェントで、送信先 IAM Role の ARN 指定 ● 参考:別のアカウントへのメトリクスとログの送信 3

Slide 21

Slide 21 text

© DeNA Co., Ltd. 21 5. SNS&Chatbot(Slack 通知)・ 最終的な構成

Slide 22

Slide 22 text

© DeNA Co., Ltd. 22 1 SNS & Chatbot の利用 ● Slack への通知には、SNS および Chatbot を利用する ○ SNS:アラーム発生時に、Chatbotにアラーム内容を通知 ○ Chatbot:グループ内の Slack チャンネルへのメッセージ送信 ■ Amazon Chime にも対応 ● 下図のようなフローを作成することで、アラームを Slack に通知可能 ● 参考:AWS ChatbotでCloudWatchアラームをslackへ通知しよう!! EC2 (CloudWatch エージェント ) CloudWatch Logs CloudWatch Alarm SNS Chatbot Slackチャンネル 1

Slide 23

Slide 23 text

© DeNA Co., Ltd. 23 4 最終的な構成 ● 監視対象の EC2 に CloudWatch エー ジェントをインストール ● 対象のログを監視用アカウントの CloudWatch Logs に送信 ● ログを監視し、障害発生&収束時に CloudWatch Alarm からメッセージ を送信 ● 最終的に Slack チャンネルに自動投 稿 23 2

Slide 24

Slide 24 text

© DeNA Co., Ltd. 24 6. 補足情報・まとめ・宣伝

Slide 25

Slide 25 text

© DeNA Co., Ltd. 25 2 CloudWatch エージェント独自のメトリクス収集 ● CloudWatch エージェントを使用することで、独自のメトリクスを収集・送信可能 ○ CloudWatch 標準 には存在しないメトリクス ● 独自のメトリクスは、主に「EC2 そのものの状態」に関する詳細なメトリクス ○ 「EC2 自体の監視」を行うのに便利 ● ログデータの送信とは別に、API 実行の料金が発生する ○ 1,000リクエストごとに0.01USD(=1.44JPY)※ 2023/6/24現在 ● 参考:CloudWatch エージェントにより収集されるメトリクス 1

Slide 26

Slide 26 text

© DeNA Co., Ltd. 26 2 CloudWatchのクロスアカウント対応 ● 昨年12月に、CloudWatch で別アカウントの監視が可能になった ● 「監視用アカウントで全環境を一括監視」みたいな運用が可能に ○ CloudWatch エージェントは元々クロスアカウント対応済み ● ログ監視、およびメトリクス監視はクロスアカウントによる追加料金なし ● X-Ray などでのトレースは1アカウントまで追加料金なし ● 参考:New – Amazon CloudWatch のクロスアカウントオブザーバビリティ 2

Slide 27

Slide 27 text

© DeNA Co., Ltd. 27 2 AWS Lambda Powertools について ● Lambda の開発・監視など行う際に非常に便利なライブラリ群(AWS 公式) ● コアユーティリティとして、下記の機能がある ○ Logger:構造化された JSON ログを生成するためのロガー機構を提供 ○ Metrics:Lambda関数内でカスタムメトリクスを作成可能 ○ Tracing:Lambdaハンドラーの各種情報、関数単位での実行時間などのトレース ● Python, Java, .Net, TypeScript に対応 ○ 言語によりコア以外のユーティリティに差がある(Pythonが一番充実) ● 参考:コードとデモで理解する!これは便利!AWS Lambdaの実装を加速するAWS Lambda Powertoolsを使いこなそう | AWS Dev Day 2022 3

Slide 28

Slide 28 text

© DeNA Co., Ltd. 28 2 AWS Lambda Powertools について(宣伝) ● 下記イベントで、AWS Lambda PowerTools に関する発表 & デモを行います ● JAWS ミート 2023 (2023/7/8(土) 12:00 〜) ※愛知県豊橋市 ○ https://jaws-ug-tokaido.connpass.com/event/276942/ ● JAWS-UG 名古屋 オブザーバビリティ for AWS (2023/7/11(火) 19:00 〜) ○ https://jawsug-nagoya.doorkeeper.jp/events/158126 ● 参加される方は、よろしくお願いします。 ● どちらもオフライン開催のみなので、ほぼ東海地方の方限定になってしまいますが... 4

Slide 29

Slide 29 text

© DeNA Co., Ltd. 29 2 まとめ ● CloudWatch & CloudWatch エージェントにより、監視を完全に AWS 化 ● SNS & Chatbot により、Slack 通知も完全に自動化 ● AWSリソースを活用し、可能な限り作業を AWS に移行 ○ 監視 にかかる工数を削減する ○ 本来工数をかけるべき作業に注力できる体制を作る ● 今回はあくまで一例ですが、何かのきっかけになれば幸いです 5

Slide 30

Slide 30 text

© DeNA Co., Ltd. 30 DeNA ENGINEERING
 DeNAのエンジニアの技術・文化・チーム等を伝えるポータルサイトです。 
 様々な技術発信や、カルチャーの紹介をしています。 


Slide 31

Slide 31 text

© DeNA Co., Ltd. 31 DeNA Engineering
 🔎 DeNAについてもっと知りたい方は 
 勉強会やブログなどの最新情報を得るには 
 @DeNAxTech 


Slide 32

Slide 32 text

© DeNA Co., Ltd. 32 Mobage では、エンジニアを募集中です! Mobageでは、サーバーサイドエンジニアを積極募集中です。 Mobageやいろいろなサーバーサイド技術に興味がある方・携わりたい方、お待 ちしています! ※Perl って書いてますが、もちろんPerl 以外のエンジニアもOKです! (私も入社するまで Perl は全くやったことなかったです) https://herp.careers/v1/denacareer/TWYBVkIr4FA_

Slide 33

Slide 33 text

© DeNA Co., Ltd. 33