Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 시각화] Prometheus

Prometheus로 마크베이스 모니터링 하기

모니터링에 프로메테우스(Prometheus)를 쓰는 분들이 많죠. 인기 좋은 오픈 소스 모니터링 툴입니다. 다양한 곳에서 측정치를 수집해서 저장할 수 있고, 저장된 데이터를 Grafana 같은 시각화 도구를 통해 보거나 조건을 지정해서 특정 상황에 경보를 발생시킬 수도 있습니다. 소개 페이지에서 기본적인 동작 구조를 볼 수 있고요.

측정 데이터가 어디서 나오는 것이든 간에 “익스포터(exporter)”라는 에이전트가 정해진 형식과 프로토콜로 데이터를 제공하기만 하면 프로메테우스가 데이터를 수집할 수 있습니다. 익스포터 목록을 보면 종류가 참 다양한데, 예를 들어 Process Exporter를 쓰면 리눅스에서 동작하는 프로세스의 여러 동작 상태를 감시할 수 있습니다. 그리고 Machbase Exporter를 이용하면 마크베이스(Machbase)의 동작 상태를 상세히 들여다볼 수 있고요.

따라해 보기

어느 리눅스 호스트에 마크베이스가 기본 설정으로 동작 중이라고 하겠습니다. 그 호스트에 마크베이스 익스포터를 설치해 볼까요.

$ git clone https://github.com/MACHBASE/prometheus-machbase-exporter.git

MACHBASE_HOME 등의 환경 변수가 설정돼 있어야 합니다.

$ echo $MACHBASE_HOME
/home/machbase/machbase_home

실행해 볼까요.

$ cd prometheus-machbase-exporter
$ ./start-machbase-exporter.sh
Downloading prometheus_client module...
[2019-04-02 14:53:33,101] root.INFO MainThread Starting server...
[2019-04-02 14:53:33,549] root.INFO MainThread Server started on port 9297

출력된 메시지대로 정말 9297번 포트에서 익스포터 서버가 돌고 있는지 확인해 보겠습니다.

$ curl localhost:9297
...
# HELP machbase_sysmem_usage_sum
# TYPE machbase_sysmem_usage_sum gauge
machbase_sysmem_usage_sum 3.66007812e+08
# HELP machbase_sysstat_count
# TYPE machbase_sysstat_count gauge
machbase_sysstat_count{name="cstar_node_close"} 0.0
machbase_sysstat_count{name="bitmap_aggr_node_fetch"} 0.0
...

“machbase_”로 시작하는 데이터 항목들이 주루룩 나오네요.

이 데이터를 프로메테우스가 읽어 가도록 하면 됩니다. 즉 prometheus.yml 파일에 익스포터 이름과 조회 간격, 연결 주소를 추가하고서 새 설정을 적용시키면 됩니다.

현재 돌리고 있는 프로메테우스가 없다면? 도커(Docker)를 통해 한 번 써 볼 수 있습니다. 익스포터가 동작 중인 상태에서, 먼저 다음 내용으로 prometheus.yml 파일을 만듭니다.

scrape_configs:
  - job_name: 'machbase'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297']

그리고 프로메테우스를 내려받아서 실행하면 됩니다.

$ docker run --rm -d -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml --network host prom/prometheus
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
697743189b6d: Pull complete

...

웹 브라우저로 이 호스트의 9090번 포트를 열면? 프로메테우스 웹 인터페이스를 볼 수 있습니다.

Expression 입력란에 데이터 항목 이름을 입력하면 됩니다. 가령 “machbase_sysstat_count{name=~'execute_.*'}“라고 입력하고 엔터를 쳐 볼까요. (뒷쪽 부분은 name 속성 값이 정규 표현식 “execute_.*“에 일치하는 항목만 표시하라는 내용입니다.)

두 항목에 대해 마크베이스 익스포터로부터 수집한 최신 측정치가 나옵니다. (수집 간격이 있기 때문에 아직 데이터가 없을 수도 있습니다. 그땐 수십 초 후에 다시 시도하면 됩니다.)

Graph 탭을 누르면 간단한 그래프도 볼 수 있습니다.

시각화 도구 사용하기

그라파나(Grafana) 같은 시각화 도구를 함께 쓰면 더 편하고 효율적으로 모니터링을 할 수 있습니다.

프로메테우스와 그라파나를 연결하는 방법은 프로메테우스 문서를 참고할 수 있고요.

연결 인자 지정하기

기본과 다른 연결 설정을 사용 중이라면 start-machbase-exporter.sh 파일 상단에서 인자 값을 바꿔 주면 됩니다.

# Connection arguments
MACHBASE_ADDRESS=localhost:5656
MACHBASE_USERNAME=SYS
MACHBASE_PASSWORD=MANAGER

아니면 좀 번거롭지만 다음처럼 연결 인자를 직접 지정해서 실행할 수도 있고요.

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -s 192.168.0.22:5656 -u myname -P mypassword

익스포터 여러 개 돌리기

