

# Métricas de consulta de outras fontes de dados
<a name="MultiDataSourceQuerying"></a>

Você pode usar o CloudWatch para consultar, visualizar e criar alarmes para métricas de outras fontes de dados. Para fazê-lo, conecte o CloudWatch a outras fontes de dados. Isso proporciona uma experiência de monitoramento única e consolidada no console do CloudWatch. Você pode ter uma visão unificada das métricas da sua infraestrutura e das aplicações, onde quer que os dados estejam armazenados, ajudando você a identificar e resolver problemas com mais rapidez. 

Depois que você se conecta a uma fonte de dados usando um assistente do CloudWatch, o CloudWatch cria uma pilha do AWS CloudFormation que implanta e configura uma função do AWS Lambda. Essa função do Lambda é executada sob demanda toda vez que você consulta a fonte de dados. O construtor de consultas do CloudWatch mostra em tempo real uma lista de elementos que podem ser consultados, como métricas, tabelas, campos ou rótulos. Conforme você faz escolhas, o criador de consultas preenche previamente uma consulta no idioma nativo da fonte selecionada. 

O CloudWatch fornece assistentes guiados para você se conectar às fontes de dados a seguir. Para essas fontes de dados, forneça informações básicas para identificar a fonte de dados e as credenciais. Você também pode criar manualmente conectores para outras fontes de dados ao criar suas próprias funções do Lambda.
+ Amazon OpenSearch Service: obtenha métricas dos logs e rastreamentos do OpenSearch Service.
+ Amazon Managed Service for Prometheus: consulte essas métricas usando o PromQL.
+ Amazon RDS para MySQL: use o SQL para converter dados armazenados em tabelas do Amazon RDS em métricas.
+ Amazon RDS para PostgreSQL: use o SQL para converter dados armazenados em tabelas do Amazon RDS em métricas.
+ Arquivos CSV do Amazon S3: exiba dados de métricas de um arquivo CSV armazenado em um bucket do Amazon S3.
+ Microsoft Azure Monitor: consulte métricas da sua conta do Microsoft Azure Monitor.
+ Prometheus: consulte essas métricas usando o PromQL.

