> For the complete documentation index, see [llms.txt](https://jam2in.gitbook.io/arcus-hubble/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jam2in.gitbook.io/arcus-hubble/ch03-config-and-start.md).

# Chapter 3. Config and start

## ARCUS Exporter

### 실행 설정 파일

ARCUS Exporter의 실행을 위해 아래와 같은 설정 파일을 작성해야 합니다. (`conf/example.json` 참고) 하나의 zk ensemble에 대해서만 수집이 가능하므로, 여러 zk ensemble 사용 시 여러 arcus exporter를 구동해야 합니다.

```json
{
  "listen": "hubble-host:13111",
  "ensembleByName": { "dev": ["dev.arcuscloud.jam2in.com:2181"] },
  "serviceCodes": ["serviceCode01", "serviceCode02", "serviceCode03"],
  "collectPrefixes": false,
  "simpleQos": false,
  "serviceCodesToCollectPrefixes": {
    "serviceCode01": ["*"],
    "serviceCode02": ["prefix01", "prefix02"],
    "serviceCode03": []
  },
  "log": {
    "level": "warn",
    "filename": "INSTALL_DIR/arcus_exporter/log/arcus_exporter.log",
    "maxSize": 20,
    "maxBackups": 10,
    "maxAge": 30,
    "compress": false
  }
}
```

각 인자의 의미는 아래와 같습니다.

| 인자                            | 의미                                                                                             |
| ----------------------------- | ---------------------------------------------------------------------------------------------- |
| listen                        | arcus\_exporter의 listen address 설정                                                             |
| ensembleByName                | 앙상블의 논리적 이름을 부여하는 맵 (key: 앙상블의 논리적 이름, value: 물리적 주소). 하나의 key-value 쌍만 설정 가능하다.               |
| serviceCodes                  | 수집 대상 service\_codes 목록 설정, 설정하지 않으면 ensemble 내의 모든 service codes 수집함                          |
| collectPrefixes               | true인 경우 모든 prefix 정보를 수집, false인 경우 prefix metric 수집하지 않음                                     |
| simpleQos                     | true인 경우 key-value 연산에 한해 QoS latency를 측정                                                      |
| serviceCodesToCollectPrefixes | 서비스 코드별로 수집할 prefix 목록 지정. 이 옵션에 포함된 service code는 collectPrefixes 옵션 무시                       |
| log.level                     | arcus\_exporter의 log level 설정, default는 warn이며 debug, warn, error, fatal, panic 중 하나를 사용할 수 있음 |
| log.filename                  | arcus\_exporter의 log 출력 위치를 설정, 기본 설정은 stdout                                                  |
| log.maxSize                   | arcus\_exporter의 log 파일 하나의 용량을 설정, 기본 설정은 20MB                                                |
| log.maxBackups                | arcus\_exporter의 백업 log 파일의 개수 지정, 기본 설정은 10개                                                  |
| log.maxAge                    | arcus\_exporter의 log 보존 기간을 설정, 기본은 30일 (24h \* 30)                                            |
| log.compress                  | arcus\_exporter의 백업용 log를 압축해 저장할지 여부를 설정, 기본 설정은 false                                        |

serviceCodesToCollectPrefixes에서 각 service code에 대한 prefix 설정의 의미는 아래와 같습니다. serviceCodesToCollectPrefixes에 명시된 service codes에 대해서는 collectPrefixes 옵션은 적용되지 않습니다.

* `["*"]`: 모든 prefix 수집
* `["prefix01", "prefix02"]`: 주어진 prefix만 수집
* `[]`: prefix 수집 않음

#### 실행 방법

* `start.sh` 스크립트를 사용하여 ARCUS Exporter를 실행할 수 있습니다.
* 아래 예시의 경우, `INSTALL_DIR/arcus_exporter/conf/example1.json`을 사용하여 exporter를 실행합니다.
* 다수의 exporter를 일괄 구동할 수 있습니다.

```sh
INSTALL_DIR/arcus_exporter/start.sh example1
# INSTALL_DIR/arcus_exporter/start.sh example1 example2 ...
```

* 또는 아래와 같이 arcus\_exporter 바이너리를 직접 실행할 수 있습니다.

```sh
INSTALL_DIR/arcus_exporter/arcus_exporter -config-file=INSTALL_DIR/arcus_exporter/conf/example.json
```

* `http://<listenip>:<port>/metrics` 경로에서 default stats metric 데이터를 조회할 수 있습니다.
* `http://<listenip>:<port>/metrics/prefixes` 경로에서 default stats metric 데이터를 조회할 수 있습니다.

## Node Exporter

ARCUS 캐시 장비(PM or VM)마다 하나씩 가동해야 합니다. 해당 캐시 장비에서 CPU, 메모리, 네트워크 등의 system resource 정보를 수집합니다.

### 실행 방법

`INSTALL_DIR/node_exporter/start.sh` 파일을 실행하거나 아래 스크립트와 같이 실행할 수 있습니다. ARCUS 캐시 장비에서 구동되는 exporter이므로, 캐시 노드의 동작에 영향을 주지 않아야 합니다. 이를 위해, 최소한의 리소스만 사용하여 반드시 필요한 metrics만 수집하는 구동 옵션을 사용하도록 설정하였습니다.

```sh
GOMAXPROCS=1 INSTALL_DIR/node_exporter/node_exporter --collector.disable-defaults \
             --collector.cpu --collector.meminfo --collector.stat --collector.vmstat \
             --collector.diskstats --collector.netstat --collector.netdev \
             --collector.loadavg --collector.filefd --collector.processes \
             --web.listen-address=0.0.0.0:9100 --log.level=error
```

예시에 나온 인자의 의미는 다음과 같습니다.

| 인자                        | 의미                                      |
| ------------------------- | --------------------------------------- |
| GOMAXPROCS                | go routine이 사용할 수 있는 최대 core 개수         |
| collector.disable-default | default metric을 수집하지 않습니다.              |
| collector.\*              | arcus-hubble에서 필요한 metric을 수집하도록 설정합니다. |
| web.listen-address        | VictoriaMetrics의 요청을 받기 위해 listen 하는 주소 |
| log.level                 | 로그 레벨을 지정합니다.(debug, info, warn, error) |

* `http://<listenip>:<port>/metrics` 경로에서 metric 데이터를 조회할 수 있습니다.

### 일괄 설치 및 실행 방법

`INSTALL_DIR/node_exporter/install_and_start_devices.sh` 스크립트를 상황에 맞게 수정하고 실행하면 각 캐시 장비에 Node Exporter를 일괄 실행할 수 있습니다.

#### 사용 방법

1. 앞서 소개한 Node Exporter 실행 인자 변경이 필요하다면 `INSTALL_DIR/node_exporter/start.sh` 파일을 수정합니다.
2. `INSTALL_DIR/node_exporter/install_and_start_devices.sh` 파일에서 변수를 환경에 맞게 수정합니다.
   * `INSTALL_DIR`: Node Exporter를 설치할 각 캐시 장비의 디렉토리 위치
   * `HOST_PATTERN`: 각 캐시 장비의 호스트 이름 패턴. 번호가 들어갈 위치를 %s로 표시합니다. (ex. prd-%s → prd-01, prd-02, ...)
   * `SEQ_START / SEQ_END`: 각 캐시 장비의 번호 범위를 지정합니다.
3. `INSTALL_DIR/node_exporter/install_and_start_devices.sh` 스크립트를 실행합니다.

#### 주의 사항

* 모니터링 장비에서 SSH 연결이 가능한 캐시 장비들에 한해 사용 가능합니다.
* 각 캐시 장비에 연결한 후 구동 중인 Node Exporter가 있다면 중지시키고 `INSTALL_DIR` 디렉토리가 있다면 삭제 후 재생성하므로, 파일 유실에 주의해야 합니다.

## ZooKeeper Exporter

> \[!WARNING] zookeeper exporter를 사용하려면 `mntr` 명령어가 4 letter word whitelist에 포함되어 있어야 합니다.

### 실행 설정 파일

ZooKeeper Exporter의 실행을 위해 아래와 같은 설정 파일을 작성해야 합니다. (`conf/example.env` 참고) 하나의 zk ensemble에 대해서만 수집이 가능하므로, 여러 zk ensemble 사용 시 여러 zookeeper exporter를 구동해야 합니다.

```sh
LISTEN_PORT=9141
ZK_DOMAIN="dev.arcuscloud.jam2in.com:2181"
#ZK_SERVERS=("10.0.0.1:2181" "10.0.0.2:2181" "10.0.0.3:2181")
```

각 인자의 의미는 다음과 같습니다.

| 인자           | 의미                                          |
| ------------ | ------------------------------------------- |
| LISTEN\_PORT | VictoriaMetrics의 요청을 받기 위해 listen 하는 port   |
| ZK\_DOMAIN   | ZooKeeper ensemble을 구성하는 server로 구성된 domain |
| ZK\_SERVERS  | ZooKeeper ensemble을 구성하는 server 목록          |

ZK\_DOMAIN과 ZK\_SERVERS 중 하나의 설정만 사용해야 합니다.

### 실행 방법

* `start.sh` 스크립트를 사용하여 ZooKeeper Exporter를 실행할 수 있습니다.
* 아래 예시의 경우, `INSTALL_DIR/zookeeper-exporter/conf/dev.env`를 사용하여 exporter를 실행합니다.
* 다수의 exporter를 일괄 구동할 수 있습니다.

```sh
INSTALL_DIR/zookeeper-exporter/start.sh dev
# INSTALL_DIR/zookeeper-exporter/start.sh dev example ...
```

* 또는 아래와 같이 zookeeper-exporter 바이너리를 직접 실행할 수 있습니다.

> \[!WARNING] zk-hosts 인자에는 모든 zk server의 endpoint를 명시해주어야 합니다. domain 주소 하나만 명시하면 여러 서버의 데이터가 구분되지 않고 하나의 metric으로 수집됩니다.

```sh
INSTALL_DIR/zookeeper-exporter/zookeeper-exporter --listen=hubble-host:9141 --zk-hosts=zk-1:2181,zk-2:2181,zk-3:2181
```

* `http://<listenip>:<port>/metrics` 경로에서 metric 데이터를 조회할 수 있습니다.

## Orbiter

### 실행 설정 파일

실행하기에 앞서 아래의 `config.json` 파일을 설정해야 합니다.

```json
{
  "listen": "0.0.0.0:8084",
  "ensembleByName": {
    "dev": ["dev.arcuscloud.jam2in.com:2181"],
    "example": ["zk-1:2181", "zk-2:2181", "zk-3:2181"]
  },
  "serviceCodesByEnsembleName": {
    "dev": ["serviceCode01", "serviceCode02", "serviceCode03"]
  },
  "rawRetention": "14d",
  "log": {
    "level": "warn",
    "filename": "INSTALL_DIR/orbiter/log/orbiter.log",
    "maxSize": 20,
    "maxBackups": 10,
    "maxAge": 30,
    "compress": false
  }
}
```

각 인자의 의미는 아래와 같습니다.

| 인자                         | 의미                                                                                                                                                                                                                                                      |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| listen                     | Orbiter가 listen하는 주소                                                                                                                                                                                                                                    |
| ensembleByName             | 앙상블의 논리적 이름을 부여하는 맵 (key: 앙상블의 논리적 이름, value: 물리적 주소)                                                                                                                                                                                                   |
| serviceCodesByEnsembleName | 앙상블에서 수집하고 싶은 service Code를 담는 맵 (key: 앙상블의 논리적 이름, value: service code 목록) 따로 목록을 지정하지 않을 경우 모든 service code를 사용하게 된다.                                                                                                                                 |
| rawRetention               | Grafana에서 데이터 조회 시에 조회 구간의 시작 시점에 따라 Short/Long Term VictoriaMetrics 중 어떤 프로세스에서 쿼리에 대한 결과를 받을지 지정하는 값이다. Short Term VictoriaMetrics 구동 시 지정한 retentionPeriod 값과 동일해야 한다. Short Term VictoriaMetrics의 retentionPeriod 기본 값은 14d이므로 이 값의 기본 설정 역시 14d이다. |
| log.level                  | arcus\_exporter의 log level 설정, default는 warn이며 debug, warn, error, fatal, panic 중 하나를 사용할 수 있음                                                                                                                                                          |
| log.filename               | arcus\_exporter의 log 출력 위치를 설정, 기본 설정은 stdout                                                                                                                                                                                                           |
| log.maxSize                | arcus\_exporter의 log 파일 하나의 용량을 설정, 기본 설정은 20MB                                                                                                                                                                                                         |
| log.maxBackups             | arcus\_exporter의 백업 log 파일의 개수 지정, 기본 설정은 10개                                                                                                                                                                                                           |
| log.maxAge                 | arcus\_exporter의 log 보존 기간을 설정, 기본은 30일 (24h \* 30)                                                                                                                                                                                                     |
| log.compress               | arcus\_exporter의 백업용 log를 압축해 저장할지 여부를 설정, 기본 설정은 false                                                                                                                                                                                                 |

Orbiter에서는 여러 ZK ensemble에서 관리되는 캐시 클러스터 정보를 조회할 수 있으며, 각 ZK ensemble에서도 주어진 service codes 목록에 대해서만 정보를 조회할 수 있다. 이는 Grafana에서 관심 있는 service codes 정보만 보이게 하는 데 필요한 설정이다.

### 실행 방법

`INSTALL_DIR/orbiter/start.sh` 파일을 실행하거나 아래 script와 같이 실행할 수 있습니다.

```sh
INSTALL_DIR/orbiter/orbiter -config-file=INSTALL_DIR/orbiter/config.json
```

> \[!WARNING] Orbiter가 실행되는 장비는 모든 캐시, zk 장비의 hostname을 인식할 수 있어야 하며, exporter가 인식하는 hostname과 달라서는 안 됩니다.

참고로, 아래와 같이 `/etc/hosts` 파일에 hostname 인식할 수 있도록 설정하면 됩니다.

```sh
vi /etc/hosts

###host file ###

192.168.0.1  arcus-zookeeper-1  arcus-zookeeper-1
192.168.0.2  arcus-zookeeper-2  arcus-zookeeper-2
192.168.0.3  arcus-zookeeper-3  arcus-zookeeper-3
```

## VictoriaMetrics

### 실행 설정 파일

#### scrape.yml

`INSTALL_DIR/victoriametrics/conf/scrape.yml` 파일에서 메트릭 수집 설정을 변경할 수 있습니다. **위 설정은 전체적인 호환성을 맞추기 위해 기본값 그대로 사용하는 것을 권장합니다.**

```yml
scrape_configs:
  - job_name: meta-short
    scrape_interval: 1m
    static_configs:
      - targets:
          - localhost:8428

  - job_name: meta-long
    scrape_interval: 1m
    static_configs:
      - targets:
          - localhost:8429

  - job_name: system_resource
    scrape_interval: 5s
    relabel_configs:
      - target_label: "scrape"
        replacement: "short"
    file_sd_configs:
      - files:
          - "exporter/node_exporter.yml"

  - job_name: arcus
    scrape_interval: 5s
    relabel_configs:
      - target_label: "scrape"
        replacement: "short"
    file_sd_configs:
      - files:
          - "exporter/arcus_exporter.yml"

  - job_name: arcus_prefixes
    scrape_interval: 1m
    metrics_path: /metrics/prefixes
    relabel_configs:
      - target_label: "scrape"
        replacement: "short"
    file_sd_configs:
      - files:
          - "exporter/arcus_exporter.yml"

  - job_name: zookeeper
    scrape_interval: 1m
    relabel_configs:
      - target_label: "scrape"
        replacement: "short"
    file_sd_configs:
      - files:
          - "exporter/zookeeper_exporter.yml"
```

각 인자의 의미는 아래와 같습니다.

| 인자                | 의미                                                |
| ----------------- | ------------------------------------------------- |
| scrape\_configs   | 모니터링 대상 리소스 설정                                    |
| job\_name         | 모니터링 대상 리소스의 이름 설정                                |
| scrape\_interval  | 모니터링 대상 리소스에서 메트릭을 수집하는 주기                        |
| metrics\_path     | 모니터링 대상 리소스에서 메트릭을 수집할 엔드포인트 경로 (기본값: `/metrics`) |
| relabel\_configs  | 모니터링 대상 리소스에서 메트릭 수집 시 추가 혹은 대체할 라벨 정의            |
| file\_sd\_configs | 모니터링 대상 목록 설정                                     |

수집 대상 exporter 목록은 `scrape.yml` 파일에 직접 명시하는 대신 `INSTALL_DIR/victoriametrics/conf/exporter` 디렉토리 내부에 존재하는 yml 파일들에 `arcus_exporter`, `node_exporter`, `zookeeper_exporter` 목록을 정의하도록 합니다.

프로세스 실행 중에 설정 파일을 변경하면 바로 반영되지 않으므로, 수정 후 `POST http://<listenip>:<port>/-/reload` API를 호출 하거나, 프로세스에 `SIGHUP` 시그널을 보내야 합니다.

설정 파일에 대한 자세한 사항은 \[[Prometheus 설정 문서](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)]를 참고 바랍니다.

#### victoriametrics.env

프로세스 구동 옵션을 지정하는 파일입니다.

```sh
# Short-term VictoriaMetrics instance (high frequency raw data)
VM_LISTEN_ADDRESS="0.0.0.0:8428"
VM_RETENTION_PERIOD="14d"
VM_STORAGE_DATA_PATH="data/short"
VM_PROMSCRAPE_CONFIG="conf/scrape.yml"
VM_STREAMAGGR_CONFIG="conf/streamaggr.yml"
VM_LOG_LEVEL="INFO"
```

```sh
# Long-term VictoriaMetrics instance (downsampled data)
VM_LISTEN_ADDRESS="0.0.0.0:8429"
VM_RETENTION_PERIOD="2y"
VM_STORAGE_DATA_PATH="data/long"
VM_LOG_LEVEL="INFO"
```

각 인자의 의미는 다음과 같습니다.

| 인자                      | 의미                                      |
| ----------------------- | --------------------------------------- |
| VM\_LISTEN\_ADDRESS     | listen 하는 address                       |
| VM\_RETENTION\_PERIOD   | metric 데이터의 최대 보관 기간 (y, w, d, h 단위 지원) |
| VM\_STORAGE\_DATA\_PATH | 실제 시계열 데이터의 저장 위치                       |
| VM\_PROMSCRAPE\_CONFIG  | 메트릭 수집 설정 파일의 위치                        |
| VM\_STREAMAGGR\_CONFIG  | 서비스 코드 단위 Arcus 메트릭 집계를 위한 설정 파일의 위치    |
| VM\_LOG\_LEVEL          | 로그 레벨                                   |

### 실행 방법

수집 대상 exporter에 대한 설정이 완료되면 `INSTALL_DIR/victoriametrics/start.sh` 파일을 실행하여 프로세스를 구동할 수 있습니다. 이 때 `INSTALL_DIR/victoriametrics/short.env`, `INSTALL_DIR/victoriametrics/long.env` 파일을 사용하여 Short Term, Long Term 프로세스를 각각 구동하게 됩니다.

```sh
# Short Term, Long Term 프로세스를 모두 구동
bash start.sh

# Short Term 프로세스를 구동
bash start.sh short

# Long Term 프로세스를 구동
bash start.sh long
```

## Promxy

### 실행 설정 파일

#### promxy.yml

`INSTALL_DIR/promxy/promxy.yml` 파일에서 TSDB 설정을 변경할 수 있습니다.

```yml
promxy:
  server_groups:
    # Short-term VictoriaMetrics
    - static_configs:
        - targets:
            - localhost:8428
      timeout: 5s
      query_params:
        nocache: 1
      label_filter:
        static_labels_include:
          scrape:
            - short
    # Long-term VictoriaMetrics
    - static_configs:
        - targets:
            - localhost:8429
      timeout: 5s
      query_params:
        nocache: 1
      label_filter:
        static_labels_include:
          scrape:
            - long
```

각 인자의 의미는 아래와 같습니다.

| 인자              | 의미                                                                                      |
| --------------- | --------------------------------------------------------------------------------------- |
| server\_groups  | TSDB 그룹 목록을 정의                                                                          |
| static\_configs | TSDB 그룹을 정의                                                                             |
| targets         | TSDB 주소 목록                                                                              |
| timeout         | 요청을 보낸 후 응답이 올 때 까지 최대 대기할 시간                                                           |
| query\_params   | VictoriaMetrics로 응답을 보낼 때 필요한 옵션 (see <https://github.com/jacksontj/promxy/issues/202>) |
| label\_filter   | 특정 label의 일치 여부에 따라 TSDB 그룹에 요청을 보낼지 말지 필터링하는 조건                                        |

설정 파일에 대한 자세한 사항은 \[[Promxy 설정 문서](https://github.com/jacksontj/promxy/blob/master/cmd/promxy/config.yaml)]를 참고 바랍니다.

#### promxy.env

프로세스 구동 옵션을 지정하는 파일입니다.

```sh
PROMXY_LISTEN_ADDRESS=":8082"
```

각 인자의 의미는 다음과 같습니다.

| 인자                      | 의미                |
| ----------------------- | ----------------- |
| PROMXY\_LISTEN\_ADDRESS | listen 하는 address |

### 실행 방법

`INSTALL_DIR/promxy/start.sh` 파일을 실행하거나 아래 script와 같이 실행할 수 있습니다.

```sh
INSTALL_DIR/promxy/promxy \
 --bind-addr=:8082 \
 --config="INSTALL_DIR/promxy/conf/promxy.yml" \
 2>&1 | logger -it promxy &
```

`http://<listenip>:<port>` 경로에서 UI 화면이 제공되므로 규칙이 잘 판정되고 있는지 여부, 실시간 알림 목록 확인, 리로드 등 다양한 기능을 사용할 수 있습니다.

## VMAlert

### 실행 설정 파일

#### 알림 규칙 및 다운샘플링 규칙

`INSTALL_DIR/vmalert/conf/rules` 디렉토리 하위에 기본 알림 규칙과 다운샘플링 규칙 파일들이 존재합니다. 기본 알림 규칙에 작성되어 있는 임계값은 가장 일반적인 상황을 가정하고 지정해둔 값이므로, 시스템이나 서비스마다 스펙과 요청량을 고려하여 적절히 수정하는 것이 필요합니다. **다운샘플링 규칙은 전체적인 호환성을 맞추기 위해 기본값 그대로 사용하는 것을 권장합니다.**

VictoriaMetrics와 마찬가지로 프로세스 실행 중 규칙 파일을 변경한 경우 `POST http://<listenip>:<port>/-/reload` API를 호출 하거나, 프로세스에 `SIGHUP` 시그널을 보내야 합니다.

#### vmalert.env

```sh
# VMAlert configuration
VMALERT_RULE="rules/*.yml"
VMALERT_DATASOURCE_URL="http://localhost:8428"
VMALERT_REMOTEWRITE_URL="http://localhost:8429"
VMALERT_NOTIFIER_URL="http://localhost:9093"
VMALERT_LISTEN_ADDRESS=":8430"
```

각 인자의 의미는 다음과 같습니다.

| 인자                        | 의미                                          |
| ------------------------- | ------------------------------------------- |
| VMALERT\_RULE             | 알람 및 다운샘플링 규칙 대상 설정                         |
| VMALERT\_DATASOURCE\_URL  | 규칙을 적용할 대상 메트릭이 저장되어 있는 VictoriaMetrics URL |
| VMALERT\_REMOTEWRITE\_URL | 다운샘플링 시 집계 결과를 저장할 VictoriaMetrics URL      |
| VMALERT\_NOTIFIER\_URL    | 알림이 발생했을 때 이벤트를 전달받을 AlertManager URL       |
| VMALERT\_LISTEN\_ADDRESS  | listen 하는 address                           |

### 실행 방법

`INSTALL_DIR/vmalert/start.sh` 파일을 실행하거나 아래 script와 같이 실행할 수 있습니다.

```sh
INSTALL_DIR/vmalert/vmalert-prod \
-rule=/INSTALL_DIR/vmalert/conf/rules/*.yml \
-datasource.url=http://localhost:8428 \
-remoteWrite.url=http://localhost:8429 \
-notifier.url=http://localhost:9093 \
-httpListenAddr=:8430 \
2>&1 | logger -it vmalert &&
```

`http://<listenip>:<port>` 경로에서 UI 화면이 제공되므로 규칙이 잘 판정되고 있는지 여부, 실시간 알림 목록 확인, 리로드 등 다양한 기능을 사용할 수 있습니다.

## Alertmanager

### 실행 설정 파일

#### alertmanager.yml

`INSTALL_DIR/alertmanager/conf/alertmanager.yml` 파일에서 알림을 전송하기 위한 Slack Webhook 주소, Mail SMTP 정보 등을 입력해줍니다. `<please enter ...>` 라고 명시되어 있는 부분을 직접 채워야 합니다.

VictoriaMetrics와 마찬가지로 프로세스 실행 중에 설정 파일을 수정할 경우 `POST http://<listenip>:<port>/-/reload` API를 호출 하거나, 프로세스에 `SIGHUP` 시그널을 보내야 최신 설정 파일이 반영됩니다.

#### alertmanager.env

프로세스 구동 옵션을 지정하는 파일입니다. 프로세스 Listen Address를 설정해주면 됩니다.

```sh
ALERTMANAGER_LISTEN_ADDRESS="0.0.0.0:9093"
```

### 실행 방법

`INSTALL_DIR/alertmanager/start.sh` 파일을 실행하여 프로세스를 구동할 수 있습니다. 이 때 `INSTALL_DIR/alertmanager/conf/alertmanager.env` 파일이 사용됩니다. 혹은, 아래 명령을 통해 직접 프로세스를 구동할 수 있습니다.

```bash
INSTALL_DIR/alertmanager/alertmanager \
--config.file=INSTALL_DIR/alertmanager/conf/alertmanager.yml \
--web.listen-address=0.0.0.0:9093 \
2>&1 | logger -it alertmanager &&
```

## Grafana 설정

### 실행 설정 파일

설치 script 이용하여 설치했을 경우, dashboard provisioning을 위한 json 파일 및 설정 파일, 플러그인이 모두 설치 됩니다.

#### grafana.ini

* listen ip:port, log 설정 등을 변경하려는 경우 `INSTALL_DIR/grafana/conf/grafana.ini` 파일을 수정합니다.
* 설치 스크립트 사용하지 않은 경우 `arcus-hubble-v3/conf/grafana/grafana.ini` 참고하여 작성합니다.

#### hubble-v3\_dashboards.yaml

* dashboard provisioning 설정을 변경하려는 경우 `INSTALL_DIR/grafana/conf/provisioning/dashboards/hubble-v3_dashboards.yaml` 파일을 수정합니다.
* 설치 스크립트 사용하지 않은 경우 `arcus-hubble-v3/conf/grafana/provisioning/dashboards/hubble-v3_dashboards.yaml` 참고하여 작성합니다.
* arcus-hubble-v3에서 제공하는 dashboard는 `arcus-hubble-v3/conf/grafana/dashboards` 하위에 위치하고 있습니다.

#### hubble-v3\_datasources.yaml

* datasource provisioning 설정을 변경하려는 경우 `INSTALL_DIR/grafana/conf/provisioning/datasources/hubble-v3_dashboards.yaml` 파일을 수정합니다.
* 설치 스크립트 사용하지 않은 경우 `arcus-hubble-v3/conf/grafana/provisioning/datasources/hubble-v3_datasources.yaml` 참고하여 작성합니다.
* JSON datasource 사용을 위해서는 플러그인 설치가 필요합니다.

```
INSTALL_DIR/grafana/bin/grafana cli\
 --homepath INSTALL_DIR/grafana\
 --pluginsDir INSTALL_DIR/grafana/data/plugins plugins install simpod-json-datasource 0.6.5
```

### 실행방법

`INSTALL_DIR/grafana/start.sh` 파일을 실행하거나 아래 스크립트와 같이 실행할 수 있습니다.

```sh
INSTALL_DIR/grafana/bin/grafana-server \
--homepath INSTALL_DIR/grafana \
--config INSTALL_DIR/grafana/conf/grafana.ini \
--pidfile INSTALL_DIR/grafana-server.pid
```

## 접속 및 기본 모니터링 설정

grafana 설치 시 설정했던 `<listenip>:<port>`로 접속합니다. 초기화면은 아래와 같습니다.

![](https://github.com/user-attachments/assets/70d699c5-dd65-4419-badf-ca40ba17e121)
