DEA / ドメイン3 データ運用とサポート

重要な内容

Amazon CloudWatch によるパイプラインの監視

は、AWS のサービスが出す (数値の指標) を集め、グラフで見せ、しきい値を超えたらで知らせる監視サービスです。データパイプラインでは、 ジョブの失敗やメモリ不足、 の読み取りの遅れ、 のなどを、メトリクスから早く見つけるために使います。

DEA では、各サービスの主なメトリクスから性能問題の兆候を読み取ること、アラームと による通知、ダッシュボードと による可視化が問われます。ログ (CloudWatch Logs) は #63、 の記録 () は #74 で扱います。

Point
  • Metric = 測定値、指標 です。CPU 使用率、エラーの件数、遅延の時間などの数値です。
  • Namespace (名前空間) はメトリクスの分類 (AWS/Kinesis など)、Dimension (ディメンション) は対象を絞る属性 (ストリーム名、ジョブ名など) です。
  • Iterator age は「読み取りの位置がどれだけ古いか」、つまりコンシューマーの処理がどれだけ遅れているかを表します。
  • 和訳

概要

監視の流れは、「を集める → 見る → 異常を知らせる → 対応する」です。

概要の図 Glue / EMR / KinesisLambda / Step FunctionsRedshift / MWAA CloudWatch メトリクス ジョブのコードカスタムメトリクス ダッシュボードCloudWatch / Managed Grafana アラームしきい値・異常検知 SNSメール・チャット 自動の対応Lambda など サービスのイベントGlue ジョブの状態変化 EventBridge
道具役割
メトリクス各サービスが自動で送る標準のメトリクスと、利用者が送るカスタムメトリクスがあります。
メトリクスがしきい値を超えたら状態が ALARM になり、 への通知などのアクションを実行します。
ダッシュボード複数のメトリクスとアラームを1つの画面にまとめます。
ジョブの失敗などの「状態の変化」をイベントとして受け、通知や後処理につなげます。
などの複数のデータソースをまとめて可視化するマネージドの Grafana です。

主要技術

①サービスごとの主なメトリクスと兆候 ⚠️ 頻出