한 호스트에서 마크베이스 인스턴스 여러 개가 포트 번호를 달리 해서 돌고 있을 수도 있습니다. 그럴 때는 인스턴스마다 익스포터를 하나씩 실행하면 됩니다. 익스포터 자체가 여는 포트들이 서로 충돌하면 안 되니까 각기 다른 포트 번호를 지정해 줘야 할 테고요.

예를 들어 마크베이스 인스턴스 두 개가 각각 포트 번호 5656과 5657로 돌고 있다고 하면 다음과 같이 익스포터를 실행할 수 있습니다.

익스포터 1 (5656 => 9297):

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -p 9297 -s localhost:5656 -P MANAGER

익스포터 2 (5657 => 9298):

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -p 9298 -s localhost:5657 -P MANAGER

프로메테우스 설정 파일에서 다음처럼 두 주소를 지정해 주면 되고요.

scrape_configs:
  - job_name: 'machbase'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297', 'localhost:9298']

아니면 다음처럼 아예 별개 항목으로 설정할 수도 있겠네요.

scrape_configs:
 
  - job_name: 'machbase-primary'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297']
 
  - job_name: 'machbase-secondary'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9298']

다른 데이터 수집하기

마크베이스에는 데이터베이스의 현재 상태 정보를 담고 있는 가상 테이블이 있습니다. 마크베이스 익스포터는 몇몇 가상 테이블에 대한 질의를 주기적으로 수행해서 측정치를 얻는 거고요. 따라서 수행하는 질의를 바꿔 주면 다른 가상 테이블이나 사용자 테이블로부터 데이터를 수집할 수도 있습니다.

익스포터 프로그램 디렉터리의 exporter.cfg 파일에서 수행할 질의를 지정할 수 있습니다. 예를 들어 그 파일에 다음 내용을 추가하고 익스포터를 다시 시작하면 현재 연결 세션 수를 모니터링 할 수 있게 됩니다.

[query_machbase_session]
QueryIntervalSecs = 30
QueryStatement = SELECT COUNT(*) AS cnt FROM v$session
QueryValueColumns = cnt

QueryIntervalSecs 항목은 질의 수행 간격(초 단위)이고 QueryStatement 항목은 수행할 질의입니다. QueryValueColumns 항목은 질의 결과 내에서 측정치를 담은 칼럼의 이름인데 정수나 부동소수점 타입이어야 되고요.

섹션 이름(query_machbase_session) 앞의 “query_“가 없어지고 “_“와 측정치 칼럼 이름이 덧붙어서 프로메테우스에 보이는 항목 이름(machbase_session_cnt)이 됩니다.

모니터링에 프로메테우스(Prometheus)를 쓰는 분들이 많죠. 인기 좋은 오픈 소스 모니터링 툴입니다. 다양한 곳에서 측정치를 수집해서 저장할 수 있고, 저장된 데이터를 Grafana 같은 시각화 도구를 통해 보거나 조건을 지정해서 특정 상황에 경보를 발생시킬 수도 있습니다. 소개 페이지에서 기본적인 동작 구조를 볼 수 있고요.

측정 데이터가 어디서 나오는 것이든 간에 “익스포터(exporter)”라는 에이전트가 정해진 형식과 프로토콜로 데이터를 제공하기만 하면 프로메테우스가 데이터를 수집할 수 있습니다. 익스포터 목록을 보면 종류가 참 다양한데, 예를 들어 Process Exporter를 쓰면 리눅스에서 동작하는 프로세스의 여러 동작 상태를 감시할 수 있습니다. 그리고 Machbase Exporter를 이용하면 마크베이스(Machbase)의 동작 상태를 상세히 들여다볼 수 있고요.

따라해 보기

어느 리눅스 호스트에 마크베이스가 기본 설정으로 동작 중이라고 하겠습니다. 그 호스트에 마크베이스 익스포터를 설치해 볼까요.

$ git clone https://github.com/MACHBASE/prometheus-machbase-exporter.git

MACHBASE_HOME 등의 환경 변수가 설정돼 있어야 합니다.

$ echo $MACHBASE_HOME
/home/machbase/machbase_home

실행해 볼까요.

$ cd prometheus-machbase-exporter
$ ./start-machbase-exporter.sh
Downloading prometheus_client module...
[2019-04-02 14:53:33,101] root.INFO MainThread Starting server...
[2019-04-02 14:53:33,549] root.INFO MainThread Server started on port 9297

출력된 메시지대로 정말 9297번 포트에서 익스포터 서버가 돌고 있는지 확인해 보겠습니다.

$ curl localhost:9297
...
# HELP machbase_sysmem_usage_sum
# TYPE machbase_sysmem_usage_sum gauge
machbase_sysmem_usage_sum 3.66007812e+08
# HELP machbase_sysstat_count
# TYPE machbase_sysstat_count gauge
machbase_sysstat_count{name="cstar_node_close"} 0.0
machbase_sysstat_count{name="bitmap_aggr_node_fetch"} 0.0
...

“machbase_”로 시작하는 데이터 항목들이 주루룩 나오네요.

이 데이터를 프로메테우스가 읽어 가도록 하면 됩니다. 즉 prometheus.yml 파일에 익스포터 이름과 조회 간격, 연결 주소를 추가하고서 새 설정을 적용시키면 됩니다.

