使用 AWS Glue 可觀測性指標進行監控 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Glue 可觀測性指標進行監控

注意

AWS Glue 可觀測性指標可在 AWS Glue 4.0 及更新版本上使用。

使用 AWS Glue 可觀測性指標針對 Apache Spark 任務產生 AWS Glue 內部所發生之事件的深入解析,以改善問題的分類和分析。可觀測性指標能透過 Amazon CloudWatch 儀表板以視覺化呈現,並可用來協助執行錯誤的根本原因分析,以及診斷效能瓶頸。您可以減少大規模偵錯問題所花費的時間,使您能夠專注於更快、更有效地解決問題。

AWS Glue可觀測性提供以下四個群組分類的 Amazon CloudWatch 量度:

  • 可靠性 (即錯誤類別):可輕鬆識別特定時間範圍內您可能想要解決之常見失敗原因。

  • 效能 (即偏態):識別效能瓶頸並套用調整技術。例如,當您因任務偏態而遇到效能降低時,您可能會想要啟用 Spark 調適性查詢執行,並微調偏斜聯結閾值。

  • 輸送量 (即每個來源/接收器輸送量):監控資料讀取和寫入的趨勢。您也可以設定異常 Amazon CloudWatch 警示。

  • 資源使用率 (即工作者、記憶體和磁碟使用率):有效率地找出容量使用率低的任務。您可能會想要為這些任務啟用 AWS Glue 自動擴展。

開始使用 AWS Glue 可觀測性指標

注意

設會在 AWS Glue Studio 主控台中啟用新的指標。

要在 AWS Glue Studio 中設定可觀測性指標:
  1. 登入 AWS Glue 主控台,然後從主控台功能表選擇 ETL 任務

  2. 按一下您的任務區段中的任務名稱,即可選擇任務。

  3. 選擇 Job details (任務詳細資訊) 索引標籤。

  4. 捲動至底部,然後選擇進階屬性,接著選擇任務可觀測性指標

    螢幕擷取畫面顯示「任務詳細資料」索引標籤「進階」屬性。「任務可觀測性指標」選項會反白顯示。
若要使用以下方式啟用 AWS CLI「AWS Glue觀察性」
  • 將輸入 JSON 檔案中的下列鍵值新增至 --default-arguments 對應:

    --enable-observability-metrics, true

使用 AWS Glue 可觀測性

由於AWS Glue觀察度量是透過提供的 Amazon CloudWatch,因此您可以使用 Amazon CloudWatch 主控台 AWS CLI、SDK 或 API 來查詢可觀察性指標資料點。請參閱使用 Glue 可觀測性監控資源使用率以降低成本,了解何時使用 AWS Glue 可觀測性指標的範例使用案例。

在控制AWS GlueAmazon CloudWatch 台中使用可觀察性

若要在 Amazon CloudWatch 主控台中查詢和視覺化指標:
  1. 開啟 Amazon CloudWatch 主控台,然後選擇 [所有指標]。

  2. 在自訂命名空間下方,選取 AWS Glue

  3. 選擇任務可觀測性指標、每個來源的可觀測性指標,或每個接收器的可觀測性指標

  4. 搜尋特定的指標名稱、任務名稱、任務執行 ID,然後加以選取。

  5. 圖形化指標索引標籤下方,設定您偏好的統計資料、期間和其他選項。

    螢幕擷取畫面顯示 Amazon CloudWatch 主控台和指標圖表。
若要使 AWS CLI用下列方式查詢觀測量結果:
  1. 建立指標定義 JSON 檔案並使用自己的值取代 your-Glue-job-nameyour-Glue-job-run-id

    $ cat multiplequeries.json [ { "Id": "avgWorkerUtil_0", "MetricStat": { "Metric": { "Namespace": "Glue", "MetricName": "glue.driver.workerUtilization", "Dimensions": [ { "Name": "JobName", "Value": "<your-Glue-job-name-A>" }, { "Name": "JobRunId", "Value": "<your-Glue-job-run-id-A>" }, { "Name": "Type", "Value": "gauge" }, { "Name": "ObservabilityGroup", "Value": "resource_utilization" } ] }, "Period": 1800, "Stat": "Minimum", "Unit": "None" } }, { "Id": "avgWorkerUtil_1", "MetricStat": { "Metric": { "Namespace": "Glue", "MetricName": "glue.driver.workerUtilization", "Dimensions": [ { "Name": "JobName", "Value": "<your-Glue-job-name-B>" }, { "Name": "JobRunId", "Value": "<your-Glue-job-run-id-B>" }, { "Name": "Type", "Value": "gauge" }, { "Name": "ObservabilityGroup", "Value": "resource_utilization" } ] }, "Period": 1800, "Stat": "Minimum", "Unit": "None" } } ]
  2. 執行 get-metric-data 命令:

    $ aws cloudwatch get-metric-data --metric-data-queries file: //multiplequeries.json \ --start-time '2023-10-28T18: 20' \ --end-time '2023-10-28T19: 10' \ --region us-east-1 { "MetricDataResults": [ { "Id": "avgWorkerUtil_0", "Label": "<your-label-for-A>", "Timestamps": [ "2023-10-28T18:20:00+00:00" ], "Values": [ 0.06718750000000001 ], "StatusCode": "Complete" }, { "Id": "avgWorkerUtil_1", "Label": "<your-label-for-B>", "Timestamps": [ "2023-10-28T18:50:00+00:00" ], "Values": [ 0.5959183673469387 ], "StatusCode": "Complete" } ], "Messages": [] }

