Monitoramento AWS com New Relic e Cloudwatch

New Relic 

cloudwatch

Uma das coisas mais importantes para uma operação saudável de qualquer infraestrutura é a configuração do monitoramento. Utilizando Amazon Web Services, uma opção muito interessante e gratuita é o New Relic em conjunto com o CloudWatch.

New Relic

O New Relic é um serviço muito interessante, cuja proposta é de prover monitoramento profundo de aplicações web e mobile, sem exigir uma configuração custosa e trabalhosa. Na versão gratuita ele já dá um conjunto bem rico de funcionalidades, como:

  • Tempo de resposta e vazão para usuários finais, detalhando por camada
  • Tempo de resposta e vazão das aplicações, detalhando por componente
  • Monitoramento da disponibilidade das aplicações, com alertas e notificações
  • Mapeamento automático da topologia das aplicações
  • Monitoramento da disponibilidade dos servidores e do consumo dos recursos
  • Detecção de erros com alertas e análise

Dashboard

Temos a seguir uma amostra do Dashboard dele, com um único servidor configurado. Ele traz informações bem interessantes, como memória total, versão do kernel, visão detalhada de processos e recursos consumidos e há também uma visão por aplicações, que envolve o uso de agentes dentro do servidor. Também é possível criar dashboards customizados incluindo qualquer indicador importante do servidor ou das aplicações. Uma idéia interessante é monitorar as principais de transações de negócio das aplicações para sempre saber se elas estão se comportando adequadamente.

Dashboard new relic

Agentes

O que é muito interessante no New Relic é esse nível de detalhe sobre processos e aplicações, trazendo informações bem ricas em real-time. Neste servidor monitorado há um Apache servindo 2 WordPress e também um JIRA. Para acompanhar adequadamente cada aplicação importante é necessário instalar o agente adequado, mas esse processo é extremamente rápido e fácil! Nesta instância não demorei mais do que 2 minutos para instalar os agentes de Php e de Java. Podemos ver os guias de cada linguagem:

Alertas e Notificações

O New Relic possui um sistema de alertas bem detalhado, acompanhando muitos indicadores dos servidores e das aplicações. Podemos ver abaixo como estão configurados os limiares de alerta básicos do servidor.

New Relic server alerts thresholds

Além dos alertas de recursos do servidor, há vários alertas sobre ocorrências nas aplicações. As possibilidades incluem disponibilidade, tempo de resposta, desempenho de threads, entre muitas outras opções.

Quando qualquer indicador monitorado chega ao limiar crítico é disparada uma notificação, que pode ser lançada para: PagerDuty, Campfire, HipChat, webhook, cliente iPhone ou qualquer conta de e-mail.

Uma das principais limitações do New Relic gratuito é a retenção dos dados somente por 24 horas, o que traz algumas dificuldades para acompanhamentos mais longos. Neste ponto é bem interessante usar o CloudWatch em conjunto com o New Relic.

CloudWatch

O CloudWatch é o serviço de monitoramento padrão dos Amazon Web Services, e traz uma gama enorme de métricas dos serviços da Amazon. O monitoramento básico é gratuito e traz muitas informações úteis de consumo dos recursos das instâncias, mas há também a opção do monitoramento detalhado, que traz algumas informações extras e uma frequência maior de atualização das métricas.

Métricas de memória e utilização de disco com Custom Metrics

Me surpreende o fato de ainda não estarem disponíveis por padrão as métricas de consumo de memória. Porém, não é difícil habilitá-las, assim como criar outras métricas customizadas de nossas aplicações. A documentação detalhada pode ser vista aqui. Por brevidade vamos descrever neste post só a configuração para Amazon Linux/CentOS.
Para habilitar as métricas de memória, devemos acessar a instância a ser monitorada e navegar para um diretório onde os scripts serão salvos, como /home-ec2-user/cloudwatch.

[ec2-user@ip-10-252-25-212 ~]$ mkdir cloudwatch ; cd cloudwatch
[ec2-user@ip-10-252-25-212 cloudwatch]$ wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
[ec2-user@ip-10-252-25-212 cloudwatch]$ unzip CloudWatchMonitoringScripts-v1.1.0.zip
[ec2-user@ip-10-252-25-212 cloudwatch]$ rm CloudWatchMonitoringScripts-v1.1.0.zip
[ec2-user@ip-10-252-25-212 cloudwatch]$ cd aws-scripts-mon

Obter as credenciais de segurança em: https://portal.aws.amazon.com/gp/aws/securityCredentials
É necessário obter e preencher no arquivo awscred.template:

[ec2-user@ip-10-252-25-212 aws-scripts-mon]$ vim awscreds.template
AWSAccessKeyId=YourAccessKeyID
AWSSecretKey=YourSecretAccessKey
[ec2-user@ip-10-252-25-212 aws-scripts-mon]$ mv awscreds.template awscreds.conf

Testando sem postar os dados pro CloudWatch:

[ec2-user@ip-10-252-25-212 aws-scripts-mon]$ ./mon-put-instance-data.pl --mem-util --verify --verbose --aws-credential-file=/home/ec2-user/cloudwatch/aws-scripts-mon/awscreds.conf

Coletando todas as métricas de memória e a de utilização de disco e enviando-as pro CloudWatch:

[ec2-user@ip-10-252-25-212 aws-scripts-mon]$ ./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --aws-credential-file=/home/ec2-user/cloudwatch/aws-scripts-mon/awscreds.conf

CloudWatch Management Console_metricas_de_memoria

Configurar um script cron para enviar periodicamente as novas métricas para o CloudWatch

[ec2-user@ip-10-252-25-212 ~]$ crontab -e

— preencher com o seguinte:

*/5 * * * * ~/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-space-util --disk-path=/ --from-cron --aws-credential-file=/home/ec2-user/cloudwatch/aws-scripts-mon/awscreds.conf

Alertas do CloudWatch

Vamos ver como configurar no CloudWatch um conjunto de alertas parecido com o que veio de forma quase automática no New Relic.

CloudWatch Management Console alarm CPU 85

CloudWatch Management Console alarm CPU 85 action

Disk space utilization alarm

Disk space utilization alarm action

Resumo alertas criados

Mostramos estas 2 métricas e alarmes, mas o processo de criação de novos alarmes é bem semelhante. Dá pra ver que a quantidade de opções de notificação do CloudWatch também é mais limitada do que o New Relic, mas ele permite a criação de métricas customizadas e retém os dados por 2 semanas em vez de 24 horas.

Além disso, uma das principais funcionalidades AWS é o Autoscaling, e ele pode ser configurado utilizando métricas customizadas. Poderíamos mostrar aqui como fazer isto, mas fica para um próximo post 🙂

Conclusão

O New Relic e o CloudWatch em suas versões mais básicas trazem muitos dados interessantes, porém cada um tem suas limitações que atrapalham um pouco uma operação madura. Utilizá-los em conjunto reduz bastante estas limitações e facilita tanto uma análise profunda da situação atual como um acompanhamento de vários indicadores ao longo de um período maior. Ambos podem ser estendidos com métricas e dashboards customizados e ajudam demais na operação de qualquer sistema/infraestrutura.

Gostou do conteúdo? Tem alguma dúvida? Entre em contato com nossos Especialistas Mandic Cloud, ficamos felizes em ajudá-lo.