18 maio 2016

Monitorando Amazon RDS com MySQL Enterprise Monitor



Neste post mostrarei como fazer o monitoramento avançado de uma instância MySQL no serviço Amazon RDS usando o MySQL Enterprise Monitor.


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:



Nota: 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.


Criando uma instância Amazon RDS



Se você não possui uma instância MySQL no RDS, você pode gratuitamente criar uma para testes. Atualmente a  Amazon disponibiliza instâncias pequenas, mas gratuitas do RDS por 1 ano. Nos testes abaixo, usei uma instância gratuita db.t2.micro com o MySQL 5.6.27.


Instalação do MySQL Enterprise Monitor



O MEM possui 2 componentes: Service Manager e Agent. O Agent coleta os dados de monitoramento diretamente dos hosts e instâncias MySQL e envia para o Service Manager, que consolida as informações de todos hosts e instâncias monitorados. Tipicamente o Agent é instalado no host que o MySQL Server está presente, porém, neste tutorial usaremos o monitoramento remoto, que dispensa a necessidade de instalar o Agent. Portanto, a seguir instalaremos apenas o Service Manager.


  1. Faça o download do MySQL Enterprise Monitor Service Manager em edelivery.oracle.com (se ainda não tiver, você precisará criar uma conta no oracle.com); para este tutorial, você precisará baixar apenas o MySQL Enterprise Monitor Service Manager 3.2.x;
    edelivery_download_mem.png
  2. Descompacte o ZIP e copie o arquivo mysqlmonitor-3*installer.bin para o host onde será instalado o MySQL Enterprise Monitor Service Manager e execute:
    $ sudo mysqlmonitor-3*installer.bin
  3. Siga o passo a passo para instalação. As opções padrão vão funcionar para a maioria dos casos.


Se quiser automatizar esta tarefa, você pode facilmente instalar o MEM com uma única linha de comando (unattended mode). Veja aqui um exemplo de instalação do Service Manager via shellscript.


Nota: 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.


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).
    mem_add_rds1.png
    mem_add_rds2.png
  7. Se tudo ocorreu bem, você já deve ver a nova instância RDS adicionada no Dashboard.
    mem_add_rds3.png


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:
  1. No RDS Dashboard, crie um Parameter Group e edite o parâmetro performance_schema = 1;
  2. No RDS, modifique a instância selecionando em Database Options o novo DB Parameter Group.
  3. No RDS, faça um Reboot da instância para aplicar a nova configuração.
  4. 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.
    mem_qan_rds.png
  8. Verifique também em Reports & Graphs se Processes e File I/O estão funcionais
    mem_reports_rds1.png
    mem_reports_rds2.png


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


Nenhum comentário: