Monitore suas instâncias do EC2 na AWS com o AWS Module do Metricbeat
Tags: aws, ec2, elasticsearch, metricbeat
Published: 2020-12-22 19:58:11

## O que é o EC2?
Através do Amazon Elastic Compute Cloud (Amazon EC2) é possível criar servidores virtuais na AWS. Ao utilizar o EC2 você pode subir a quantidade de instâncias que precisar, além de conseguir escalar e desescalar elas de acordo com a sua necessidade. Também é possível fazer configurações de rede, segurança e armazenamento nesses hosts.
Conheça mais sobre o EC2 no site da [Amazon](https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/concepts.html).

## Como utilizar o módulo AWS do Metricbeat para monitorar suas instâncias EC2
Através desse módulo [AWS](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-aws.html) é possível coletar as métricas de monitoramento do Cloudwatch e enviar elas para o Elasticsearch, esse é um jeito alternativo de monitorar suas instâncias, pois você também poderia usar o módulo [System](https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-module-system.html) para monitorar elas, a diferença é que para usar o módulo System, você teria que configurar ele em todos os hosts do seu ambiente, já o módulo AWS Metrics te permite executar ele apenas em um host.

Para começar esse lab, você precisará ter um ambiente com um host EC2 e outro ambiente com o Elasticsearch e com o Kibana configurados.

Assim que você tiver esses pré requisitos, poderá começar a seguir os passos abaixo para configurar suas permissões na AWS, configurar o Metricbeat para coletar os dados das instâncias EC2.

## Criação do usuário e política na Amazon
* Para ter acesso as informações do seu ambiente na AWS vai ser necessário que você crie um usuário para ter uma Access Key e uma Secret Key. Acesse o IAM no console da AWS, crie um usuário e salve a Access Key a Secret Key.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/884yxkqokarc7rjps70a.png)

* Depois de criar o usuário, você precisará criar uma politica do IAM com os seguintes níveis de acesso:

**Cloudwatch:** `ListMetrics e GetMetricData`
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tldqzlf6meb2eybv0nbp.png)

**EC2:** `DescribeRegions e DescribeInstances`
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/k4uhzhiw15c490ow5hpv.png)

* Por fim revise e crie a política como mostra a imagem abaixo.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4houajhcijbydjbcvw30.png)

* Atribua a política que você criou ao usuário que você vai usar.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7dsqcqgjmzx47p1zm1na.png)

## Instalação e configuração do Metricbeat
Para instalar o Metricbeat nos hosts, siga os passos descritos abaixo.

* Faça o download do Metricbeat nesse [link](https://www.elastic.co/pt/downloads/beats/metricbeat).

* Instale o Metricbeat:
**Windows:** `PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-metricbeat.ps1`
**Linux:** `sudo rpm -vi metricbeat-7.10.1-x86_64.rpm`

* Acesse o arquivo de configuração do Metricbeat:
**Windows:** `C:\Program Files\Metricbeat\metricbeat.yml`
**Linux:** `/etc/metricbeat/metricbeat.yml`

* Insira nele as informações de conexão com o Elasticsearch e com o Kibana:

```
output.elasticsearch:
  hosts: ["url_do_elasticsearch:9200"]
setup.kibana:
  host: ["url_do_kibana:5601"]
```

* Habilite e configure o módulo da AWS:
**Windows:** `.\metricbeat.exe modules enable aws`
**Linux:** `sudo metricbeat modules enable aws`

* Para modificar as configurações do módulo, altere o arquivo aws.yml:
**Windows:** `modules.d/aws.yml`
**Linux:** `/etc/metricbeat/modules.d/aws.yml`

Por padrão, o arquivo vem com as seguintes informações:
```
# Module: aws
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.10/metricbeat-module-aws.html
- module: aws
  period: 1m
  metricsets:
    - elb
    - natgateway
    - rds
    - transitgateway
    - usage
    - vpn
- module: aws
  period: 5m
  metricsets:
    - cloudwatch
  metrics:
    - namespace: AWS/EC2
      #name: ["CPUUtilization", "DiskWriteOps"]
      resource_type: ec2:instance
      #dimensions:
      #  - name: InstanceId
      #    value: i-0686946e22cf9494a
      #statistic: ["Average", "Maximum"]
- module: aws
  period: 5m
  metricsets:
    - dynamodb
    - ebs
    - ec2
    - lambda
    - rds
    - sns
    - sqs
- module: aws
  period: 24h
  metricsets:
    - billing
  cost_explorer_config:
    group_by_dimension_keys:
      - "AZ"
      - "INSTANCE_TYPE"
      - "SERVICE"
#    group_by_tag_keys:
#      - "aws:createdBy"
- module: aws
  period: 24h
  metricsets:
    - s3_daily_storage
- module: aws
  period: 1m
  latency: 5m
  metricsets:
    - s3_request
```

Também insira nele as credenciais de acesso a AWS que você criou anteriormente:

```
metricbeat.modules:
- module: aws
  period: 300s
  metricsets:
    - "ec2"
  access_key_id: '${AWS_ACCESS_KEY_ID:"SUA ACCESS KEY"}'
  secret_access_key: '${AWS_SECRET_ACCESS_KEY:"SUA SECRET KEY"}'
  default_region: '${AWS_REGION:us-east-1}'
```

* Carregue os dashboards do módulo:
**Windows:** `.\metricbeat.exe setup`
**Linux:** `sudo metricbeat setup`

* Inicie o serviço do Metricbeat:
**Windows:** `Start-Service metricbeat`
**Linux:** `sudo service metricbeat start`

Depois disso, você conseguirá ver os logs do seu ambiente no discover, além de ter dashboards com informações e métricas do estado das suas instâncias na Amazon.

**Logs**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mb9y8hi8ymgd9n92f6ql.png)

**Métricas**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/je4ofj87tjli2i3fhr8o.png)