SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Synapse Analytics のパイプライン / トリガーの実行状況の取得

leave a comment

Synapse Analytics は Azure Data Factory のようなパイプラインの実行機能を持っており、クラウドベースの ETL の実行を行うことができます。

Synapse Analytics と Data Factory のパイプラインの違いについては、Data integration in Azure Synapse Analytics versus Azure Data Factory に記載されており、いくつかの違いがあります。

image

Monitoring についても機能差があり、Synapse のパイプラインは Azure Monitor に統合が行われていません。
これにより、現時点では、パイプライン (またはトリガー) の実行状況の取得方法が、Data Factory とは異なります。

また、Azure Monitor と統合がされていないことにより、診断設定の利用可否も変わってくるかと思います。

Data Factory の Azure Monitor 統合と実行状況の取得

Data Factory のパイプライン実行等については、Azure Monitor と統合されており、「AzureDiagnostics」のログから、実行状況を確認することができます。

image

この情報から、パイプラインやトリガーの実行状況を確認することができます。

Azure Monitor ではありませんが、Get-AzDataFactoryV2PipelineRun / Get-AzDataFactoryV2TriggerRun のようなコマンドレットを実行することで、実行状況を取得する方法も提供されています。

 

Synapse Analytics のパイプライン / トリガーの実行状況の取得

Synapse Analytics ですが、パイプライン / トリガーの実行状況については、AzureDiagnostcs には連携されていないようで、Data Factory のように Azure Monitor のログから、実行状況を取得するということができなさそうでした。

実行状況については、現時点では、Synapse Studio の「Pipeline runs」「Trigger runs」というような、ワークスペース内の実行状況の情報を取得する必要があるのかと思います。

image

これらの情報をスクリプト等で取得しようとした場合ですが、Data Factory で提供されているコマンドレットの Synapse 版が現時点では存在していないようで、情報の取得を行うためには REST API 経由で、データ取得を行う必要があるのかと思います。

Synapse Analytics の REST API については、Azure Synapse Analytics REST API で情報が公開されています。

パイプラインについては REST API が細かく公開されていないようなのですが、パイプラインについては、REST の URL は異なりますが、Data Factory の REST API と同様のものは使用できるようです。

サンプルとしては次のようなスクリプトとなります。

Token の取得については、最新の PowerShell モジュールでは、Get-AzContext から取得ができなくなっている (Token の情報が NULL となっている) ため、接続後に、Get-AzAccessToken で取得しています。

$workspaceName = "Synapse Workspace Name"
$tenantId = "Tenant Id 
$uri = ("https://{0}.dev.azuresynapse.net/queryPipelineRuns?api-version=2019-06-01-preview" -f $workspaceName)

$pipeLineName = "Pipeline Name"
$method = "POST"
$lastUpdatedAfter = $((Get-Date).ToUniversalTime().AddHours(-1).ToString("o"))
$lastUpdatedBefore = $((Get-Date).ToUniversalTime().ToString("o"))

# https://github.com/rmbolger/Posh-ACME/issues/300
Connect-AzAccount
$token = Get-AzAccessToken -TenantId $tenantId -ResourceUrl "https://dev.azuresynapse.net/"

$header = @{
    "Content-Type" = "application/json"
    Authorization = "Bearer $($Token.Token)"
}
$body = @{
    lastUpdatedAfter = $lastUpdatedAfter
    lastUpdatedBefore = $lastUpdatedBefore
    filters = @(
        @{operand = "PipelineName";operator = "Equals";values = @($pipeLineName)}
    )
}

$results = Invoke-RestMethod -Uri $uri -Method $method -Headers $header -Body ($body | ConvertTo-Json -Depth 10)
$results.value | Select-Object pipelineName, runStart, runEnd

 

Data Factory の REST API は「management.azure.com」に対しての実行ですが、Synapse のパイプラインについては「<Synapse Workspace Name>.dev.azuresynapse.net」に対して実行を行います。

今回はパイプラインの実行結果を取得するため queryPipelineRuns を実行していますが、この REST API の仕様自体は Data Factory と同様です。(トリガーであれば、queryTriggerRuns を使用すれば情報の取得ができるかと)

REST API 経由であれば、スクリプト等で Synapse のパイプラインの実行状況の取得を行うことができます。

そのうち Synapse のパイプラインに対しても情報を取得するためのコマンドレットが提供されるのではないかと思いますが、現時点では REST を直接呼び出すことで代替は可能かと思います。

REST API については、Synapse Studio の動作を F12 開発者ツールで確認してみるのも、どの API をコールすればよいかがわかりやすいかと。

 

アラートルールの作成

Azure Monitor に情報が出力されていませんが、Synapse のパイプライン実行については、トリガーの失敗については、アラートルールの作成はできるようです。

Synapse Analytics のブレードにも「警告」がありますので、この場所からアラートルールを作成することができます。

image

「Failure Type」と「Trigger」を使用したアラートを作成することで、特定のトリガーでエラーが発生した場合に、アラートを発火させることができます。

image

Azure Monitor でログクエリを使用した場合と比較すると、細かな条件設定はできませんが、トリガーの失敗という大きなくくりでのアラートの設定はできそうですね。

Share

Written by Masayuki.Ozawa

12月 29th, 2020 at 10:41 pm

Leave a Reply