# ELB: ELB sem solicitações

> Esta regra identifica Load Balancers (Classic ELB e ELBv2 – Application, Network ou Gateway) que **não apresentaram tráfego durante o período analisado**.
>
> O objetivo é detectar balanceadores que estão ativos, mas não estão processando requisições ou tráfego.

***

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

Load Balancers continuam gerando custo mesmo quando:

* Não recebem requisições
* Não processam tráfego
* Foram criados para testes e esquecidos
* Aplicações foram desativadas

Impactos:

* Custo fixo mensal desnecessário
* Consumo de LCUs sem valor operacional
* Complexidade desnecessária na arquitetura

Essa regra complementa a verificação estrutural de uso, avaliando também o uso real via métricas.

***

**Detalhamento técnico da regra**

A regra realiza varredura regional para:

* Classic Load Balancers (ELB v1)
* Application, Network e Gateway Load Balancers (ELB v2)

Aplica:

* Filtro temporal de criação
* Validação de ausência de tráfego via CloudWatch

***

**Como a regra é executada**

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

   ```
   elb:DescribeLoadBalancers
   elbv2:DescribeLoadBalancers
   ```
3. Coleta tags.
4. Aplica filtros de tag (inclusão/exclusão).
5. Para cada Load Balancer:
   * Aplica filtro temporal (`CreatedTime`).
   * Consulta métricas no CloudWatch dentro do período configurado:

**Para Classic ELB (v1)**

```
Namespace: AWS/ELB
MetricName: RequestCount
Statistic: Sum
```

**Para ELBv2**

Namespace varia conforme tipo:

* Application → `AWS/ApplicationELB`
* Network → `AWS/NetworkELB`
* Gateway → `AWS/GatewayELB`

Metric utilizada:

```
ProcessedBytes
Statistic: Sum
```

6. Se todos os datapoints retornarem `Sum = 0`, o recurso é sinalizado.

***

**Lógica aplicada**

Um Load Balancer será sinalizado quando:

```
Atende filtro temporal
E
Soma das métricas no período = 0
```

Validação técnica:

```
all(dp["Sum"] == 0 for dp in Datapoints)
```

***

**Campos analisados**

Load Balancer:

* `LoadBalancerName`
* `LoadBalancerArn`
* `CreatedTime`
* `Type`
* `DNSName`
* `VPCId`
* `Tags`
* Região

CloudWatch:

* `RequestCount` (ELB v1)
* `ProcessedBytes` (ELB v2)

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `elb:DescribeLoadBalancers`
* `elbv2:DescribeLoadBalancers`
* `cloudwatch:GetMetricStatistics`
* `elb:DescribeTags`
* `elbv2:DescribeTags`

Configuração:

* Período analisado: `self.checker.period.days`
* Granularidade: 86400 segundos (1 dia)
* Estatística: Sum

***

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

Período Avaliado: 15 dias

A regra considera:

```
CreatedTime
```

E avalia métricas dentro do intervalo:

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

Exemplo:

Padrão é configurado para 15 dias, analisa tráfego nos ú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**

A economia potencial corresponde à remoção do Load Balancer que não está processando tráfego.

***

**Fórmula Oficial de Savings**

```
Savings = sum("lineitem/unblendedcost")
```

O recurso não está gerando valor operacional.

***

**Campo de custo utilizado**

No Billing AWS:

* Service: ElasticLoadBalancing
* Line Item Type: Usage
* Usage Types:
  * LoadBalancerUsage
  * LCUUsage
* Campo financeiro considerado:
  * `lineitem/unblendedcost`

***

**Exemplo aplicado ao Billing**

Cenário:

* 3 Application Load Balancers
* Sem tráfego nos últimos 30 dias
* Custo médio por ALB: $40/mês

Cálculo:

```
Savings = 3 × 40
Savings = $120/mês
```

Savings anual:

```
120 × 12 = $1.440
```

***

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

* Confirmar se não é ambiente aguardando ativação.
* Validar pipelines de deploy.
* Revisar ambientes de teste antigos.
* Avaliar dependências DNS antes da exclusão.
* Monitorar criação de LBs fora de IaC.

Possíveis exceções:

* Load Balancers sazonais.
* Ambientes de contingência.
* Infraestrutura reservada para eventos específicos.

Recomenda-se validação antes da remoção definitiva.
