Slide 1

Slide 1 text

今こそCloudwatchを振り返る JAWS-UG 福岡 #12 9度目もちょっと濃い目にAWSの話をしてみよう 2022.6.23 清家史郎 1

Slide 2

Slide 2 text

自己紹介 - ID - - - GitHub:seike460 Twitter:@seike460 Work at - 株式会社 Fusic (フュージック) 技術開発本部/技術開発第一部門 - チームリーダー/エバンジェリスト/プリンシパルエンジニア Skill - PHP/Go/AWS Community - AWS Dev Day Online Japan 2021 - JAWS Days 2019-2020 Serverless Days Fukuoka 2019 Co-Chair 清家 史郎 @seike460 2

Slide 3

Slide 3 text

Agenda 1. Webシステムにおけるモニタリング 2. Amazon CloudWatch Metrics ・ Logs 3. Amazon CloudWatch Alarms 4. Amazon CloudWatch Synthetics 5. Amazon CloudWatch RUM 6. まとめ 3

Slide 4

Slide 4 text

01 Webシステムにおける モニタリング

Slide 5

Slide 5 text

Webシステムにおけるモニタリング - Elastic Load Balancing Amazon EC2 Amazon RDS Amazon CloudFront Amazon S3 Amazon SES Webシステムの安定運用の為、 様々なモニタリングが必要 SREなどの文脈でより重要性が 認識されているモニタリングを行うため Amazon CloudWatchを振り返りましょう 5

Slide 6

Slide 6 text

Amazon CloudWatch Alarm Rule RUM Event (time-based) Event (event-based) Evidently Logs Synthetics Metrics Insights 6

Slide 7

Slide 7 text

CloudWatch Services 引用 [AWS Black Belt Online Seminar] Amazon CloudWatch - - CloudWatch Metrics CloudWatch に発行されたメトリクスを収集し、統計を取得 CloudWatch Alams CloudWatch メトリクスを監視するアラームと関連サービスのアクション CloudWatch Logs AWSサービスおよび構築システムのログファイルの監視、保存、アクセス CloudWatch Logs Insights CloudWatch Logs のログデータをインタラクティブに検索して分析 CloudWatch Dashboard CloudWatch コンソールに配置できるカスタマイズ可能なダッシュボード CloudWatch Events → Amazon EventBridge リソース変更等のイベントに応答してアクションを実行 7

Slide 8

Slide 8 text

CloudWatch Updates - Amazon CloudWatch RUM - アプリケーションのクライアント側のパフォーマンス等をモニタリングする Amazon CloudWatch Evidently - 実験と機能の管理( ABテスト) Amazon CloudWatch Metrics Insights - 高速で柔軟な SQL ベースのクエリエンジン 8

Slide 9

Slide 9 text

CloudWatch for EC2 AWSが様々なレイヤーを抽象化してくれている 今回は抽象化レイヤーの低い 仮想サーバーとして利用される EC2をベースに CloudWatchの機能を確認する 今回は Webサーバーの内部から Webサーバーの外から レンダリングされた情報から に情報収集する方法についてお話します 9

Slide 10

Slide 10 text

02 Amazon CloudWatch Metrics ・ Logs

Slide 11

Slide 11 text

Amazon CloudWatch Metrics ■Metrics 時系列のデータポイント その時間軸でのデータ値をグラフ化して 表示してくれる 左図の場合、ISUCON11の予選問題を 練習した時のCPU負荷を表示しています 11

Slide 12

Slide 12 text

Metrics ■インスタンスメトリクス CPUUtilization DiskReadOps DiskWriteOps DiskReadBytes DiskWriteBytes MetadataNoToken NetworkIn NetworkOut NetworkPacketsIn NetworkPacketsOut ■ステータスチェックメトリクス StatusCheckFailed StatusCheckFailed_Instance StatusCheckFailed_System ■バーストパフォーマンスインスタンス CPUCreditUsage CPUCreditBalance CPUSurplusCreditBalance CPUSurplusCreditsCharged ■Dedicated Hosts DedicatedHostCPUUtilization ■Nitro ベース EBSReadOps EBSWriteOps EBSReadBytes EBSWriteBytes EBSIOBalance EBSByteBalance 12

Slide 13

Slide 13 text

