Tech Sketch Bucket of Technical Chips by TIS Inc.

JobSchedulerで実行したJobをZabbixで監視する①

Pocket

以前、Tech-Sketchで Software-und Organisations-Service GmbH (以降SOS社)のJobSchedulerに関してご紹介しました。(以前の記事については こちら をご参照ください)
実際にJobSchedulerを使ってみたので、2回に分けてJobSchedulerで実行したJobの実行履歴をZabbixで監視する方法をご紹介したいと思います。

今回はJobSchedulerのインストールからJobの登録・APIの使い方をご紹介します。次回の記事でZabbixとJobSchedulerを連携させ、JobSchedulerのWebAPIを使ったJobの実行履歴を監視する方法についてご紹介します。


JobSchedulerのインストール

まずはJobSchedulerをインストールします。今回はCentOS6.3(64bit)にインストールする方法をご紹介します。(サンプル画像は画面キャプチャの都合上、windows版の画面を掲載していますが、内容はLinux版と変わりはありません)
インストールの前提として下記を実施する必要があります。

  • GNOME等のデスクトップ環境(JobSchedulerのインストール時に必要です)
  • OracleJRE6 の32bit版(AIXで稼働させる場合のみIBM Java6を使用)
  • RDBMS。今回はPostgreSQL9.2.3を使いました。(※データベースなしでも稼働させることは出来ますが機能に制限が出来る為、データベースを使用する構成にします。)

なお、JobSchedulerではPostgreSQL(対応バージョンは8.x, 9.x)以外に下記のRDBMSが使用出来ます。

  • MySQL
  • Oracle(8.1.7, 9.2, 10g, 11g)
  • MS SQL Server(2000, 2005)
  • Firebird(1.5)
  • DB2
  • Sybase ASE

まず、 ダウンロードページ からJobSchedulerのLinux版 Full Installをダウンロードします。
任意のディレクトリにダウンロードしたアーカイブファイルを解凍し、同梱されている setup.sh を実行します。
インストールの実行はrootユーザ以外で実行する必要があります。今回はschedulerユーザを新規に作成してインストールをしています。
なお、JobSchedulerで実行するJobは全てインストールユーザでの実行となる為、専用のユーザを作成することを推奨します。

すると、GUIのインストーラが立ち上がります。画面の内容に従ってインストールを実施し、インストールに成功すると最後に以下の画面が表示されます。
pic15.PNG

この画面でdoneボタンを押すとインストールしたJobSchedulerが起動します。JobSchedulerはGUIで簡単にインストールすることが出来ます。

Standalone Jobと Job Chainの作成

JobSchedulerには大きく2種類のJobを定義することが出来ます。

  • Standalone Job
    • その名の通り、単一で稼働させることが出来るJobです。
  • Order Job
    • Job Chainの中の一つのJobとして定義することが前提であるJobです。Standalone Jobと異なり、単一で稼働させることは出来ません。逆に、Standalone JobをJob Chainの中のOrder Jobとして定義することも出来ません。(※Job Chainに関しては 前回の記事 をご参照下さい。)

今回は下記のような構成のJobを定義してみたいと思います。
JobScheduler_define_job.png

Jobの作成

Jobを作成するにはGUIツールのJOEを使用します。JOEを立ち上げる為には起動シェルスクリプトを実行する必要があります。起動シェルスクリプトは${SCHEDULER_HOME}/binディレクトリにあります。
(${SCHEDULER_HOME}はインストール時に指定したディレクトリです。デフォルトは/opt/sos-berlin.com/jobscheduler/scheduer_idです。)

すると、JOEの画面が立ち上がります。JOEの画面が開いたらまずはStandalone Jobを定義してみます。
Standalone Jobは下記のように定義します。

joe.PNG

  1. 左上にあるアイコンからホットフォルダを開く。対象は${SCHEDUELER_DATA}/config/live/testとする。(${SCHEDUELER_DATA}/config/liveディレクトリのことを"ホットフォルダ"と呼びます)
  2. Jobsを選択し、New Standalone JobボタンをクリックしてJobを作成します。クリックしたら"job1"というJobが作成されます。
  3. job1を選択し、Job Nameを"add_order"に変更します。
  4. Languageにjavascriptを選択し、job_chain1を起動するスクリプトを記述します。
  5. 最後に Ctrl+S で定義したJob内容を保存します。

Jobは全てXMLで定義されており、XMLタブをみると定義したJobの内容が確認出来ます。同じようにJobの定義が出来ていれば下記のXMLファイルのようになっているかと思います。作成したjavascriptがそのままXMLファイルとして作成されていますね。

このscriptはidが1000番のorder(命令)を作成し、作成したorderをjob_chain1に対して発行するscriptです。job_chain1は発行されたorderの内容に従い、job_chain1内に定義されているJobを実行させます。今回の場合はorder_job1/order_job2/order_job3を即時実行させるorderが発行されます。
なお、JobSchedulerには 様々な内部API が用意されており、作成したjavascriptはJobSchedulerの内部APIを使用しています。今回は下記2つのAPIを使用しています。

  • spooler.create_order()
    • 新規にorderを作成します。orderとはJob Chainを稼働させる為の命令です。Job Chainを稼働させる為にはorderを発行する必要があります。
  • spooler.job_chain(job chain name).add_order(order object)
    • 対象のJob Chainに対してorderを追加します。

なお、今回はjavascriptを使用していますが、JobSchedulerでは下記の言語でJobを作成することが出来ます。

  • shell script
  • Windows PowerShell
  • Java
  • Javascript
  • VBScript
  • PerlScript
  • Javax.script

Job Chainの作成

Order Jobの作成

Job Chainを作成する前に、まずOrder Jobを定義します。Order JobはJob名が"order_job1","order_job2","order_job3"の3つのJobとします。これらはshellスクリプトのJobとして作成します。
作成したOrder JobのXMLは下記となっています。(order_job1の定義の例)

Job Chainの作成

上記で作成したOrder Jobが含まれるJob Chainを定義します。

joe2.PNG

  1. Job Chainを選択し、New Job ChainボタンをクリックしてJob Chainを作成する。
  2. Steps/Nodesを選択し、Job Chainを定義する。
  3. 定義した内容を確認する。誤った指定をしている場合は対象の行が赤くなっているので、その場合は適宜修正する。

これでJob Chainの定義も出来ました。

定義したJobの実行

定義したJobを3通りの方法で実行してみます。

①JOCからの実行

まずはJobSchedulerのWeb管理コンソールであるJOCからJobを実行してみます。(JOCについては 前回の記事 をご参照ください。)
JOCはインストール時に指定したポート番号を指定すればアクセス出来ます。

http://hostname:port

joc_aft.PNG

  1. add_orderを右クリックで選択する
  2. Start task immediatelyで即時にタスクを実行する
  3. order_job1→order_job2→order_job3とJobが稼働するので、Job終了後にorder_job1を選択し、画面の右側にてShow logを選択する
  4. ログに稼働したJob名とホスト名が表示されていることが確認出来る

このようにJOCを使えば簡単にJobを稼働させることが出来ます。

②SOAPリクエストを用いたJob実行

JobSchedulerはSOAPを使ってリモート操作をすることが出来ます。add_orderを実行する方法を下記に記載します。

JobSchedulerの設定変更

SOAPを使う為にはJobSchedulerの設定を変更する必要があります。変更は下記内容を${SCHEDULER_HOME}/config/scheduler.xmlに追加して、JobScheulderを再起動して下さい。

Jobを実行するSOAPリクエストxmlファイルの作成

test/add_orderを実行開始するSOAPリクエストのxmlファイルを作成します。

Jobの実行

上記xmlファイルを用いてJobを実行します。Jobの実行はcurlコマンドを用いて実施してみます。