可觀測性指標

AWS Glue「觀察性」設定檔並將下列測量結果傳送至 Amazon CloudWatch 每 30 秒一次,而其中一些測量結果則會顯示在「AWS Glue StudioJob 執行監督」頁面中。

指標 描述 類別
glue.driver.skewness.stage

指標類別:job_performance

Spark 階段執行偏態:此指標擷取執行偏態,此偏態可能是由輸入資料偏態或轉換 (例如,偏斜聯結) 引起。此指標的值落在 [0, infinity[ 的範圍內,其中 0 表示該階段所有任務中,任務執行時間的最大值與中位數的比率小於特定階段偏態因子。預設階段偏態因子是「5」,可透過 spark conf 覆寫此值:spark.metrics.conf.driver.source.glue.jobPerformance.skewnessFactor

階段偏態值為 1 表示比率是階段偏態因子的兩倍。

階段偏態的值會每 30 秒更新一次,可反映目前的偏態。階段結束時的值會反映最後階段偏態。

有效維度: JobName (J AWS Glue ob 的名稱)、 JobRunId ( JobRun ID 或全部)、類型 (量測規) 和 ObservabilityGroup (job_效能)

有效的統計資料:平均值、最大值、最小值、百分位數

單位:計數

job_performance
glue.driver.skewness.job

指標類別:job_performance

作業偏態是作業階段偏態的加權平均值。加權平均值會為需要更長執行時間的階段提供更多權重。這是為了避免以下極端情況,即相對於其他階段,嚴重偏斜的階段實際執行時間很短 (因此其偏態對整體作業效能影響不大,不值得費力嘗試解決其偏態)。

此指標會在每個階段完成時更新,因此最後一個值會反映實際的整體作業偏態。

有效維度: JobName (J AWS Glue ob 的名稱)、 JobRunId ( JobRun ID 或全部)、類型 (量測規) 和 ObservabilityGroup (job_效能)

有效的統計資料:平均值、最大值、最小值、百分位數

單位:計數

job_performance
glue.succeed.ALL

指標類別:錯誤

成功的作業執行總數,可完成失敗類別的圖片

有效維度: JobName (AWS GlueJob 名稱)、 JobRunId ( JobRun ID 或 ALL)、類型 (計數) 和 ObservabilityGroup (錯誤)

有效的統計資料:總和

單位:計數

error
glue.error.ALL

指標類別:錯誤

作業執行錯誤總數,可完成失敗類別的圖片

有效維度: JobName (AWS GlueJob 名稱)、 JobRunId ( JobRun ID 或 ALL)、類型 (計數) 和 ObservabilityGroup (錯誤)

有效的統計資料:總和

單位:計數

error
glue.error.[error category]

指標類別:錯誤

這實際上是一組指標,只有在作業執行失敗時才會更新。錯誤分類有助於分類和偵錯。當作業執行失敗時,會將造成失敗的錯誤分類,並將對應的錯誤類別指標設為 1。這有助於針對所有作業錯誤分析執行隨著時間變化的失敗分析,以找出最常見的失敗類別並開始解決這些問題。AWS Glue 有 28 個錯誤類別,包括 OUT_OF_MEMORY (驅動程式和執行程式)、PERMISSION、SYNTAX 和 THROTTLING 錯誤類別。錯誤類別還包括 COMPILATION、LAUNCH 和 TIMEOUT 錯誤類別。

有效維度: JobName (AWS GlueJob 名稱)、 JobRunId ( JobRun ID 或 ALL)、類型 (計數) 和 ObservabilityGroup (錯誤)

有效的統計資料:總和

單位:計數

error
glue.driver.workerUtilization

指標類別:resource_utilization

實際使用的已配置工作者百分比。如果不理想,自動擴展可以有所助益。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值、最大值、最小值、百分位數

單位:百分比

resource_utilization
glue.driver.memory.heap.[available | used]

指標類別:resource_utilization

在作業執行期間,驅動程式可用/已用的堆積記憶體。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.driver.memory.heap.used.percentage

指標類別:resource_utilization

在作業執行期間,驅動程式已用的 (%) 堆積記憶體。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.driver.memory.non-heap.[available | used]

指標類別:resource_utilization

在作業執行期間,驅動程式可用/已用的非堆積記憶體。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.driver.memory.non-heap.used.percentage

指標類別:resource_utilization

在作業執行期間,驅動程式已用的 (%) 非堆積記憶體。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.driver.memory.total.[available | used]

指標類別:resource_utilization

在作業執行期間,驅動程式可用/已用的記憶體總量。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.driver.memory.total.used.percentage

指標類別:resource_utilization

在作業執行期間,驅動程式已用的 (%) 記憶體總量。這有助於了解記憶體使用量趨勢,特別是隨著時間的推移,除了對記憶體相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.ALL.memory.heap.[available | used]

指標類別:resource_utilization

執行程式可用/已用的堆積記憶體。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.ALL.memory.heap.used.percentage

指標類別:resource_utilization

執行程式已用的 (%) 堆積記憶體。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.ALL.memory.non-heap.[available | used]

指標類別:resource_utilization

執行程式可用/已用的非堆積記憶體。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.ALL.memory.non-heap.used.percentage

指標類別:resource_utilization

執行程式已用的 (%) 非堆積記憶體。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.ALL.memory.total.[available | used]

指標類別:resource_utilization

執行程式可用/已用的記憶體總量。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:位元組

resource_utilization
glue.ALL.memory.total.used.percentage

指標類別:resource_utilization

執行程式已用的 (%) 記憶體總量。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.driver.disk.[available_GB | used_GB]

指標類別:resource_utilization

在作業執行期間,驅動程式可用/已用的磁碟空間。這有助於了解磁碟使用量趨勢,特別是隨著時間的推移,除了對磁碟空間不足相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:千兆位元組 (GB)

resource_utilization
glue.driver.disk.used.percentage]

指標類別:resource_utilization

在作業執行期間,驅動程式可用/已用的磁碟空間。這有助於了解磁碟使用量趨勢,特別是隨著時間的推移,除了對磁碟空間不足相關的失敗進行偵錯,還有助於避免潛在的失敗。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.ALL.disk.[available_GB | used_GB]

指標類別:resource_utilization

執行程式可用/已用的磁碟空間。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:千兆位元組 (GB)

resource_utilization
glue.ALL.disk.used.percentage

指標類別:resource_utilization

執行程式可用/已用/已用(%) 的磁碟空間。ALL 表示所有執行程式。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計) 及 ObservabilityGroup (資源使用率)