CloudWatch Agent cpu_* disk_* diskio_* ethtool_* mem_* net_* netstat_* processes_* swap_* ■コマンドラインを使用した CloudWatch エージェントのインストール $ sudo yum install amazon-cloudwatch-agent ■AWS Systems Manager を使用して CloudWatch エージェントのインストール Explore Run Command -> AWS-ConfigureAWSPackage ■AWS CloudFormationを使用してCloudWatch エージェントをインストール テンプレートがGitHubにて公開されている awslabs/aws-cloudformation-templates 13

Slide 14

Slide 14 text

プラグイン { "metrics": { "metrics_collected": { "procstat": [ { "exe": "httpd", "measurement": [ "pid_count" ], "metrics_collection_interval": 60 }, { "exe": "sshd", "measurement": [ "pid_count" ], "metrics_collection_interval": 60 }, { "exe": "crond", "measurement": [ "pid_count" ], "metrics_collection_interval": 60 } ] } } EC2内のプロセス監視をしたい場合などは、 「procstat」プラグインを利用する事が可能 「Apache」「SSH」「cron」等の監視が可能 その他にも以下のようなプラグインが存在 - StatsD - collectd } 14

Slide 15

Slide 15 text

Custom Metrics ■AWS CLI $ aws cloudwatch put-metric-data --metric-name Buffers --namespace MyNameSpace --unit Bytes --value 231434333 --dimensions InstanceId=1-23456789,InstanceType=m1.small ■AWS SDK Example:AWS SDK for Go(PutMetricDataRequest) // Example sending a request using the PutMetricDataRequest method. req, resp := client.PutMetricDataRequest(params) err := req.Send() if err == nil { // resp is now filled fmt.Println(resp) } 15

Slide 16

Slide 16 text

Amazon CloudWatch Logs ログデータを保管して、 フィルタリング可能なサービス Apacheのログや、 Nginxのログなどありとあらゆる ログデータを保存してくれる LambdaやECSなどのログも こちらに連携されて 確認されることがほとんど 16

Slide 17

Slide 17 text

