[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)

# Node Load Average OverLoad 검증

## Load Average

프로세스의 상태 중 `R`(Running)과 `D`(uninterruptible sleep)상태에 있는 프로세스의 1/5/15분 기준의 평균 값이다. 참고적으로 **D 상태**는 일반적으로 I/O의 처리 지연으로 대기된 상태이며, 이때 완료되기 전까지는 어떠한 일을 수행할 수 없게 된다.


# Configuration

**1분** 동안 Load Average 15 minute에 속한 프로세스가 `50`% 이상이 경우가 감지된 경우 Alert을 발생시키는 Rule

- **결과**

![load_avg15](../../images/load_avg15.png)

- **검증 과정**

* [ **STEP 1** ] : Prometheus의 Graph 메뉴의 Expression에서 수식에 대한 검증을 진행한다.

![load_avg15_verify](../../images/load_avg15_verify.png)

> 대상 Nodes에 현재 Load Average 15 Minute 값이 쿼리 된다.


* [ **STEP 2** ] : Prometheus Configmap 파일에 ITEM을 추가한다.

```bash
# cat prometheus-config-map.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-server-conf
  labels:
    name: prometheus-server-conf
  namespace: monitoring
data:
  prometheus.rules: |-
    groups:
    - name: Node LoadAverage 15 minute over Alerts
      rules:
      - alert: Node LoadAverage 15minute Usage(50% Upper)
        expr: node_load15 >= 50
        for: 15m
        labels:
          severity: fatal
        annotations:
          summary: "Instance {{ $labels.instance }} - high load average"
          description: "{{ $labels.instance  }} (measured by {{ $labels.job }}) has high load average ({{ $value }}) over 15 minutes."
...하략
```

* [ **STEP 3** ] : kubectl 툴을 이용하여 Replace 처리하고, curl을 이용하여 POST **reload** Payload를 전송한다.

```bash
# kubectl replace -f prometheus-config-map.yaml
# curl -X POST http://172.24.0.222:30003/-/reload
```

> 또는 prometheus를 재시작하면 즉시 적용된다.

# Verify

* [ **STEP 1** ] : 검증을 위해 50% 이상 기준을 **0**%로 변경한다.

```python
node_load15 >= 0
```

* [ **STEP 2** ] : Alert Manager를 통한 Alert 발송을 확인한다. 0%로 변경되었기 때문에 **모든 Node가 해당된 상태**이다.

![load_avg15_alert](../../images/load_avg15_alert.png)


* [ **STEP 3** ] : Resolved를 검증하기 위해 다시 기존 50%로 변경한다.

```python
node_load15 >= 50
```

* [ **STEP 4** ] : Alert Manager를 통한 `Resolved` Alert 발송을 확인한다.

![load_avg15_resolved](../../images/load_avg15_resolved.png)