有效的統計資料:平均值

單位:百分比

resource_utilization
glue.driver.bytesRead

指標類別:輸送量

此作業執行中每個輸入來源以及針對所有來源讀取的位元組數目。這有助於了解資料磁碟區及其隨時間的變化,進而幫助解決資料偏態等問題。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計)、 ObservabilityGroup (Resource_Utilise) 和來源 (來源資料位置)

有效的統計資料:平均值

單位:位元組

輸送量
glue.driver.[recordsRead | filesRead]

指標類別:輸送量

此作業執行中每個輸入來源以及針對所有來源讀取的記錄/檔案數目。這有助於了解資料磁碟區及其隨時間的變化,進而幫助解決資料偏態等問題。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計)、 ObservabilityGroup (Resource_Utilise) 和來源 (來源資料位置)

有效的統計資料:平均值

單位:計數

輸送量
glue.driver.partitionsRead

指標類別:輸送量

此作業執行中每個 Amazon S3 輸入來源以及針對所有來源讀取的分割區數目。

有效維度: JobName (「AWS GlueJob」的名稱)、 JobRunId ( JobRun ID 或「全部」)、「類型」(量測計)、 ObservabilityGroup (Resource_Utilise) 和來源 (來源資料位置)

有效的統計資料:平均值

單位:計數

輸送量
glue.driver.bytesWrittten

指標類別:輸送量

此作業執行中每個輸出接收器以及針對所有接收器寫入的位元組數目。這有助於了解資料磁碟區及其隨時間的演進,進而幫助解決處理偏態等問題。

有效維度: JobName (AWS GlueJob 的名稱)、 JobRunId ( JobRun ID 或全部)、類型 (量測計)、(資源 _ 使用率) 和接收器 ObservabilityGroup (接收器資料位置)

有效的統計資料:平均值

單位:位元組

輸送量
glue.driver.[recordsWritten | filesWritten]

指標類別:輸送量

