Partilhar via


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.  

  1. Abra o Microsoft Teams e vá para a guia Aplicativos. Procure por "Incoming Webhook" e selecione o conector Incoming Webhook.

    Mostra o aplicativo Webhook de entrada na guia Aplicativos no Teams.

  2. 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.

    Destaca o

  3. Digite ou selecione Nome do canal da Equipe ou da Equipe para onde deseja enviar as notificações.

    Mostra o prompt de seleção de equipe na caixa de diálogo de configuração do aplicativo Webhook de entrada no Teams. Digite o

  4. 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.

    Mostra o prompt de seleção de equipe na caixa de diálogo de configuração do aplicativo Webhook de entrada no Teams. Destaca a Equipa e o

  5. 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.

    Destaca a propriedade name, o upload opcional da imagem e  

  6. 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.

    Mostra o novo URL do webhook na página de opções do Webhook de entrada após a criação.

  7. Você pode ver a notificação no canal onde você adiciona o conector webhook.

    Mostra a notificação no canal do Teams onde você adicionou o conector webhook.

Etapas para enviar notificações no canal do Teams a partir de um pipeline:

  1. Selecione a guia Autor no painel esquerdo.

  2. Selecione o botão + (mais) e, em seguida, selecione Novo pipeline.

    Mostra o

  3. No painel "Propriedades" em "Geral", especifique NotifyTeamsChannelPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.

    Mostra o

    Mostra o

  4. 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

    Mostra o

    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.

  5. 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

    Mostra o

  6. Procure por "Definir variável" no painel "Atividades" do pipeline e arraste uma atividade Definir variável para a tela do pipeline.

  7. Selecione a atividade Definir variável na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.

  8. Na guia "Geral", especifique Definir esquema JSON para Nome da atividade Definir variável .

    Mostra o

  9. 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)}"
                    }
                ]
            }
        ]
    }
    

    Mostra o

  10. Procure "Web" no painel "Atividades" do pipeline e arraste uma atividade da Web para a tela do pipeline.

  11. 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 .

  12. Selecione a nova atividade da Web na tela, se ainda não estiver selecionada, e a guia "Geral" para editar seus detalhes.

  13. No painel "Geral", especifique Invoke Teams Webhook Url para Nome da atividade da Web .

    Mostra o

  14. No painel "Configurações", defina as seguintes propriedades da seguinte maneira:

    Property valor
    URL @pipeline().parameters.teamWebhookUrl
    Método POST
    Corpo @json(variables('messageCard'))

    Mostra o

  15. 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.

    Mostra o

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.

  1. 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.

  2. No painel "Geral" em Propriedades, especifique MasterPipeline para Name. Em seguida, feche o painel clicando no ícone Propriedades no canto superior direito.

  3. Procure pipeline no painel "Atividades" do pipeline e arraste três atividades do Executar pipeline para a tela do pipeline.

  4. 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.

    Mostra o

    Mostra o

  5. 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 .

    Mostra o segundo

    Mostra o segundo

  6. 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 .

    Mostra o terceiro

    Mostra o terceiro

  7. 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.

    Mostra as notificações de pipeline de sucesso em um canal do Teams.

    Mostra notificações de pipeline de falhas em um canal do Teams.

  8. 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.

Como enviar e-mails de um pipeline