

# Registrar em log eventos de aplicação do Spark no Athena
<a name="notebooks-spark-logging"></a>

O editor de cadernos do Athena permite o registro em log padrão do Jupyter, do Spark e do Python. É possível usar `df.show()` para exibir o conteúdo do PySpark DataFrame ou usar `print("Output")` para exibir os valores na saída da célula. As saídas `stdout`, `stderr` e `results` para seus cálculos serão gravadas no local do bucket de resultados da consulta no Amazon S3.

## Registrar em log eventos de aplicação do Spark no Amazon CloudWatch
<a name="notebooks-spark-logging-logging-spark-application-events-to-amazon-cloudwatch"></a>

As sessões do Athena também podem gravar logs no [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) na conta que você está usando.

### Entender fluxos de logs e grupos de logs
<a name="notebooks-spark-logging-understanding-log-streams-and-log-groups"></a>

O CloudWatch organiza a atividade de log em fluxos de logs e grupos de logs.

**Fluxos de logs**: um fluxo de logs do CloudWatch corresponde a uma sequência de eventos de logs que compartilham a mesma origem. Cada origem separada de logs no CloudWatch Logs compõe um fluxo de logs separado.

**Grupos de logs**: no CloudWatch Logs, um grupo de logs corresponde a um grupo de fluxos de logs que compartilham as mesmas configurações de retenção, monitoramento e controle de acesso.

Não há limite para o número de streams de log que podem pertencer a um grupo de logs.

No Athena, quando você inicia uma sessão do caderno pela primeira vez, o Athena cria um grupo de logs no CloudWatch que usa o nome do seu grupo de trabalho habilitado para Spark, como no exemplo a seguir.

```
/aws-athena/workgroup-name
```

Esse grupo de logs recebe um fluxo de logs para cada executor em sua sessão, o que produz, no mínimo, um evento de logs. Um executor corresponde a menor unidade de computação que uma sessão do caderno pode solicitar do Athena. No CloudWatch, o nome do fluxo de logs começa com o ID da sessão e o ID do executor.

Para obter mais informações sobre os grupos de logs e os fluxos de logs do CloudWatch, consulte [Trabalhar com grupos de logs e fluxos de logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html) no Guia do usuário do Amazon CloudWatch Logs.

### Usar objetos de logger padrão no Athena para Spark
<a name="notebooks-spark-logging-using-standard-logger-objects-in-athena-for-spark"></a>

Em uma sessão do Athena para Spark, é possível usar os dois objetos logger de padrão global a seguir para gravar logs no Amazon CloudWatch:
+ **athena\$1user\$1logger**: envia logs somente para o CloudWatch. Use esse objeto quando desejar registrar em log as informações de suas aplicações Spark diretamente no CloudWatch, como no exemplo a seguir.

  ```
  athena_user_logger.info("CloudWatch log line.")
  ```

  O exemplo grava um evento de logs no CloudWatch como o seguinte:

  ```
  AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: CloudWatch log line.
  ```
+ **athena\$1shared\$1logger**: envia o mesmo log para o CloudWatch e para a AWS para fins de suporte. É possível usar esse objeto para compartilhar logs com as equipes de serviço da AWS para solução de problemas, como no exemplo a seguir.

  ```
  athena_shared_logger.info("Customer debug line.")
  var = [...some variable holding customer data...]
  athena_shared_logger.info(var)
  ```

  O exemplo registra em log a linha `debug` e o valor da variável `var` no CloudWatch Logs e envia uma cópia de cada linha para o Suporte.
**nota**  
Para sua privacidade, o código e os resultados dos cálculos não são compartilhados com a AWS. Certifique-se de que suas chamadas `athena_shared_logger` gravem somente as informações que você deseja tornar visíveis para o Suporte.

Os loggers fornecidos gravam eventos por meio do [Apache Log4j](https://logging.apache.org/log4j/) e herdam os níveis de registro em log dessa interface. Os valores de nível de log possíveis são `DEBUG`, `ERROR`, `FATAL`, `INFO` e `WARN` ou `WARNING`. É possível usar a função nomeada correspondente no logger para produzir esses valores.

**nota**  
Não vincule novamente os nomes `athena_user_logger` ou `athena_shared_logger`. Fazer isso torna os objetos de registro em log incapazes de gravar no CloudWatch pelo restante da sessão.

### Exemplo: registrar eventos de cadernos em log no CloudWatch
<a name="notebooks-spark-logging-example-logging-notebook-events-to-cloudwatch"></a>

O procedimento a seguir mostra como registrar em log os eventos de cadernos do Athena no Amazon CloudWatch Logs.

**Para registrar em log eventos de cadernos do Athena no Amazon CloudWatch Logs**

1. Siga [Introdução ao Apache Spark no Amazon Athena](notebooks-spark-getting-started.md) para criar um grupo de trabalho habilitado para Spark no Athena com um nome exclusivo. Este tutorial usa o nome `athena-spark-example` para o grupo de trabalho.

1. Siga as etapas em [Etapa 7: criar seu próprio caderno](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook) para criar um caderno e iniciar uma nova sessão.

1. No editor de cadernos do Athena, em uma nova célula do caderno, digite o seguinte comando:

   ```
   athena_user_logger.info("Hello world.")         
   ```

1. Execute a célula.

1. Recupere o ID da sessão atual seguindo um destes procedimentos:
   + Visualize a saída da célula (por exemplo, `... session=72c24e73-2c24-8b22-14bd-443bdcd72de4`).
   + Em uma nova célula, execute o comando [mágico](notebooks-spark-magics.md) `%session_id`.

1. Salve o ID da sessão.

1. Com a mesma Conta da AWS que você está usando para executar a sessão do caderno, abra o console do CloudWatch em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação do console do CloudWatch, escolha **Log groups** (Grupos de logs).

1. Na lista de grupos de logs, escolha o grupo de logs que tem o nome do seu grupo de trabalho do Athena habilitado para Spark, como no exemplo a seguir.

   ```
   /aws-athena/athena-spark-example
   ```

   A seção **Log streams** (Fluxos de logs) contém uma lista de um ou mais links de fluxo de logs para o grupo de trabalho. Cada nome de fluxo de logs contém o ID da sessão, o ID do executor e o UUID exclusivo separados por caracteres de barra.

   Por exemplo, se o ID da sessão for `5ac22d11-9fd8-ded7-6542-0412133d3177` e o ID do executor for `f8c22d11-9fd8-ab13-8aba-c4100bfba7e2`, o nome do fluxo de logs será semelhante ao exemplo a seguir.

   ```
   5ac22d11-9fd8-ded7-6542-0412133d3177/f8c22d11-9fd8-ab13-8aba-c4100bfba7e2/f012d7cb-cefd-40b1-90b9-67358f003d0b
   ```

1. Escolha o link do fluxo de logs para sua sessão.

1. Na página **Log events** (Eventos de logs), visualize a coluna **Message** (Mensagem).

   O evento de logs para a célula executada será semelhante ao seguinte:

   ```
   AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
   ```

1. Retorne ao editor de cadernos do Athena.

1. Em uma nova célula, insira o código a seguir. O código registrará em log uma variável no CloudWatch:

   ```
   x = 6
   athena_user_logger.warn(x)
   ```

1. Execute a célula.

1. Retorne à página **Log events** (Eventos de logs) do console do CloudWatch para obter um fluxo de logs semelhante.

1. O fluxo de logs agora vai conter uma entrada de evento de logs com uma mensagem como a seguinte:

   ```
   AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6
   ```