Synapse Analytics は Azure Data Factory のようなパイプラインの実行機能を持っており、クラウドベースの ETL の実行を行うことができます。
Synapse Analytics と Data Factory のパイプラインの違いについては、Data integration in Azure Synapse Analytics versus Azure Data Factory に記載されており、いくつかの違いがあります。
Monitoring についても機能差があり、Synapse のパイプラインは Azure Monitor に統合が行われていません。
これにより、現時点では、パイプライン (またはトリガー) の実行状況の取得方法が、Data Factory とは異なります。
また、Azure Monitor と統合がされていないことにより、診断設定の利用可否も変わってくるかと思います。
Contents
Data Factory の Azure Monitor 統合と実行状況の取得
Data Factory のパイプライン実行等については、Azure Monitor と統合されており、「AzureDiagnostics」のログから、実行状況を確認することができます。
この情報から、パイプラインやトリガーの実行状況を確認することができます。
Azure Monitor ではありませんが、Get-AzDataFactoryV2PipelineRun / Get-AzDataFactoryV2TriggerRun のようなコマンドレットを実行することで、実行状況を取得する方法も提供されています。
Synapse Analytics のパイプライン / トリガーの実行状況の取得
Synapse Analytics ですが、パイプライン / トリガーの実行状況については、AzureDiagnostcs には連携されていないようで、Data Factory のように Azure Monitor のログから、実行状況を取得するということができなさそうでした。
実行状況については、現時点では、Synapse Studio の「Pipeline runs」「Trigger runs」というような、ワークスペース内の実行状況の情報を取得する必要があるのかと思います。
これらの情報をスクリプト等で取得しようとした場合ですが、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 のブレードにも「警告」がありますので、この場所からアラートルールを作成することができます。
「Failure Type」と「Trigger」を使用したアラートを作成することで、特定のトリガーでエラーが発生した場合に、アラートを発火させることができます。
Azure Monitor でログクエリを使用した場合と比較すると、細かな条件設定はできませんが、トリガーの失敗という大きなくくりでのアラートの設定はできそうですね。