すると、下記のようなレスポンスが返答され、test/add_orderが稼働し始めます。レスポンス内容はJobScheduler内部で割り振られたadd_orderのタスクIDが返答されています。

このようにSOAPを用いてJobSchedulerを操作することが出来ます。しかし、プログラムで実施しようとするとプログラム内でSOAPリクエスト文を生成しなければなりません。JobSchedulerにはより手軽に操作する為のXMLコマンドがコマンドが用意されています。

③XMLコマンドでのJob実行

続いて APIを操作する為のXMLコマンド を使ってJOCやSOAPリクエストと同じようにJobを実行してみます。

XMLコマンドはJobSchedulerをインストールした際に指定したポートにTCP接続することで発行することが出来ます。
TCPポートへの接続はtelnetコマンドを使用します。今回はCentOS上で自身のJobSchedulerに接続します。

続いてxmlコマンドを発行します。

すると、下記のようなレスポンスが表示され、add_orderが稼働し始めます。

JOCで実行した時と同じようにログを確認することが出来ます。XMLコマンドでの実行も簡単ですね。
また、 SOS社のページ でPHPからxmlコマンドを操作する為のライブラリーも提供されています。

JIDを使ってJobSchedulerを統合管理

最後にJIDの使い方を少しご紹介します。
JIDは今まで使用してきたJOEとJOCを統合し、今後の実行スケジュールと過去の実行履歴を確認出来るJobSchedulerに付随しているGUIツールです。

JIDの実行ファイルは${SCHEDULER_HOME}/binディレクトリのdashboard.shです。
実行する前に下記部分について起動スクリプトを修正します。

※DBにPostgreSQLを使っている場合は Hibernate を使ったDBアクセスをするjavaを一部修正する必要があります。SOS社から 修正したjarファイル が配布されているので、これを使えばJIDが起動するようになります。
手順を下記に掲載します。

  1. ダウンロードしたcom.sos.hibernate_pgsql.jarを ${SCHEDULER_HOME}/libに 配置
  2. ${SCHEDULER_DATA}/config/factory.iniを修正(クラスパスの先頭にcom.sos.hibernate_pgsql.jarを追加)
    [java]
    class_path = ${SCHEDULER_HOME}/lib/com.sos.hibernate_pgsql.jar;${SCHEDULER_HOME}/lib/*.jar;${SCHEDULER_HOME}/lib/hibernate/*.jar;${SCHEDULER_HOME}/lib/jetty_ext/*.jar
  3. JobSchedulerの再起動

Dashboardでスケジュールと実行履歴の確認

Dashboardタブ内のPlannedタブでスケジュール情報を確認することが出来ます。また、対象Jobを右クリックしてJIDから即時実行させることも出来ます。
この情報はJobSchedulerをインストールした際に定義されているJobが情報を収集しています。

  • 対象Job:sos/dailyschedule/CreateDaysSchedule
    • スケジュール情報をJIDに反映させるJob。デフォルトで毎日00:00に稼働するよう定義されている。

jid1.PNG

また、Dashboardタブ内のHistoryタブでJobの実行履歴情報を確認することが出来ます。
この情報もJobSchedulerインストール時のJobで情報収集しています。

  • 対象Job:sos/dailyschedule/CheckDaysSchedule
    • Job実行履歴をJIDに反映させるJob。デフォルトで毎日00:00から30分間隔で繰り返し稼働するよう定義されている。

jid2.PNG

JOEとJOCの確認

上記で記載した通り、JIDからはJOEとJOCの画面を操作することが出来ます。JOCについてはタブを使って複数のJOCに接続することが出来ます。

jid_joe.PNG
jid_joc_aft.PNG

最後に

今回はJobSchedulerのインストールからJob/Job Chainの作成・JIDでの確認方法やAPIを使ったJobSchedulerの操作などをご紹介しました。次回はAPIを操作するPHPライブラリーを用いてJobSchedulerで実行したJobの実行履歴をZabbixへ連携させてみたいと思います。

エンジニア採用中!私たちと一緒に働いてみませんか?