

# Ativar o registro em log de consultas para a instância de banco de dados do RDS para PostgreSQL
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging"></a>

Você pode coletar informações mais detalhadas sobre suas atividades de banco de dados, inclusive consultas, consultas à espera de bloqueios, pontos de verificação e muitos outros detalhes definindo alguns dos parâmetros listados na tabela a seguir. Este tópico se concentra no registro em log de consultas.


| Parâmetro | Padrão | Descrição | 
| --- | --- | --- | 
| log\$1connections | – | Registra cada conexão bem-sucedida.  | 
| log\$1disconnections | – | Registra o final de cada sessão e sua duração.  | 
| log\$1checkpoints | 1 | Registra em log cada ponto de verificação.  | 
| log\$1lock\$1waits | – | Registra esperas de bloqueio longas. Por padrão, esse parâmetro não está definido. | 
| log\$1min\$1duration\$1sample | – | (ms) Define o tempo de execução mínimo acima do qual uma amostra de declarações será registrada. O tamanho da amostra é definido usando o parâmetro log\$1statement\$1sample\$1rate. | 
| log\$1min\$1duration\$1statement | – | Todas as instruções SQL executadas pelo menos por um período especificado ou mais é registrada. Por padrão, esse parâmetro não está definido. Ativar esse parâmetro pode ajudar a encontrar consultas não otimizadas. | 
| log\$1statement | – | Define o tipo de instruções registradas. Por padrão, esse parâmetro não está definido, mas você pode alterá-lo para `all`, `ddl` ou `mod` para especificar os tipos de declaração SQL que você deseja registrar. Se você especificar algo diferente de `none` para esse parâmetro, você também deve tomar medidas adicionais para evitar a exposição de senhas nos arquivos de log. Para ter mais informações, consulte [Reduzir o risco de exposição de senhas ao usar o registro em log de consultasReduzir o risco de exposição de senhas](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk).  | 
| log\$1statement\$1sample\$1rate | – | A porcentagem de declarações que excedem o tempo especificado em `log_min_duration_sample` para serem registradas, expressa como um valor de ponto flutuante entre 0,0 e 1,0.  | 
| log\$1statement\$1stats | – | Grava estatísticas de desempenho cumulativas no log do servidor. | 

## Usar o registro em log para encontrar consultas de baixa performance
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.using"></a>

Você pode registrar consultas e declarações SQL para ajudar a encontrar consultas com a performance lenta. Você ativa esse recurso modificando as configurações dos parâmetros `log_statement` e `log_min_duration` conforme descrito nesta seção. Antes de ativar o registro em log de consultas para sua instância de banco de dados do RDS para PostgreSQL, você deve estar ciente da possível exposição de senhas nos logs e de como reduzir os riscos. Para ter mais informações, consulte [Reduzir o risco de exposição de senhas ao usar o registro em log de consultasReduzir o risco de exposição de senhas](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk). 

A seguir, você encontrará informações de referência sobre os parâmetros `log_statement` e `log_min_duration`.log\$1statement

Esse parâmetro especifica o tipo de declarações SQL que devem ser enviadas ao log. O valor padrão é `none`. Se você alterar esse parâmetro para `all`, `ddl` ou `mod`, realize algumas das ações recomendadas para reduzir o risco de expor senhas nos logs. Para ter mais informações, consulte [Reduzir o risco de exposição de senhas ao usar o registro em log de consultasReduzir o risco de exposição de senhas](#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk). 

**todas**  
Registra todas as declarações. Essa configuração é recomendada para fins de depuração.

**ddl**  
Registra todas as declarações de linguagem de definição de dados (DDL), como CREATE, ALTER, DROP etc.

**mod**  
Registra todas as declarações DDL e declarações de linguagem de manipulação de dados (INSERT, UPDATE e DELETE) que modificam os dados.

**nenhuma**  
Nenhuma declaração SQL é registrada. Recomendamos essa configuração para evitar o risco de expor senhas nos logs.log\$1min\$1duration\$1statement

Todas as instruções SQL executadas pelo menos por um período especificado ou mais é registrada. Por padrão, esse parâmetro não está definido. Ativar esse parâmetro pode ajudar a encontrar consultas não otimizadas.

**–1–2147483647**  
O número de milissegundos (ms) de tempo de execução durante o qual uma declaração é registrada.

**Como configurar o registro em log de consultas**

Essas etapas pressupõem que o A instância de banco de dados do RDS para PostgreSQL usa um grupo de parâmetros de banco de dados personalizado. 

1. Defina o parâmetro `log_statement` como `all`. O exemplo a seguir mostra a informação gravada no arquivo `postgresql.log`com essa configuração de parâmetro.

   ```
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence
   FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s
   ORDER BY s.confidence DESC;
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats:
   ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed
   ! [0.025146 s user, 0.000000 s system total]
   ! 36644 kB max resident size
   ! 0/8 [0/8] filesystem blocks in/out
   ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps
   ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
   ! 19/0 [27/0] voluntary/involuntary context switches
   2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence
   FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s
   ORDER BY s.confidence DESC;
   2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1
   2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC;
   ----------------------- END OF LOG ----------------------
   ```

1. Defina o parâmetro `log_min_duration_statement`. O exemplo a seguir mostra a informação gravada no arquivo `postgresql.log` quando o parâmetro estiver definido como `1`.

   As consultas que excedem a duração especificada no parâmetro `log_min_duration_statement` são registradas. Por exemplo: Você pode visualizar o arquivo de log de sua instância de banco de dados do RDS para PostgreSQL no console do Amazon RDS. 

   ```
   2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments;
   2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms
   2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time
   2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB
   ----------------------- END OF LOG ----------------------
   ```

### Reduzir o risco de exposição de senhas ao usar o registro em log de consultas
<a name="USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk"></a>

Recomendamos manter `log_statement` definido como `none` para evitar a exposição de senhas. Se você definir `log_statement` como `all`, `ddl` ou`mod`, recomendamos que você siga uma ou mais destas etapas.
+ Para o cliente, criptografe informações confidenciais. Para ter mais informações consulte [Encryption Options](https://www.postgresql.org/docs/current/encryption-options.html) (Opções de criptografia) na documentação do PostgreSQL. Use as opções `ENCRYPTED` (e `UNENCRYPTED`) das declarações `CREATE` e `ALTER`. Para ter mais informações, consulte [CREATE USER](https://www.postgresql.org/docs/current/sql-createuser.html) na documentação do PostgreSQL.
+ Para instância de banco de dados do RDS para PostgreSQL, configure e use a extensão de auditoria do PostgreSQL (pgAudit). Essa extensão remove informações confidenciais das declarações CREATE e ALTER enviadas ao log. Para ter mais informações, consulte [Usar pgAudit para registrar a atividade do banco de dados](Appendix.PostgreSQL.CommonDBATasks.pgaudit.md). 
+ Restringir o acesso aos logs CloudWatch.
+ Use mecanismos de autenticação mais fortes, como IAM.