현재 돌리고 있는 프로메테우스가 없다면? 도커(Docker)를 통해 한 번 써 볼 수 있습니다. 익스포터가 동작 중인 상태에서, 먼저 다음 내용으로 prometheus.yml 파일을 만듭니다.

scrape_configs:
  - job_name: 'machbase'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297']

그리고 프로메테우스를 내려받아서 실행하면 됩니다.

$ docker run --rm -d -v $PWD/prometheus.yml:/etc/prometheus/prometheus.yml --network host prom/prometheus
Unable to find image 'prom/prometheus:latest' locally
latest: Pulling from prom/prometheus
697743189b6d: Pull complete
...

웹 브라우저로 이 호스트의 9090번 포트를 열면? 프로메테우스 웹 인터페이스를 볼 수 있습니다.

Expression 입력란에 데이터 항목 이름을 입력하면 됩니다. 가령 “machbase_sysstat_count{name=~'execute_.*'}“라고 입력하고 엔터를 쳐 볼까요. (뒷쪽 부분은 name 속성 값이 정규 표현식 “execute_.*“에 일치하는 항목만 표시하라는 내용입니다.)

두 항목에 대해 마크베이스 익스포터로부터 수집한 최신 측정치가 나옵니다. (수집 간격이 있기 때문에 아직 데이터가 없을 수도 있습니다. 그땐 수십 초 후에 다시 시도하면 됩니다.)

Graph 탭을 누르면 간단한 그래프도 볼 수 있습니다.

시각화 도구 사용하기

그라파나(Grafana) 같은 시각화 도구를 함께 쓰면 더 편하고 효율적으로 모니터링을 할 수 있습니다.

프로메테우스와 그라파나를 연결하는 방법은 프로메테우스 문서를 참고할 수 있고요.

연결 인자 지정하기

기본과 다른 연결 설정을 사용 중이라면 start-machbase-exporter.sh 파일 상단에서 인자 값을 바꿔 주면 됩니다.

# Connection arguments
MACHBASE_ADDRESS=localhost:5656
MACHBASE_USERNAME=SYS
MACHBASE_PASSWORD=MANAGER

아니면 좀 번거롭지만 다음처럼 연결 인자를 직접 지정해서 실행할 수도 있고요.

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -s 192.168.0.22:5656 -u myname -P mypassword

익스포터 여러 개 돌리기

한 호스트에서 마크베이스 인스턴스 여러 개가 포트 번호를 달리 해서 돌고 있을 수도 있습니다. 그럴 때는 인스턴스마다 익스포터를 하나씩 실행하면 됩니다. 익스포터 자체가 여는 포트들이 서로 충돌하면 안 되니까 각기 다른 포트 번호를 지정해 줘야 할 테고요.

예를 들어 마크베이스 인스턴스 두 개가 각각 포트 번호 5656과 5657로 돌고 있다고 하면 다음과 같이 익스포터를 실행할 수 있습니다.

익스포터 1 (5656 => 9297):

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -p 9297 -s localhost:5656 -P MANAGER

익스포터 2 (5657 => 9298):

$ $MACHBASE_HOME/webadmin/flask/Python/bin/python machbase-exporter.py -p 9298 -s localhost:5657 -P MANAGER

프로메테우스 설정 파일에서 다음처럼 두 주소를 지정해 주면 되고요.

scrape_configs:
  - job_name: 'machbase'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297', 'localhost:9298']

아니면 다음처럼 아예 별개 항목으로 설정할 수도 있겠네요.

scrape_configs:
 
  - job_name: 'machbase-primary'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9297']
 
  - job_name: 'machbase-secondary'
    scrape_interval: '30s'
    static_configs:
      - targets: ['localhost:9298']

다른 데이터 수집하기

마크베이스에는 데이터베이스의 현재 상태 정보를 담고 있는 가상 테이블이 있습니다. 마크베이스 익스포터는 몇몇 가상 테이블에 대한 질의를 주기적으로 수행해서 측정치를 얻는 거고요. 따라서 수행하는 질의를 바꿔 주면 다른 가상 테이블이나 사용자 테이블로부터 데이터를 수집할 수도 있습니다.

익스포터 프로그램 디렉터리의 exporter.cfg 파일에서 수행할 질의를 지정할 수 있습니다. 예를 들어 그 파일에 다음 내용을 추가하고 익스포터를 다시 시작하면 현재 연결 세션 수를 모니터링 할 수 있게 됩니다.

[query_machbase_session]
QueryIntervalSecs = 30
QueryStatement = SELECT COUNT(*) AS cnt FROM v$session
QueryValueColumns = cnt

QueryIntervalSecs 항목은 질의 수행 간격(초 단위)이고 QueryStatement 항목은 수행할 질의입니다. QueryValueColumns 항목은 질의 결과 내에서 측정치를 담은 칼럼의 이름인데 정수나 부동소수점 타입이어야 되고요.

섹션 이름(query_machbase_session) 앞의 “query_“가 없어지고 “_“와 측정치 칼럼 이름이 덧붙어서 프로메테우스에 보이는 항목 이름(machbase_session_cnt)이 됩니다.

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을