Enviar notificações para um canal do Microsoft Teams a partir de um pipeline do Azure Data Factory ou do Synapse Analytics
Muitas vezes, é necessário enviar notificações durante ou após a execução de um pipeline. A notificação fornece alertas proativos e reduz a necessidade de monitoramento reativo para descobrir problemas. Você pode aprender sobre como enviar notificações por e-mail usando aplicativos lógicos que um pipeline de fábrica de dados ou Synapse pode invocar. Muitas empresas também estão usando cada vez mais o Microsoft Teams para colaboração. Este artigo mostra como configurar notificações de alertas de pipeline para o Microsoft Teams.
Pré-requisitos
Antes de enviar notificações para o Teams a partir de seus pipelines, você deve criar um Webhook de entrada para seu canal do Teams. Se você precisar criar um novo canal do Teams para essa finalidade, consulte a documentação do Teams.
Abra o Microsoft Teams e vá para a guia Aplicativos. Procure por "Incoming Webhook" e selecione o conector Incoming Webhook.
Selecione o botão "Adicionar a uma equipe" para adicionar o conector ao site de nome do canal de equipe ou equipe para o qual você deseja enviar notificações.
Digite ou selecione Nome do canal da Equipe ou da Equipe para onde deseja enviar as notificações.
Selecione o botão "Configurar um conector" para configurar o Webhook de entrada para o nome do canal de equipe ou equipe que você selecionou na etapa anterior.
Nomeie o Webhook conforme apropriado e, opcionalmente, carregue um ícone para identificar suas mensagens. Depois disso, selecione o botão "Criar" para criar o Webhook de entrada.
Copie o URL do Webhook gerado na criação e salve-o para uso posterior no pipeline. Depois disso, selecione o botão "Concluído" para concluir a configuração.
Você pode ver a notificação no canal onde você adiciona o conector webhook.
Etapas para enviar notificações no canal do Teams a partir de um pipeline:
Selecione a guia Autor no painel esquerdo.
Selecione o botão + (mais) e, em seguida, selecione Novo pipeline.
No painel "Propriedades" em "Geral", especifique NotifyTeamsChannelPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.
No painel "Configurações", selecione Parâmetros e, em seguida, selecione o botão + Novo para definir os seguintes parâmetros para o pipeline.
Nome Type Valor Predefinido subscrição String
Specify subscription id for the pipeline
resourceGroup String
Specify resource group name for the pipeline
runId String
@activity('Specify name of the calling pipeline').output['pipelineRunId']
nome String
@activity('Specify name of the calling pipeline').output['pipelineName']
Tempo de gatilho String
@activity('Specify name of the calling pipeline').ExecutionStartTime
status String
@activity('Specify name of the calling pipeline').Status
mensagem String
@activity('Specify name of the calling pipeline').Error['message']
executionEndTime String
@activity('Specify name of the calling pipeline').ExecutionEndTime
runDuration String
@activity('Specify name of the calling pipeline').Duration
teamWebhookUrl String
Specify Team Webhook URL
Nota
Esses parâmetros são usados para construir a URL de monitoramento. Suponha que você não forneça uma assinatura válida e um grupo de recursos (da mesma fábrica de dados a que os pipelines pertencem). Nesse caso, a notificação não conterá uma URL de monitoramento de pipeline válida, mas as mensagens ainda funcionarão. Além disso, adicionar esses parâmetros ajuda a evitar a necessidade de sempre passar esses valores de outro pipeline. Se você pretende controlar esses valores por meio de uma abordagem orientada por metadados, deve modificá-los de acordo.
Gorjeta
Recomendamos adicionar a ID de Assinatura do Data Factory atual, o Grupo de Recursos e a URL do webhook do Teams (consulte os pré-requisitos) para o valor padrão dos parâmetros relevantes.
No painel "Configurações", selecione Variáveis e, em seguida, selecione o botão + Novo para definir as seguintes variáveis para o seu pipeline.
Nome Type Valor Predefinido Cartão de mensagem String
Procure por "Definir variável" no painel "Atividades" do pipeline e arraste uma atividade Definir variável para a tela do pipeline.
Selecione a atividade Definir variável na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.
Na guia "Geral", especifique Definir esquema JSON para Nome da atividade Definir variável .
Na guia "Variáveis", selecione a variável messageCard para a propriedade Name e insira o seguinte JSON para sua propriedade Value :
{ "@type": "MessageCard", "@context": "http://schema.org/extensions", "themeColor": "0076D7", "summary": "Pipeline status alert message", "sections": [ { "activityTitle": "Pipeline execution alert", "facts": [ { "name": "Subscription Id:", "value": "@{pipeline().parameters.subscription}" }, { "name": "Resource Group:", "value": "@{pipeline().parameters.resourceGroup}" }, { "name": "Data Factory Name:", "value": "@{pipeline().DataFactory}" }, { "name": "Pipeline RunId:", "value": "@{pipeline().parameters.runId}" }, { "name": "Pipeline Name:", "value": "@{pipeline().Pipeline}" }, { "name": "Pipeline Status:", "value": "@{pipeline().parameters.status}" }, { "name": "Execution Start Time (UTC):", "value": "@{pipeline().parameters.triggerTime}" }, { "name": "Execution Finish Time (UTC):", "value": "@{pipeline().parameters.executionEndTime}" }, { "name": "Execution Duration (s):", "value": "@{pipeline().parameters.runDuration}" }, { "name": "Message:", "value": "@{pipeline().parameters.message}" }, { "name": "Notification Time (UTC):", "value": "@{utcnow()}" } ], "markdown": true } ], "potentialAction": [ { "@type": "OpenUri", "name": "View pipeline run", "targets": [ { "os": "default", "uri": "@{concat('https://synapse.azure.com/monitoring/pipelineruns/',pipeline().parameters.runId,'?factory=/subscriptions/',pipeline().parameters.subscription,'/resourceGroups/',pipeline().parameters.resourceGroup,'/providers/Microsoft.DataFactory/factories/',pipeline().DataFactory)}" } ] } ] }
Procure "Web" no painel "Atividades" do pipeline e arraste uma atividade da Web para a tela do pipeline.
Crie uma condição de dependência para a atividade da Web para que ela só seja executada se a atividade Definir variável for bem-sucedida. Para criar essa dependência, selecione a alça verde no lado direito da atividade Definir variável , arraste-a e conecte-a à atividade da Web .
Selecione a nova atividade da Web na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.
No painel "Geral", especifique Invoke Teams Webhook Url para Nome da atividade da Web .
No painel "Configurações", defina as seguintes propriedades da seguinte maneira:
Property valor URL @pipeline().parameters.teamWebhookUrl
Método POST
Corpo @json(variables('messageCard'))
Tudo pronto e agora você está pronto para validar, depurar e publicar seu pipeline NotifyTeamsChannelPipeline .
- Para validar o pipeline, selecione Validar na barra de ferramentas.
- Para depurar o pipeline, selecione Depurar na barra de ferramentas. Você pode ver o status da execução do pipeline na guia "Saída" na parte inferior da janela.
- Quando o pipeline puder ser executado com êxito, na barra de ferramentas superior, selecione Publicar tudo. Esta ação publica entidades que você criou no Data Factory. Aguarde até ver a mensagem Publicação com êxito.
Uso da amostra
Neste cenário de uso de exemplo, criaremos um pipeline mestre com três atividades de Executar Pipeline . A primeira atividade de Pipeline de Execução invocará nosso pipeline de ETL e as duas atividades restantes de Pipeline de Execução invocarão o pipeline "NotifyTeamsChannelPipeline" para enviar notificações relevantes de sucesso ou falha para o canal do Teams, dependendo do estado de execução de nosso pipeline de ETL.
Selecione a guia Autor no painel esquerdo no Data Factory ou a guia Integrar no painel esquerdo no Synapse Studio. Em seguida, selecione o botão + (mais) e, em seguida, selecione Pipeline para criar um novo pipeline.
No painel "Geral" em Propriedades, especifique MasterPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.
Procure pipeline no painel "Atividades" do pipeline e arraste três atividades do Executar pipeline para a tela do pipeline.
Selecione primeiro a atividade Executar pipeline na tela, se ainda não estiver selecionada, e seu painel "Geral" para editar seus detalhes.
- Para a propriedade Name da atividade Executar Pipeline, recomendamos usar o nome do pipeline ETL invocado para o qual você deseja enviar notificações. Por exemplo, usamos LoadDataPipeline para o Nome de nossa atividade de Pipeline de Execução porque é o nome do nosso pipeline invocado.
- No painel "Configurações", selecione um pipeline existente ou crie um novo usando o botão + Novo para a propriedade Invoked pipeline . Por exemplo, em nosso caso, selecionamos o pipeline LoadDataPipeline para a propriedade "Invoked pipeline". Selecione outras opções e configure quaisquer parâmetros para o pipeline conforme necessário para concluir sua configuração.
Selecione a segunda atividade Executar pipeline na tela e no painel "Geral" para editar seus detalhes.
Especifique OnSuccess Notification para Nome da atividade Executar Pipeline .
No painel "Configurações", selecione o pipeline NotifyTeamsChannelPipeline , que criamos anteriormente, para a propriedade Invoked pipeline . Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros da seguinte forma:
Nome Valor subscrição 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
nome @activity('LoadDataPipeline').output['pipelineName']
Tempo de gatilho @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
mensagem Pipeline - LoadDataPipeline ran with success.
executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
runDuration @activity('LoadDataPipeline').Duration
teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
Crie uma condição de dependência para a segunda atividade de Pipeline de Execução para que ela só seja executada se a primeira atividade de Pipeline de Execução for bem-sucedida. Para criar essa dependência, selecione a alça verde no lado direito da primeira atividade do Pipeline de Execução , arraste-a e conecte-a à segunda atividade do Pipeline de Execução .
Selecione a terceira atividade Executar pipeline na tela e no painel "Geral" para editar seus detalhes.
Especifique OnFailure Notification para Nome da atividade Executar Pipeline .
No painel "Configurações", selecione NotifyTeamsChannelPipeline pipeline para a propriedade Invoked pipeline . Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros desta vez da seguinte forma:
Nome Valor subscrição 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
nome @activity('LoadDataPipeline').output['pipelineName']
Tempo de gatilho @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
mensagem @activity('LoadDataPipeline').Error['message']
executionEndTime @activity('LoadDataPipeline').ExecutionEndTime
runDuration @activity('LoadDataPipeline').Duration
teamWebhookUrl https://microsoft.webhook.office.com/webhookb2/1234abcd-1x11-2ff1-ab2c-1234d0699a9e@72f988bf-32b1-41af-91ab-2d7cd011db47/IncomingWebhook/8212f66ad80040ab83cf68b554d9232a/17d524d0-ed5c-44ed-98a0-35c12dd89a6d
Crie uma condição de dependência para a terceira atividade do Pipeline de Execução para que ela só seja executada se a primeira atividade do Pipeline de Execução falhar. Para criar essa dependência, selecione a alça vermelha no lado direito da primeira atividade do Pipeline de Execução , arraste-a e conecte-a à terceira atividade do Pipeline de Execução .
Valide, depure e publique seu pipeline MasterPipeline .
Execute o pipeline para receber notificações no Teams. Por exemplo, abaixo estão exemplos de notificações, quando meu pipeline foi executado com êxito e quando falhou.
Selecione o botão "View pipeline run" para visualizar a execução do pipeline.
Adicionar mensagens dinâmicas com variáveis e expressões do sistema
Você pode usar variáveis e expressões do sistema para tornar suas mensagens dinâmicas. Por exemplo:
@activity("CopyData").output.errors[0].Message
@activity("DataFlow").error.Message
As expressões acima retornarão as mensagens de erro relevantes de uma falha, que podem ser enviadas como notificação em um canal do Teams. Para obter mais informações sobre este tópico, consulte o artigo Copiar propriedades de saída da atividade.
Também recomendamos que você analise o esquema de carga útil de notificação suportado pelo Microsoft Teams e personalize ainda mais o modelo acima de acordo com suas necessidades.