Enviar notificações para um canal do Microsoft Teams de um pipeline do Azure Data Factory ou do Synapse Analytics
Geralmente, é 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 saber mais sobre como enviar notificações por email usando aplicativos lógicos que um pipeline do Synapse ou do Data Factory possa 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 no Microsoft Teams.
Pré-requisitos
Antes de enviar notificações de seus pipelines para o Teams, 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. Pesquise por "Webhook de entrada" e selecione o conector de Webhook de entrada.
Selecione o botão "adicionar a uma equipe" para adicionar o conector ao site da equipe ou do nome do canal de equipe para o qual você deseja enviar notificações.
Digite ou selecione o nome da equipe ou do canal de equipe para o qual você deseja enviar as notificações.
Selecione o botão "configurar um conector" para configurar o webhook de entrada para o nome da equipe ou do canal de equipe selecionado na etapa anterior.
Nomeie o webhook conforme for adequado e, opcionalmente, carregue um ícone para identificar suas mensagens. Depois disso, selecione o botão "Criar" para criar o webhook de entrada.
Copie o repositório da URL do Webhook gerado na criação e salve para uso posterior no ADF. Depois disso, selecione o botão "Concluído" para concluir a instalação.
Você pode ver a notificação no canal onde você adiciona o conector do webhook.
Etapas para enviar notificações no canal do Teams a partir de um pipeline:
Selecione a guia Criar no painel esquerdo.
Selecione o botão (mais) adição e, em seguida, selecione Novo pipeline.
No painel "Propriedades" em "Geral", especifique NotifiyTeamsChannelPipeline para o Nome. Em seguida, recolha o painel clicando no ícone Propriedades no canto superior direito.
No painel "configurações", selecione Parâmetrose, em seguida, selecione o botão + Novo defina os parâmetros a seguir para o pipeline.
Nome Type Valor padrão subscription 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']
name String
@activity('Specify name of the calling pipeline').output['pipelineName']
triggerTime String
@activity('Specify name of the calling pipeline').ExecutionStartTime
status String
@activity('Specify name of the calling pipeline').Status
message 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
Observação
Esses parâmetros são usados para construir a URL de monitoramento. Suponha que você não forneça uma assinatura e um grupo de recursos válidos (do mesmo Data Factory ao qual os pipelines pertencem). Nesse caso, a notificação não conterá uma URL de monitoramento de pipeline válida, mas as mensagens continuarão funcionando. Além disso, a adição desses parâmetros ajuda a evitar a necessidade de sempre passar esses valores a partir de outro pipeline. Se você pretende controlar esses valores por meio de uma abordagem controlada por metadados, você deve modificá-los adequadamente.
Dica
É recomendável adicionar a ID da assinatura atual do Data Factory, o Grupo de recursos e a URL do webhook do Teams (consulte os pré-requisitos) para obter o valor padrão dos parâmetros relevantes.
No painel "Configurações", selecione Variáveise, em seguida, selecione o botão + Novo defina as variáveis a seguir para o pipeline.
Nome Type Valor padrão messageCard String
Pesquise "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 ela ainda não estiver selecionada, e a respectiva guia "Geral" para editar os detalhes.
Na guia "Geral", especifique Definir esquema JSON para o Nome da atividade Definir variável .
Na guia "Variáveis", selecione a variável messageCard para a propriedade Nome e insira o JSON a seguir para sua propriedade Valor :
{ "@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": "Pipline 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 daWeb para que ela seja executada somente se a atividade Definir variável tiver sucesso. 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 ela ainda não estiver selecionada, e a respectiva guia "Geral" para editar os detalhes.
No painel "Geral", especifique Invocar o URL do Teams do webhook para o Nome da atividade da Web.
No painel "Configurações", defina as seguintes propriedades da seguinte forma:
Propriedade value URL @pipeline().parameters.teamWebhookUrl
Método POST
Corpo @json(variables('messageCard'))
Todos os conjuntos e agora você está pronto para validar, depurar e, em seguida, publicar seu pipeline do NotifiyTeamsChannelPipeline.
- Selecione Validar na barra de ferramentas para validar as configurações de pipeline.
- Para depurar o pipeline, selecione Depurar na barra de ferramentas. Você verá o status da execução do pipeline na guia "Saída" na parte inferior da janela.
- Depois que o pipeline for executado corretamente, na barra de ferramentas superior, selecione Publicar tudo. Esta ação publica as entidades que você criou para o Data Factory. Aguarde até que você veja a mensagem Publicado com êxito.
Amostra de uso
Neste cenário de uso de exemplo, criaremos um pipeline mestre com três atividades Executar Pipeline. A primeira atividade Executar pipeline invocará nosso pipeline de ETL e as duas atividades restantes Executar pipeline invocarão o pipeline "NotifiyTeamsChannelPipeline" para enviar notificações de êxito ou falha relevantes para o canal Teams, dependendo do estado de execução de nosso pipeline de ETL.
Selecione a guia Autor no painel esquerdo na guia Data Factory ou Integrar no painel esquerdo no Synapse Studio. Em seguida, selecione o botão + (a mais) e selecione Pipeline para criar um novo pipeline.
No painel "Geral", em Propriedades, especifique CopyPipeline para Nome. Em seguida, recolha o painel clicando no ícone Propriedades no canto superior direito.
Procure pipeline no painel "Atividades" do pipeline e arraste três atividades Executar pipeline para a tela do pipeline.
Selecione a primeira atividade Executar pipeline na tela, se ainda não estiver selecionada, e a guia "Geral" para editar os detalhes.
- Para a propriedade Nome da atividade Executar pipeline, é recomendável usar o nome do pipeline ETL invocado para o qual você deseja enviar notificações. Por exemplo, utilizamos LoadDataPipeline para o Nome da nossa atividade Executar pipeline 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 Pipeline invocado. Por exemplo, em nosso caso, selecionamos o pipeline LoadDataPipeline para a propriedade "Pipeline invocado". Selecione outras opções e configure os parâmetros para o pipeline conforme necessário para concluir sua configuração.
Selecione a segunda atividade Executar pipeline na tela e é o painel "Geral" para editar seus detalhes.
Especifique Notificação de OnSuccesspara o Nome da atividade Executar pipeline.
No painel "Configurações", selecione o pipeline NotifiyTeamsChannelPipeline, que criamos anteriormente, para a propriedade Pipeline invocado. Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros da seguinte forma:
Nome Valor subscription 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
name @activity('LoadDataPipeline').output['pipelineName']
triggerTime @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
message 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 atividadeExecutar pipeline para que ela seja executada somente se a primeira atividade Executar pipeline for bem-sucedida. Para criar essa dependência, selecione o alça verde no lado direito da primeira atividade Executar pipeline, arraste-a e conecte-a à segunda atividade Executar pipeline.
Selecione a terceira atividade Executar pipeline na tela e é o painel "Geral" para editar seus detalhes.
Especifique Notificação de OnFailure para o Nome da atividade Executar pipeline.
No painel "Configurações", selecione o pipeline NotifiyTeamsChannelPipeline para a propriedade Pipeline invocado. Personalize os parâmetros conforme necessário com base no tipo de atividade. Por exemplo, personalizei os parâmetros da seguinte forma agora:
Nome Valor subscription 11111111-0000-aaaa-bbbb-0000000000
resourceGroup contosorg
runId @activity('LoadDataPipeline').output['pipelineRunId']
name @activity('LoadDataPipeline').output['pipelineName']
triggerTime @activity('LoadDataPipeline').ExecutionStartTime
status @activity('LoadDataPipeline').Status
message @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 atividadeExecutar pipeline para que ela seja executada somente se a terceira atividade Executar pipeline for bem-sucedida. Para criar essa dependência, selecione o alça verde no lado direito da terceira atividade Executar pipeline, arraste-a e conecte-a à terceira atividade Executar pipeline.
Valide, depure e publique seu pipeline do MasterPipeline.
Execute o pipeline para receber notificações Teams. Por exemplo, abaixo estão as notificações de exemplo, quando meu pipeline foi bem-sucedido e quando falhou.
Selecione o botão "Exibir a executar pipeline" para exibir a executar o pipeline.
Adicionar mensagens dinâmicas com variáveis e expressões do sistema
Você pode usar as variáveis e as 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 uma notificação em um canal do Teams. Para obter mais informações sobre este tópico, consulte o artigo atividade Copy propriedades de saída.
Também incentivamos você a examinar o esquema de conteúdo de notificação com suporte no Microsoft Teams e personalizar ainda mais o modelo acima para suas necessidades.