J-Jobs

Guides -J-Jobs Ent. v2.1 운영자 가이드

J-Jobs Enterprise v2.1 운영자 가이드

최종 작성일: 2018년 11월 30일

기준 버전 : J-Jobs Enterprise v2.1

Copyright ⓒ LG CNS LG CNS의 사전 승인 없이 본 내용의 전부 또는 일부에 대한 복사, 배포 사용을 금합니다.

용어정리

가이드에 앞서, J-Jobs에서 사용하는 주요 용어는 다음과 같다.

용어의미
작업 계획기준일자와 기준시간으로 Job 간의 선후행 관계를 지정하여 처리하는 일괄 작업 단위
- "작업 계획은 여러 Job으로 구성되며, Job들간의 선후행 관계를 지정할 수 있다."
JobJ-Jobs의 최소 실행 단위이자, Process 단위로 기동되어 처리하는 작업 단위
- "Job은 여러 Step으로 구성되며 Step들간의 실행 순서, 분기, 병렬 등의 흐름을 정의한다."
StepJob의 하위 개념으로 실제 수행되는 프로그램 또는 Task 단위
- "Step에서는 다양한 유형의 template 중 하나를 선택하여 하나의 작업을 수행한다."
TemplateStep을 생성할 때 기본이 되며, 기본적으로 Java, Python, R, Command 호출 등의 template 제공
Job InstanceJob 실행의 논리적 단위이며, Job을 실행할 때 하나의 Job Instance가 생성된다.
Job ExecutionJob을 실행할 때마다 생성되는 단위이며 Job을 재실행할 경우 동일한 Job Instance 내에서 새로운 Job Execution이 생성된다.
Job ParameterJob 실행 시 전달되는 파라미터이며, key/value 문자열 형태로 전달
Schedule실행 가능한 Job에 대해 '특정 일시' 혹은 '반복 일정'으로 Job 실행 예약, Timezone 및 Summer Time, 사용자 정의 캘린더 옵션 제공

Architecture

J-Jobs의 아키텍처 구조를 설명한다.

Overview

구성요소

J-Jobs는 Job 편집 및 실행과 스케줄링 그리고 각 종 모니터링 화면을 제공하는 Web Application 형태의 Manager와 Manager로부터 Job과 스케줄 실행을 의뢰받아 이를 각 Agent에서 실행할 수 있도록 전달하는 Server, 그리고 실제 Job을 실행하는 Agent까지 총 3-tier로 구성된다. Manager와 Server는 REST API를 통해 Job 실행을 의뢰하고, 결과를 전달한다. Agent는 TCP 방식으로 Server와 통신하며 Job 실행을 전달받는다. Manager, Server는 WAS 상에서 기동되며, Agent는 JVM 프로세스로 동작한다.

J-Jobs Manager

  • 웹 브라저 기반의 WYSIWYG 방식의 Job Editor 제공
    • Job 편집부터 실행, 스케줄링, 부하분산 설정 등 Editor 내에서 한번에 작업 가능
  • 현재 실행 중인 Job 상태 및 수행 결과에 대한 직관적 모니터링 기능 제공
  • Job 실행 및 정지, 재처리 기능
  • 사용자 및 권한 관리 등

J-Jobs Server

  • 이벤트 기반의 Job 스케줄링 기능 담당
  • Job 부하분산(Load Balance) 처리
    • Agent의 부하 상태를 동적으로 고려하여 신규 Job 실행 노드를 결정하는 방식
    • 특정 Agent의 과부하 발생 시, 다른 Agent로 분산 시켜 거래 안정성 보장
  • Job 처리 가용성 제공
    • 접속된 Agent들의 상태를 체크하여 비정상 또는 비가용 Agent 대신 다른 Agent에서 처리

J-Jobs Agent

  • Job 처리를 의뢰받아 step 단위로 프로그램 실행
  • Agent는 내부 Runtime을 기동, File Queue를 통해 Job 실행 요청 전달

환경설정

Manager 설정

J-Jobs Manager에서 사용하는 설정파일은 Spring 관련 context 설정 파일(*.xml)과 그 외 properties 설정이 있다.

경로파일명설명
jjob-manager/WEB-INF/spring/context-cache.xmlehcache 사용 관련 spring 설정
jjob-manager/WEB-INF/spring/context-datasource.xmlJ-Jobs 메타 DB에 접근하기 위한datasource 관련 설정
jjob-manager/WEB-INF/spring/context-manager.xmlManager의 Spring context 설정
jjob-manager/WEB-INF/spring/context-websocket.xmlwebsocket 사용 관련 spring 설정
jjob-manager/WEB-INF/spring/mvc-context-manager.xmlManager를 위한 Spring bean 설정
jjob-manager/WEB-INF/properties/access_control.propertiesManager의 root 계정 관련 설정
jjob-manager/WEB-INF/properties/config.default.propertiesManager 환경설정 기본 값 설정
jjob-manager/WEB-INF/properties/ehcache.xmlManager cache 설정
jjob-manager/WEB-INF/properties/log4j.propertiesManager의 Log 설정
jjob-manager/WEB-INF/properties/management.propertiesManager의 각종 모드 변경
jjob-manager/WEB-INF/properties/ws.cache.propertieswebsocket의 cache 관련 설정

access_control.properties

Manager에서 사용한 시스템 관리자(root) 계정에 대한 설정을 관리하는 파일이므로 해당 파일이 외부에 노출되지 않도록 주의한다.

항목기본값설명
jjob.ac.rootIdrootManager의 시스템 관리자 계정명 설정
jjob.ac.passwordxxxxxManager의 시스템 관리자 계정 비밀번호 설정
jjob.ac.tokenxxxxxxxAPI 사용 시 인증을 위한 시스템 관리자의 Token 값
jjob.ac.token.default.valid.timestamp6000000token 값을 유지하기 위한 유효기간 설정
- -1 : unlimited
- 10min : 6000000
- 1 Day : 86400000
- 7 Days : 604800000
- 180 Days : 15552000000
jjob.ac.password.valid.timestamp0Manager의 시스템 관리자 이외의 계정들의 비밀번호 변경 주기(일 단위), 0이하 값은 무제한

management.properties

항목기본값설명
jjob.manager.permission.deleteJobRunningHistoryYJob 실행 이력 관련 테이블 일괄 삭제 허용 여부
jjob.manager.file.path.typeHomeJ-Jobs Manager에서 사용하는 파일 경로 타입
- Home : OS 로그인 사용자 기본 홈 디렉토리
jjob.manager.file.path.user/home/jjobs/manager/file/Home이 아닐 경우 사용자 지정한 디렉토리를 기본 경로로 한다.
jjob.manager.cloud.modefalseJ-Jobs Cloud 기능 사용 여부
jjob.manager.job.lock.defaultYJob 생성 시 소유자만 실행/수정/삭제 할 수 있는 lock 상태로 만들 것인지에 대한 기본 값 설정
jjob.manager.upload.extensionzip,jar,job,sql,xml,sh,xlsxJ-Jobs에서 파일 업로드 시, 특정 파일만 업로드할 수 있도록 확장자 제한('*'는 모든 파일 가능)
jjob.manager.login.session.listener.usefalse로그인 사용자의 세션 타임아웃 기능 사용 여부
jjob.manager.default.sample.folder.nameSamplesJ-Jobs에서 기본으로 제공하는 샘플 Job을 import 할 때 생성할 상위 폴더명
jjob.manager.default.temp.folder.nameTemproot 메뉴 중 [폴더 초기화] 시, 폴더에 소속되지 않은 Job의 생성될 상위 폴더명

ehcache.xml

Manager를 이중화 하였을 경우, 사용자 역할에 매핑된 API 목록을 빠르게 조회하기 위해 사용하는 ehcache의 동기화 설정이 별도로 필요하다.

cacheManagerPeerProviderFactory 의 properties 중 rmiUrls 에서 이중화된 다른 Manager 서버의 IP와 cache 동기화 설정을 위한 새로운 포트를 지정하고, cacheManagerPeerListenerFactory에서는 현재 Manager의 hostname과 WAS의 port를 지정한다.

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
	monitoring="autodetect" dynamicConfig="true">

	<diskStore path="java.io.tmpdir" />

	<!-- another server's cache -->
	<cacheManagerPeerProviderFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
		properties="peerDiscovery=manual,
                    rmiUrls=//127.0.0.1:19090/roleApiCache" />

	<!-- my server's cache -->
	<cacheManagerPeerListenerFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
		properties="hostName=localhost, port=18080, socketTimeoutMillis=30000" />

	<defaultCache maxEntriesLocalHeap="10000" eternal="false"
		timeToIdleSeconds="0" timeToLiveSeconds="1800" diskSpoolBufferSizeMB="30"
		maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">		
		<persistence strategy="localTempSwap" />
	</defaultCache>

	<cache name="roleApiCache" maxEntriesLocalHeap="10000"
		maxEntriesLocalDisk="1000" eternal="false" diskSpoolBufferSizeMB="5"
		timeToIdleSeconds="0" timeToLiveSeconds="1800"
		memoryStoreEvictionPolicy="LFU" transactionalMode="off">
		<cacheEventListenerFactory
			class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
			properties="replicatePuts=true,
	                    replicateUpdates=true,
	                    replicateRemovals=true,
	                    replicateUpdatesViaCopy=false,
	                    replicateAsynchronously=false" />
		<persistence strategy="localTempSwap" />
	</cache>
</ehcache>

Server 설정

J-Jobs Server에서 사용하는 설정파일은 Spring 관련 context 설정 파일(*.xml)과 그 외 properties 설정이 있다.

경로파일명설명
jjob-server/WEB-INF/spring/context-datasource.xmlJ-Jobs 메타 DB에 접근하기 위한datasource 관련 설정
jjob-server/WEB-INF/spring/context-server.xmlServer의 Spring context 설정
jjob-server/WEB-INF/spring/context-websocket.xmlwebsocket 사용 관련 spring 설정
jjob-server/WEB-INF/spring/mvc-context-server.xmlManager를 위한 Spring bean 설정
jjob-server/WEB-INF/properties/log4j.propertiesServer의 Log 설정
jjob-server/WEB-INF/properties/notification.propertiesEmail Notification을 위한 설정

notification.properties

email 알림과 관련된 환경설정 파일이다. 아래의 항목을 제외한 나머지 check.* 설정 값은 Manager 화면을 통해 변경한다.

항목기본값설명
check.polling.time=55알림 조건 체크 주기(초)
check.waitTime.changeMaster60Server 이중화 구성 시, 한 Server가 중단 될 경우 다른 Server가 Master로 전환될 때까지의 대기 시간(초)

Agent 설정

Agent와 관련된 설정은 초기 설치 이후에 Manager의 관리자 메뉴 중 에이전트 설정에서 변경할 수 있다. 에이전트 설정은 하위의 설명를 참고한다.

경로파일명설명
jjobs/app/META-INF/jjob.log.propertiesJob 실행과 관련된 Logger와 Appender 설정(Log4J)

Datasource 설정

context-datasource.xml

Manager와 Server가 J-Jobs의 Meta DB에 접속하기 위해 각각의 웹어플리케이션 배포 경로 하위에 WEB-INF/class/spring/context-datasource.xml 파일에서 datasource를 설정한다.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc_driver}"/>
    <property name="url" value="${jdbc_url}"/>
    <property name="username" value="${db_user}"/>
    <property name="password" value="${db_password}"/>
    <property name="testWhileIdle" value="true"/>
    <property name="validationQuery" value="select 1 from dual"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:/mapper/common/api/configuration.xml"/>
    <property name="mapperLocations" value="classpath:/mapper/common/api/${db_name}/**/*.xml"/>
    <property name="typeAliasesPackage" value="jjob.common.api.admin, jjob.common.api.common.notification, jjob.common.api.control, jjob.common.api.editor, jjob.common.api.execution"/>
</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="jjob.common.api.**.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

<!-- J-Jobs Server의 context-datasource.xml 추가 설정 -->
<bean class="jjob.server.rd.RequestDeliverer" init-method="init">
    <property name="databaseType" value="${db_name}"/>
    <property name="databaseVersion" value="${db_version}"/>
    <property name="requestDelivererDao" ref="requestDelivererDao"/>
    <property name="pendingRequestControl">
        <map>
            <entry key="100" value="100"/>
            <entry key="200" value="400"/>
            <entry key="300" value="1000"/>
            <entry key="400" value="2000"/>
            <entry key="500" value="4000"/>
            <entry key="600" value="8000"/>
            <entry key="700" value="16000"/>
        </map>
    </property>
</bean>

<bean id="rdDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc_driver}"/>
    <property name="url" value="${jdbc_url}"/>
    <property name="username" value="${jdbc_user}"/>
    <property name="password" value="${jdbc_password}"/>
    <property name="minIdle" value="2"/>
    <property name="maxIdle" value="2"/>
    <property name="maxActive" value="5"/>
    <property name="testWhileIdle" value="true"/>
    <property name="defaultAutoCommit" value="false"/>
</bean>

<bean class="jjob.server.rd.dao.RequestDelivererDao" id="requestDelivererDao" init-method="init">
    <property name="dataSource" ref="rdDataSource"/>
    <property name="databaseType" value="${db_name}"/>
    <property name="databaseVersion" value="${db_version}"/>
</bean>

<bean id="rwDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc_driver}" />
    <property name="url" value="${jdbc_url}" />
    <property name="username" value="${db_user}" />
    <property name="password" value="${db_password}" />
    <property name="testWhileIdle" value="true" />
    <property name="validationQuery" value="select 1 from dual" />
    <property name="defaultAutoCommit" value="false" />
    <property name="minIdle" value="2" />
    <property name="maxIdle" value="2" />
    <property name="maxActive" value="5" />
</bean>

위의 xml 내용 중 ${...}의 값을 다음의 설명을 참고하여 환경에 맞게 수정한다.

항목설명예시
${db_name}J-Jobs에서 지원하는 DBMS 중 선택
- oracle
- mariadb
- postgresql
- h2
- db2
oracle
${db_version}특정 DBMS 별 버전 구분(기본값 : all)all
${jdbc_driver}해당 DBMS에서 제공하는 driver의 classoracle.jdbc.driver.OracleDriver
${jdbc_url}JDBC 접속 URLjdbc:oracle:thin:@111.222.33.4:1521:JJOBS
${db_user}DB 접속 계정명
${db_password}DB 접속 패스워드

Agent를 위한 Datasource 설정

Agent에서 J-Jobs Meta DB를 사용하기 위한 Datasource 설정은 Manager에서 관리자(Administrator) 메뉴 [관리자 > Datasource]를 통해 설정할 수 있다. 이 때 추가하는 Datasource의 종류는 반드시 job으로 설정해야 한다. 자세한 datasource 추가 방법은 관리자 메뉴 중 Datasource를 참고한다.

Log 설정

J-Jobs는 로그 프레임워크로 log4j를 사용하고 있다. 다음 두 개의 설정 파일을 통해 log4j의 logger 및 appender를 변경할 수 있다.

log4j.properties

Manager와 Server의 로그 레벨 및 log4j 관련 설정은 WEB-INF/classes/properties/log4j.properties를 통해 할 수 있다.

항목기본값설명
log4j.rootLoggerINFO, consoleRoot Logger 레벨 및 appender 설정
log4j.logger.java.sqlINFO쿼리 관련 Logger 레벨
log4j.logger.org.apache.ibatisINFOMyBatis Logger 레벨
log4j.logger.java.sql.ConnectionINFODB Connection Logger 레벨
log4j.logger.jjob.managerINFOJ-Jobs Manager Logger 레벨
log4j.logger.org.springframeworkINFOSpring F/W Logger 레벨
jjob.ac.permissionINFOJ-Jobs AccessControl Logger 레벨
log4j.category.RunnerLoggerINFO, consoleJ-Jobs G/W Logger 레벨
log4j.category.MsgLoggerINFO,consoleJ-Jobs G/W Logger 레벨
log4j.category.SysLoggerINFO,consoleJ-Jobs G/W Logger 레벨
log4j.appender.consoleorg.apache.log4j.ConsoleAppenderConsole Appender 설정
log4j.appender.console.layoutorg.apache.log4j.PatternLayoutAppender Layout 설정
log4j.appender.console.layout.ConversionPattern[M][%d][%-5p] %m %nAppender Pattern 설정
log4j.appender.console.encodingUTF-8Appender 인코딩 설정

jjob.log.properties

Agent에서 Job 실행과 관련된 Log4J의 Logger와 Appender를 설정한다.

항목기본값설명
log4j.rootLoggerERROR, stdoutRoot Logger 레벨 및 appender 설정
log4j.category.JobLoggerERROR, stdoutJ-Jobs G/W Logger 레벨
log4j.category.StepLoggerERROR, stdoutJ-Jobs G/W Logger 레벨
log4j.category.SysLoggerERROR, stdoutJ-Jobs G/W Logger 레벨
log4j.category.RunnerLoggerERROR, stdoutJ-Jobs G/W Logger 레벨
log4j.category.MsgLoggerERROR, stdoutJ-Jobs G/W Logger 레벨
log4j.appender.stdoutorg.apache.log4j.ConsoleAppenderConsole Appender 설정
log4j.appender.stdout.layoutorg.apache.log4j.PatternLayoutAppender Layout 설정
log4j.appender.stdout.layout.ConversionPattern[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{3} - %M:%L) - %m%nAppender Pattern 설정

시작 및 종료하기

J-Jobs 설치 가이드를 참고하여 J-Jobs를 전체 혹은 부분 설치하고, OS 환경에 따라 다음과 같이 J-Jobs를 시작, 종료할 수 있다.

Linux 환경

${JJOBS_HOME}은 J-Jobs가 설치된 기본 경로이며, 보통 /engn001/J-Jobs/ 가 기본 경로이다. (설치 구성 환경에 따라 다르므로 별도 확인 필요)

JJOBS_HOME=/engn001/J-Jobs/

Manager 시작 및 종료

  • 실행

    $ cd $JJOBS_HOME #(or cd /engn001/J-Jobs)
    $ ./start_manager.sh
    
  • 종료

    $ cd $JJOBS_HOME #(or cd /engn001/J-Jobs)
    $ ./stop_manager.sh
    

Server 시작 및 종료

  • 시작

    $ cd $JJOBS_HOME #(or cd /engn001/J-Jobs)
    $ ./start_server.sh
    
  • 종료

    $ cd $JJOBS_HOME #(or cd /engn001/J-Jobs)
    $ ./stop_server.sh
    

Agent 시작 및 종료

  • 시작

    $ cd $JJOBS_HOME #(or cd /engn001/J-Jobs)
    $ ./start_agent.sh
    

    start_agent.sh 파일이 없을 경우, 아래와 같이 직접 agent를 실행한다.

    $ cd /engn001/J-Jobs/jjobs/shl
    $ ./startdaemon.sh 1 http 172.31.24.101 8090 /jjob-server jjob 
    #./startdaemon.sh [GROUP_ID] [JJOBS_SERVER_PROTOCOL(http|https)] [JJOBS_SERVER_IP] [JJOBS_SERVER_PORT] [JJOBS_SERVER_CONTEXT_ROOT] [JJOBS_DATASOURCE_NAME]
    
  • 종료

    $ cd $JJOBS_HOME
    $ ./stop_agent.sh
    

    stop_agent.sh 파일이 없을 경우, 아래와 같이 직접 agent를 중지한다.

    $ cd /engn001/J-Jobs/jjobs/shl
    $ ./stopdaemon.sh 1
    

Windows 환경

Manager 시작 및 종료

  • 시작

    > cd c:\J-Jobs
    > start_manager.bat
    
  • 종료

    > cd c:\J-Jobs
    > stop_manager.bat
    

Server 시작 및 종료

  • 시작

    > cd c:\J-Jobs
    > start_server.bat
    
  • 종료

    > cd c:\J-Jobs
    > stop_server.bat
    

Agent 시작 및 종료

  • 시작

    > cd c:\J-Jobs
    > start_agent.bat
    
  • 종료

    > cd c:\J-Jobs
    > stop_agent.bat
    

J-Jobs 기동 상태 확인(리눅스)

J-Jobs Manager 기동 확인

WAS로 실행되었을 경우가 아닌 tomcat으로 실행되면 아래와 같은 프로세스를 확인 할 수 있다.

ps -ef | grep tomcat
lena     218366      1  0 Nov30 ?        00:06:15 /engn001/java/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/engn001/jjobs/v2.1/manager/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8 -Djava.security.egd=file:///dev/urandom -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:-UseAdaptiveSizePolicy -XX:+ExplicitGCInvokesConcurrent -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /engn001/jjobs/v2.1/manager/bin/bootstrap.jar:/engn001/jjobs/v2.1/manager/bin/tomcat-juli.jar -Dcatalina.base=/engn001/jjobs/v2.1/manager -Dcatalina.home=/engn001/jjobs/v2.1/manager -Djava.io.tmpdir=/engn001/jjobs/v2.1/manager/temp org.apache.catalina.startup.Bootstrap start

J-Jobs Server 기동 확인

WAS로 실행되었을 경우가 아닌 tomcat으로 실행되면 아래와 같은 프로세스를 확인 할 수 있다.

ps -ef | grep tomcat
lena     219239      1 18 Nov30 ?        13:48:37 /engn001/java/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/engn001/jjobs/v2.1/server/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8 -Djava.security.egd=file:///dev/urandom -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:-UseAdaptiveSizePolicy -XX:+ExplicitGCInvokesConcurrent -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /engn001/jjobs/v2.1/server/bin/bootstrap.jar:/engn001/jjobs/v2.1/server/bin/tomcat-juli.jar -Dcatalina.base=/engn001/jjobs/v2.1/server -Dcatalina.home=/engn001/jjobs/v2.1/server -Djava.io.tmpdir=/engn001/jjobs/v2.1/server/temp org.apache.catalina.startup.Bootstrap start

J-Jobs Agent 프로세스 확인

ps -ef | grep "Dcname=agent_jjobs_"

or

ps -ef | grep "AgentLauncher"
jjobs    230169      1  2 Nov16 ?        10:10:01 /engn001/jjobs/smart2/jre1.7.0_80/bin/java -Dcname=agent_jjobs_AGENT2 -server -Xms128m -Xmx256m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=utf-8 
(중략)

에이전트 런타임 프로세스 확인

ps -ef | grep "Dcname_jjobs"

or

ps -ef | grep "DeamonLauncher"
jjobs    175275      1  0 Nov27 ?        00:29:39 /engn001/java/jdk1.7.0_80//bin/java -Dcname=jjobs 
(중략)

Troubleshooting

J-Jobs를 기동할 때, 정상적으로 기동되지 않을 경우 아래를 참고하여 해결한다.

  • J-Jobs Meta DB 접근 불가 혹은 Table 미생성으로 인한 시작 불가 J-Jobs를 구동하기 위해 필요한 Meta DB에 접근이 불가하거나, 접속 정보 설정이 누락되었을 경우 J-Jobs를 시작할 수 없다. 또한 J-Jobs 최초 설치시에는 J-Jobs와 관련된 메타테이블을 생성되어 있어야 한다. 메타 테이블의 정상 여부 확인 및 기초 테이블 생성은 시스템 관리자(root) 메뉴 중 진단에서 가능하다.

  • 필수 환경변수 설정 누락으로 인한 Server 기동 불가 Server를 구동할 때 필요한 환경변수가 누락되어 있는지 확인한다. WAS의 시작 옵션에 해당 환경변수가 설정되어 있는지 확인한다.

    export JJOB_SERVER_ID=1-1
    

JJOB_SERVER_ID는 Manager에서 등록한 Server가 속한 Group ID-Server ID의 형식으로 값이 일치해야 한다.

  • Server, Agent 간의 TCP 통신을 위한 포트 방화벽 차단으로 인한 Agent 정상 기동 불가 Server와 Agent가 통신하기 위한 기본 포트(19000~19003)의 방화벽 오픈 여부를 확인한다.

    • Linux

      $ netstat -antp | grep 19000
      
    • Windows

      > netstat -ant | findstr 19000
      
  • Agent의 J-Jobs Meta DB 접속을 위한 Datasource 설정 Agent가 정상 구동하기 위해 Meta DB 접속 정보가 등록되어 있어야 한다.

  • 라이센스가 없거나, 라이센스 기간 만료에 따른 Agent 기동 불가 agent를 정상적으로 구동하기 위해, 라이센스가 필요하다. 이러한 라이센스가 누락되어 있거나 라이센스의 기간이 만료되었다면 에이전트가 정상 시작하지 않는다.

Manager 운영 관련 메뉴 안내

J-Jobs Manager 운영과 관련하여 시스템 관리자(root)와 사용자 추가시 Administrator 역할을 부여받은 관리자로 구분하며 이에 따라 각각 다른 관리 메뉴를 제공하고 있다.

시스템 관리자(root) 메뉴

ID/Password 변경

J-Jobs Manager의 root 기본 ID와 비밀번호를 변경하고자 할 경우, Manager 설정 파일 중 access_control.propertiesjjob.ac.rootId, jjob.ac.password 값을 수정한다.

설치/제거

초기화

Manager 설정 값을 기본 값으로 초기화하여 초기 상태로 되돌릴 수 있다.

  • 매니저 설정 보기 : Manager에서 사용 중인 설정 값을 확인한다.
  • 매니저 설정 초기화 : Manager 설정 값을 초기 상태로 복구한다.(사용자가 수정한 설정 값을 초기값으로 변경)
  • Refresh Flag 보기 : J-Jobs 내부적으로 사용하는 Flag 값을 확인한다.
  • Refresh Flag 초기화 : 필요한 Flag 레코드를 REFRESH_FLAG 테이블에 추가한다.
  • 시퀀스 초기화 : Refresh Flag의 값에 사용하는 시퀀스를 0으로 초기화한다.
  • 역할 초기화 : 사용자에게 부여하는 역할(Administrator, User, Guest)을 추가한다.
  • API 초기화 : J-Jobs Manager에서 사용하는 API를 역할 별로 추가한다.
  • 메뉴 초기화 : 역할 별로 메뉴 구성을 기본 설정으로 초기화한다.
  • Template 초기화 : J-Jobs에서 기본으로 제공하는 Template을 추가/초기화한다.
  • 타임존 초기화 : J-Jobs에서 기본으로 제공하는 대표 도시의 타임존을 추가/초기화한다.
  • 캘린더 초기화 : 스케줄에서 사용하는 대표 캘린더를 추가한다.
  • 알림 초기화 : 알림 관련 설정을 초기화하며, 기존에 추가한 전역, Job, 스케줄에 대한 알림이 모두 삭제된다.
  • Step 정보 갱신 : J-Jobs 이전 버전의 Job을 마이그레이션 하기 위해 사용한다.
  • Job 속성 초기화 : J-Jobs 이전 버전의 Job을 마이그레이션 하기 위해 사용한다.
  • 폴더 초기화 : J-Jobs 이전 버전의 Job을 마이그레이션 하기 위해 사용한다.
데이터 삭제

Meta DB에 쌓인 Job 실행 이력과 관련된 모든 데이터를 모두 혹은 기간별로 삭제할 수 있다.

  • 이전 실행이력 삭제 : 선택한 기간을 제외한 이전 실행 이력 관련 데이터를 모두 삭제(delete)한다.
  • 모든 데이터 삭제 : 과거 모든 실행 이력 관련 데이터를 삭제(truncate)한다.
테이블 삭제

J-Jobs 내부의 메타 테이블 상태를 확인할 수 있고, 전체 메타 테이블을 삭제할 수 있다.

  • 메타 테이블 삭제 : J-Jobs 메타 테이블 전체를 삭제한다.(테이블 삭제)
  • 메타 테이블 보기 : 전체 메타 테이블 상태를 조회한다.

환경 설정

일반

Manager 화면과 관련된 설정

항목설명기본 설정
기본 언어 설정Manager의 기본 언어 설정한국어 (Korean)
세션 유지Job 편집 시, 브라우저의 세션 유지 시간(분) 설정2분
타임존Manager의 타임존 설정Asia/Seoul
시간표시 형식Manager에서 날짜 및 시간 표시 형식YYYY-MM-DD HH:mm:ss
기본 Job 로그레벨Job 생성 시, Job 로그 레벨 기본값info
기본 Step 로그레벨Step의 로그 레벨 기본값info
서버 설명설정한 서버의 설명을 초기 로그인 화면과 상단에 표시
서버 설명 색설정한 색으로 서버 설명 표시
Feature 설정
  • Job 버전 관리 사용 Job의 버전 관리를 사용할 지 여부를 선택한다. 사용할 경우, 보관 건수 제한과 관리할 File의 종류를 선택한다.

  • DevOn Enterprise Feature : DevOn Enterprise 기능 사용 여부(DevOn Enterprise를 위한 별도 메뉴 제공)

  • AWS Cloud Feature : J-Jobs Cloud(AWS) 기능 사용 여부

진단

J-Jobs는 Request ID를 기준으로 Job의 실행과 결과를 추적할 수 있다. 작업 계획의 경우, 고유 ID인 Order ID를 통해 작업 계획 실행과 관련된 메타 데이터를 확인할 수 있다.

콤보박스에서 Request ID 혹은 Order ID를 선택하고 Request ID나 Order ID를 입력한다. 실행 상세내역보기 를 클릭하면 해당 ID에 관련된 모든 메타 데이터를 수집하여 JSON 형태로 확인할 수 있다. Request ID와 연관된 Instance ID, Execution ID 등을 확인할 수 있다. 필요한 경우, 왼쪽 상단에 Download을 클릭하여 JSON 파일로 다운받을 수 있다.

Cache 목록

J-Jobs는 Manager와 Server에서 좀 더 빠른 메타 데이터 조회를 위해 일부 데이터를 캐싱하고 있다. 이러한 캐싱된 데이터의 목록을 확인하고 관리할 수 있다. API 탭 에서는 현재 캐싱되어 있는 API 목록을 보여준다.

API 캐시 삭제 버튼을 클릭하면 현재 캐싱된 API 데이터를 삭제하고, 이후 API 목록이 조회될 때 DB로부터 데이터를 다시 캐싱하도록 한다.

역할

사용자(User)에게 할당할 수 있는 역할을 추가하거나 수정, 삭제 할 수 있다. 기본적으로 ADMINISTRATOR, USER, GUEST 역할이 제공되며, 그 밖의 역할을 추가하여 사용할 수 있다. J-Jobs의 모든 기능은 API로 제공되므로, 역할별로 사용 가능한 API를 매핑함으로써 기능에 대한 사용을 제어할 수 있다.

해당 역할에 추가되어 있는 허용 가능한 API 목록을 보여준다.

다음과 같이 새로운 역할을 추가할 수 있다.

  • 역할 ID : 고유한 역할 ID 값
  • 역할 이름 : 역할에 대한 이름
  • 기본 여부 : 사용자 추가 시, 기본적으로 해당 역할로 할당할지에 대한 여부
  • 다른 역할에서 복사 : 기존에 추가되어 있는 역할로부터 복사하여 역할 생성, 기존에 매핑된 API 목록도 함께 복사된다.

역할에 전체 API 목록 중에 특정 API를 추가하거나 삭제하여 사용자가 접근할 수 있는 기능을 관리할 수 있다.

API

J-Jobs에서 사용자가 사용할 수 있는 모든 기능은 API로 제공되며, 이러한 API 목록을 관리하는 화면이다. API 목록은 J-Jobs가 제공하는 전체 API를 나타내며, 새로운 API를 추가하거나, 모든 사용자가 사용하지 않는 API의 경우에는 삭제할 수 있다.

신규 API는 다음과 같이 등록할 수 있다.

  • API ID : API 고유 ID
  • 메소드 : REST API의 method 중 선택(GET, POST, PUT, DELETE 등)
  • REST URL 패턴 : /api/v1/ 으로 시작하는 API URL
  • 설명 : API에 대한 설명
  • 사용 여부 : 해당 API에 대한 사용 여부, 체크가 되어 있지 않을 경우 등록만 되고 사용할 수 없다.
  • 전체 허용 여부 : 역할에 관계 없이 모든 사용자에 대해 해당 API를 사용할 수 있도록 허용한다.

메뉴

사용자 역할 별로 메뉴를 다르게 구성할 수 있다. 기본 역할에 대한 초기 메뉴 구성은 설치/제거 > 초기화 > 메뉴 초기화을 통해 할 수 있다.

메뉴 구성은 1레벨 폴더 혹은 메뉴와 1레벨 폴더 하위의 2레벨 메뉴로 구성할 수 있다. 오른쪽 상단에 역할을 선택하고 선택한 역할에 해당하는 메뉴 구성을 확인하거나 추가, 수정 할 수 있다. 메뉴를 신규로 추가하기 위해서 1레벨 메뉴로 추가하거나 기존의 1레벨 폴더 하위 혹은 신규 폴더를 생성하여 2레벨 메뉴로 추가할 수 있다.

1레벨 폴더를 생성하거나 수정할 때 메뉴명은 J-Jobs 다국어 설정파일에 명시된 메뉴명으로 입력 가능하며 Icon은 Font Awesome의 icon class 명을 이용한다. 숫자값을 이용하여 오름차순으로 메뉴 순서를 조정할 수 있다.

하위의 메뉴를 추가하기 위해서 아래와 같이 J-Jobs에서 제공하는 전체 메뉴 목록 중 하나를 선택하여 추가한다.

1레벨 폴더나 메뉴는 J-Jobs Manager 화면 상에서 아래와 같이 Top 메뉴로 보여지며, 2레벨 메뉴는 dropdown 형식으로 보여진다.

사용자

사용자는 J-Jobs Manager에 로그인할 수 있는 계정을 말하며, 해당 사용자에게 하나의 역할을 할당할 수 있다. 사용자 비밀번호 정책은 10자 이상, 190자 이하이며 영문자와 숫자가 포함되어야 한다. 또한 Manager의 설정 중 jjob.ac.password.valid.timestamp 값에 따라 주기적으로 비밀번호를 변경하도록 할 수 있다. 로그인 중복 방지와 사용자 세션 유지 시간을 별도 설정할 수 있다.

새로운 사용자를 다음과 같이 등록할 수 있다.

  • 사용자 ID : 사용자 계정 ID
  • 사용자 이름
  • 비밀번호 : 10자 이상 190자 이하, 영문자와 숫자 포함
  • 비밀번호 확인
  • 언어 : 해당 사용자가 Manager에서 사용할 언어 선택
  • 타임존 : 해당 사용자가 Manager에서 사용할 타임존 선택
  • 시간표시 형식 : Manager에서 표시되는 시간, 날짜에 대한 형식 지정
  • 역할ID : 해당 사용자가 갖게 될 역할 지정
  • 로그인 중복 체크 여부 : 해당 ID로 중복 로그인을 허용할지 여부
  • 사용자 세션 타임아웃 설정(분) : 사용자가 로그인 이후 세션 유지 시간 설정

관리자(Administrator) 메뉴

관리자 메뉴 중 설치/제거 > 초기화 > 메뉴 초기화를 수행하여 Administrator 역할에 설정된 메뉴 구성을 기준으로 한다. 관리자는 User 역할의 기능(API) 및 메뉴를 모두 포함하여 사용할 수 있고, Job에 설정된 권한(Job Lock 기능)에 관계없이 모든 Job을 실행하거나 수정, 삭제 할 수 있다.

관리자 로그인

Manager에서 관리자로 로그인하기 위해서는 역할이 'Administrator'이어야 한다. 해당 역할로 변경하기 위해서는 시스템 관리자(root)로 로그인 하여 사용자 메뉴에서 사용자를 추가하거나 기존에 등록된 사용자에게 Administrator 역할을 지정한다.

작업계획

사용자 가이드를 참고한다.

단일 작업

사용자 가이드를 참고한다.

모니터링

서버

등록된 서버(J-Jobs Server)의 상태를 모니터링 할 수 있으며, 같은 서버 그룹에 연결된 에이전트(J-Jobs Agent)들의 상태와 Job 처리 현황을 모니터링할 수 있는 화면이다.

  • 작업 통계 보기 : Job 처리 현황을 일자별, 서버 그룹 별로 확인할 수 있다.

  • 최대 동시실행 모니터링 : Job 별로 설정한 최대 동시실행 개수에 따라 실행 상태를 모니터링 한다.

  • 새로고침

    • 강력 새로고침 : 화면을 완전히 새로고침하여 신규 에이전트가 추가되거나 에이전트의 삭제로 인해 에이전트 목록이 변경될 수 있다.
    • 일반 새로고침 : 에이전트 목록 변경 없이 에이전트의 자원 상태에 대해서만 새로고침한다.
  • 서버 그룹 : 서버들의 논리적인 그룹

  • 서버 상태 구분

    • 정상 : 서버가 정상 동작중이며, 같은 서버 그룹 내 최소 하나 이상의 에이전트와 정상 통신 중인 경우
    • 구동
    • 접속 대기 : 서버 기동 상태는 정상이지만, 현재 연결된 에이전트가 없을 경우
    • 비정상 : 서버 기동 중 오류가 발생하여 비정상 상태
    • 중지 : 서버가 중지된 경우
  • 서버 시간 : 서버가 설치된 곳의 현재 시간을 나타낸다.

  • 에이전트 그룹 : 서버 그룹 내 존재하는 에이전트들의 논리적인 그룹

  • 프로세스 상세 정보 보기 : 에이전트에서 실행시킨 프로세스의 목록과 상태를 확인할 수 있다.

  • 에이전트 자원 상태 : 현재 처리 중인 Job 개수, 에이전트가 실행중인 곳의 CPU, Memory, Disk 등의 자원 상태를 새로고침 주기마다 업데이트하여 보여준다.

  • 에이전트 시간 : 에이전트가 설치된 곳의 현재 시간을 나타낸다.

에이전트

등록된 에이전트들의 목록과 상태를 모니터링할 수 있는 화면이다.

항목설명
-에이전트 상태 / 타임존
: 정상 / : 오류
서버 그룹서버 그룹
에이전트 그룹에이전트 그룹
에이전트에이전트 명 (에이전트 ID)
프로세스 상태정상: 프로세스 수 - 실행중인 Job 개수
비정상: 프로세스 수 - 실행중이지 않은 Job 개수
수집시간에이전트 정보 수집 시간
CPUCPU 정보 (%)
메모리메모리 정보 (%)
디스크디스크 정보 (%)

도구들

서버설정

서버들의 논리적인 그룹인 서버 그룹을 관리하고, 서버 그룹 하위에 서버(J-Jobs Server)를 등록할 수 있다.

서버그룹 추가

  • 그룹 ID : 서버 그룹 고유 ID, 1 이상의 정수
  • 설명 : 서버 그룹 추가 설명
  • 최대 처리건수 : 서버 그룹 내 서버에 적용되는 기본값으로써 Job 요청에 대한 최대 처리 건수 설정
  • 추출 간격(초) : 서버 그룹 내 서버에 적용되는 기본값으로써, Server가 메타 DB에 적재되어 있는 Job 요청들에 대한 추출 간격(초) 설정
  • 우선순위 : 서버 그룹에 요청되는 Job 실행 우선순위에 대한 기본값
  • 기준시간 : 서버 그룹 내 서버의 기준 시간
  • 타임존 : 서버 그룹 내 서버의 타임존 설정
서버그룹 삭제

삭제하고자 하는 서버그룹의 서버그룹 편집을 클릭한 다음, 아래 삭제 버튼을 클릭한다.

서버 추가

서버 그룹 하위에 신규 서버(J-Jobs Server)를 추가할 수 있다. 별도의 과정(설치 가이드 참고)을 통해 설치한 서버를 수동으로 추가한다. 신규 서버를 추가하기 위한 정보는 다음과 같다.

  • 일반 정보

  • 서버 ID : 신규 서버의 고유 ID

  • 서버 설명 : 서버에 대한 추가 설명

  • 프로토콜 : 서버의 프로토콜(http, https) 선택

  • IP : Server의 Service IP

  • 포트 : Server의 Service Port

  • Context Path : Server의 context path 입력(예시: /jjob-server)

  • 최대 처리 건수 : 서버 그룹에 설정된 기본값과 다르게 설정하고자 할 때 입력한다.

  • 추출 간격 : 서버 그룹에 설정된 기본값과 다르게 설정하고자 할 때 입력한다.

  • 통신 정보 : 서버와 에이전트간의 통신을 위한 정보 설정

  • 프로토콜 : 통신 프로토콜(tcp, ssl)

  • TCP 서비스 IP : TCP 통신을 위한 서버의 서비스 IP

  • TCP 포트 : TCP 통신을 위한 Port

  • Read Timeout : TCP 통신 시 Read Timeout 설정

  • 요청 처리자 수 : Job 요청을 처리하기 위한 Server의 처리자 수

  • 설치 정보 : 원격 설치 및 시작/종료를 위한 SSH 정보와 설치 경로 입력

  • 설치 경로 : 원격으로 J-Jobs Installer를 업로드하여 Server를 설치할 때 경로, 혹은 기존에 설치된 서버 경로 입력
  • 윈도우 여부 : 서버가 설치된 곳의 OS가 Windows인지 여부
  • SSH Key 경로 : SSH 접속을 위하여 미리 발급된 publickey 경로
  • SSH ID : SSH 접속 계정
  • SSH 비밀번호 : SSH 접속 비밀번호
  • SSH 포트 : SSH 접속 포트(기본 22)
  • 설치 파일 경로 : J-Jobs Installer 업로드 파일 선택
  • 설치 : 설치 파일 경로를 선택한 경우 버튼이 활성화되며, 버튼을 클릭하면 해당 파일을 업로드한 뒤 사전에 입력한 서버 관련 정보를 기반으로 J-Jobs Server를 설치 경로 하위에 설치한다.
서버 삭제

삭제하고자 하는 서버의 서버 편집을 클릭한 다음, 아래 삭제 버튼을 클릭한다.

에이전트설정

에이전트 그룹과 에이전트를 설정할 수 있는 화면이다. 에이전트들의 논리적인 그룹인 에이전트 그룹을 추가할 수 있고, 에이전트는 기본 그룹(DEFAULT GROUP)에 속하거나 특정 에이전트 그룹 하위에 속할 수 있다. 에이전트의 소속 에이전트 그룹을 변경하는 방법은 화면 상에 에이전트를 Drag & Drop 하여 다른 에이전트 그룹에 할당한다.

  • 목록 보기 형식으로 전환 : 에이전트 설정 화면을 목록 형태로 볼 수 있다.
  • 상위 서버 그룹명, ID : 에이전트 그룹과 에이전트가 속한 상위 서버 그룹명과 서버 그룹 ID
  • 에이전트 그룹명, ID : 에이전트들의 논리적인 그룹인 에이전트의 그룹명과 에이전트 그룹 ID
  • 에이전트명과 ID : 에이전트명과 에이전트 ID
  • 에이전트 편집 : 에이전트 관련 설정 편집, 에이전트 정보를 편집한 경우 에이전트를 재시작해야 한다.
  • 원격 에이전트 시작(SSH) : 에이전트가 설치된 곳의 SSH 접속 정보가 있을 경우, 해당 SSH를 통해 원격으로 에이전트를 기동시킨다.
  • 원격 에이전트 중지(SSH) : 에이전트가 설치된 곳의 SSH 접속 정보가 있을 경우, 해당 SSH를 통해 원격으로 에이전트를 중지시킨다.
  • 에이전트 재시작 : 에이전트를 재시작하며, 재시작하는 동안 Job 처리는 불가하다.
  • 프로세스 재시작 : 기존의 프로세스는 종료되며 새로운 런타임 프로세스가 시작된다.
  • 에이전트 삭제 : 해당 에이전트를 삭제한다.
에이전트 그룹 추가

에이전트들의 논리적인 그룹인 에이전트 그룹을 신규로 추가한다.

  • 그룹 ID : 에이전트 그룹의 고유 ID(1이상의 정수값)
  • 설명
  • 배정 우선순위 요소 : 에이전트 그룹 하위 다수의 에이전트가 있을 경우, 선택한 배정 우선순위 요소에 따라 Job을 처리하는 에이전트를 결정한다. 예를 들어, 배정 우선순위 요소를 'Memory'로 선택할 경우 두 대의 에이전트 중 가용 메모리가 더 많은 에이전트에 Job 처리 요청이 배정된다.
  • 전처리 스크립트 : 에이전트 그룹 내 모든 에이전트가 기동 전 공통적으로 수행할 쉘 스크립트
  • 후처리 스크립트 : 에이전트 그룹 내 모든 에이전트가 기동 후 공통적으로 수행할 쉘 스크립트
  • 에이전트 임계치 설정 : 에이전트의 가용 상태를 판단하는 기준을 설정할 수 있다. 각각의 조건은 OR로 판단된다. 설정한 조건값(임계값)을 만족할 경우 해당 에이전트는 비가용하다고 판단하여 다시 가용한 상태로 될때까지 Job 요청을 받지 않는다.
    • Job 처리율 : 현재 처리 중인 Job 개수 / 에이전트 최대 동시 처리 건수 * 100
    • CPU : CPU 사용률(%)
    • Memory : 가용 메모리(MB)
    • Disk : 여유 디스크 공간(MB)
에이전트 추가

에이전트를 설치하고 기동하면 자동으로 J-Jobs Manager에 신규 에이전트가 등록된다. 필요에 따라 별도로 에이전트를 수동으로 추가할 수 있다.

  • 일반 정보

    • 에이전트 ID : 에이전트의 고유 ID이며, ID는 서버 그룹 내에서 유일해야 한다.
    • 에이전트 이름
    • 프로세스 개수 : 에이전트 하위에 실행되는 런타임 프로세스 개수
    • 스레드 개수 : 런타임 프로세스 하위에 스레드 개수 제한
    • 최대 동시실행 : 에이전트가 최대로 동시에 실행할 수 있는 Job 건수
    • 트랜잭션 : 트랜잭션 사용 여부
  • 확장 정보

    • 요청 처리자 수 : Job 실행 요청을 처리하는 처리자 수
    • JSL 경로 : JSL 파일이 저장될 경로
    • JSL 버전 사용 여부 : JSL 버전 사용 여부, 체크할 경우 더 높은 버전의 JSL 버전 기준으로 실행
    • 최대 할당 Heap 메모리 : 프로세스 당 최대 할당 Heap 메모리 크기 설정
    • 초기 할당 Heap 메모리 : 프로세스가 시작할 때 할당되는 Heap 메모리 크기 설정
    • 모니터링에서 캐시 메모리 제외 여부 : 에이전트 자원 모니터링에서 메모리 사용률에서 캐시 메모리 사용량을 제외할지에 대한 여부
  • 로그 정보

    • 로그 경로 : 로그 생성 위치
    • 백업 로그 경로 : 로그 유지 일수가 지난 로그들을 백업할 위치
    • 로그 유지 일수 : 현재 기준으로 지정된 일수를 지난 로그들을 백업 로그 경로로 이동시킨다.
    • 일자별 로그 관리 사용 여부 : 일자별로 로그를 남길지에 대한 여부
    • 시스템 로그 레벨 : 에이전트 동작에 관련된 로그 레벨
    • 메시지 로그 레벨 : 서버와의 통신 시 발생하는 메시지에 대한 로그 레벨
  • SSH/SFTP 접속 정보

    • SFTP 시작 경로 : SFTP 접속 시 초기 경로(특정 경로 하위로만 접근 제한)
    • 윈도우 여부 : 에이전트가 설치된 곳의 OS가 윈도우인지 여부
    • SSH 호스트 주소(IP) : 에이전트가 설치된 곳의 SSH 호스트 IP
    • SSH Key 경로 : SSH 접속을 위해 미리 발급된 publickey 위치 지정
    • SSH ID : SSH 접속 계정
    • SSH 비밀번호: SSH 접속 비밀번호
    • SSH 포트 : SSH 포트
    • 설치 경로 : 원격으로 설치할 에이전트의 경로 혹은 기존에 설치된 에이전트의 경로
    • 설치 파일 경로 : J-Jobs Installer 업로드 파일 선택
    • 설치 : 설치 파일을 선택한 경우 버튼이 활성화된다. 선택한 Installer 파일을 원격으로 전송하며 입력한 에이전트 정보를 바탕으로 신규 에이전트를 설치한다.
배포

실행할 어플리케이션(jar, exe 등)을 에이전트에 배포하는 기능이다. 해당 어플리케이션을 선택하여 모든 서버에 업로드하면, Job 실행 시점에 해당 어플리케이션이 에이전트에 배포되어 실행한다. 배포하고자 하는 파일을 선택한 후 [배포] 버튼을 클릭한다.

타임존

시간 기반의 스케줄링을 위해 국가별 타임존과 썸머타임을 지원한다. 기본적으로 제공되는 타임존은 18개이며, 그 외 타임존은 관리자가 직접 추가하여 사용할 수 있다.

캘린더

영업일 관리 등을 위해 스케줄링에서 사용하는 캘린더를 사용자가 직접 추가하고 관리할 수 있다.

현재 등록되어 있는 캘린더 목록을 보여주며, 새로운 캘린더를 [추가] 버튼을 클릭하여 추가하거나 기존의 캘린더 체크하고 [삭제] 버튼을 클릭하여 삭제할 수 있다.

신규 캘린더 추가

1월부터 12월까지 일자별로 클릭하여(초록색 마킹) 영업일을 지정할 수 있다. 영업일을 한번에 지정하기 위해 [반복 설정]을 이용한다.

  • 캘린더 ID : 캘린더 식별 고유 ID

  • 설명 : 캘린더에 대한 설명

  • 반복 설정 : 캘린더 설정 시, 다음의 조건을 만족하는 경우(체크) 해당 년도의 캘린더에서 영업일로 지정한다.

  • 현재 년도 삭제 : 현재 년도의 영업일을 모두 선택 해제한다.

  • 선택 년도 삭제 : 선택한 년도의 영업일을 모두 선택 해제한다.

  • 다른 이름으로 저장 : 현재 캘린더를 다른 이름으로 저장한다.

파라미터

J-Jobs의 작업 계획, 단일 작업 실행에 사용할 수 있는 전역 파라미터를 추가하고 관리할 수 있다.

현재 등록된 글로벌 파라미터의 목록을 보여준다. 새로운 파라미터를 등록하려면 [추가] 버튼을 클릭하거나, 삭제하고자 하는 파라미터를 목록에서 다건 선택하고 [삭제] 버튼을 클릭하여 삭제한다. 기존 파라미터를 수정하기 위해 목록에서 파라미터 이름을 클릭한다.

신규 파라미터 추가

  • 파라미터 이름 : 추가할 파라미터의 이름
  • 파리미터 값 : 파라미터의 실제 값을 쓰거나 J-Jobs에서 제공하는 파라미터 함수를 사용하여 값을 설정할 수 있다.

관리자

로그인사용자

현재 로그인 한 사용자의 목록을 보여준다. 해당 기능을 정상적으로 사용하기 위해서 Manager 설정 중 management.propertiesjjob.manager.login.session.listener.use 값이 true로 설정되어 있어야 하며 WAS 별로 해당 기능 사용 여부가 상이하다.

  • 계정 로그아웃 : 로그인한 사용자를 강제 로그아웃 시킨다.
사용자

사용자는 J-Jobs Manager에 로그인할 수 있는 계정을 말하며, 해당 사용자에게 하나의 역할을 할당할 수 있다. 사용자 비밀번호 정책은 10자 이상, 190자 이하이며 영문자와 숫자가 포함되어야 한다. 또한 Manager의 설정 중 jjob.ac.password.valid.timestamp 값에 따라 주기적으로 비밀번호를 변경하도록 할 수 있다. 로그인 중복 방지와 사용자 세션 유지 시간을 별도 설정할 수 있다.

새로운 사용자를 다음과 같이 등록할 수 있다.

  • 사용자 ID : 사용자 계정 ID
  • 사용자 이름
  • 비밀번호 : 10자 이상 190자 이하, 영문자와 숫자 포함
  • 비밀번호 확인
  • 언어 : 해당 사용자가 Manager에서 사용할 언어 선택
  • 타임존 : 해당 사용자가 Manager에서 사용할 타임존 선택
  • 시간표시 형식 : Manager에서 표시되는 시간, 날짜에 대한 형식 지정
  • 역할ID : 해당 사용자가 갖게 될 역할 지정
  • 로그인 중복 체크 여부 : 해당 ID로 중복 로그인을 허용할지 여부
  • 사용자 세션 타임아웃 설정(분) : 사용자가 로그인 이후 세션 유지 시간 설정
폴더

J-Jobs에서의 폴더는 작업계획, 단일 작업, 인스턴트 작업에 대한 각각의 논리적인 그룹으로 사용되며 계층적 구조를 갖는다. 서버 그룹 당 하나의 최상위 폴더가 존재하며 그 하위부터 폴더를 생성할 수 있다.

  • 작업 유형 선택 : 작업계획 폴더, 단일작업 폴더, 인스턴트 작업 폴더 중 선택
  • 최상위 서버 그룹 폴더 : 서버 그룹에 해당하는 폴더로써 서버그룹이 생성될 때 같이 생성된다.
  • 상위 폴더명 변경 : 해당 폴더의 위치를 변경하고자 할때 상위 폴더를 변경한다.
  • 하위 폴더 추가 : 선택한 폴더 하위에 새로운 폴더를 생성한다.
Datasource

J-Jobs에서 사용하는 datasource를 추가하고 관리할 수 있다. 왼쪽에는 현재 등록된 datsource 목록이 보이고, 이 중 하나를 선택하여 상세 설정을 확인할 수 있다.

Datasource 추가하기

새로운 datasource를 추가하기 위해 [추가] 버튼을 클릭한다.

  • 이름 : datasource의 이름
  • 종류 : datasource 유형 선택
    • Job : J-Jobs Agent가 J-Jobs Meta DB에 접속하기 위한 datasource 유형
    • Step : 현재 사용되지 않음
    • 사용자 : Job에서 업무적으로 사용하는 datasource 유형
  • DB 이름 : J-Jobs에서 지원하는 DBMS 종류
  • JDBC 드라이버 : JDBC 드라이버 클래스 경로
  • JDBC URL : JDBC 형식의 접속 URL
  • 사용자 이름
  • 비밀번호
    • 암호화
  • 자동 커밋 사용 여부 : DBMS의 AutoCommit 기능 on/off
  • Datasource 사용 여부
  • JNDI 사용 여부
  • Pool 사용 여부 : Database Connection Pool 기능 on/off
    • Pool 종류 : common-dbcpm non-common-dbcp
    • Pool 최대 : Connection Pool 최대 개수
    • Pool 최소 : Connection Pool 최소 개수
    • Pool 최대 대기 : Pool 대기 시간(ms)
  • 접속 테스트 : 입력한 설정 값으로 DB에 접속이 가능한지 테스트한다.
이메일 알림

J-Jobs에서는 시스템 전역과 Job, Schedule에 특정 조건 상황이 발생하면 알림을 Email로 전송할 수 있다.

  • J-Job 매니저 주소 : 메일 내용 하단에 링크 주소를 위한 J-Jobs Manager URL 입력

  • 첨부파일 최대크기(KB) : 지정한 최대 크기만큼 실행된 Job, Step 로그 파일을 잘라서 이메일 알림 본문에 첨부한다. 0일 경우 무제한이다.

  • 이메일 알림 사용 : 시스템 전역에 대한 특정 조건 상황이 발생할 경우 이메일 알림을 발송한다.

  • 알림 조건

    • 서버 이상 : J-Jobs Server가 구동 중 shutdown 등의 이상 현상이 발생할 경우 알림
    • 에이전트 이상 : J-Jobs Agent 구동 중 shutdown 등의 이상 현상이 발생할 경우 알림
    • 미처리된 Job의 개수가 *개 이상 : Job이 정상적으로 요청되었으나, 처리되지 않고 있는 Job의 개수가 *개 이상일 경우 알림
    • 스케줄 지연 *초 이상 : 스케줄 중 예정된 시간으로부터 *초 이상 지연될 경우 알림
  • 서버 ID : 이전에 설정한 이메일 알림 서버(SMTP 서버) 중 하나를 선택한다.

  • 발신자 메일 : 이메일 알림 발송 시, 발신 메일 주소

  • 발신자 이름 : 이메일 알림 발송 시, 발신자 이름

  • 수신자(to, cc, bcc) : 알림을 수신받을 이메일 주소를 하나 이상 입력할 수 있으며, 여러 이메일 수신 주소를 한번에 입력하고자 할 때는 ; 구분자를 이메일 주소 사이에 붙여 입력한다.

알림서버설정

이메일을 전송할 수 있는 서버를 등록한다.

  • 서버 ID : 이메일 서버의 고유한 ID 입력(띄어쓰기 금지)

  • 이름

  • 서버유형 : 현재 SMTP만 제공

  • 서버 호스트 : SMTP 서버의 IP

  • 서버 포트 : SMTP 서비스의 Port

  • 사용여부 : 해당 이메일 알림 서버 사용 여부

  • 사용자 이름 : SMTP 서버 접속 시 사용자 계정이 필요할 경우 입력(없을 경우 빈칸 허용)

  • 비밀번호 : SMTP 서버 접속 시 사용자 계정의 비밀번호가 필요할 경우 입력

  • 비밀번호 취소 : 기존에 입력한 비밀번호를 지운다.

  • 문자 인코딩 : 메일 내용에 대한 문자 인코딩 설정

  • 머릿말 : 메일 제목에 붙는 머릿말 문구

  • 템플릿 : 이메일 본문에 알림 내용 템플릿 문구 설정(Apache Freemarker 문법 사용)

  • 이메일 알림 서버 테스트 : 입력한 서버 정보를 바탕으로 SMTP 서버 접속이 정상적으로 되는지에 대해 테스트한다.

Template

J-Jobs에서 사용하는 Template을 관리할 수 있는 화면으로써, Job의 step은 여기에 등록된 Template을 이용하여 Job에 step을 추가할 수 있다. Template을 추가/삭제할 경우 모든 Agent에 대한 재시작이 필요하다. 기본 Template은 Template 초기화를 통해 제공되며, 별도의 Template 추가는 제공받은 *.zip 파일을 업로드하여 할 수 있다.

템플릿을 추가하기 위해, *.zip 파일을 업로드 한 뒤 정상적인 J-Jobs Template인지 여부를 파일 확인을 통해 확인하고 모든 서버에 업로드한다. 업로드 이후 에이전트에 반영하기 위해 에이전트를 재시작한다.

Job수정이력

Job의 버전 관리를 사용할 경우, Job 버전에 대한 이력을 확인할 수 있는 화면이다. 검색 기간 내의 Job ID나 Job명 등으로 검색하여 해당 Job에 대한 변경 이력을 목록 형태로 확인하고 해당 버전의 Job 내용을 JSL이나 관련 파일을 zip 파일로 다운받을 수 있다.

  • 서버로 버전 이력 전송 : 처음에 서버가 없는 상태에서 저장된 이력들을 이후에 서버가 등록되고 나서 해당 서버에 전달하는 기능
라이센스

J-Jobs의 라이센스는 Job을 실행할 수 있는 에이전트(J-Jobs Agent) 마다 라이센스가 적용된다. 라이센스를 통해 사용기간 제한과 에이전트가 설치된 곳의 hostname 일치 여부 검사, 그리고 자원 사용을 제한할 수 있다. 해당 화면을 통해 에이전트 별로 적용된 라이센스와 정보를 확인할 수 있다.

설치정보

