メインコンテンツまでスキップ

定期処理の実行・管理

運用において、定期的なスケジュールに基づいてプログラムを自動実行することは有用です。intra-martでは、このような処理をジョブ機能により実現し、各種バッチ処理を定期的に実行できます。ここでは、ジョブ機能の概要と設定方法について説明します。

ジョブ機能の概要

ジョブ機能は、プログラムの実行単位であるジョブや、それらを組み合わせたジョブネットを定義し、処理の順序制御や分岐、並列実行などを柔軟に構成する機能です。これらの処理は、スケジュール設定や手動実行により自動的に実行できます。intra-mart標準機能として、以下のような構成要素が用意されています。

定義・構成
  • ジョブ定義
    単一の処理単位(Task)を定義します。Javaクラスやスクリプトなどで処理を実装し、登録できます。
  • ジョブネット
    複数のジョブの依存関係や並列実行、分岐を定義します。処理の順序制御や条件分岐を構成できます。
実行制御(スケジュール・起動)
  • スケジューリング(定期実行)
    日時や繰り返し条件、cron相当の設定により、定期実行を設定できます。カレンダー設定や除外日の指定も可能です。
  • 即時実行API(手動・外部起動)
    管理画面からの即時実行に加え、APIや外部システムからジョブを起動できます。JobSchedulerManager#executeやIM-LogicDesignerのREST呼び出しにより実行可能です。
実行管理(制御・耐障害)
  • 同時実行制御(スレッド数・キュー)
    job-thread-countなどで同時実行数を制限します。運用側で待ちキューや優先度制御を管理できます。
  • タイムアウト・リトライ・エラーハンドリング
    ジョブごとにタイムアウトやリトライポリシーを設定し、異常時の動作を分岐によって制御できます。
監視・連携
  • 実行履歴・監視
    実行履歴およびモニタIDを取得し、処理の状態を追跡します。system.logexception.log、ジョブ履歴画面などで確認します。
  • 完了通知
    ジョブやジョブネットの完了をIM-Propagation(PROC_COMPLETEDなど)で通知し、外部連携や後続処理に利用できます。
セキュリティ・統制
  • アクセス制御・実行ユーザ指定
    ジョブの登録や実行には権限管理が適用され、実行に利用するサービスアカウントを指定できます。
  • 監査・ログ出力設定
    実行ログや例外ログ、定義変更履歴などの監査ログを保持できます。
注意

即時実行APIは非同期で実行されるため、成功/失敗の結果が即時に返されない場合があります。正確な結果を判定するには、monitorIdやIM-Propagationなどを用いて実行状況を追跡する必要があります。なお、旧バージョン(2018 Spring以前)では、IM-Propagationによるステータス伝播に不具合が報告されています。正確な完了判定が必要な場合は、バージョン情報を確認の上、monitorIdを用いた実装を行ってください。

コラム

ジョブ機能の設定は、ジョブの内容に応じてシステム管理者またはテナント管理者が実施します。システム全体に関わる処理はシステム管理者が、業務やテナント単位の処理はテナント管理者が担当します。

ジョブのスケジュール実行

ジョブは、スケジュール設定による定期実行、または即時実行に対応しています。

  • スケジューラ設定(管理画面)による定期実行
  • プログラム/APIによる即時実行(外部スケジューラとの連携を含む)

ここでは、intra-mart Accel Platformのジョブスケジューラ機能およびIM-LogicDesignerを利用し、ジョブ/ジョブネットの実行タイミングを設定する手順について、「設計」→「実装」→「運用」の順に説明します。

設計

ジョブ/ジョブネットの実行内容やスケジュール、異常時の対応方針を整理し、処理構成や依存関係を設計します。

1. 要件定義

ジョブ/ジョブネットの実行内容や実行条件、異常時の対応方針を明確にします。

(1) 実行内容:単一ジョブか、複数ジョブで構成されるジョブネットか

(2) 実行頻度:毎分/毎時間/毎日/週次、またはcron形式の条件か

(3) 実行時間帯:バッチ時間帯やタイムゾーン要件

(4) 同時実行の可否:同一ジョブの多重実行を許可するか

(5) 失敗時の対応:リトライ回数、通知(メールなど)、代替処理の有無

(6) 実行結果の確認方法:同期的に結果取得が必要か(通常は非同期)

(7) 外部からの即時起動の有無:API連携や外部スケジューラによる起動が必要か

2. ジョブ/ジョブネットの設計

ジョブ/ジョブネットの構成や依存関係、実行制御に関する設定を設計します。

(1) ジョブ(Task)の粒度の決定:1つのジョブは単一機能に絞る

(2) 各ジョブの設定項目の定義:タイムアウト、リトライ回数・間隔、失敗時の分岐(停止・継続)、出力(ログ・戻り値)

(3) ジョブネット構成の設計:並列実行や依存関係(先行・後続)、条件分岐や並行ノードの整理

(4) 外部資源利用時の考慮事項の整理:データベースや外部API、ファイル連携における接続情報や接続数上限の考慮

実装

3. ジョブの実装・登録

ジョブを、以下のいずれかの方法で登録します。

管理画面からジョブを定義する場合

① サイトマップから「テナント管理」メニューにある[ジョブ設定]をクリックします。

② 「ジョブ管理」画面から[ジョブ新規作成]をクリックして、以下の項目を設定します。

  • ジョブの基本情報(カテゴリ、ID、名称)
  • 実行言語(Java, JavaScript)
  • 実行プログラム
  • 実行パラメータ

Javaの実装でジョブを定義する場合

① ジョブの処理をJavaクラスや製品のタスクインタフェースに合わせて実装し、デプロイします。

IM-LogicDesignerでモデルを定義する場合

① IM-LogicDesignerで新規フロー(タスク)を作成し、処理ロジック(スクリプト/呼び出し)を定義します。

② ジョブをジョブネット内に配置し、依存関係や分岐を設定します。

③ ジョブ内で必要な入出力パラメータを定義します。

注意

ジョブの登録・編集には、ジョブ管理機能へのアクセス権や設定変更権限を持つ管理者ロールが必要です。必要な権限は環境により異なるため、事前に確認してください。

参考

製品のバージョンや導入形態(管理画面で定義する場合や、IM-LogicDesignerを利用する場合など)によって、画面構成やAPIの仕様が異なることがあります。具体的な画面操作やAPIのURLについては、「テナント管理者操作ガイド - ジョブを設定する」を参照してください。

4. スケジュール設定

スケジュールを、以下の方法で設定します。

管理画面からジョブを定義する場合

① 「ジョブ管理」画面から[ジョブネット管理]をクリックします。

② 「ジョブネット管理」画面で[ジョブネット新規作成]をクリックして、以下の項目を設定します。

  • ジョブネットの基本情報(カテゴリ、ID、名称)
  • 実行時の情報(並列実行の有無、ジョブ、パラメータ)
  • トリガ設定(日時・繰り返し・営業日)
    • 日時指定の場合:タイムゾーン、年・月・日・時・分
    • 繰り返し指定の場合:回数、間隔
    • 営業日指定の場合:カレンダー、タイムゾーン、時・分

Javaの実装でジョブを定義する場合

  • 開始日時/終了日時(年・月・日・時・分)
  • 繰り返し指定(利用できる場合はcron式)
  • 優先度、スロット数(同時実行制御)、実行環境(ApplicationRuntimeの指定など)
  • 実行ユーザ(サービスアカウント)の指定
注意
  • サーバのシステム時刻(NTP設定)およびタイムゾーンは、必ず正しく設定してください。
  • 夏時間やタイムゾーンの切り替えによる影響を考慮してください(cron設定では実行時刻がずれる場合があります)。
  • 同時実行を禁止する場合は、排他フラグやロック設定を利用してください。
5. 即時実行と外部トリガ

ジョブ/ジョブネットの動作確認は、即時実行により行います。また、外部システムからの起動が必要な場合は、APIなどを利用します。

管理画面からジョブを定義する場合

① 「ジョブネット管理」画面から実行したいジョブを選択し、[即時実行]をクリックします。

Javaの実装でジョブを定義する場合

① 「手動実行」を行い、ジョブが正常に起動・終了することや、想定した処理結果となることを確認します。

外部システムから即時実行する場合

外部システムから即時実行する主な方法は以下のとおりです。

  • IM-LogicDesignerのREST APIを利用して即時実行タスクを呼び出す方法(認証:Basic/OAuth2など、ジョブネット起動タスクを用意)
  • Web API Makerを利用してジョブ起動用のREST/SOAP APIを公開し、外部から呼び出す方法
  • JavaでWebサービスを実装し、内部APIを呼び出す方法(JobSchedulerManager.executeなど)
参考
  • JobSchedulerManagerのexecuteメソッドにより、ジョブネットを即時起動するためのAPIを提供しています。詳細は「API Documentation - JobSchedulerManagerオブジェクト」を参照してください。
  • 即時実行APIは非同期で実行されるため、実行結果はすぐに返されません。必要に応じて、モニタIDなどを用いて結果を確認してください。
6. 動作確認(テスト)

以下の手順は、実装方法に関わらず実施してください。

  • 開発環境で単体テスト(即時実行)を行い、ログ出力や例外ハンドリングを確認する
  • スケジュールを短い周期で設定し、定期実行の動作を検証する(例:数分ごと)
  • 失敗シナリオ(データベース切断、外部API障害など)を想定し、リトライや通知の挙動を確認する
  • IM-Propagation受信側の分岐(PROC_COMPLETED)で、status値が期待どおりに受け渡されるか確認する
  • monitorIdを取得できる場合は、それを用いた結果取得および追跡の動作を確認する
参考

製品API(JobSchedulerManagerexecute)の戻り値や、その取得方法(monitorIdが返却されるかどうかなど)は、バージョンによって異なります。詳細は「API Documentation」を参照してください。

参考

実際にジョブ/ジョブネットを設定したい場合は、「CookBook - ジョブを作成して定期実行する」を参照してください。スクリプト開発モデルおよびJavaEE開発モデルについて、ジョブの作成から定期実行までの手順を紹介しています。

運用

7. 監視・通知と実行結果の取得

即時実行やスケジュール実行は非同期で動作するため、ジョブネットの成功・失敗を即時に取得できない場合があります。この点に留意し、実行結果の取得方法や通知方法をあらかじめ設計しておきましょう。

実行結果を取得する方法

  • IM-Propagation(PROC_COMPLETEDイベント)を利用してジョブネット完了を通知する方法
    └ 受信側モデルのstatusフィールドにより、成功/失敗を判定します。
  • ジョブスケジューラのモニタ画面や履歴テーブルから状態を確認する方法
    monitorIdを利用することで、ログや実行結果を取得できる場合があります。
注意

旧バージョン(2018 Spring以前)では、ジョブネット完了時にデータベースへ接続できない場合、IM-Propagationの受信側で不正にSUCCESSが通知される不具合が報告されています。ジョブ実行結果に応じた正確なステータス取得が必要な場合は、2018 Summer以降の修正バージョンへのアップデート、またはmonitorIdを利用したJobSchedulerManager経由での結果取得などの回避策を検討してください。

8. 本番リリースと初期運用

本番運用環境では、同時実行負荷や外部連携の差異により、テスト環境と挙動が異なる場合があります。そのため、ジョブ/ジョブネットは段階的に有効化します。

事前準備(必須)

① ステージング環境でジョブ/ジョブネットの総合試験を完了します。即時実行、スケジュール実行、失敗時の挙動を確認してください。

② 監視・通知設定(監視対象、閾値、通知先)を本番運用環境に合わせて適用します。

③ ログ出力(ジョブ内ログ・例外ログ)のレベルを、本番運用環境に合わせて調整します。DEBUGは原則オフにしてください。

④ 実行に使用するサービスアカウントや、データベース接続情報を確認します。認証方式(SSOなど)がある場合は、バッチ用の代替手段を用意してください。

リリース手順(参考)

① メンテナンスウィンドウを設定・告知します。テナント環境への影響有無を明示してください。

② 本番運用環境へデプロイします。ジョブ定義データ、Javaアーティファクトなどを配置してください。

③ スケジュールを有効化せず、まずは即時実行で個別ジョブをテストします。

④ 問題がなければ、スケジュールを順次有効化します。初期段階では、短い周期で監視を強化してください(例:最初の24時間は、実行後に確認するなど)。

⑤ 問題がなければ、通常運用へ移行します。初期期間(例:初週)は日次で状態を確認してください。

運用管理の基礎知識

ここでは、ジョブのスケジュール実行を安定して運用するために必要な運用管理の基礎知識について説明します。

監視・アラート(ログ監視)

ジョブのスケジュール実行における監視およびアラートについて説明します。ジョブは非同期で実行されるため、実行状況や結果を適切に把握するための監視と、異常発生時に迅速に検知するためのアラート設定が重要になります。

監視対象
  • ジョブスケジューラのジョブ履歴
  • エラーログ
  • 実行時間
  • リソース使用状況
ログ確認場所
  • 「ジョブネットモニタ一覧」画面(履歴・ログ)
  • サーバログ(アプリケーションログ、例外ログ)
  • OSレベルのログ
監視・アラート
  • 失敗時にメール通知/Webhookによる即時アラート
  • 予定実行が未実行だった場合のアラート(タイムスタンプ差分を監視)

運用ルール(注意点)

ジョブのスケジュール実行における運用ルールと注意事項について説明します。環境差異や認証方式などにより挙動が変わる可能性があるため、事前に留意点を整理しておくことが重要です。

運用作業時のルール
  • 作業は業務影響の少ない時間帯に実施する(特に本番運用でのスケジュール変更時)
認証・セキュリティに関する注意点
  • ライセンスや認証方式(統合認証/SSO)がバッチ実行に与える影響を事前に確認する
    ※統合認証環境では、バッチ実行用に別のApplicationRuntimeやサービスアカウントが必要になる場合がある
  • 外部からAPIを実行する場合は、HTTPSおよび適切な認証(サービスアカウント、OAuth2、APIトークン)を利用し、認証情報は安全に管理する(最小権限で運用する)
可用性・構成に関するルール
  • スケジュール設定は冗長構成を考慮する(HA環境ではスケジューラの二重起動防止など)
保守・運用維持ルール
  • ジョブのログは一定期間保持し、障害時に参照できるようにする
  • 定期的にジョブ履歴の削除やログローテーションを実施し、ディスク肥大を防止する

障害対応(トラブル)

ジョブ/ジョブネットのスケジュール実行において障害が発生した場合は、以下の手順で切り分け・確認を行います。

ステップ確認内容主な確認ポイント
① 事象確認何が起きているか整理し、事象を切り分ける
  • ジョブが実行されていない(未実行)
  • ジョブは実行されたが失敗している
  • 外部連携や通知のみ失敗している
  • 同時実行や処理遅延が発生している
② スケジュール・実行状態実行有無と設定内容を確認し、設定ミスか環境差異かを判断
  • ジョブが有効化されているか
  • スケジュール設定(日時・cron・カレンダー)が正しいか
  • サーバ時刻・タイムゾーンにズレがないか
  • ジョブ履歴・ジョブネットモニタで実行有無を確認
③ 実行エラー・結果確認ログおよび実行結果を確認
  • ジョブログ・アプリケーションログ・例外ログを確認
  • IM-Propagationのイベント通知結果を確認
  • 必要に応じてmonitorIdで実行結果を追跡
④ 外部連携・認証の確認外部起動またはAPI連携の認証・権限を確認
  • API認証方式(Basic/OAuth2など)が正しいか
  • サービスアカウントの権限不足がないか
  • HTTPS証明書・ACL設定に問題がないか
⑤ リソース・同時実行の確認実行環境の負荷・競合状況を確認
  • 同時実行制御(排他設定)が適切か
  • CPU・メモリ・データベース接続数などリソース逼迫がないか
  • 想定外の並列実行が発生していないか
⑥ 切り分け結果に応じた対応原因に応じた対応方針を決定
  • 設定不備の場合、修正後に再実行
  • 一時的障害の場合、リトライまたは監視継続
  • 環境問題の場合、インフラ・基盤側へエスカレーション
参考

ジョブ/ジョブネットのスケジュール実行に関するトラブルシューティングについては、「intra-mart Support (FAQ) - intra-mart Accel Platform > ジョブスケジューラ」を参照してください。

ログ設計・管理

ログ管理では、ログの取得・保管・分析を一貫して設計し、障害調査や運用監視に活用できるようにします。

ログの取得対象と用途

システム運用に必要な各種ログを整理し、通常運用時および障害発生時における収集対象および用途を以下に示します。

対象ログ用途
通常運用時障害発生時
system.log監視・傾向分析・障害調査のベースデータとして収集該当時刻のログを収集し、原因解析や詳細調査のために参照
exception.log
ジョブスケジューラログ実行状況の監視・履歴確認実行失敗時の原因特定
アプリケーションサーバログサーバ稼働状況の監視JVM異常・エラー原因の調査
Webサーバログリクエスト状況の把握アクセスエラーや通信障害の調査
データベースログパフォーマンス監視slow queryなどの原因解析
thread dump―(通常は不要)JVMのスレッドダンプを取得し、ハング・高負荷状態を解析
gc.log―(通常は不要)JVMのガベージコレクションログを取得し、メモリ問題の原因を解析
slow query log―(通常は不要)データベース遅延の原因解析
保管ポリシー

ログの保管期間および方法は、以下を目安とします。

  • 直近30日:即時検索可能な状態で保持
  • 30日〜180日:圧縮アーカイブとして保管
  • 180日超:長期保管(規約・要件により調整)

また、ログローテーションは自動化(logrotateなど)により実施します。

ログ分析

集約ログ基盤(ELKPrometheus+Grafanaなど)と連携し、検索・可視化・アラート通知を行います。特に、エラーログの傾向分析を定期的に実施します。

外部連携設計

外部連携では、スケジュール管理と実行制御を分離し、疎結合な構成とすることを推奨します。

外部スケジューラ(cronなど)で実行時刻を管理し、ジョブの起動はintra-martの公開APIを介して行います。具体的には、IM-LogicDesignerのREST API、Web API Makerで公開したエンドポイント、またはカスタムWebサービスを利用します。この構成により、スケジュール変更の影響をアプリケーション側に波及させず、柔軟な運用が可能になります。また、実行履歴やエラー情報をAPI経由で取得できるため、ログの追跡性や監視性も向上します。

一方で、外部システムからデータベースへ直接アクセスしたり、内部実装のAPIを直接呼び出したりする構成は避けます。必ず公開APIを経由し、認可・入力チェック・例外処理などの制御を経由することで、システムの安全性と保守性を確保します。

定期運用・保守

定期的な点検を実施し、障害の未然防止および継続的な改善を図ります。

頻度主な作業内容優先度自動化
日次
  • 監視アラートの確認
  • 前日分の失敗ジョブ一覧の確認
  • 未処理ジョブ(待ちジョブ)の確認
一部可(監視・集計)
週次
  • 長時間実行ジョブの分析
  • 失敗傾向のレビュー
  • 必要に応じて、スケジュール調整
  • ログ容量およびディスク空き容量の確認
一部可(ログ集計・容量監視)
月次
  • ジョブ実行統計(成功率、平均実行時間、ピーク時間帯)のレビュー
  • データベース接続プールおよびJVMヒープのチューニング検討
一部可(統計収集)
四半期
  • バージョンアップおよびセキュリティパッチ適用計画の検討
  • リソース増強計画の検討
  • 運用手順(ランブック)の見直しおよび関係者への共有
一部可(計画用データ収集)
年次
  • DR(ディザスタリカバリ:災害復旧)訓練の実施
  • 障害時のフルリカバリ演習の実施
  • ライセンスおよび契約内容(期限・契約台数など)の確認
不可