Chapter 3. Config and start

ARCUS Exporter

실행 설정 파일

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

{
  "listen": "hubble-host:13111",
  "ensemble": ["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 설정

ensemble

zk ensemble 주소 설정, ZK 서버 목록이나 ZK 도메인 이름을 설정

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를 일괄 구동할 수 있습니다.

INSTALL_DIR/arcus_exporter/start.sh example1
# INSTALL_DIR/arcus_exporter/start.sh example1 example2 ...
  • 또는 아래와 같이 arcus_exporter 바이너리를 직접 실행할 수 있습니다.

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만 수집하는 구동 옵션을 사용하도록 설정하였습니다.

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 데이터를 조회할 수 있습니다.

ZooKeeper Exporter

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

실행 설정 파일

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

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를 일괄 구동할 수 있습니다.

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으로 수집됩니다.

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 파일을 설정해야 합니다.

{
  "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와 같이 실행할 수 있습니다.

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

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

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

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 파일에서 메트릭 수집 설정을 변경할 수 있습니다. 위 설정은 전체적인 호환성을 맞추기 위해 기본값 그대로 사용하는 것을 권장합니다.

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 설정 문서]를 참고 바랍니다.

victoriametrics.env

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

# 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"
# 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 프로세스를 각각 구동하게 됩니다.

# 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 설정을 변경할 수 있습니다.

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 설정 문서]를 참고 바랍니다.

promxy.env

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

PROMXY_LISTEN_ADDRESS=":8082"

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

인자
의미

PROMXY_LISTEN_ADDRESS

listen 하는 address

실행 방법

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

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

# 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와 같이 실행할 수 있습니다.

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를 설정해주면 됩니다.

ALERTMANAGER_LISTEN_ADDRESS="0.0.0.0:9093"

실행 방법

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

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 파일을 실행하거나 아래 스크립트와 같이 실행할 수 있습니다.

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>로 접속합니다. 초기화면은 아래와 같습니다.

Last updated