Compartilhar via


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.  

  1. Abra o Microsoft Teams e vá para a guia Aplicativos. Pesquise por "Webhook de entrada" e selecione o conector de Webhook de entrada.

    Shows the Incoming Webhook app under the Apps tab in Teams.

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

    Highlights the "Add to a team" button for the Incoming Webhook app.

  3. Digite ou selecione o nome da equipe ou do canal de equipe para o qual você deseja enviar as notificações.

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Type the "Team or Team channel name"

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

    Shows the team selection prompt on the Incoming Webhook app configuration dialog in Teams. Highlights the Team and the "Set up a connector" button

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

    Highlights the name property, optional image upload, and "Create" button in the Incoming Webhook options page.  

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

    Shows the new webhook URL on the Incoming Webhook options page after creation.

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

    Shows the notification in the Teams channel where you added the webhook connector.

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

  1. Selecione a guia Criar no painel esquerdo.

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

    Shows the "New pipeline" menu in the Azure Data Factory Studio.

  3. No painel "Propriedades" em "Geral", especifique NotifiyTeamsChannelPipeline para o Nome. Em seguida, recolha o painel clicando no ícone Propriedades no canto superior direito.

    Shows the "Properties" panel.

    Shows the "Properties" panel hidden.

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

    Shows the "Pipeline parameters".

    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.

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

    Shows the "Pipeline variables".

  6. Pesquise "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 ela ainda não estiver selecionada, e a respectiva guia "Geral" para editar os detalhes.

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

    Shows the "Set variable" activity general tab.

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

    Shows the "Set variable" activity variables tab.

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

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

  13. No painel "Geral", especifique Invocar o URL do Teams do webhook para o Nome da atividade da Web.

    Shows the "Web" activity general pane.

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

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

    Shows the "Web" activity settings pane.

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

    Shows the "Validate, Debug, Publish" buttons to validate, debug, and then publish your pipeline.

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.

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

  2. No painel "Geral", em Propriedades, especifique CopyPipeline para Nome. Em seguida, recolha o painel clicando no ícone Propriedades no canto superior direito.

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

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

    Shows the "Execute pipeline" activity general pane for "LoadDataPipeline" pipeline.

    Shows the "Execute pipeline" activity setting pane for "LoadDataPipeline" pipeline.

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

    Shows the second "Execute pipeline" activity "OnSuccess Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the second "Execute pipeline" activity "OnSuccess Notification" setting pane for "NotifiyTeamsChannelPipeline" pipeline.

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

    Shows the third "Execute pipeline" activity "OnFailure Notification" general pane for "NotifiyTeamsChannelPipeline" pipeline.

    Shows the third "Execute pipeline" activity "OnFailure Notification" settings pane for "NotifiyTeamsChannelPipeline" pipeline.

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

    Shows on success pipeline notifications in a Teams channel.

    Shows on failure pipeline notifications in a Teams channel.

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

Como enviar email de um pipeline