此作業執行中每個輸出接收器以及針對所有接收器寫入的記錄/檔案數目。這有助於了解資料磁碟區及其隨時間的演進,進而幫助解決處理偏態等問題。

有效維度: JobName (AWS GlueJob 的名稱)、 JobRunId ( JobRun ID 或全部)、類型 (量測計)、(資源 _ 使用率) 和接收器 ObservabilityGroup (接收器資料位置)

有效的統計資料:平均值

單位:計數

輸送量

錯誤類別

錯誤類別 描述
COMPILATION_ERROR 編譯 Scala 程式碼期間出現錯誤。
CONNECTION_ERROR 連線到服務/遠端主機/資料庫服務等項目時出現錯誤。
DISK_NO_SPACE_ERROR

驅動程式/執行程式的磁碟中沒有剩餘空間時出現錯誤。

OUT_OF_MEMORY_ERROR 驅動程式/執行程式的記憶體中沒有剩餘空間時出現錯誤。
IMPORT_ERROR 匯入相依性時出現錯誤。
INVALID_ARGUMENT_ERROR 當輸入參數無效/非法時出現錯誤。
PERMISSION_ERROR 缺少服務、資料等項目的許可時出現錯誤。
RESOURCE_NOT_FOUND_ERROR

資料、位置等項目不存在時出現錯誤。

QUERY_ERROR 因 Spark SQL 查詢執行而出現錯誤。
SYNTAX_ERROR 指令碼中存在語法錯誤時出現錯誤。
THROTTLING_ERROR 達到服務並行限制或超出服務配額限制時出現錯誤。
DATA_LAKE_FRAMEWORK_ERROR 因 AWS Glue 原生支援的資料湖架構 (例如 Hudi、Iceberg 等) 而出現錯誤。
UNSUPPORTED_OPERATION_ERROR 進行不支援的操作時出現錯誤。
RESOURCES_ALREADY_EXISTS_ERROR 要建立或新增的資源已存在時出現錯誤。
GLUE_INTERNAL_SERVICE_ERROR 發生 AWS Glue 內部服務問題時出現錯誤。
GLUE_OPERATION_TIMEOUT_ERROR AWS Glue 操作逾時時出現錯誤。
GLUE_VALIDATION_ERROR 無法驗證 AWS Glue 作業所需的值時出現錯誤。
GLUE_JOB_BOOKMARK_VERSION_MISMATCH_ERROR 在相同的來源儲存貯體上執行同一個作業並同時寫入相同/不同的目的地 (並行數 > 1) 時出現錯誤
LAUNCH_ERROR 在 AWS Glue 作業啟動階段出現錯誤。
DYNAMODB_ERROR 一般錯誤來自 Amazon DynamoDB 服務。
GLUE_ERROR 因 AWS Glue 服務而出現一般錯誤。
LAKEFORMATION_ERROR 一般錯誤來自 AWS Lake Formation 服務。
REDSHIFT_ERROR 一般錯誤來自 Amazon Redshift 服務。
S3_ERROR 因 Amazon S3 服務而出現一般錯誤。
SYSTEM_EXIT_ERROR 一般系統結束錯誤。
TIMEOUT_ERROR 作業因操作逾時而失敗時出現一般錯誤。
UNCLASSIFIED_SPARK_ERROR 因 Spark 而出現一般錯誤。
UNCLASSIFIED_ERROR 預設錯誤類別。

限制

注意

必須將 glueContext 初始化才能發布指標。

在來源維度中,值可以是 Amazon S3 路徑或資料表名稱,具體取決於來源類型。此外,如果來源為 JDBC 且使用的是查詢選項,則會在來源維度中設定查詢字串。如果該值超過 500 個字元,則會修剪至 500 個字元以內。值的限制如下:

  • 非 ASCII 字元會被移除。

  • 如果來源名稱不包含任何 ASCII 字元,則會將該名稱轉換為 <非 ASCII 輸入>。

輸送量指標的限制和考量

  • DataFrame 支持 DataFrame基於 DynamicFrame (例如 JDBC,從 Amazon S3 上的實木地板讀取),但是,不支持基於 RDS 的 DynamicFrame (例如,在 Amazon S3 上讀取 csv,json 等)。從技術上來講,支援 Spark UI 上可見的所有讀取和寫入。

  • 如果資料來源是目錄資料表且格式為 JSON、CSV、文字或 Iceberg,則會發出 recordsRead 指標。

  • JDBC 和 Iceberg 資料表中不提供 glue.driver.throughput.recordsWrittenglue.driver.throughput.bytesWrittenglue.driver.throughput.filesWritten 指標。

  • 指標可能會延遲出現。如果工作在大約一分鐘內完成,「測量結果」中可能沒有輸送量測量 Amazon CloudWatch 結果。