DEA / ドメイン3 データ運用とサポート
重要な内容
Amazon CloudWatch によるパイプラインの監視
は、AWS のサービスが出す (数値の指標) を集め、グラフで見せ、しきい値を超えたらで知らせる監視サービスです。データパイプラインでは、 ジョブの失敗やメモリ不足、 の読み取りの遅れ、 のなどを、メトリクスから早く見つけるために使います。
DEA では、各サービスの主なメトリクスから性能問題の兆候を読み取ること、アラームと による通知、ダッシュボードと による可視化が問われます。ログ (CloudWatch Logs) は #63、 の記録 () は #74 で扱います。
Point
- Metric = 測定値、指標 です。CPU 使用率、エラーの件数、遅延の時間などの数値です。
- Namespace (名前空間) はメトリクスの分類 (
AWS/Kinesisなど)、Dimension (ディメンション) は対象を絞る属性 (ストリーム名、ジョブ名など) です。 - Iterator age は「読み取りの位置がどれだけ古いか」、つまりコンシューマーの処理がどれだけ遅れているかを表します。
- 和訳
- Metric: 指標
- Weblio英和辞書「metric」
概要
監視の流れは、「を集める → 見る → 異常を知らせる → 対応する」です。
| 道具 | 役割 |
|---|---|
| メトリクス | 各サービスが自動で送る標準のメトリクスと、利用者が送るカスタムメトリクスがあります。 |
| メトリクスがしきい値を超えたら状態が ALARM になり、 への通知などのアクションを実行します。 | |
| ダッシュボード | 複数のメトリクスとアラームを1つの画面にまとめます。 |
| ジョブの失敗などの「状態の変化」をイベントとして受け、通知や後処理につなげます。 | |
| などの複数のデータソースをまとめて可視化するマネージドの Grafana です。 |
主要技術
①サービスごとの主なメトリクスと兆候 ⚠️ 頻出
| サービス | 何の兆候か | |
|---|---|---|
GetRecords.IteratorAgeMilliseconds | 増え続けるなら、コンシューマーの処理が追いついていません。 | |
| Kinesis Data Streams | WriteProvisionedThroughputExceeded、ReadProvisionedThroughputExceeded | の書き込み・読み取りの上限を超えています (ホットシャードやシャード不足)。 |
Errors、Throttles、Duration、ConcurrentExecutions | 失敗、数の上限による、タイムアウトに近い処理時間です。 | |
| Lambda (ストリームのイベントソース) | IteratorAge | Kinesis や 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 | 処理が追いつかずメッセージがたまっています。 に対して見れば、失敗の発生です。 | |
| DynamoDB | ThrottledRequests、ConsumedReadCapacityUnits / ConsumedWriteCapacityUnits | キャパシティの不足やホットパーティションです。 |
CPUUtilization、PercentageDiskSpaceUsed、クエリの実行時間と待ちの時間 | 計算資源やディスクの不足、 のキューの待ちです。 | |
| キューのタスク数、実行中のタスク数、スケジューラーの状態 | ワーカーの不足、スケジューラーの不調です (#25)。 |
⚠️ 頻出: 「Kinesis のコンシューマーが遅れているかを知りたい」は IteratorAgeMilliseconds、「書き込みが拒否されている」は WriteProvisionedThroughputExceeded を見ます。
Glue のオブザーバビリティメトリクスは Glue 4.0 以降で使え、ジョブの設定で有効にします。ジョブの詳細 (ステージごとの時間など) は UI でも確かめられます (#64)。
②アラームと SNS による通知 ⚠️ 頻出
は、を一定の期間ごとに評価し、OK、ALARM、INSUFFICIENT_DATA (データ不足) のいずれかの状態になります。
| アラームの種類 | 内容 | 使いどころ |
|---|---|---|
| メトリクスアラーム (静的なしきい値) | メトリクスが値を超えたら ALARM | IteratorAgeMilliseconds が 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 で足ります。