Depois de criar conectores para fontes de dados, consulte [Criar um gráfico de métricas com base em outra fonte de dados](graph_a_metric.md#create-metric-graph-multidatasource) para obter informações sobre como representar graficamente uma métrica baseada em uma fonte de dados. Para obter informações sobre como configurar um alarme em uma métrica de uma fonte de dados, consulte [Criação de um alarme com base em uma fonte de dados conectada](Create_MultiSource_Alarm.md).

**Topics**
+ [Gerenciar o acesso a fontes de dados](CloudWatch_MultiDataSources_Permissions.md)
+ [Conectar-se a uma fonte de dados pré-criada com um assistente](CloudWatch_MultiDataSources-Connect.md)
+ [Criar um conector personalizado para uma fonte de dados](CloudWatch_MultiDataSources-Connect-Custom.md)
+ [Usar sua fonte de dados personalizada](CloudWatch_MultiDataSources-Custom-Use.md)
+ [Excluir um conector de uma fonte de dados](CloudWatch_MultiDataSources-Delete.md)

# Gerenciar o acesso a fontes de dados
<a name="CloudWatch_MultiDataSources_Permissions"></a>

 O CloudWatch usa o CloudFormation para criar os recursos necessários na sua conta. Recomendamos que você use a condição `cloudformation:TemplateUrl` para controlar o acesso aos modelos do CloudFormation ao conceder permissões `CreateStack` aos usuários do IAM. 

**Atenção**  
Qualquer usuário a quem você concede permissão para invocar a fonte de dados pode consultar métricas dessa fonte de dados, mesmo que esse usuário não tenha permissões diretas do IAM para a fonte de dados. Por exemplo, se você conceder permissões `lambda:InvokeFunction` em uma função do Lambda da fonte de dados do Amazon Managed Service for Prometheus a um usuário, esse usuário poderá consultar métricas do espaço de trabalho correspondente do Amazon Managed Service for Prometheus, mesmo que você não tenha concedido a ele acesso direto do IAM a esse espaço de trabalho.

Você pode encontrar URLs de modelos para fontes de dados na página **Criar pilha** no console de configurações do CloudWatch. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFormationCreateStack",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:TemplateUrl": [
                        "https://s3.us-east-1.amazonaws.com/amzn-s3-demo-bucket/template.json"
                    ]
                }
            }
        }
    ]
}
```

------

Para obter mais informações sobre o controle de acesso ao CloudFormation, consulte [Controlar o acesso com o AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)

# Conectar-se a uma fonte de dados pré-criada com um assistente
<a name="CloudWatch_MultiDataSources-Connect"></a>

 Este tópico fornece instruções para usar o assistente para conectar o CloudWatch às fontes de dados a seguir. 
+ Amazon OpenSearch Service
+ Amazon Managed Service for Prometheus
+ Amazon RDS para MySQL
+ Amazon RDS para PostgreSQL
+ Arquivos CSV do Amazon S3
+ Microsoft Azure Monitor
+ Prometheus

 As seções subsequentes deste tópico incluem observações sobre como gerenciar e consultar cada uma dessas fontes de dados. 

**Como criar um conector de fonte de dados**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, selecione **Configurações**.

1. Escolha a guia **Fontes de dados de métricas**.

1. Escolha **Criar fonte de dados**.

1. Selecione a fonte que você deseja e escolha **Próximo**.

1. Insira um nome para a fonte de dados.

1. Insira as outras informações necessárias, dependendo da fonte de dados que você escolheu. Isso pode incluir credenciais para acessar a fonte de dados e informações de identificação da fonte de dados, como nome do espaço de trabalho do Prometheus, nome do banco de dados ou nome do bucket do Amazon S3. Para serviços da AWS, o assistente descobre os recursos e os preenche na lista suspensa de seleção.

   Para obter mais observações sobre a fonte de dados que você está usando, consulte as seções depois desse procedimento.

1. Para que o CloudWatch se conecte à fonte de dados em uma VPC, escolha **Usar uma VPC** e selecione a VPC a ser usada. Em seguida, selecione a sub-rede e o grupo de segurança.

1. Escolha **Confirmo que o CloudFormation pode criar recursos do IAM**. Esse recurso é o perfil de execução da função do Lambda.

1. Escolha **Criar fonte de dados**.

   A nova fonte que você acabou de adicionar não aparecerá até que a pilha CloudFormation termine de criá-la. Para verificar o progresso, escolha **Visualizar o status da minha pilha do CloudFormation**. Como alternativa, você pode escolher o ícone de atualização para atualizar essa lista.

   Quando a nova fonte de dados for exibida na lista, ela estará pronta para ser usada. Você pode escolher **Consulta das métricas do CloudWatch** para começar a fazer consultas com ele. Para obter mais informações, consulte [Criar um gráfico de métricas com base em outra fonte de dados](graph_a_metric.md#create-metric-graph-multidatasource).

## Amazon Managed Service for Prometheus
<a name="MultiDataSources-Amazon_Managed_Prometheus"></a>

**Atualizar a configuração da fonte de dados**
+ Você pode atualizar a fonte de dados manualmente da seguinte maneira:
  + Para atualizar o ID do espaço de trabalho do Amazon Managed Service for Prometheus, atualize a variável de ambiente `AMAZON_PROMETHEUS_WORKSPACE_ID` para a função do Lambda do conector de fonte de dados.
  + Para atualizar a configuração da VPC, consulte [Como configurar o acesso à VPC (console)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) para obter mais informações. 

**Consultar a fonte de dados**
+ Ao consultar o Amazon Managed Service for Prometheus, depois de selecionar a fonte de dados na guia **Consulta a várias fontes** e selecionar um conector do Amazon Managed Service for Prometheus, você pode usar o **Auxiliar de consulta** para descobrir métricas e rótulos e fornecer consultas do ProMQL simples. Você também pode usar o editor de consultas PromQL para criar uma consulta PromQL.
+ As consultas de várias linhas não são compatíveis com os conectores de fonte de dados do CloudWatch. Cada feed de linha é substituído por um espaço quando a consulta é executada ou quando você cria um alarme ou um widget de painel com a consulta. Em alguns casos, isso pode tornar a consulta inválida. Por exemplo, se a consulta contiver um comentário de uma só linha, ela não será válida. Se você tentar criar um painel ou um alarme com uma consulta de várias linhas na linha de comando ou na Infraestrutura como Código, a API rejeitará a ação com um erro de análise.

## Amazon OpenSearch Service
<a name="MultiDataSources-Amazon_OpenSearch"></a>

**Criar a fonte de dados**

Se o domínio do OpenSearch estiver habilitado para o FGAC, você deverá realizar o mapeamento do perfil de execução da função do Lambda do conector para um usuário no OpenSearch Service. Para obter mais informações, consulte a seção **Mapping users to roles** em [Managing permissions](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-access-control) na documentação do OpenSearch Service.

Se o domínio do OpenSearch puder ser acessado somente em uma nuvem privada virtual (VPC), será necessário incluir uma nova variável de ambiente, de forma manual, na função do Lambda chamada `AMAZON_OPENSEARCH_ENDPOINT`. O valor para esta variável deverá ser o domínio raiz do endpoint do OpenSearch. É possível obter esse domínio raiz ao remover `https://` e `<region>.es.amazonaws.com` do endpoint de domínio listado no console do OpenSearch Service. Por exemplo, se o endpoint do domínio fosse `https://sample-domain.us-east-1.es.amazonaws.com`, o domínio raiz seria `sample-domain`.

**Atualizar a fonte de dados**
+ Você pode atualizar a fonte de dados manualmente da seguinte maneira:
  + Para atualizar o domínio do OpenSearch Service, atualize a variável de ambiente `AMAZON_OPENSEARCH_DOMAIN_NAME` para a função do Lambda do conector da fonte de dados.
  + Para atualizar a configuração da VPC, consulte [Como configurar o acesso à VPC (console)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) para obter mais informações. 