サービス何の兆候か
GetRecords.IteratorAgeMilliseconds増え続けるなら、コンシューマーの処理が追いついていません。
Kinesis Data StreamsWriteProvisionedThroughputExceeded、ReadProvisionedThroughputExceededの書き込み・読み取りの上限を超えています (ホットシャードやシャード不足)。
Errors、Throttles、Duration、ConcurrentExecutions失敗、数の上限による、タイムアウトに近い処理時間です。
Lambda (ストリームのイベントソース)IteratorAgeKinesis や Streams の処理が遅れています。
DeliveryToS3.DataFreshness、DeliveryToS3.Success配信の遅れ (最も古いレコードの経過時間) と配信の失敗です。
ジョブのオブザーバビリティメトリクス (glue.driver.skewness.job、glue.driver.workerUtilization、glue.ALL.memory.heap.used.percentage、glue.error.ALL など)データの偏り、ワーカーの使われ方の低さ、メモリの逼迫、失敗の種類 (メモリ不足、権限、スロットリングなど) です。
AppsPending、YARNMemoryAvailablePercentage、IsIdle、HDFSUtilization資源不足で待つアプリケーション、メモリの不足、使われていない (停止してよい) クラスター、 の容量不足です。
ExecutionsFailed、ExecutionsTimedOut、ExecutionThrottledワークフローの失敗、タイムアウト、状態遷移のスロットリングです。
ApproximateAgeOfOldestMessage、ApproximateNumberOfMessagesVisible処理が追いつかずメッセージがたまっています。 に対して見れば、失敗の発生です。
DynamoDBThrottledRequests、ConsumedReadCapacityUnits / ConsumedWriteCapacityUnitsキャパシティの不足やホットパーティションです。
CPUUtilization、PercentageDiskSpaceUsed、クエリの実行時間と待ちの時間計算資源やディスクの不足、 のキューの待ちです。
キューのタスク数、実行中のタスク数、スケジューラーの状態ワーカーの不足、スケジューラーの不調です (#25)。

⚠️ 頻出: 「Kinesis のコンシューマーが遅れているかを知りたい」は IteratorAgeMilliseconds、「書き込みが拒否されている」は WriteProvisionedThroughputExceeded を見ます。

Glue のオブザーバビリティメトリクスは Glue 4.0 以降で使え、ジョブの設定で有効にします。ジョブの詳細 (ステージごとの時間など) は UI でも確かめられます (#64)。


②アラームと SNS による通知 ⚠️ 頻出

は、を一定の期間ごとに評価し、OK、ALARM、INSUFFICIENT_DATA (データ不足) のいずれかの状態になります。

アラームの種類内容使いどころ
メトリクスアラーム (静的なしきい値)メトリクスが値を超えたら ALARMIteratorAgeMilliseconds が 60 秒を超えたら通知
のアラーム過去のパターンから期待される範囲 (帯) を学習し、外れたら ALARM時間帯で量が変わる取り込み件数の急減を見つける
メトリクスの計算式 (Metric Math)複数のメトリクスから計算した値を見るエラー率 = Errors ÷ Invocations
複合アラーム複数のアラームの状態を AND / OR で組み合わせる「エラー率が高い」かつ「も出ている」ときだけ通知し、通知の多さを抑える

アラームのアクションには、 トピックへの通知 (メール、チャット、 など)、、 のアクションなどを指定します。

一時的な1回の急増で通知させたくない場合は、評価期間の数と「アラームを発生させるデータポイントの数」を指定し、たとえば直近5期間のうち4期間で超えたときだけ ALARM にします (M out of N)。

データが届かないこと自体が異常 (例: 取り込みが止まって件数のメトリクスが出ない) の場合は、欠損データの扱いを「breaching (違反として扱う)」にすると、データが来ないときも ALARM にできます。

ジョブの成否のような「状態の変化」は、メトリクスのアラームより のルールが向きます。たとえば、 の「Glue Job State Change」イベントで状態が FAILED、TIMEOUT のものを受けて SNS に送ります。


③カスタムメトリクス

標準のにない業務の指標 (処理した件数、品質チェックで弾いた件数、データの遅れ) は、カスタムメトリクスとして送ります。

送り方内容
PutMetricData の でジョブのコードから送ります。
埋め込みメトリクスフォーマット (EMF)決まった形の をログに書くと、 がメトリクスに変換します。 で手軽に使えます。
メトリクスフィルターログの中の特定の文字列や値を数えてメトリクスにします (#63)。
の結果品質ルールの結果を CloudWatch のメトリクスとして出せます (#57)。

④ダッシュボードと Amazon Managed Grafana

道具向く場面
ダッシュボードCloudWatch の、ログのクエリ結果、の状態を1画面にまとめます。複数のアカウントやのメトリクスも並べられます。CloudWatch のオブザーバビリティで、監視用のアカウントをソースのアカウントにリンクすると、データをコピーせずに各アカウントのメトリクスとログを1つのアカウントから見て、アラームも作れます。
オープンソースの Grafana をマネージドで使います。CloudWatch、、、、 など複数のデータソースを1つのダッシュボードにまとめたい、既に Grafana を使っているチーム向けです。利用者の認証は や SAML で行い、サーバーの管理は不要です。
業務のデータ (売上など) の可視化です。運用のメトリクスの監視には CloudWatch や Grafana を使います (#55)。

⑤性能問題の兆候の読み方

兆候考えられる原因次に見るもの
処理時間が日ごとに伸びるデータ量の増加、の増加、読み込んだ件数・ファイル数の、 UI
一部の時間帯だけ遅い同時に動くジョブが多い、キャパシティの不足数、のメトリクス
待ち (キュー) が長い処理側の能力不足Iterator age、 の最古のメッセージの経過時間、 の AppsPending、 のキューのタスク数
メモリの使用率が高止まりパーティションが大きすぎる、偏り、collect() のメモリのメトリクス、ログの OutOfMemory のエラー
ワーカーの使用率が低い割り当てが過剰Glue の workerUtilization を見て、ワーカー数を減らすかオートスケーリングを有効にします

試験対策

①判断マトリクス

問題文のキーワード選ぶもの理由
のコンシューマーの遅れを検知GetRecords.IteratorAgeMilliseconds の読み取り位置の古さが遅れを表します。
Kinesis の書き込みが拒否されるWriteProvisionedThroughputExceededの書き込み上限の超過です。
のを検知Throttles のアラーム数の上限に達しています。
ジョブが失敗したら担当者に通知 (Glue Job State Change) → 状態の変化をイベントで受けます。
Glue ジョブのメモリ不足や偏りを調べるGlue のオブザーバビリティメモリ、、エラーの種類が見えます。
クラスターが遊んでいないかIsIdle使われていないクラスターを停止できます。
時間帯で変わる量の急減を見つけたいのアラーム固定のしきい値では誤検知が多くなります。
複数の条件がそろったときだけ通知複合アラーム通知の多さを抑えます。
処理件数など業務の指標を監視カスタムメトリクス (PutMetricData / EMF)標準のメトリクスにない値を送ります。
複数のデータソースを1つのダッシュボードに、Grafana を使いたいサーバー管理なしで Grafana を使えます。

②よくある誤答

  • ジョブの成否の通知に、のだけを考えること。状態の変化は のルールが簡単です。
  • の呼び出しの履歴を のメトリクスで探すこと。誰が何をしたかは です。
  • 監視のために に自前の監視ツールを入れること。CloudWatch の標準の機能やマネージドの Grafana で足ります。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください