제니퍼 데이터 서버 설치 및 구성

제니퍼 데이터 서버란?

데이터 서버는 제니퍼 에이전트와 뷰 서버의 중간에서 에이전트에 대한 관리, 데이터의 처리 및 저장, 뷰 서버에서 요청하는 데이터를 전달하는 서버이다.

제니퍼5 패키지를 다운로드 받아서 압축을 해제하면 server.data 디렉토리가 생성이된다. 해당 폴더가 제니퍼 데이터 서버이다

데이터 서버의 에이전트 관리

데이터 서버는 에이전트 접속을 위해 포트를 열어두고 접속 대기를 한다. 에이전트가 해당 포트로 접속했을 경우, 에이전트 연결 상태, 에이전트 라이센스 정상 여부를 판단하는 역할을 한다.

데이터 서버의 데이터 처리

데이터 서버는 에이전트에서 수집하여 전송한 모든 데이터에 대한 가공,저장,검색에 대한 처리를 수행한다.

제니퍼 데이터 서버 사양

제니퍼 데이터 서버의 사양은 모니터링 대상 시스템의 규모 및 수집하는 데이터의 양에 따라 다르기는 하나, 일반적으로 1000 TPS 이하의 트랜잭션을 서비스하는 최소 다음과 같은 사양을 필요로 한다.

제니퍼 데이터 서버 사양

항목

권장사양

CPU

4 core ( 2.0 GHz 이상)

Memory

8 GB 이상의 여유 메모리

하드디스크

1000 GB 이상 - 시스템 규모나 프로파일 양에따라 변동

지원 OS

Linux, Windows (가급적 Linux를 권장한다.)

지원되는 JDK

JDK 1.8 만 지원함. (OpenJDK 1.8포함)

제니퍼 데이터 서버는 Daemon형태의 java 프로그램으로, JAVA가 설치되는 대부분의 시스템에서 운영이 가능하며, 하드디스크 용량의 경우 제니퍼가 구성 되어질 시스템 규모, 데이터의 수집 범위에 따라 사양이 변경될 수 있다.

제니퍼서버 5.4.0 이후부터는 Oracle JDK 1.8 과 OpenJDK 1.8 만 지원한다.

HP-UX의 경우 아래의 옵션을 추가해야 한다.

JAVA_OPTS=" ${JAVA_OPTS} -d64" 
JAVA_OPTS=" ${JAVA_OPTS} -Xmpas:on"

가상환경에서는 서버 성능상의 문제로 인해서 사용하면 안된다.

하나의 물리 서버에 여러개의 data server를 실행할 경우에는 각 process당 2core이상씩 할당해야한다.

Bootstrap Check

데이터 서버는 원활한 수집 성능을 확보하기 위해 실행전 현재 환경의 적합 여부를 확인하는 과정을 거친다. 다음 항목 중 하나라도 만족하지 않을 경우 데이터 서버는 시작되지 않는다.

데이터 서버 설정 파일 (server_data.conf) 에 jennifer_bootstrap_check=false 를 추가한 뒤 실행 스크립트를 실행하면 위 제약 사항을 무시할 수 있다.

이 경우 충분한 수집 성능을 보장할 수 없으며 데이터 유실이 발생할 수 있음을 인지해야 한다.

제니퍼 데이터 서버 디렉토리 구성

제니퍼 데이터 서버의 디렉토리 구성은 아래와 같다.

제니퍼 데이터 서버의 디렉토리 구성

디렉토리명

설명

bin

실행파일들을 포함하고 있는 디렉토리

conf

설정파일들을 포함하고 있는 디렉토리

lib

데이터 서버 구동을 위한 라이브러리

db_data

성능데이터가 저장되는 디렉토리로 기본설정인 경우에 생성되는 디렉토리

logs

처음 기동시에 생기는 디렉토리로 데이터서버의 로그를 저장하는 디렉토리

성능데이터가 저장되는 파티션(디스크)에 전체 용량이 4GB 미만 남게되면 경고 메시지를 보내주고, 100MB미만이면 자동으로 shutdown 시킵니다.

제니퍼 데이터 서버 디비 백업 (수동)

제니퍼 데이터 서버는 자체적으로 제작한 파일 디비를 사용하며 설정 파일인 server_data.conf 에 설정된 db_path 디렉토리에 도메인 단위로 데이터를 저장한다.

각 디렉토리는 도메인의 아이디로 생성되며 하위에는 성능 데이터 저장을 위한 일자 별 디렉토리(유형 yyyyMMdd, 예 20231207) 와 각종 설정 정보를 저장하는 property 디렉토리가 생성된다.
만약 백업한 데이터를 새로운 데이터 서버로 옮기고자 하는 경우 동일한 환경 구성을 위해서 원하는 날짜의 디렉토리와 함께 property 디렉토리를 함께 백업해야 한다.

단순하게 파일로 관리되기 때문에 단순하게 압축 후 다른 환경에 복사하여 사용할 수 있다. 
원하는 도메인 디렉토리에 압축을 풀어주면 이전 데이터를 조회할 수 있다.

Linux 시스템에서 제니퍼 데이터 서버의 기동 및 중지

제니퍼 데이터 서버 설정

데이터 서버는 제니퍼 에이전트와 뷰 서버의 중간에서 에이전트에 대한 관리 기능과, 데이터 처리, 뷰 서버에서 요청하는 데이터를 전달하는 서버이다. 수집해야할 데이터가 많을 경우나 에이전트수가 많을 경우 데이터 서버를 확장해서 사용할 수 있다.

데이터 서버 기동 시 필요한 환경 설정

유닉스 환경에서의 데이터 서버 환경 설정은 ${JENNIFER_DATA_SERVER_HOME}/bin/jennifer_data.sh 파일로 제니퍼 데이터 서버를 기동 하는데 필요한 설정을 가지고 있다. JAVA_HOME, 데이터 서버 홈, 서버의 설정 파일, 데이터 서버 JVM 옵션등이 존재한다. 아래의 환경 변수 값으로 설치되는 환경에 맞게 설정한다.

${JENNIFER_DATA_SERVER_HOME}/bin/jennifer_data.sh

환경변수

JAVA_HOME

/usr/lib/jvm/java-8-openjdk-amd64

JENNIFER_DATA_SERVER_HOME

/home/jennifer/jennifer5/server.data

JENNIFER_DATA_SERVER_CONF

${JENNIFER_DATA_SERVER_HOME}/conf/server.conf

JENNIFER_DATA_SERVER_LOG_CONF

${JENNIFER_DATA_SERVER_HOME}/conf/logback.xml

# ----------------------------------------------------------------------
# ----- Customizable Variables -----------------------------------------
# ----------------------------------------------------------------------
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
JENNIFER_DATA_SERVER_HOME=$(dirname $(cd "$(dirname "$0")" && pwd)) # Must be absolute path.
JENNIFER_DATA_SERVER_CONF=${JENNIFER_DATA_SERVER_HOME}/conf/server_data.conf  # Must be absolute path.
JENNIFER_DATA_SERVER_LOG_CONF=${JENNIFER_DATA_SERVER_HOME}/conf/logback.xml  # Must be absolute path.

데이터 서버의 옵션 설정

데이터 서버의 설정 시에 크게 데이터를 어디로 적재할지, 포트를 어떻게 할지등의 데이터 서버의 기본적인 내용을 저장하고 있는 설정파일이다. 기본적으로 데이터 서버 홈 디렉토리 conf/server_data.conf 에 존재하고 있으며, 환경 설정에서 파일명과 위치를 변경할 수 있다. 아래는 server_data.conf 에 대한 기본적으로 설정해야 하는 값들이다.

${JENNIFER_DATA_SERVER_HOME}/conf/server_data.conf

설정

기본값

설명

db_path

$JENNIFER_DATA_SERVER_HOME/db_data

성능데이터들이 저장될 디렉토리

listen_port

5000

데이터 서버에서 Listen하는 port

backup_path

$JENNIFER_DATA_SERVER_HOME/db_data/domain_id

백업받고자 하는 디렉토리

method_sampling_period

0

데이터서버의 병목지점 파악을 위한 메서드 샘플링 주기

method_sampling_thread_filter

공백

데이터서버의 병목지점 파악을 위한 메서드 샘플링 대상 Executor 이름 설정

method_sampling_method_filter

공백

데이터서버의 병목지점 파악을 위한 메서드 샘플링 대상 패키지 설정

db_path=../db_data
listen_port=5000

해당 파일은 db_path 나 포트를 변경하지 않을 경우 수정할 필요가 없다.

제니퍼 데이터 서버에서 바인딩하는 5000 번 포트로 제니퍼 에이전트와 제니퍼 뷰서버에서 접속을 하게된다.

제니퍼 데이터 서버 기동

  1. 데이터 서버의 bin 디렉토리로 이동한다.

cd /home/jennifer/jennifer5/server.data/bin
  1. bin 디렉토리에서 startup_data.sh 를 실행한다.

#
# ./startup_data.sh
#
  1. 데이터 서버가 정상적으로 기동 되었는지 확인한다. 정상적으로 기동 되었을 경우 아래와 같이 로그를 확인할 수 있다.

2020-08-31 14:41:36.452 KST [main] INFO  com.aries.data.Main - OS: Linux 4.15.0-112-generic amd64
2020-08-31 14:41:36.453 KST [main] INFO  com.aries.data.Main - JDK: Private Build 1.8.0_265 OpenJDK 64-Bit Server VM
2020-08-31 14:41:36.453 KST [main] INFO  com.aries.data.Main - Using JRE: /usr/lib/jvm/java-8-openjdk-amd64/jre
2020-08-31 14:41:36.455 KST [main] INFO  com.aries.data.Main - Using GarbageCollector: [PS Scavenge, PS MarkSweep]
2020-08-31 14:41:36.455 KST [main] INFO  com.aries.data.Main - Data server arguments ---------

....

2020-08-31 14:41:36.542 KST [main] INFO  com.aries.data.Main - Data server version: 5.5.2.4
2020-08-31 14:41:36.542 KST [main] INFO  com.aries.data.Main - System property: user.timezone=,file.encoding=UTF-8
2020-08-31 14:41:36.552 KST [main] INFO  com.aries.data.Main - Data server signal handlers: [SYS, ABRT, INT, TERM, HUP, TRAP, PIPE]
2020-08-31 14:41:36.588 KST [Global Timer:Running:com.aries.data.mng.DomainListLogger$1] INFO  c.aries.data.mng.DomainListLogger$1 - Available domain: None
2020-08-31 14:41:36.705 KST [main] INFO  com.aries.data.Main - Data server startup. address=/0:0:0:0:0:0:0:0, port=5000
  1. 뷰 서버가 연결이 되면 아래와 같은 로그가 생성된다.

2020-08-31 15:28:37.609 KST [:ME:CommandMultiplexer] INFO  c.a.d.n.ViewServerSessionCreationHandler - View server session is created. domainId=1000, connection=Local:192.168.0.31:5000-Remote:192.168.0.31:33630
  1. agent 가 연결이 되면 아래와 같은 로그가 생성된다.

2020-08-31 15:30:08.659 KST [:ME:CommandMultiplexer] INFO  c.a.d.n.AgentSessionCreationHandler - Agent session is created. domainId=1000, instanceId=10000, version=5.5.0.3, networkEncrypt=false, connection=Local:192.168.0.31:5000-Remote:192.168.9.113:55936
  1. 라이센스가 없는 경우 아래와 같은 로그가 생성된다. 관리화면에서 라이센스를 등록해야 한다.

2020-08-31 15:29:47.595 KST [:ME:CommandMultiplexer] INFO c.a.d.n.AgentSessionCreationHandler - Agent connection rejected. reason=no license found, domainId=1000, instanceId=10000, connectionMessage=Local:192.168.0.31:5000-Remote:192.168.9.113:55922

제니퍼 데이터 서버 중지

  1. 데이터 서버의 bin 디렉토리로 이동한다.

cd /home/jennifer/jennifer5/server.data/bin
  1. bin디렉토리에서 jennifer_data.sh 를 실행한다. 인자값으로 stop 를 넣어준다.

#
# ./shutdown_data.sh
#
  1. 데이터 서버가 정상적으로 중지되면 아래의 로그와 같이 보여진다.

2020-08-31 15:32:31.341 KST [main] INFO  com.aries.data.DataServerManager - Shutting down. reason=Shutdown request
2020-08-31 15:32:31.341 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping LosableProfileRelevantDataProcessor
2020-08-31 15:32:31.341 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping LosableProfileWriter
2020-08-31 15:32:31.341 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping LosableStackTraceWriter
2020-08-31 15:32:31.341 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping RealtimeDataWriter
2020-08-31 15:32:31.342 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping StatisticWriter
2020-08-31 15:32:31.342 KST [main] INFO  com.aries.data.core.ManagedExecutor - Stopping LosableTransactionRelevantDataWriter
2020-08-31 15:32:31.342 KST [main] INFO  c.aries.data.core.ManagedExecutor$1 - Some executions are lost. lostCount=0, name=RealtimeDataWriter
2020-08-31 15:32:31.343 KST [main] INFO  c.a.data.nio.AgentSessionManager - Agent session is expired. domainId=1000, instanceId=10000, reason=Shutting down, connection=Local:192.168.0.31:5000-Remote:192.168.9.113:55936
2020-08-31 15:32:31.344 KST [main] INFO  com.aries.data.DataServerManager - Shutdown is done

제니퍼 데이터 서버는 실시간으로 들어오는 데이터가 많고, 제니퍼 자체 DB에 적재하는 부분들이 많기 때문에 이러한 Thread들을 정상적으로 종료한 후에 데이터 서버를 중지해야한다. 강제로 kill 하는 방법은 데이터가 깨지는 문제가 발생할 수 있으므로 권장하지 않습니다.

윈도우 시스템에서 제니퍼 데이터 서버의 기동 및 중지

절차는 위의 Linux 시스템에서와 동일하다.

설정파일에서의 디렉토리 구분자는 "\" 대신에 "/" 를 사용한다.

해당 파일은 db_path 나 포트를 변경하지 않을 경우 수정할 필요가 없다.

제니퍼 데이터 서버에서 바인딩하는 5000 번 포트로 제니퍼 에이전트와 제니퍼 뷰 서버에서 접속을 하게된다.

제니퍼 데이터 서버를 윈도우 서비스로 등록하기

  1. 관리자 권한의 cmd.exe 창을 띄운다.

  2. server.data\bin 디렉토리에서 reg_service.bat 를 실행한다.

등록되는 서비스 이름의 기본값은 "jennifer_data"이고, 이 값을 바꾸고 싶다면 reg_service.bat를 실행하기 전 동일한 폴더에 다음의 INI 파일을 생성해야 한다.

jenniferdata64.ini

다음은 기본값과 동일한 INI 파일의 내용을 보여준다.

[default]
serviceName=jennifer_data
servicePath=jennifer_data.bat

serviceName 값을 바꾸고 reg_service.bat 파일을 실행하면 서비스 관리자에 보여지는 제니퍼 데이터 서버의 이름이 바뀐다.

reg_service.bat으로 윈도우 서비스 등록 시 기본적으로 전역 환경 변수 PATH에 JAVA HOME 경로가 등록되어 있는지 검사해서 없으면 오류 메시지와 함께 등록에 실패한다. 만약 환경 변수 검사를 건너뛰고 싶다면 "reg_service.bat -nc"와 같이 명령행에 "-nc" 옵션을 주어 실행하면 된다.