collect_list ■CloudWatch Agentをインストール後、設定ファイルにcollect_listを入れる事で収集可能 filterも設定できる為、必要な情報のみを抽出してログ出力することができる "collect_list": [ { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", "log_group_name": "test.log", "log_stream_name": "test.log", "filters": [ { "type": "exclude", "expression": "Firefox" }, { "type": "include", "expression": "P(UT|OST)" } ] }, ..... ] 17

Slide 18

Slide 18 text

Amazon CloudWatch Logs Insight 取得したログをクエリベースでインタラクティブに分析することができる 以下の例では、独自ログに出力されているupdateされた時間を抽出する事ができる 以下のクエリ構文が利用可能 正規表現や否定構文も出来る display fields filter stats sort limit parse 18

Slide 19

Slide 19 text

metric filter LogsMessageをフィルタリング Metrics化する パターンを指定することで、 一致するデータを抽出して Metrics化することが出来ます 19

Slide 20

Slide 20 text

03 Amazon CloudWatch Alarms

Slide 21

Slide 21 text

Amazon CloudWatch Alarms Metricsのデータを元に、 アラーム設定が可能 左図は前述で説明した cronのプロセス監視を行い、 プロセスが落ちている時に アラーム設定を行っており、 SNSトピックの「seike460」に メッセージ送信を行う 21

Slide 22

Slide 22 text

Alarms アクション アラーム毎にアクションの設定が可能 - - SNSに通知して、エンジニアへの通知 EC2のステータスチェック failed - EC2の再起動を試みる - 停止させてAuto Scalingによる復旧 EC2のCPU使用率が極大 - Auto ScalingにてEC2の台数を増やす 22

Slide 23

Slide 23 text

Amazon EventBridge(CloudWatch Events) 様々なイベントパターンをトリガーに AWSサービスと連携が可能 - AWS Lambda AWS Step Functions AWS Fargate 23

Slide 24

Slide 24 text

04 Amazon CloudWatch Synthetics

Slide 25

Slide 25 text

Amazon CloudWatch Synthetics エンドポイントと API の モニタリングを実行 一般的なネットワークを 利用したアクセスを試みる 事が出来る もちろんCloudWatchとして 動いているので、 Metricsデータ化されていて アクセスが出来なくない際 通知等のアクションも可能 25

Slide 26

Slide 26 text

Amazon CloudWatch Synthetics デフォルトの設定だけなら簡単に設定可能 URLを指定してデフォルトのスクリプトを 指定するだけで外形監視が可能 スクリプトはPython or NodeJSにて 記述可能なため、単純な外見監視以上の 挙動を発生させることも可能 (デフォルトのスクリプト例 const { URL } = require('url'); const synthetics = require('Synthetics'); const log = require('SyntheticsLogger'); const syntheticsConfiguration = synthetics.getConfiguration(); const syntheticsLogHelper = require('SyntheticsLogHelper'); const loadBlueprint = async function () { const urls = ['https://fusic.co.jp/']; // Set screenshot option const takeScreenshot = true; 26

Slide 27

Slide 27 text

スクリーンショット ブラウザがレンダリングする結 果を画像データとして取得する ことも出来るため、 外形監視実行時の表示も確認 することが出来る 27

Slide 28

Slide 28 text

HAR ファイル ただの外形監視だけではなく、 画像データのレスポンスコード レイテンシーなども計測して、 S3にデータを残す事が出来る 左図はサイトアクセスした時の レスポンスコードや レイテンシーをHTML化して S3に保存されているものです 28

Slide 29

Slide 29 text

05 Amazon CloudWatch RUM

Slide 30

Slide 30 text

CloudWatch RUM JSのレイヤーにて処理を行う事が出来る - クライアントサイドのパフォーマンスを監視 JavaScriptとHTTPエラーを含むアプリケーションの異常検知 CloudWatch ServiceLensやAWS X-Rayとの統合して バックエンドのパフォーマンスも確認可能 30

Slide 31

Slide 31 text

CloudWatch RUM - アプリケーションモニター名 - モニターするアプリケーションの名前 - アプリケーションドメイン - 実際に利用するドメイン名 - 違うドメイン名から送信された場合、 接続エラーになる - 開発中はlocalhostなどの指定も可能 - RUMデータ収集設定 - パフォーマンス - CSSやスクリプトのロード DOMの構築などのパフォーマンス - JavaScriptエラー - JSの未処理の例外処理 - HTTPエラー - 500、404などのエラー 31

Slide 32

Slide 32 text

CloudWatch RUM - - - Cookie - ユーザージャーニー ページシーケンスを取得する為の Cookieを設定する セッションサンプル - 50%にするとサーバーに訪れた セッションのうち半分の人数のみ RUMの記録を行う データストレージ - RUMのデータを保存期間の延長 左のようなJSONを保存している ※選択すると、追加料金 32

Slide 33

Slide 33 text

CloudWatch RUM - - - 承諾 - RUMを記録する為に必要な Congnitoの ユーザーIDプールの指定 ページ設定 - URLを指定することで あるページ配下のみ収集したり あるページ配下のみ除外が可能 AWS X-Ray でサービスを追跡する - AWS X-Rayを利用して サービスマップを作成する 時間がかかっている APIなどを確認出来る ※選択すると追加料金 33

Slide 34

Slide 34 text

JavaScriptの設定 上記のようなJavaScriptが配布されるので、実際に HTMLに埋め込みます 34

Slide 35

Slide 35 text

時間別 ロード時間 35

Slide 36

Slide 36 text

ウェブバイタル 36

Slide 37

Slide 37 text

ページロードのステップ 37

Slide 38

Slide 38 text

ブラウザ、デバイス、ロケーション 38

Slide 39

Slide 39 text

ユーザジャーニー 39

Slide 40

Slide 40 text

X-Ray CloudWatchの画面から X-Rayの確認も可能 フロントエンドだけでなく、 関連するバックエンドの パフォーマンス監視も可能! 40

Slide 41

Slide 41 text

X-Ray メトリクス フロントエンドサービスの Metrics バックエンドサービスの Metrics 41

Slide 42

Slide 42 text

アラート設定 RUMのメトリクスを利用して、 CloudWatch Alaramsの設定も可能 ユースケースとしては最大値を元にアラート設定を行って、 Webアプリケーションの応答速度に明白な異常が見られた場合に アラートを飛ばす 平均応答時間を担保したい場合の測定等に利用出来そう 42

Slide 43

Slide 43 text

まとめ Point 1 CloudWatchは多機能かつ非常に有用 Point 2 ああああ サーバーの内部から、外形監視から、レンダリングされた情報からも情報収集が可能 Point 3 様々な情報を分析することで改善に役立てたり、安定運用の仕組みの導入も可能 43

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Thank You ご清聴いただきありがとうございました We are Hiring ! https://recruit.fusic.co.jp/