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

# Node-Exporter -> Node Down 검증

> Node-Exporter 장애 시 Alert을 수신하도록 구성하고 검증한다.


# Configuration

1분 동안 Node-Exporter의 `Down`이 감지된 경우 Alert을 발생시키는 Rule

- **결과**

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

- **검증 과정**

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

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

> 현재 Node Down Event가 존재하지 않기 때문에 **Empty query result**가 Return 되었다.


* [ **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(Host) Down alerts
      rules:
      - alert: Node-Exporter Down
        expr: up{job="ext-node_exporter"} == 0
        for: 1m
        labels:
          severity: fatal
        annotations:
          title: "Node {{ $labels.instance }} is down"
          description: "Failed to scrape {{ $labels.job }} on {{ $labels.instance }} for more than 1 minutes. Node seems down."
...하략
```

* [ **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** ] : Node-Exporter를 강제로 종료한다.

```bash
# systemctl stop node_exporter.service
```

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

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


* [ **STEP 3** ] : Resolved를 검증하기 위해 종료중인 Node-Exporter를 재실행 한다.

```bash
# systemctl start node_exporter.service

```

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

![node_down_alert](../../images/node_down_resolved.png)