**Consultar a fonte de dados**
+ Ao consultar o OpenSearch Service, depois de selecionar a fonte de dados na guia **Consulta de várias fontes**, faça o seguinte:
  + Selecione o Índice a ser consultado.
  + Selecione o nome da Métrica (qualquer campo numérico no documento) e Estatística.
  + Selecione o eixo do Tempo (qualquer campo de data no documento).
  + Selecione Filtros a serem aplicados (qualquer campo de String no documento).
  + Escolha **Representar consulta graficamente**.

## Amazon RDS para PostgreSQL e Amazon RDS para MySQL
<a name="MultiDataSources-Amazon_RDS_PostGre_SQL"></a>

**Criar a fonte de dados**
+ Se sua fonte de dados só estiver acessível em uma VPC, você deverá incluir a configuração da VPC para o conector, conforme descrito em [Conectar-se a uma fonte de dados pré-criada com um assistente](#CloudWatch_MultiDataSources-Connect). Se a fonte de dados se conectar à VPC para obter credenciais, o endpoint deverá ser configurado na VPC. Para obter mais informações, consulte [Usar um endpoint da VPC no AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html). 

  Além disso, você deve criar um endpoint da VPC para o serviço do Amazon RDS. Para obter mais informações, consulte [API do Amazon RDS e endpoints da VPC de interface (AWS PrivateLink)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html).

**Atualizar a fonte de dados**
+ Você pode atualizar a fonte de dados manualmente da seguinte maneira:
  + Para atualizar a instância do banco de dados, atualize a variável de ambiente `RDS_INSTANCE` para a função do Lambda do conector da fonte de dados.
  + Para atualizar o nome de usuário e a senha usados para conectar-se ao Amazon RDS, use AWS Secrets Manager. Você pode encontrar o ARN do segredo usado para a fonte de dados na variável de ambiente `RDS_SECRET` na função do Lambda da fonte de dados. Para obter mais informações sobre como atualizar o segredo no AWS Secrets Manager, consulte [Modificação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html).
  + Para atualizar a configuração da VPC, consulte [Como configurar o acesso à VPC (console)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) para obter mais informações. 

**Consultar a fonte de dados**
+ Ao consultar o Amazon RDS, depois de selecionar a fonte de dados na guia **Consulta de várias fontes** e selecionar um conector do Amazon RDS, você pode usar o detector de banco de dados para visualizar bancos de dados, tabelas e colunas disponíveis. Você também pode usar o editor SQL para criar uma consulta SQL.

  Você pode usar as seguintes variáveis na consulta:
  + `$start.iso`: a hora de início em formato de data ISO
  + `$end.iso`: a hora de término em formato de data ISO
  + `$period`: o período selecionado em segundos

  Por exemplo, você pode consultar `SELECT value, timestamp FROM table WHERE timestamp BETWEEN $start.iso and $end.iso`
+ As consultas de várias linhas não são compatíveis com os conectores de fonte de dados do CloudWatch. Cada feed de linha é substituído por um espaço quando a consulta é executada ou quando você cria um alarme ou um widget de painel com a consulta. Em alguns casos, isso pode tornar a consulta inválida. Por exemplo, se a consulta contiver um comentário de uma só linha, ela não será válida. Se você tentar criar um painel ou um alarme com uma consulta de várias linhas na linha de comando ou na Infraestrutura como Código, a API rejeitará a ação com um erro de análise.

**nota**  
Se nenhum campo de data for encontrado nos resultados, os valores de cada campo numérico serão somados a valores únicos e representados graficamente no intervalo de tempo fornecido. Se os carimbos de data/hora não estiverem alinhados com o período selecionado no CloudWatch, os dados serão automaticamente agregados usando `SUM` e alinhados com o período no CloudWatch.

## Arquivos CSV do Amazon S3
<a name="MultiDataSources-Amazon_S3_CSV"></a>

**Consultar a fonte de dados**
+ Ao consultar arquivos CSV do Amazon S3, depois de selecionar a fonte de dados na guia **Consulta de várias fontes** e selecionar um conector do Amazon S3, selecione o bucket e a chave do Amazon S3.

  O arquivo CSV deve estar nos seguintes formatos:
  + O carimbo de data e hora deve ser a primeira coluna.
  + A tabela deve ter uma linha de cabeçalho. Os cabeçalhos são usados para dar nome às métricas. O título da coluna referente ao carimbo de data e hora será ignorado; somente os títulos das colunas de métricas são usados.
  + Os carimbos de data e hora devem estar no formato de data ISO.
  + As métricas devem ser campos numéricos.

  ```
  Timestamp, Metric-1, Metric-2, ...
  ```

  Este é um exemplo:    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonCloudWatch/latest/monitoring/CloudWatch_MultiDataSources-Connect.html)

**nota**  
Se nenhum carimbo de data/hora for fornecido, os valores de cada métrica serão somados a valores únicos e representados graficamente no intervalo de tempo fornecido. Se os carimbos de data/hora não estiverem alinhados com o período selecionado no CloudWatch, os dados serão automaticamente agregados usando `SUM` e alinhados com o período no CloudWatch.

