Registrar em log eventos de aplicação do Spark no Athena
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
As sessões do Athena também podem gravar logs no Amazon CloudWatch na conta que você está usando.
Entender fluxos de logs e grupos de logs
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 no Guia do usuário do Amazon CloudWatch Logs.
Usar objetos de logger padrão no Athena para Spark
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_user_logger: 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_shared_logger: 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ávelvar
no CloudWatch Logs e envia uma cópia de cada linha para o AWS Support.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 AWS Support.
Os loggers fornecidos gravam eventos por meio do Apache Log4jDEBUG
, 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.
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
-
Siga Introdução ao Apache Spark no Amazon Athena 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. -
Siga as etapas em Etapa 7: criar seu próprio caderno para criar um caderno e iniciar uma nova sessão.
-
No editor de cadernos do Athena, em uma nova célula do caderno, digite o seguinte comando:
athena_user_logger.info("Hello world.")
-
Execute a célula.
-
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
%session_id
.
-
-
Salve o ID da sessão.
-
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/
. -
No painel de navegação do console do CloudWatch, escolha Log groups (Grupos de logs).
-
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 forf8c22d11-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
-
Escolha o link do fluxo de logs para sua sessão.
-
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.
-
Retorne ao editor de cadernos do Athena.
-
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)
-
Execute a célula.
-
Retorne à página Log events (Eventos de logs) do console do CloudWatch para obter um fluxo de logs semelhante.
-
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