HOME技術コラムエラーハンドリングとトラブルシューティング
エラーハンドリング(例外処理)とは、プログラムの処理中に処理が妨げられる事象が発生した際、その処理をエラーとして対処する処理のことです。DataSpiderの処理の中でも、「例外監視」コンポーネントを使用することで、対象となる処理の例外を監視し、例外処理を行うことができます。
今回はDataSpiderにて、データベースのテーブルに格納されているデータを読み取り、CSVファイルに出力するという処理を、「例外監視」コンポーネントを使って監視し、エラー発生時に例外処理を実行するという連携の作成手順を説明します。
処理フローと処理内容は以下の通りです。
今回の処理の前提条件は以下の通りです。
今回連携した「test1」のテーブル「商品テーブル」の内容は以下の通りです。
[プロジェクト名]:任意のプロジェクト名
[スクリプト名]:任意のスクリプト名
入力元データが格納されているテーブルの読み取り設定を行います。
ツールパレットから[データベース]-[PostgreSQL]-[テーブル読み取り]を、スクリプトキャンバスにドラッグ&ドロップします。
「テーブル読み取り処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[接続先]:グローバルリソースで設定済みの接続先
[テーブル名]:データ読み取り対象テーブル
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「テーブル読み取り処理」アイコンがキャンパスに配置されます。
読み取ったデータを書き込むCSVファイルの設定を行います。
ツールパレットから[ファイル]-[CSV]-[CSVファイル書き込み]を、スクリプトキャンバスにドラッグ&ドロップします。
「CSVファイル書き込み処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[入力データ]:入力データとなるコンポーネント名
[ファイル]:書き込み対象ファイルの格納先フォルダ/ファイル
◎書き込み設定
[エンコード]:書き込み対象ファイルのエンコード
[改行コード]:書き込み対象ファイルの改行コード
[上書き]:指定したファイルが存在した場合、ファイルを上書きするか選択
[追加書き込み]:ファイルの末尾に追加・上書きするか選択
[ファイルの一行目から列名を読み取り]をクリックします。
ファイルの選択画面が表示されるため、今回のデータ入力先CSVファイルである「/data/work/test/商品読み取り.csv」を選択し、[表示キャラセット]をUTF-8に変更します。
ファイルの中身が正常なことを確認し、[開く]を押下します。
列一覧に列名がセットされます。
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「CSVファイル書き込み処理」アイコンがキャンパスに配置されるので、「テーブル読み取り処理」アイコンとの間にプロセスフローとデータフローを引きます。
※マッピングの追加ダイアログが表示されるので、「はい」を押下しマッピングを追加します。
マッピングリンク、マッピング定義は以下の通りです。
作成した処理を監視するため、例外監視の設定を行います。
ツールパレットから[基本]-[フロー]-[例外監視]を、スクリプトキャンバスにドラッグ&ドロップします。
[例外監視開始]アイコン(①)、[監視処理]アイコン(②)、[例外処理]アイコン(③)、[例外監視終了] アイコン(④)がキャンバスに配置されます。
前手順で作成したDB-CSV連携を[監視処理]アイコン(②)から[例外監視終了]アイコン(④)の間に配置し、プロセスフローを引きます。これにより、DB-CSV連携をスクリプト正常終了時に実行される処理として設定することができます。
次に、「例外処理」(③)プロパティ設定ダイアログで、例外監視対象のアイコンを設定します。
◎必須設定
[チェック対象]:例外を監視したいコンポーネントを選択
例外(エラー)が起こった場合に実行される処理を作成します。今回は例外処理として、以下の2つの処理を実行させます。
まず初めに、アプリケーションログの出力です。
アプリケーションログを出力するためには、出力先の設定から行います。
Studio のスタートメニューから、「コントロールパネル」-「アプリケーションログ出力先設定」を選択します。
[新しいアプリケーションログ出力先の作成]を押下すると、「ログ出力先の種類の選択」プロパティ設定ダイアログが表示されるので、設定を行い[次へ]を押下します。
◎設定内容
[ログ出力先の種類]:アプリケーションログ出力先の種類
次に、「アプリケーションログ出力先設定」プロパティ設定ダイアログが表示されるので、設定を行い[OK]を押下します。
◎基本設定
[ログ出力先設定名]:アプリケーションログ出力先名
[ファイルパス]:ログファイルのパス
◎レイアウト
[%d{HH:mm:ss}]:時刻
[%m]:メッセージ
作成した出力先設定が表示されていることを確認します。
以上でアプリケーションログの出力先設定は終わりです。
次に、ログの内容を設定します。
今回出力したいログの内容は以下の通りです。(メールの内容も同様です。)
(赤枠内の項目は固定値、青枠内の項目はコンポーネント変数を使用)
まず、コンポーネント変数で設定する項目についてです。
コンポーネント変数とは、各コンポーネントで取得できる変数です。
この項目の設定値は、「ログ出力処理」アイコン内の[メッセージ]にて後ほど設定します。
次に、固定値で設定する項目についてです。
この項目の設定値は、マッピング内にあるスクリプト変数で設定します。
ツールパレットから[基本]-[変換]-[マッピング]を、スクリプトキャンバスにドラッグ&ドロップします。
配置された「mapping」アイコンをダブルクリックし、Mapperエディタを開き、スクリプト変数に、固定値で表示させるログ項目の値を定義します。
これでスクリプト変数内に値が定義されました。
最後に、スクリプト内で「ログ出力処理」アイコンの設定を行います。
ツールパレットから[基本]-[処理]-[ログ出力]を、スクリプトキャンバスにドラッグ&ドロップします。
「ログ出力処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[ログ出力先]:設定したログの出力先
[ログレベル]:出力したいログのレベル(基準)
[メッセージ]:出力したいログのメッセージ
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「エラーログ出力処理」アイコンがキャンバスに配置されます。
以上で、アプリケーションログの出力設定は終わりです。
次にエラーメールの送信設定を行います。
ツールパレットから[ネットワーク]-[メール]-[1通メール送信]を、スクリプトキャンバスにドラッグ&ドロップします。
「1通メール送信処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[接続先]:グローバルリソースで設定済みの接続先
[送信元メールアドレス]:送信する側のメールアドレス
[送信先]:受信する側のメールアドレス
◎メッセージ
[件名]:送信するメールの件名
[本文]:送信するメールの本文
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「エラーメール送信処理」アイコンがキャンパスに配置されます。
以上で、エラーメールの送信設定は終わりです。
例外発生時、例外を通知し処理が異常終了するよう設定します。
ツールパレットから[基本]-[処理]-[例外通知]を、スクリプトキャンバスにドラッグ&ドロップします。
「例外通知処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[メッセージ]:実行時に出力されるユーザ定義のエラーメッセージ
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「例外通知処理」アイコンがキャンパスに配置されます。
設定した各アイコンを、処理の順番にプロセスフローで繋ぎます。
[デバッグ実行の開始/再開]を押下して処理が正常終了するケースの確認をします。
(異常終了するケースについては、「2. トラブルシューティング」にて実行します。)
データ抽出が正常に行われたかどうか、出力先CSVファイルを確認します。
Studioのスタートメニューから、「エクスプローラ」を選択します。
「/data/work/test/商品読み取り.csv」に、抽出したデータが書き込まれているかどうか確認します。
抽出データが正常に書き込まれていることを確認しました。
以上が、データベースのテーブルに格納されているデータを読み取り、CSVファイルに出力するという処理を、「例外監視」コンポーネントを使って監視し、エラー発生時に例外処理を実行するという連携の作成手順になります。
トラブルシューティングとは、システムやプログラムに発生した問題や異常を解決するためのプロセスです。問題の原因を見つけ出し、正常な動作を回復させることを目指します。また実際に出力されたエラーやログをトラブルシューティングに使用することで、問題や原因が見つけやすくなります。
今回は「1. エラーハンドリング」にて作成した例外処理のスクリプトを使って例外処理を発生させ、出力されたアプリケーションログとエラーメールを用いて、エラーが発生した箇所とその原因を探っていきます。
トラブルシューティングの流れは以下の通りです。
発生 |
|
---|---|
検知 |
|
確認 |
|
判断 |
|
スクリプトを実行したところ、エラーが発生しました。
例外処理により、赤枠部分の処理が実行されます。
出力されたアプリケーションログとエラーメールの内容を確認し、エラーが発生した箇所、原因にあたりをつけます。
以上の内容から、「テーブル読み取り処理」アイコンでエラーが発生し、原因はデータベースへの接続の失敗だという当たりが付きました。
次に出力されたXMLログを確認し、エラー該当箇所を判断します。
XMLログのエラー部分と、先ほど確認したアプリケーションログ、エラーメールから「テーブル読み取り処理」アイコンでエラーが発生しており、データベースへの接続に失敗したことが原因だということが確定できました。
以上が、出力されたアプリケーションログとエラーメールを用いたトラブルシューティングの実施方法になります。
何でもお気軽にご質問ください