# EBS: EBS com baixo uso de IOPS

> Esta regra identifica volumes EBS dos tipos `gp3`, `io1` e `io2` cuja utilização máxima de IOPS no período analisado é inferior a 70% da capacidade provisionada.
>
> O objetivo é detectar superdimensionamento de IOPS e oportunidades de redução de custo.

***

**Contexto da regra e impacto no negócio**

Volumes com IOPS provisionadas possuem custo diretamente proporcional à quantidade configurada.

Quando a utilização real é significativamente inferior ao provisionado:

* Há desperdício financeiro
* O volume está superdimensionado
* O custo mensal é maior que o necessário

Essa regra permite ajustar a capacidade à demanda real, promovendo eficiência financeira sem impacto operacional.

***

**Detalhamento técnico da regra**

A regra realiza varredura regional considerando volumes:

```
VolumeType IN (gp3, io1, io2)
```

Exceção aplicada:

* Volumes `gp3` com exatamente 3000 IOPS são ignorados\
  (3000 é o baseline padrão do gp3)

***

**Como a regra é executada**

1. Autentica na conta AWS por região.
2. Executa:

   ```
   ec2:DescribeVolumes
   ```

   com filtro:

   ```
   volume-type = gp3 OR io1 OR io2
   ```
3. Aplica filtros de tag (inclusão/exclusão).
4. Para cada volume:
   * Se for `gp3` com 3000 IOPS → ignorado.
   * Consulta métricas no CloudWatch:
     * `VolumeReadOps`
     * `VolumeWriteOps`
   * Período de agregação: 300 segundos.
   * Estatística: `Maximum`
5. Calcula o pico real de IOPS utilizado.
6. Compara com IOPS provisionadas.
7. Sinaliza quando uso < 70%.

***

**Lógica aplicada**

Cálculo:

```
IOPS Utilizado = maior valor de (ReadOps + WriteOps) no mesmo intervalo
```

Conversão aplicada:

```
ReadOps e WriteOps são divididos por 300 (período de 5 minutos)
```

Critério de alerta:

```
(IOPS Utilizado * 100) / IOPS Provisionadas < 70%
```

Exceção:

```
Se VolumeType = gp3 AND IOPS = 3000 → ignorar
```

***

**Campos analisados**

Volume EBS:

* `VolumeId`
* `VolumeType`
* `Size`
* `State`
* `Iops`
* `CreateTime`
* `Tags`
* Região

CloudWatch:

* `VolumeReadOps`
* `VolumeWriteOps`

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `ec2:DescribeVolumes`
* `cloudwatch:GetMetricData`

Configuração:

* Período analisado: `self.checker.period.days`
* Granularidade: 300 segundos
* Threshold fixo:
  * Utilização < 70%

***

**Período Avaliado (Filtro Temporal)**

Período Avaliado: 15 dias

```
Data atual – checker.period.days
```

Exemplo:

Padrão é configurado para 15 dias, o pico de IOPS será avaliado dentro dos últimos 15 dias.

> Esse parâmetro de avaliação pode ser ajustado nas configurações das regras.

***

**Intervalo de Análise**

Execução padrão: a cada 8 horas.

***

**Cálculo de Savings**

O savings é baseado na redução das IOPS provisionadas para um nível compatível com a utilização real.

***

**Fórmula Conceitual**

```
Savings = (IOPS Provisionadas – IOPS Recomendadas) × Preço por IOPS
```

Ou, de forma consolidada no Billing:

```
Savings = sum("lineitem/unblendedcost") * percentual_de_redução_estimado
```

O percentual dependerá do nível de superdimensionamento identificado.

***

**Campo de custo utilizado**

No Billing AWS:

* Service: AmazonEC2
* Usage Type:
  * EBS:PIOPS
* Line Item Type: Usage
* Campo financeiro considerado:
  * `lineitem/unblendedcost`

***

**Exemplo aplicado ao Billing**

Cenário:

* Volume io2
* 20.000 IOPS provisionadas
* Pico real identificado: 6.000 IOPS
* Utilização: 30%

Possível ajuste:

* Redução para 8.000 IOPS

Impacto:

Se custo mensal atual é $2.000:

```
Savings estimado ≈ redução proporcional das IOPS excedentes
```

Se redução estimada de 50%:

```
Savings = 2.000 * 0.50
Savings = $1.000/mês
```

***

**Dicas de uso e boas práticas para o usuário**

* Avaliar picos sazonais antes de reduzir IOPS.
* Manter margem de segurança operacional.
* Priorizar volumes com grande diferença entre provisionado e uso.
* Monitorar após ajuste.
* Considerar migração para `gp3` quando aplicável.

Possíveis exceções:

* Sistemas com picos raros mas críticos.
* Workloads financeiros ou transacionais.
* Aplicações com SLA rigoroso.

Recomenda-se ajuste gradual e monitoramento contínuo após a redução.