## Microsoft Azure Monitor
<a name="MultiDataSources-Azure_Monitor"></a>

**Criar a fonte de dados**
+ Você deve fornecer seu ID de locatário, o ID do cliente e o segredo do cliente para se conectar ao Microsoft Azure Monitor. As credenciais serão armazenadas no AWS Secrets Manager. Para obter mais informações, consulte [Criar um aplicativo do Microsoft Entra e uma entidade de serviço que possa acessar recursos](https://learn.microsoft.com/en-us/entra/identity-platform/howto-create-service-principal-portal) na documentação da Microsoft. 

**Atualizar a fonte de dados**
+ Você pode atualizar a fonte de dados manualmente da seguinte maneira:
  + Para atualizar o ID do locatário, o ID do cliente e o segredo do cliente usados para se conectar ao Azure Monitor, você pode encontrar o ARN do segredo usado para a fonte de dados como a variável de ambiente `AZURE_CLIENT_SECRET` na função do Lambda da fonte de dados. Para obter mais informações sobre como atualizar o segredo no AWS Secrets Manager, consulte [Modificação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html).

**Consultar a fonte de dados**
+ Ao consultar o Azure Monitor, depois de selecionar a fonte de dados na guia **Consulta de várias fontes** e selecionar um conector do Azure Monitor, especifique a assinatura do Azure, o grupo de recursos e o recurso. Em seguida, você pode selecionar o namespace, a métrica e a agregação da métrica e filtrar por dimensões. 

## Prometheus
<a name="MultiDataSources-Prometheus"></a>

**Criar a fonte de dados**
+ Você deve fornecer o endpoint do Prometheus e o usuário e a senha necessários para consultar o Prometheus. As credenciais serão armazenadas no AWS Secrets Manager. 
+ Se sua fonte de dados só estiver acessível em uma VPC, você deverá incluir a configuração da VPC para o conector, conforme descrito em [Conectar-se a uma fonte de dados pré-criada com um assistente](#CloudWatch_MultiDataSources-Connect). Se a fonte de dados se conectar para obter credenciais, o endpoint deverá ser configurado na VPC. Para obter mais informações, consulte [Usar um endpoint da VPC no AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html). 

**Atualizar a configuração da fonte de dados**
+ Você pode atualizar a fonte de dados manualmente da seguinte maneira:
  + Para atualizar o endpoint do Prometheus, especifique o novo endpoint como a variável de ambiente `PROMETHEUS_API_ENDPOINT` na função do Lambda da fonte de dados.
  + Para atualizar o nome de usuário e a senha usados para se conectar ao Prometheus, você pode encontrar o ARN do segredo usado para a fonte de dados como a variável de ambiente `PROMETHEUS_API_SECRET` na função do Lambda da fonte de dados. Para obter mais informações sobre como atualizar o segredo no AWS Secrets Manager, consulte [Modificação de um segredo do AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_update-secret.html).
  + Para atualizar a configuração da VPC, consulte [Como configurar o acesso à VPC (console)](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring) para obter mais informações. 

**Consultar a fonte de dados**

**Importante**  
Os tipos de métricas do Prometheus são diferentes das métricas do CloudWatch e muitas métricas disponibilizadas por meio do Prometheus são cumulativas por projeto. Quando você consulta métricas do Prometheus, o CloudWatch não aplica qualquer transformação adicional aos dados: se você especificar somente o nome ou o rótulo da métrica, o valor exibido será cumulativo. Para obter mais informações, consulte [Tipos de métrica](https://prometheus.io/docs/concepts/metric_types/) na documentação do Prometheus.  
Para ver os dados das métricas do Prometheus como valores discretos, como as métricas do CloudWatch, você precisa editar a consulta antes de executá-la. Por exemplo, talvez seja necessário adicionar uma chamada à função de taxa em vez do nome da métrica do Prometheus. Para obter a documentação sobre a função de taxa e outras funções do Prometheus, consulte [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate) na documentação do Prometheus.

As consultas de várias linhas não são compatíveis com os conectores de fonte de dados do CloudWatch. Cada feed de linha é substituído por um espaço quando a consulta é executada ou quando você cria um alarme ou um widget de painel com a consulta. Em alguns casos, isso pode tornar a consulta inválida. Por exemplo, se a consulta contiver um comentário de uma só linha, ela não será válida. Se você tentar criar um painel ou um alarme com uma consulta de várias linhas na linha de comando ou na Infraestrutura como Código, a API rejeitará a ação com um erro de análise.

## Notificação de atualizações disponíveis
<a name="CloudWatch_MultiDataSources-Future-Updates"></a>

Ocasionalmente, a Amazon poderá notificar você para recomendar a atualização dos conectores com uma versão mais recente disponível e fornecerá instruções sobre como fazê-lo.

# Criar um conector personalizado para uma fonte de dados
<a name="CloudWatch_MultiDataSources-Connect-Custom"></a>

 Este tópico descreve como conectar uma fonte de dados personalizada ao CloudWatch. É possível conectar uma fonte de dados personalizada ao CloudWatch de duas maneiras: 
+  Ao usar um modelo de amostra fornecido pelo CloudWatch. Você pode usar JavaScript ou Python com esse modelo. Esses modelos incluem um código de amostra do Lambda que será útil durante a criação da função do Lambda. Em seguida, você pode modificar a função do Lambda com base no modelo para se conectar à sua fonte de dados personalizada. 
+  Ao criar uma função do AWS Lambda desde o início que implementa o conector da fonte de dados, a consulta de dados e a preparação da série temporal para uso por parte do CloudWatch. Essa função deve pré-agregar ou mesclar pontos de dados, se necessário, e também alinhar o período e os carimbos de data/hora para serem compatíveis com o CloudWatch. 

**Contents**
+ [Usar um modelo](#CloudWatch_MultiDataSources-Connect-Custom-template)
+ [Criar uma fonte de dados personalizada do zero](#CloudWatch_MultiDataSources-Connect-Custom-Lambda)
  + [Etapa 1: criar a função](#MultiDataSources-Connect-Custom-Lambda-Function)
    + [Evento GetMetricData](#MultiDataSources-GetMetricData)
    + [DescribeGetMetricData event](#MultiDataSources-DescribeGetMetricData)
    + [Considerações importantes para alarmes do CloudWatch](#MultiDataSources-Connect-Custom-Lambda-Alarms)
    + [(Opcional) Usar o AWS Secrets Manager para armazenar credenciais](#MultiDataSources-Connect-Custom-Lambda-Secrets)
    + [(Opcional) Conecte-se a uma fonte de dados em uma VPC](#MultiDataSources-Connect-Custom-Lambda-VPC)
  + [Etapa 2: criar uma política de permissões do Lambda](#MultiDataSources-Connect-Custom-Lambda-Permissions)
  + [Etapa 3: anexar uma tag de recurso à função do Lambda](#MultiDataSources-Connect-Custom-Lambda-tags)

## Usar um modelo
<a name="CloudWatch_MultiDataSources-Connect-Custom-template"></a>

O uso de um modelo cria um exemplo da função do Lambda e pode ajudar você a criar o conector personalizado com mais rapidez. Esses exemplos de funções fornecem exemplos de código para muitos cenários comuns envolvidos na criação de um conector personalizado. Você pode examinar o código do Lambda depois de criar um conector com um modelo e modificá-lo para usá-lo para se conectar à fonte de dados.

Além disso, se você usar o modelo, o CloudWatch se encarregará de criar a política de permissões do Lambda e anexará tags de recursos à função do Lambda.

**Como usar o modelo para criar um conector para uma fonte de dados personalizada**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, selecione **Configurações**.

1. Escolha a guia **Fontes de dados de métricas**.

1. Escolha **Criar fonte de dados**.

1. Escolha o botão de opção em **Personalizado: conceitos básicos do modelo** e, em seguida, escolha **Próximo**.

1. Insira um nome para a fonte de dados.

1. Selecione um dos modelos listados.

1. Selecione Node.js ou Python.

1. Escolha **Criar fonte de dados**.

   A nova fonte personalizada que você acabou de adicionar não será exibida até que a pilha do CloudFormation termine de criá-la. Para verificar o progresso, escolha **Visualizar o status da minha pilha do CloudFormation**. Como alternativa, você pode escolher o ícone de atualização para atualizar essa lista.

   Quando sua nova fonte de dados for exibida nessa lista, ela estará pronta para ser testada no console e modificada.

1. (Opcional) Para consultar os dados de teste dessa fonte no console, siga as instruções em [Criar um gráfico de métricas com base em outra fonte de dados](graph_a_metric.md#create-metric-graph-multidatasource).

1. Modifique a função do Lambda de acordo com suas necessidades. 

   1. No painel de navegação, selecione **Configurações**.

   1. Escolha a guia **Fontes de dados de métricas**.

   1. Escolha **Visualizar no console do Lambda** para a fonte que você deseja modificar.

   Agora, é possível modificar a função para acessar a fonte de dados. Para obter mais informações, consulte [Etapa 1: criar a função](#MultiDataSources-Connect-Custom-Lambda-Function).
**nota**  
Se usar o modelo quando escrever a função do Lambda, você não precisará seguir as instruções em [Etapa 2: criar uma política de permissões do Lambda](#MultiDataSources-Connect-Custom-Lambda-Permissions) ou [Etapa 3: anexar uma tag de recurso à função do Lambda](#MultiDataSources-Connect-Custom-Lambda-tags). Essas etapas foram executadas pelo CloudWatch porque você usou o modelo.

## Criar uma fonte de dados personalizada do zero
<a name="CloudWatch_MultiDataSources-Connect-Custom-Lambda"></a>

Siga as etapas nesta seção para criar uma função do Lambda que conecte o CloudWatch a uma fonte de dados. 

### Etapa 1: criar a função
<a name="MultiDataSources-Connect-Custom-Lambda-Function"></a>

O conector de uma fonte de dados personalizada deve ser compatível com eventos `GetMetricData` do CloudWatch. Opcionalmente, você também pode implementar um evento `DescribeGetMetricData` para fornecer documentação aos usuários no console do CloudWatch sobre como usar o conector. A resposta `DescribeGetMetricData` também pode ser usada para definir os padrões que serão usados no construtor de consultas personalizadas do CloudWatch.

O CloudWatch fornece trechos de código como exemplos para ajudar você a começar. Para obter mais informações, consulte o repositório de exemplos em [https://github.com/aws-samples/cloudwatch-data-source-samples](https://github.com/aws-samples/cloudwatch-data-source-samples).

**Restrições**
+ A resposta do Lambda deve ser menor que 6 Mb. Se a resposta exceder 6 Mb, a resposta `GetMetricData` marcará a função do Lambda como `InternalError` e nenhum dado será retornado.
+ A função do Lambda deve concluir a execução em até dez segundos para fins de visualização e criação de painéis, ou em até 4,5 segundos para uso de alarmes. Se o tempo de execução exceder esse tempo, a resposta `GetMetricData` marcará a função do Lambda como `InternalError` e nenhum dado será retornado.
+ A função do Lambda deve enviar a saída usando carimbos de data/hora de período em segundos.
+ Se a função do Lambda não amostrar os dados novamente e, em vez disso, retornar dados que não correspondam à hora de início e à duração do período solicitados pelo usuário do CloudWatch, esses dados serão ignorados pelo CloudWatch. Os dados adicionais são descartados de qualquer visualização ou alarme. Qualquer dado que não esteja entre a hora de início e a hora de término também é descartado.

  Por exemplo, se o usuário solicitar dados das 10:00 às 11:00 com um período de cinco minutos, “10:00:00 a 10:04:59” e “10:05:00 a 10:09:59” serão os intervalos de tempo válidos para que os dados sejam retornados. Você deve retornar uma série temporal que inclua `10:00 value1`, `10:05 value2` e assim por diante. Se a função retornar `10:03 valueX`, por exemplo, ela será descartada porque 10:03 não corresponde à hora de início e ao período solicitados.
+ As consultas de várias linhas não são compatíveis com os conectores de fonte de dados do CloudWatch. Cada feed de linha é substituído por um espaço quando a consulta é executada ou quando você cria um alarme ou um widget de painel com a consulta. Em alguns casos, isso pode tornar a consulta inválida.

#### Evento GetMetricData
<a name="MultiDataSources-GetMetricData"></a>

**Carga da solicitação**

Veja a seguir um exemplo de uma carga da solicitação `GetMetricData` enviada como entrada para a função do Lambda.

```
{
  "EventType": "GetMetricData",
  "GetMetricDataRequest": {
    "StartTime": 1697060700,
    "EndTime": 1697061600,
    "Period": 300,
    "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] 
  }
}
```
+ **StartTime**: o carimbo de data/hora que especifica os primeiros dados a serem retornados. O **Tipo** é o período do carimbo de data/hora em segundos.
+ **EndTime**: o carimbo de data/hora que especifica os últimos dados a serem retornados. O **Tipo** é o período do carimbo de data/hora em segundos.
+ **Período**: o número de segundos que cada agregação dos dados de métricas representa. O mínimo é 60 segundos. O **Tipo** é Segundos.
+ **Argumentos**: matriz de argumentos a serem passados para a expressão matemática de métricas do Lambda. Para obter mais informações sobre como passar argumentos, consulte [Como passar argumentos para sua função do Lambda](CloudWatch_MultiDataSources-Custom-Use.md#MultiDataSources-Connect-Custom-Lambda-arguments).

**Carga da resposta**

Veja a seguir um exemplo de carga da resposta `GetMetricData` retornada pela função do Lambda.

```
{
   "MetricDataResults": [
      {
         "StatusCode": "Complete",
         "Label": "CPUUtilization",
         "Timestamps": [ 1697060700, 1697061000, 1697061300 ],
         "Values": [ 15000, 14000, 16000 ]
      }
   ]
}
```

A carga da resposta conterá um campo `MetricDataResults` ou um campo `Error`, mas não ambos.

Um campo `MetricDataResults` é uma lista de campos de séries temporais do tipo `MetricDataResult`. Cada um desses campos de séries temporais pode incluir os campos a seguir.
+ **StatusCode**: (opcional) `Complete` indica que todos os pontos de dados no intervalo de tempo solicitado foram retornados. `PartialData` significa que um conjunto incompleto de pontos de dados foi retornado. Se isso for omitido, o padrão será `Complete`.

  Valores válidos: `Complete` \$1 `InternalError` \$1 `PartialData` \$1 `Forbidden`
+ **Mensagens**: lista opcional de mensagens com informações adicionais sobre os dados retornados.

  Tipo: matriz de objetos [MessageData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MessageData.html) com strings `Code` e `Value`.
+ **Rótulo**: o rótulo legível por humanos associado aos dados.

  Tipo: string
+ **Carimbos de data/hora**: os carimbos de data/hora dos pontos de dados, formatados em períodos. O número de carimbos de data/hora sempre corresponde ao número de valores, e o valor para `Timestamps[x]` é `Values[x`].

  Tipo: matriz de carimbos de data/hora
+ **Valores**: os valores dos pontos de dados da métrica, correspondentes a `Timestamps`. O número de valores sempre corresponde ao número de carimbos de data/hora, e o valor para `Timestamps[x]` é `Values[x`].

  Tipo: matriz de duplas

Para obter mais informações sobre objetos de `Error`, consulte as seções a seguir.

**Formatos de resposta de erro**

Opcionalmente, você pode usar a resposta de erro para fornecer mais informações sobre erros. Recomendamos que você retorne um erro com validação de código quando ocorrer um erro de validação, como quando um parâmetro está ausente ou é do tipo errado.

Veja a seguir um exemplo da resposta quando a função do Lambda deseja gerar uma exceção de validação `GetMetricData`.

```
{
   "Error": {
      "Code": "Validation",
      "Value": "Invalid Prometheus cluster"
   }
}
```

Veja a seguir um exemplo da resposta quando a função do Lambda indica que não consegue retornar dados devido a um problema de acesso. A resposta é convertida em uma única série temporal com um código de status de `Forbidden`.

```
{
   "Error": {
      "Code": "Forbidden",
      "Value": "Unable to access ..."
   }
}
```

Veja a seguir um exemplo de quando a função do Lambda gera uma exceção geral `InternalError`, que é convertida em uma única série temporal com um código de status de `InternalError` e uma mensagem. Sempre que um código de erro tem um valor diferente de `Validation` ou `Forbidden`, o CloudWatch pressupõe que trata-se de um erro interno genérico.

```
{
   "Error": {
      "Code": "PrometheusClusterUnreachable",
      "Value": "Unable to communicate with the cluster"
   }
}
```

#### DescribeGetMetricData event
<a name="MultiDataSources-DescribeGetMetricData"></a>

**Carga da solicitação**

Veja a seguir um exemplo de carga da solicitação `DescribeGetMetricData`.

```
{
  "EventType": "DescribeGetMetricData"
}
```

**Carga da resposta**

Veja a seguir um exemplo de carga da resposta `DescribeGetMetricData`.

```
{
    "Description": "Data source connector",
    "ArgumentDefaults": [{
        Value: "default value"
     }]
}
```
+ **Descrição**: uma descrição de como usar o conector da fonte de dados. Essa descrição será exibida no console do CloudWatch. O Markdown é compatível.

  Tipo: string
+ **ArgumentDefaults**: a matriz opcional de valores padrão de argumentos usada preenche previamente o construtor da fonte de dados personalizada.

  Se `[{ Value: "default value 1"}, { Value: 10}]` for retornado, o construtor de consultas no console do CloudWatch exibirá duas entradas: a primeira com “valor padrão 1” e a segunda com 10.

  Se `ArgumentDefaults` não for fornecida, uma única entrada será exibida com o padrão de tipo definido como `String`.

  Tipo: matriz de objetos contendo Valor e Tipo. 
+ **Erro**: (opcional) um campo de erro pode ser incluído em qualquer resposta. Você pode ver exemplos em [Evento GetMetricData](#MultiDataSources-GetMetricData).

#### Considerações importantes para alarmes do CloudWatch
<a name="MultiDataSources-Connect-Custom-Lambda-Alarms"></a>

 Se você usar a fonte de dados para definir alarmes do CloudWatch, deverá configurá-la para relatar dados com carimbos e data/hora a cada minuto para o CloudWatch. Para obter mais informações e outras considerações sobre a criação de alarmes com base em métricas de fontes de dados conectadas, consulte [Criação de um alarme com base em uma fonte de dados conectada](Create_MultiSource_Alarm.md).

#### (Opcional) Usar o AWS Secrets Manager para armazenar credenciais
<a name="MultiDataSources-Connect-Custom-Lambda-Secrets"></a>

Se a função do Lambda precisar usar credenciais para acessar a fonte de dados, recomendamos usar o AWS Secrets Manager para armazenar essas credenciais em vez de codificá-las na função do Lambda. Para obter mais informações sobre como usar o AWS Secrets Manager com o Lambda, consulte [Usar segredos do AWS Secrets Manager em funções do AWS Lambda](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html). 

#### (Opcional) Conecte-se a uma fonte de dados em uma VPC
<a name="MultiDataSources-Connect-Custom-Lambda-VPC"></a>

Se sua fonte de dados estiver em uma VPC gerenciada pela Amazon Virtual Private Cloud, você deverá configurar sua função do Lambda para acessá-la. Para obter mais informações, consulte [Como conectar as redes de saída aos recursos em uma VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

Talvez você também precise configurar endpoints de serviço da VPC para acessar serviços, como o AWS Secrets Manager. Para obter mais informações, consulte [Acessar um serviço da AWS usando um endpoint da VPC de interface](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#access-service-though-endpoint).

### Etapa 2: criar uma política de permissões do Lambda
<a name="MultiDataSources-Connect-Custom-Lambda-Permissions"></a>

Você deve criar uma declaração de política que conceda permissão ao CloudWatch para usar a função do Lambda que você criou. Você pode usar a AWS CLI ou o console do Lambda para criar a declaração de política.

**Como usar a AWS CLI para criar a declaração de política**
+ Insira o comando a seguir. Substitua *123456789012* pelo ID da sua conta, substitua *my-data-source-function* pelo nome da função do Lambda e substitua *MyDataSource-DataSourcePermission1234* por um valor exclusivo arbitrário.

  ```
  aws lambda add-permission --function-name my-data-source-function --statement-id MyDataSource-DataSourcePermission1234 --action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account 123456789012
  ```

### Etapa 3: anexar uma tag de recurso à função do Lambda
<a name="MultiDataSources-Connect-Custom-Lambda-tags"></a>

O console do CloudWatch determina quais das funções do Lambda são conectores de fontes de dados usando uma tag. Quando você cria uma fonte de dados usando um dos assistentes, a tag é aplicada automaticamente pela pilha do CloudFormation que a configura. Ao criar uma fonte de dados por conta própria, você pode usar a tag a seguir para a função do Lambda. Isso faz com que o conector seja exibido na lista suspensa **Fonte de dados** no console do CloudWatch quando você consulta métricas.
+ Uma tag com `cloudwatch:datasource` como chave e `custom` como valor.

# Usar sua fonte de dados personalizada
<a name="CloudWatch_MultiDataSources-Custom-Use"></a>

 Após criar uma fonte de dados, é possível usá-la para consultar e visualizar dados provenientes dessa fonte, assim como para configurar alarmes. Se você usou um modelo para criar o conector da fonte de dados personalizada ou adicionou a etiqueta mencionada na [Etapa 3: anexar uma tag de recurso à função do Lambda](CloudWatch_MultiDataSources-Connect-Custom.md#MultiDataSources-Connect-Custom-Lambda-tags), é possível seguir as etapas apresentadas em [Criar um gráfico de métricas com base em outra fonte de dados](graph_a_metric.md#create-metric-graph-multidatasource) para consultá-la. Você também poderá usar a função de matemática de métricas `LAMBDA` para consultá-la, conforme será explicado na seção a seguir. Para obter informações sobre como criar um alarme em métricas de uma fonte de dados, consulte [Criação de um alarme com base em uma fonte de dados conectada](Create_MultiSource_Alarm.md). Este tópico descreve como transmitir argumentos da função do Lambda para a fonte de dados personalizada. 

## Como passar argumentos para sua função do Lambda
<a name="MultiDataSources-Connect-Custom-Lambda-arguments"></a>

A forma recomendada de passar argumentos para a fonte de dados personalizada é usar o construtor de consultas no console do CloudWatch ao consultar a fonte de dados.

Você também pode usar a função do Lambda para recuperar dados da fonte de dados usando a nova expressão `LAMBDA` na matemática de métricas do CloudWatch.

```
LAMBDA("LambdaFunctionName" [, optional-arg]*)
```

`optional-arg` tem até 20 strings, números ou booleanos. Por exemplo, `param`, `3.14` ou `true`.

**nota**  
Strings de várias linhas não são compatíveis com os conectores de fonte de dados do CloudWatch. Cada feed de linha é substituído por um espaço quando a consulta é executada ou quando você cria um alarme ou um widget de painel com a consulta. Em alguns casos, isso pode tornar a consulta inválida.

Ao usar a função matemática de métricas `LAMBDA`, você pode fornecer o nome da função (`"MyFunction"`). Se sua política de recursos permitir, você também poderá usar uma versão específica da função (`"MyFunction:22"`) ou um alias (`"MyFunction:MyAlias"`) da função do Lambda. Não é possível usar `*`

Veja a seguir alguns exemplos de chamada para a função `LAMBDA`.

```
LAMBDA("AmazonOpenSearchDataSource", "MyDomain", "some-query")
```

```
LAMBDA("MyCustomDataSource", true, "fuzzy", 99.9)
```

A função matemática de métricas `LAMBDA` retorna uma lista de séries temporais que podem ser retornadas ao solicitante ou combinadas com outras funções matemáticas de métricas. Veja a seguir um exemplo de combinação de `LAMBDA` com outras funções matemáticas de métricas.

```
FILL(LAMBDA("AmazonOpenSearchDataSource", "MyDomain", "some-query"), 0)
```

# Excluir um conector de uma fonte de dados
<a name="CloudWatch_MultiDataSources-Delete"></a>

 As instruções apresentadas nesta seção descrevem como excluir um conector para uma fonte de dados. 

**Como excluir um conector de uma fonte de dados**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, selecione **Configurações**.

1. Escolha a guia **Fontes de dados de métricas**.

1. Escolha **Gerenciar no CloudFormation** na linha da fonte de dados que você deseja excluir.

   Você será direcionado para o console do CloudFormation.

1. Na seção com o nome da sua fonte de dados, escolha **Excluir**.

1. No pop-up de confirmação, escolha **Excluir**.