SQL로 제니퍼 데이터 조회하기
제니퍼 API서버 활용하기
제니퍼는 1초 단위의 수집 데이터를 자체로 제작한 파일 시스템에 저장합니다.
이 파일 시스템은 대용량의 데이터를 고속으로 처리하는데 초점을 맞추어 개발되었고 실제 고객사의 대용량 인스턴스의 데이터를 안정적으로 수집하여 처리하고 있습니다. 다만 직접 제작한 파일 시스템이기에 사용자가 원하는 가공 형태의 데이터를 조회하는데 어려움이 있습니다.
이에 많은 고객분들이 SQL로 제니퍼의 데이터를 자유롭게 조회해서 사용하고 싶다는 의견을 주셨고 제니퍼 R&D팀에서는 개선방향을 지속적으로 연구해서 새롭게 기능을 추가해 왔습니다.
현재 제니퍼는 2가지 방식의 SQL 조회방법을 제공하고 있습니다. 이번 글에서는 제니퍼 API 서버와 JDBC 드라이버를 이용한 데이터 조회 방법을 살펴보겠습니다.
제니퍼 API 서버는 제니퍼 서버와 별도의 프로세스로 동작합니다.
JDBC 드라이버가 사용자로부터 받은 요청을 API 서버에 전달하고 API 서버는 파일 DB를 읽어서 HTTP 응답 형태로 결과값을 전달해줍니다.
제니퍼 API를 사용하기 위해서는 다운로드 패키지에 아래의 파일이 있는지 확인이 필요합니다.
각 패키지는 다음 링크에서 다운받을 수 있습니다.
API 서버 https://github.com/jennifersoft/jennifer5-api-server
JDBC 드라이버 https://github.com/jennifersoft/jennifer5-jdbc-driver
jennifer-api-server-5.6.0.5.zip | 제니퍼 API 서버 패키지 파일 |
jennifer-jdbc-5.6.0.5.zip | 제니퍼 JDBC 드라이버 파일 |
api_server.conf | 제니퍼 API서버 설정파일 |
제니퍼 API 서버의 설정 파일은 conf/api_server.conf 이며 yaml 포맷으로 작성되어 있습니다.
apiServer: host: "0.0.0.0" port: 8080 제니퍼 API 서버 연결포트 입니다. authentication: id: "jennifer" 접속아이디 password: "jennifer" 접속패스워드
jennifer: dataServer: 데이터서버용 데이터 db: - {path: "/home/jennifer/server.data/db_data", name: "default"} dbName viewServer: 뷰서버용 데이터 db: {path: "/home/jennifer/jennifer5-server/db_view", name: "default"}
여러 개의 데이터서버 (혹은) 뷰서버의 파일 DB 정보를 조회하고자 할 경우 사용하아래와 같이 디렉토리 경로를 추가로 설정합니다.
db: - {path: "/home/jennifer/server.data/db_data", name: "default"} - {path: "/home/jennifer/server.data/db_data1", name: "data1"} - {path: "/home/jennifer/server.data/db_data2", name: "data2"}
이제 제니퍼 API 서버를 실행하여 간단히 활용하는 방법을 살펴보겠습니다.
먼저 jennifer-api-server-{version}.zip 파일의 압축을 해제 후 conf/api_server.conf 파일에 뷰서버 혹은 데이터 서버의 경로를 사용자의 제니퍼 디비 경로에 맞게 수정합니다.
bin/api-server (or api-server.bat) 실행하면 아래와 같은 로그를 확인할 수 있습니다.
제니퍼 API 서버가 실행 되었으니 이제 데이터를 조회해 보겠습니다.
표준 JDBC 로 제작 되었기 때문에 거의 모든 디비 관련 툴에서 이용가능합니다. 본 글에서는 드라이버 자체 내장된 CLI 를 이용한 방법, 별도 애플리케이션을 개발하는 방법, 오픈소스 디비 관리 도구인 DBeaver 의 사용방법을 알아봅니다.
먼저 제니퍼 JDBC 드라이버에서 제공하는 CLI기능을 사용해서 접속하는 방법입니다.
아래와 같이 제니퍼 JDBC 드라이버를 실행하면 제니퍼 DB에 간단하게 연결할 수 있습니다.
CLI가 실행된 상태에서 SQL문을 사용해서 제니퍼 데이터를 조회해 볼 수 있습니다.
사용자가 제니퍼 디비를 관리하거나 조회하여 별도의 기능을 구현하고자 하는 경우 아래와 같이 DriverManager 를 이용하여 데이터를 조회할 수 있습니다.
//HTTP 생략 가능
- DriverManager.getConnection(“jdbc:jennifer://host:port”)
// port 80 일 경우
- DriverManager.getConnection(“jdbc:jennifer://host”)
- DriverManager.getConnection(“jdbc:jennifer:http://host:port”)
// dbName 구분시
- DriverManager.getConnection(“jdbc:jennifer:http://host:port;dbName=jennifer”)
// View Server DB 조회시
- DriverManager.getConnection(“jdbc:jennifer:http://host:port;dbType=view;dbName=jennifer”)
다음으로 SQL 클라이언트를 활용하는 방법입니다.
여러가지 도구들이 있으나 널리 사용되는 오픈소스인 DBeaver를 사용하면서 설명드리겠습니다.
1.제니퍼 JDBC 드라이버를 Driver Manager 메뉴로 이동하여 등록합니다.
2. 접속을 위한 Class Name, Host, Port 정보를 입력합니다.
3. 프로퍼티 탭에서는 접속을 위한 dbType, dbName 항목을 등록합니다. API 서버 설정에 추가한 각 dbPath 정의와 매칭되며 단일 디비 경로를 지정한 경우 생략할 수 있습니다. 이 경우 “default” 라는 이름을 가진 dbPath 가 선택됩니다.
4. 새 데이터베이스 연결에서 Jennifer5 드라이버를 검색하여 선택합니다.
5. 접속에 필요한 정보를 입력합니다. 아이피 패스워드는 API 서버 설정 파일의 authenticate 영역에 기입한 내용을 입력합니다.
6. 새 SQL 편집기를 선택하세요.
7. 사전 준비된 SQL(select * from all_tables)로 조회 가능한 테이블 목록을 확인할 수 있습니다. 물론 스키마 이름을 선택해도 정보 확인이 가능합니다.
8. 확인된 테이블을 대상으로 원하는 SQL 을 실행할 수 있습니다.
현재 조회할 수 있는 테이블 종류는 아래와 같습니다.
✔ | APPLICATION_STATISTIC_도메인_날짜 |
✔ | TRANSACTION_도메인_날짜 |
✔ | INSTANCE_METRIC_도메인_날짜 |
✔ | DOMAIN_METRIC_도메인_날짜 |
✔ | INSTANCE_도메인dbType=view |
제니퍼 JDBC 드라이버는 표준 SQL 에 맞게 제작되었습니다. 사용가능한 SQL 함수, 문법에 대한 스펙은 아래 링크를 참고하세요.
이상으로 제니퍼 API 서버와 JDBC 드라이버를 이용하여 데이터를 조회하는 방법에 대한 소개를 마칩니다.
다음 글에서는 “SQL로 제니퍼 데이터 활용하기” 2번째 기능을 소개해 드리도록 하겠습니다.