설치된 J-Jobs Manager에 대한 정보를 확인할 수 있다.

Appendix

데이터 이관

개발에서 운영으로 J-Jobs 데이터를 전체 이관하는 방법은 다음과 같은 과정으로 진행한다.

데이터 이관

다음의 J-Jobs Meta DB에 있는 데이터를 모두 이관한다.

  • Table 구조 및 데이터
  • Index
  • Sequence

데이터 정리

데이터 이관 후 다음의 테이블을 모두 TRUNCATE 한다.

  • JKCL_SERVER
  • JKRE_SERVER
  • JKRE_AGENT

운영 환경에서의 새로운 서버를 Manager에서 [서버 설정]을 통해 재등록해야 하며, 삭제된 AGENT 정보는 기동 될 때 운영환경 정보에 따라 자동으로 추가된다.

서버 설명 변경(옵션)

Manager에서 시스템 관리자(root)로 로그인하여 [환경 설정]에서 [서버 설명]을 환경에 맞게 변경한다.

데이터 삭제

J-Jobs의 데이터를 삭제 하는 방법을 크게 두가지로 구분하면, Database를 삭제 후 다시 초기 생성 Script를 수행하는 방법과 초기화 기능 및 삭제 기능을 이용하여 필요한 부분만 삭제하는 방법이 있다. Script를 이용하는 경우 J-Jobs 설치 시 제공되는 Database Install Script를 이용한다. 또한 시스템 관리자(root)는 부분 혹은 전체 데이터를 삭제하거나 테이블 삭제 메뉴 기능을 통해 삭제가 가능하다. 초기화 및 삭제 기능을 사용하는 경우에는 다음과 같은 과정으로 진행한다.

Agent 정지

먼저 초기화 도중에 Job이 수행되지 않도록 관리자 메뉴 중 [도구들] > [에이전트 설정]에서 각각의 Agent 편집을 클릭하여 Request 추출 일시정지를 체크한 뒤 저장하여 반영한다.

Job 수행 내역 삭제

다음으로 가장 많은 데이터가 쌓이는 실행 이력(Request List)을 삭제한다. 시스템 관리자 메뉴 중 [환경 설정] > [초기화] 탭에서 Clear History(*) 버튼을 이용하여 수행 이력을 기간별로 삭제한다.

로그 파일 삭제

Agent에서 기록하는 로그파일의 위치는 관리자 메뉴 중 [도구들] > [에이전트 설정]에서 각각의 Agent 편집창을 열어 [로그 정보]를 확인한다.

로그 경로를 확인 후, 로그 경로백업 로그 경로에 저장된 파일을 삭제한다. (단, 현재 Agent가 사용중인 로그 파일은 삭제할 수 없다.)

시퀀스 초기화 (옵션)

필요한 경우에 시퀀스를 초기화한다. Databaese 접속 Tool을 이용하여 다음과 같은 쿼리를 수행한다.

Oracle, H2

DROP SEQUENCE SEQ_REQUEST;
DROP SEQUENCE SEQ_INSTANCE;
DROP SEQUENCE SEQ_JOB;
DROP SEQUENCE SEQ_STEP;
CREATE SEQUENCE SEQ_REQUEST MAXVALUE 9223372036854775807;
CREATE SEQUENCE SEQ_INSTANCE MAXVALUE 9223372036854775807;
CREATE SEQUENCE SEQ_JOB MAXVALUE 9223372036854775807;
CREATE SEQUENCE SEQ_STEP MAXVALUE 9223372036854775807;

MariaDB

update jkrs_job_next_id set seq_cur_value=0, LAST_UPDATE_DATE=now();
update jkrs_step_next_id set seq_cur_value=0, LAST_UPDATE_DATE=now();
update jkrs_instance_next_id set seq_cur_value=0, LAST_UPDATE_DATE=now();
update jkcr_request_next_id set seq_cur_value=0, LAST_UPDATE_DATE=now();

Refresh Flag 초기화

Server 상태 갱신 여부를 관리하는 Flag값을 초기화한다. 시스템 관리자(root) 메뉴 중 [환경 설정] > [초기화] 탭에서 [Sequence 초기화(Refresh Flag)]를 클릭하여 수행한다.

Agent 재개

앞서 일시정지를 하였던 Agent를 다시 동작하도록 설정한다. 관리자 메뉴 중 [도구들] > [에이전트 설정]에서 각각의 Agent 편집을 클릭하여 Request 추출 일시정지를 체크 해제한 뒤 저장하여 반영한다.

이벤트 로깅

Job, 스케줄 실행 결과(시작, 성공, 실패, 지연 등의 이벤트)에 대해 로그 파일에 해당 이벤트 내용을 로깅하는 기능을 제공한다. 이벤트 로깅을 사용하기 위한 설정 파일은 다음과 같다.

경로파일명설명
jjob-server/WEB-INF/classes/propertiesnotification.propertiesNotification을 위한 설정
jjob-server/WEB-INF/classes/propertieslog4j-event.properties이벤트 로깅을 위한 log4j 설정
  • notification.properties 이벤트 로그의 내용 중 이벤트 별 문구를 설정할 수 있고, J-Job Server가 이중화로 구성된 환경에서 로그가 한 서버에서 쌓일 수 있도록 원격 로깅을 위한 port를 설정한다.

    ...
    content.schedule.start=SCHEDULE START
    content.schedule.delay=SCHEDULE DELAY
    content.job.delay=JOB DELAY
    content.job.start=JOB START
    content.job.success=JOB SUCCESS
    content.job.failure=JOB FAILURE
    
    log4j.remote.logging.port=4712
    ...
    
  • log4j-event.properties 원격 로깅을 위한 log4j 설정이다.

    # Log4j Setting file
    log4j.rootLogger=INFO, file
    
    # Console log
    log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.File=/logs001/jjobs/event_log_alarm.log
    log4j.appender.file.DatePattern='.'yyyy-MM-dd
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=[EVENT ALARM][%d] %m %n
    log4j.appender.file.encoding=UTF-8
    

Job 혹은 스케줄 별로 아래와 같이 알림을 켠 상태에서 로깅할 이벤트 조건을 선택한다.

다음과 같이 이벤트 로그가 적재된다.

서버 패치 및 보안 설정

추가적인 기능 업데이트나 보안 기능 업데이트시 패치를 제공할 수 있다.
패치를 적용하기 위해서는 jjob-manager, jjob-server에서 사용하는 설정 파일을 백업 후 적용하여야 한다.

서버 패치 방법

서버 장비도 주기적으로 보안 패치를 적용하는 것이 안전하다.

CentOS의 경우 다음의 업데이트를 통해 최신 보안 패치를 적용할 수 있다.

# yum install yum-securiy
# yum update --security
# yum list-security --security
# yum updateinfo list security all

추가 보안 사항

J-Jobs는 Dedicated WAS로 Tomcat을 사용하므로 Tomcat 기준으로 예시를 든다.

  • Tomcat의 경우 주기적인 업데이트가 되고 있으며 버전별로 최신 버전을 사용해야 보안상 안전하다. Tomcat 외의 다른 WAS를 사용하는 경우에도 안전한 버전을 사용하길 권한다.

  • jjob-manager 에서 사용하는 Method인 GET, POST, DELETE, UPDATE만 허용해야 한다.

WEB Server로 Apache를 사용 중이라면 httpd.conf에 다음과 같은 설정을 사용한다.

<Directory>
    <LimitExcept GET POST PUT DELETE>
        Order allow, deny
        deny from all
    </LimitExcept>
</Directory>

Tomcat을 사용 중이라면 #CATALINA_HOME#/conf/web.xml에 다음과 같은 설정을 추가한다.

<filter>
  <filter-name>MethodRestrictFilter</filter-name>
  <filter-class>jjob.common.api.common.filter.MethodRestrictFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>MethodRestrictFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<error-page>
  <error-code>400</error-code>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
<error-page>
  <error-code>403</error-code>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
<error-page>
  <error-code>404</error-code>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
<error-page>
  <error-code>405</error-code>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
<error-page>
  <error-code>500</error-code>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/jjob/app/common/view/error.html</location>
</error-page>
  • 세션 타임아웃 시간을 설치된 서버의 상황에 따라서 적절히 조절한다.

Tomcat의 경우 기본적으로 30분의 세션 타임아웃 시간으로 설정되어 있다. #CATALINA_HOME#/conf/web.xml 에서 다음 옵션으로 세션 타임아웃 시간을 조절할 수 있다.

<session-config>
        <session-timeout>360</session-timeout>
</session-config>

파라미터 함수

Job 실행 시, 전달할 파라미터 값을 설정할 때 사용할 수 있는 파라미터 함수는 다음과 같다.