AWS

5 nov, 2014

Como monitorar e armazenar logs usando AWS

Publicidade

A gestão dos arquivos de log gerados pelas suas aplicações e pelo sistema operacional no qual elas rodam é fundamental por uma série de motivos. A informação pode se tornar muito importante para o diagnóstico de um bug, para obter informações valiosas de oportunidades de novas vendas e, é claro, poder auditar o que se passa nos servidores é muito bom.

Se no EC2 sua máquina é terminada, usualmente os dados nos discos são perdidos. E os logs se tornam uma questão importante também para permitir a programação de escaladas automáticas e para alta disponibilidade.

Sem salvar seus logs, não há escalabilidade horizontal!

Amazon Web Services (AWS) oferece uma ferramenta para gerenciamento de logs chamada de CloudWatch Logs. Com ela, é possível capturar qualquer tipo de log do seu sistema, aplicativo, até mesmo customizado, em tempo real e processá-lo. De lá, é possível monitorar a “saúde” do aplicativo, criar métricas e alarmes.

Exemplo: Monitorando logs

Vamos criar um exemplo para monitorar os logs em uma instância EC2 e criar alarmes para nos avisar quando determinadas ocorrências aparecerem no log.

Primeiro precisamos subir uma instância EC2. Partindo do princípio que vocês já possuam alguma instância, vamos prosseguir com a configuração do CloudWatch Logs.

Passo 1: Permissões

O CloudWatch usa Identity e serviço IAM para autenticação e autorização; no nosso caso, iremos usar um IAM Role para EC2. Precisamos adicionar as regras abaixo para a IAM Role associada à nossa instância. Para saber mais acesse IAM Policies e IAM Users and Groups.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:*"
      ],
      "Resource": [
        "arn:aws:logs:*:*:*"
      ]
    }
  ]
}

Não se esqueça de que o servidor tem que conseguir falar com o serviço pela rede, ou seja, ele deve ter um IP público (ou Elastic IP) e liberdade para sair. Outra forma seria liberar o acesso por meio de um NAT para o seu servidor sair da VPC, mas isso é assunto para outro artigo.

Passo 2: Instalando e configurando o agente do CloudWatch

  1. Conecte-se à instância. Para mais informações de como conectar uma instância EC2 acesse Connect to Your Instance.
  2. Baixe e execute o instalador do agente do CloudWatch Logs.
$ wget https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py
$ sudo python ./awslogs-agent-setup.py --region us-east-1 #podendo ser também us-west-2, eu-west-1,...

Depois que você executar a última linha, ele irá te pedir várias informações:

Credenciais

Como estamos usando uma IAM Role, não é preciso passar, então simplesmente pressione Enter quando aparecer AWS Access Key ID e AWS Secret Access Key. Caso não esteja usando a IAM Role, preencha os dados solicitados.

Default Region Name

A região default que será exibida é a que foi passada na linha de chamada de instalação do agente. Caso não queira alterar, deixe a default.

Output Format

No nosso caso, deixaremos o default. Para saber mais, acesse CloudWatch Logs Agent Reference.

Path of log file to upload

Esse é o local onde se encontra o arquivo que queremos monitorar. No nosso caso, podemos usar o default /var/log/messages.

Destination Log Group name

Esse é o nome do grupo do qual o arquivo de log fará parte. Por padrão, ele sugere o path do arquivo de log, podemos deixar assim.

Destination Log Stream name

Aqui você irá associar uma referência ao arquivo de log para identificá-lo. Vamos utilizar o id da instância, então preencha com 1.

Timestamp format

Esse é o formato no qual você gostaria de gravar o timestamp do log. No nosso caso, iremos utilizar 1.

Initial position

O agente pode começar a enviar os dados do começo para o fim ou do fim para o começo, mas independentemente da opção selecionada ele irá continuar monitorando cada nova linha adicionada. No nosso caso, selecionamos 1.

