Monitorando Amazon RDS com MySQL Enterprise Monitor
Sobre este tutorial
Para testar o procedimento abaixo, usei o MEM 3.2.1 numa Virtual Machine com Oracle Linux 7. Criei a VM usando o Vagrant e Virtual Box. Você pode utilizar o MEM em distribuições Enterprise Linux, Windows, Solaris ou OS X. A quantidade recomendável de memória é de 4GB de RAM e 20GB de disco.
Algumas observações:
- O MEM é um software comercial que faz parte do MySQL Enterprise Edition e sua licença para uso em produção deve ser adquirida junto à Oracle. Porém, você pode utilizá-lo em ambiente não-produtivo por 30 dias;
- Se preferir, você pode facilmente instalar o MEM com uma única linha de comando (unattended mode), muito útil para automatização. Veja aqui um exemplo de instalação do Service Manager via shellscript.
Introdução
A Amazon hoje é o principal fornecedor de cloud pública do mercado. Entre seus diversos serviços está o famoso Amazon RDS (Relational Database Service), que facilita as tarefas de configurar, operar e escalar um banco de dados relacional na nuvem, ou seja, trata-se de um DBaaS ou Database as a Service. O primeiro banco de dados disponibilizado pela Amazon no RDS foi o MySQL, apesar de hoje contar com outras opções.
O MySQL Enterprise Monitor (MEM) é uma ferramenta de administração avançada do MySQL Server, permitindo, além do monitoramento e manutenção do histórico de status dos servidores, notificações de potenciais problemas, dicas sobre como corrigí-los, análise de queries, etc. O MEM permite monitorar instâncias do MySQL localmente ou remotamente, como por exemplo num serviço de nuvem como o RDS. Por ser criado e mantido pelo time de engenharia MySQL da Oracle, o MEM é uma das opções mais avançadas de monitoramento disponíveis para MySQL.
Confira uma breve demonstração do MEM monitorando Amazon RDS aqui.
Adicionando uma instância MySQL RDS no MEM
1) No RDS Dashboard, anote qual seu Endpoint; no meu caso, ficou algo como mysql-rds-test1.xxxxxxxxxxxx.us-west-2.rds.amazonaws.com;
2) No RDS, certifique-se de permitir que o host do MEM possa acessar a instância; no meu caso, modifiquei o Security Group para aceitar tráfego inbound/outbound do meu IP (CIDR/IP);
3) Na linha de comando da máquina do MEM, verifique se consegue conectar-se na instância RDS com:
$ /opt/mysql/enterprise/monitor/mysql/bin/mysql -uroot -p -h<seu_endpoint> -P3306
4) Aproveite a conexão do passo anterior e crie um database para o MEM na sua instância RDS:
mysql> CREATE DATABASE mem;
5) [opcional] Como boa prática, crie um usuário específico de monitoramento na instância RDS. Aproveite a conexão do passo anterior e faça:
mysql> CREATE USER 'memadmin'@'%' IDENTIFIED BY '<senha_memadmin>';
mysql> GRANT ALL PRIVILEGES ON `%`.* TO 'memadmin'@'%';
6) No MEM, menu Dashboards > Add MySQL Instance, crie a conexão remota com sua instância RDS.
Importante: Para ‘Auto-Create Less Privileged Users’ selecione ‘No’ e na aba ‘Advanced Settings’, campo ‘Inventory Table Schema’ digite ‘mem’ (ou database criado no passo 4).
1) Se tudo ocorreu bem, você já deve ver a nova instância RDS adicionada no Dashboard.
Query Analyzer e Reports avançados
Para explorar capacidades de monitoramento mais avançadas no MEM, é necessário que o Sys Schema instalado e Performance Schema esteja habilitado. A partir do MySQL 5.6 esse recurso já é habilitado por padrão, porém este não é o caso se você estiver usando configurações padrão da Amazon. Faça o seguinte:
- No RDS Dashboard, crie um Parameter Group e edite o parâmetro performance_schema = 1;
- No RDS, modifique a instância selecionando em Database Options o novo DB Parameter Group.
- No RDS, faça um Reboot da instância para aplicar a nova configuração.
- Na linha de comando da máquina do MEM, verifique se o Performance Schema foi habilitado:
$ /opt/mysql/enterprise/monitor/mysql/bin/mysql -uroot -p -h<seu_endpoint> -P3306
mysql> SHOW VARIABLES LIKE 'performance_schema';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| performance_schema | ON |
+--------------------+-------+
5) Habilite a coleta de métricas das Queries:
mysql> UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'statements_digest';
...
mysql> SELECT * FROM performance_schema.setup_consumers WHERE name = 'statements_digest';
+-------------------+---------+
| NAME | ENABLED |
+-------------------+---------+
| statements_digest | YES |
+-------------------+---------+
6) Certifique-se de que o ‘sys’ schema está presente:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| ... |
| performance_schema |
| sys |
+--------------------+
Caso necessário, instale o sys schema disponível em https://github.com/mysql/mysql-sys.
7) No MEM, verifique se o menu Query Analyzer está funcional.
8) Verifique também em Reports & Graphs se Processes e File I/O estão funcionais
Conclusão
O MySQL Enterprise Monitor pode ser utilizado para monitoramento avançado de uma instância MySQL no serviço Amazon RDS. Estamos limitados ao monitoramento remoto, porém ainda é possível utilizar esta ferramenta para melhor compreensão de eventuais gargalos e notificações pró-ativas de problemas com as instâncias MySQL na nuvem.
Referências
- https://dev.mysql.com/doc/mysql-monitor/3.2/en
- http://awshub.com.br/resources/amazon-web-services-hands-on-rds