Depois disso, ele irá perguntar se deseja configurar mais algum arquivo de log. Repita o passo quantas vezes desejar para cada arquivo. No nosso caso, preencha com N.

install_aws_log

Passo 3: Acesse os logs no CloudWatch Logs

Se o agente estiver instalado e configurado corretamente, partindo do princípio que o arquivo de log possui alguma informação, aguarde alguns instantes e acesse o CloudWatch Logs (nesse link, estamos utilizando a região de Virgínia como exemplo). Você irá ver algo parecido com:

log_group

Agora clique no log group criado:

log_stream

Depois clique no log stream criado, e você verá os logs sincronizados:

log_stream
Passo 4: Criando filtros de métricas para os logs

Agora vamos criar uma métrica exemplo para filtrar as linhas que possuam um pattern específico. No nosso exemplo, que possua a informação “[INFO]“.

  1. Acesse CloudWatch Logs
  2. Marque o log group /var/log/messages
  3. Clique em Create Metric Filter
  4. Preencha Filter Pattern com [INFO]
  5. Clique em Test Pattern (você verá abaixo, em Results, a quantidade de vezes que foi encontrado o parâmetro), clique em Show test results para ver
  6. Clique em Assign Metric
  7. Preencha Metric Name com INFO_metric (coloquei como prefixo do nome da métrica o filter pattern, mas pode-se usar qualquer nome)
  8. Clique em Show advanced metric settings. Aí você pode entrar com o valor da métrica, que é usado para publicar na métrica. Por exemplo, se estamos contando a quantidade de ocorrências de um termo específico “INFO”, usamos o valor “1” para cada ocorrência, mas se está buscando por “size” poderia entrar com “$size”. No nosso caso, como queremos contar a quantidade, deixe apenas preenchido com 1.

Depois disso, você verá algo parecido com:

log_metric
Passo 5: Criando alarmes para suas métricas

Agora, é possível criar um alarme para te notificar quando a métrica criada for ativada, o que pode ser interessante, por exemplo, para notificar o time na ocorrência de algum erro e/ou ativar uma ação de AutoScaling.

  1. Acesse CloudWatch Logs
  2. Clique na métrica na coluna Metric Filters
  3. Clique em Create Alarm

Preencha os dados como está mostrado abaixo, alterando somente o Send notification to e o Email list para um e-mail seu:

log_alarm

e clique em Create Alarm, depois acesse Alarm. Você vai ver algo parecido com:

log_alarm_on

Pronto! Agora você tem um arquivo de log monitorado e arquivado no CloudWatch, uma métrica e um alarme criado para te notificar toda vez que alarmar. Agora configure logs da sua aplicação com métricas e alarmes que achar importantes para sua aplicação. Lembrando que essa foi somente uma introdução ao assunto. Para se aprofundar mais, acesse CloudWatch Docs.

Novidade: Amazon CloudWatch Logs anuncia suporte aprimorado para EC2 executando o Microsoft Windows Server

Agora você pode enviar uma ampla variedade de dados para o Amazon CloudWatch Logs de suas instâncias do Amazon EC2 executando o Microsoft Windows Server. Você pode enviar qualquer log de eventos, Event Tracing (ETW) log, Contadores de Desempenho (PCW) de dados ou de log baseado em texto para inclusão em suas métricas CloudWatch.

Para isso, você precisará da versão mais recente do software de serviço EC2Config, a fim de tirar proveito dos novos recursos. Ele está incluído na mais recente Amazon Machine Image (AMI), executando o Microsoft Windows Server, ou você pode fazer o download e instalá-lo em instâncias existentes. Para saber mais, ou para começar com o EC2 para Windows e CloudWatch Logs, acesse Configuring a Windows Instance Using the EC2Config Service.

Se tiver alguma dúvida ou sugestão, deixe aí embaixo nos comentários. 😉

Desafio: tente integrar o seu CloudWatch com o Kinesis!