エラーハンドリングとトラブルシューティング

HOME技術コラムエラーハンドリングとトラブルシューティング

エラーハンドリング、ログの種類の紹介や各種設定方法、
実際のログを用いてのトラブルシューティングの簡易さをアピール

1. エラーハンドリング

エラーハンドリング(例外処理)とは、プログラムの処理中に処理が妨げられる事象が発生した際、その処理をエラーとして対処する処理のことです。DataSpiderの処理の中でも、「例外監視」コンポーネントを使用することで、対象となる処理の例外を監視し、例外処理を行うことができます。

【1-1】処理仕様説明

今回はDataSpiderにて、データベースのテーブルに格納されているデータを読み取り、CSVファイルに出力するという処理を、「例外監視」コンポーネントを使って監視し、エラー発生時に例外処理を実行するという連携の作成手順を説明します。

処理フローと処理内容は以下の通りです。 処理フローと処理内容

【1-2】前提

今回の処理の前提条件は以下の通りです。

  • データベースへの接続が済んでいること(今回はPostgresSQL13をデータベースとして使用)
  • メールサーバへの接続が済んでいること
  • データ連携先のCSVファイルがDataSpiderファイルシステム上に配置されていること

今回連携した「test1」のテーブル「商品テーブル」の内容は以下の通りです。 商品テーブルの内容

【1-3】プロジェクトとスクリプトの作成

[プロジェクト名]:任意のプロジェクト名
[スクリプト名]:任意のスクリプト名

プロジェクト名とスクリプト名

【1-4】データベースからデータ抽出

入力元データが格納されているテーブルの読み取り設定を行います。

ツールパレットから[データベース]-[PostgreSQL]-[テーブル読み取り]を、スクリプトキャンバスにドラッグ&ドロップします。 ツールパレット

「テーブル読み取り処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[接続先]:グローバルリソースで設定済みの接続先
[テーブル名]:データ読み取り対象テーブル

テーブル読み取り処理プロパティ

[完了]を押下すると、プロパティ設定ダイアログが閉じ、「テーブル読み取り処理」アイコンがキャンパスに配置されます。

テーブル読み取り処理アイコン

【1-5】CSVファイルへのデータ書き込み

読み取ったデータを書き込むCSVファイルの設定を行います。
ツールパレットから[ファイル]-[CSV]-[CSVファイル書き込み]を、スクリプトキャンバスにドラッグ&ドロップします。
ツールパレット

「CSVファイル書き込み処理」プロパティ設定ダイアログで、以下の通り設定を行います。
◎必須設定
[名前]:コンポーネント名
[入力データ]:入力データとなるコンポーネント名
[ファイル]:書き込み対象ファイルの格納先フォルダ/ファイル

CSVファイル書き込み処理プロパティ設定ダイアログ

◎書き込み設定
[エンコード]:書き込み対象ファイルのエンコード
[改行コード]:書き込み対象ファイルの改行コード
[上書き]:指定したファイルが存在した場合、ファイルを上書きするか選択
[追加書き込み]:ファイルの末尾に追加・上書きするか選択
書き込み設定
[ファイルの一行目から列名を読み取り]をクリックします。
ファイルの一行目から列名を読み取り
ファイルの選択画面が表示されるため、今回のデータ入力先CSVファイルである「/data/work/test/商品読み取り.csv」を選択し、[表示キャラセット]をUTF-8に変更します。
ファイルの中身が正常なことを確認し、[開く]を押下します。
ファイルの中身が正常なことを確認し、[開く]を押下
列一覧に列名がセットされます。列一覧に列名がセット
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「CSVファイル書き込み処理」アイコンがキャンパスに配置されるので、「テーブル読み取り処理」アイコンとの間にプロセスフローとデータフローを引きます。
※マッピングの追加ダイアログが表示されるので、「はい」を押下しマッピングを追加します。
マッピングを追加

マッピングリンク、マッピング定義は以下の通りです。
マッピングリンク、マッピング定義

【1-6】例外監視の設定

作成した処理を監視するため、例外監視の設定を行います。
ツールパレットから[基本]-[フロー]-[例外監視]を、スクリプトキャンバスにドラッグ&ドロップします。ツールパレット
[例外監視開始]アイコン(①)、[監視処理]アイコン(②)、[例外処理]アイコン(③)、[例外監視終了] アイコン(④)がキャンバスに配置されます。例外監視開始アイコン
前手順で作成したDB-CSV連携を[監視処理]アイコン(②)から[例外監視終了]アイコン(④)の間に配置し、プロセスフローを引きます。これにより、DB-CSV連携をスクリプト正常終了時に実行される処理として設定することができます。DB-CSV連携
次に、「例外処理」(③)プロパティ設定ダイアログで、例外監視対象のアイコンを設定します。

◎必須設定
[チェック対象]:例外を監視したいコンポーネントを選択 必須設定

【1-7】例外発生時の処理の作成

例外(エラー)が起こった場合に実行される処理を作成します。今回は例外処理として、以下の2つの処理を実行させます。

  • アプリケーションログでエラーを出力
  • エラーメールを送信

まず初めに、アプリケーションログの出力です。
アプリケーションログを出力するためには、出力先の設定から行います。
Studio のスタートメニューから、「コントロールパネル」-「アプリケーションログ出力先設定」を選択します。image11

プリケーションログ出力先設定

[新しいアプリケーションログ出力先の作成]を押下すると、「ログ出力先の種類の選択」プロパティ設定ダイアログが表示されるので、設定を行い[次へ]を押下します。

ログ出力先の種類の選択

◎設定内容
[ログ出力先の種類]:アプリケーションログ出力先の種類
ログ出力先の種類

次に、「アプリケーションログ出力先設定」プロパティ設定ダイアログが表示されるので、設定を行い[OK]を押下します。

◎基本設定
[ログ出力先設定名]:アプリケーションログ出力先名
[ファイルパス]:ログファイルのパス

アプリケーションログ出力先設定

◎レイアウト
[%d{HH:mm:ss}]:時刻
[%m]:メッセージ
レイアウト レイアウト

作成した出力先設定が表示されていることを確認します。
以上でアプリケーションログの出力先設定は終わりです。


次に、ログの内容を設定します。
今回出力したいログの内容は以下の通りです。(メールの内容も同様です。)
(赤枠内の項目は固定値、青枠内の項目はコンポーネント変数を使用)

ログ出力内容

まず、コンポーネント変数で設定する項目についてです。
コンポーネント変数とは、各コンポーネントで取得できる変数です。
この項目の設定値は、「ログ出力処理」アイコン内の[メッセージ]にて後ほど設定します。

次に、固定値で設定する項目についてです。
この項目の設定値は、マッピング内にあるスクリプト変数で設定します。
ツールパレットから[基本]-[変換]-[マッピング]を、スクリプトキャンバスにドラッグ&ドロップします。 ツールパレット

配置された「mapping」アイコンをダブルクリックし、Mapperエディタを開き、スクリプト変数に、固定値で表示させるログ項目の値を定義します。 Mapperエディタ

これでスクリプト変数内に値が定義されました。


最後に、スクリプト内で「ログ出力処理」アイコンの設定を行います。
ツールパレットから[基本]-[処理]-[ログ出力]を、スクリプトキャンバスにドラッグ&ドロップします。
ツールパレット

「ログ出力処理」プロパティ設定ダイアログで、以下の通り設定を行います。

◎必須設定
[名前]:コンポーネント名
[ログ出力先]:設定したログの出力先
[ログレベル]:出力したいログのレベル(基準)
[メッセージ]:出力したいログのメッセージ
ログ出力処理プロパティ設定ダイアログ
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「エラーログ出力処理」アイコンがキャンバスに配置されます。
エラーログ出力処理 以上で、アプリケーションログの出力設定は終わりです。


次にエラーメールの送信設定を行います。
ツールパレットから[ネットワーク]-[メール]-[1通メール送信]を、スクリプトキャンバスにドラッグ&ドロップします。
ツールパレット

「1通メール送信処理」プロパティ設定ダイアログで、以下の通り設定を行います。

◎必須設定
[名前]:コンポーネント名
[接続先]:グローバルリソースで設定済みの接続先
[送信元メールアドレス]:送信する側のメールアドレス
[送信先]:受信する側のメールアドレス
1通メール送信処理プロパティ設定ダイアログ

◎メッセージ
[件名]:送信するメールの件名
[本文]:送信するメールの本文
1通メール送信処理プロパティ

[完了]を押下すると、プロパティ設定ダイアログが閉じ、「エラーメール送信処理」アイコンがキャンパスに配置されます。
エラーメール送信処理
以上で、エラーメールの送信設定は終わりです。


【1-8】例外通知の設定

例外発生時、例外を通知し処理が異常終了するよう設定します。

ツールパレットから[基本]-[処理]-[例外通知]を、スクリプトキャンバスにドラッグ&ドロップします。 ツールパレット

「例外通知処理」プロパティ設定ダイアログで、以下の通り設定を行います。

◎必須設定
[名前]:コンポーネント名
[メッセージ]:実行時に出力されるユーザ定義のエラーメッセージ
例外通知処理プロパティ設定ダイアログ
[完了]を押下すると、プロパティ設定ダイアログが閉じ、「例外通知処理」アイコンがキャンパスに配置されます。
例外通知処理

【1-9】スクリプトの完成

設定した各アイコンを、処理の順番にプロセスフローで繋ぎます。 処理の順番にプロセスフローで繋ぐ
[デバッグ実行の開始/再開]を押下して処理が正常終了するケースの確認をします。
(異常終了するケースについては、「2. トラブルシューティング」にて実行します。)
デバッグ実行の開始/再開 デバッグ実行の開始/再開
データ抽出が正常に行われたかどうか、出力先CSVファイルを確認します。
Studioのスタートメニューから、「エクスプローラ」を選択します。
エクスプローラ

「/data/work/test/商品読み取り.csv」に、抽出したデータが書き込まれているかどうか確認します。
/data/work/test/商品読み取り.csv

抽出データが正常に書き込まれていることを確認しました。

以上が、データベースのテーブルに格納されているデータを読み取り、CSVファイルに出力するという処理を、「例外監視」コンポーネントを使って監視し、エラー発生時に例外処理を実行するという連携の作成手順になります。

2. トラブルシューティング

トラブルシューティングとは、システムやプログラムに発生した問題や異常を解決するためのプロセスです。問題の原因を見つけ出し、正常な動作を回復させることを目指します。また実際に出力されたエラーやログをトラブルシューティングに使用することで、問題や原因が見つけやすくなります。

今回は「1. エラーハンドリング」にて作成した例外処理のスクリプトを使って例外処理を発生させ、出力されたアプリケーションログとエラーメールを用いて、エラーが発生した箇所とその原因を探っていきます。

トラブルシューティングの流れは以下の通りです。

発生
  • スクリプトを実行させると、実行途中でエラー発生
検知
  • 例外検知により、例外処理が実行(アプリケーションログ出力・エラーメール送信)
確認
  • 出力ログと受信メールを確認し、エラーが発生した箇所と原因に当たりを付ける
判断
  • XMLログを確認し、エラー箇所・原因を確定する

①エラー発生

スクリプトを実行したところ、エラーが発生しました。
エラー発生

②アプリケーションログ・エラーメールの出力

例外処理により、赤枠部分の処理が実行されます。
アプリケーションログ・エラーメールの出力

③アプリケーションログ・エラーメールの確認

出力されたアプリケーションログとエラーメールの内容を確認し、エラーが発生した箇所、原因にあたりをつけます。

アプリケーションログ

エラーメールの確認

エラーメールの確認

以上の内容から、「テーブル読み取り処理」アイコンでエラーが発生し、原因はデータベースへの接続の失敗だという当たりが付きました。

④XMLログの確認

次に出力されたXMLログを確認し、エラー該当箇所を判断します。

エラーメールの確認

XMLログのエラー部分と、先ほど確認したアプリケーションログ、エラーメールから「テーブル読み取り処理」アイコンでエラーが発生しており、データベースへの接続に失敗したことが原因だということが確定できました。

以上が、出力されたアプリケーションログとエラーメールを用いたトラブルシューティングの実施方法になります。

| エラーハンドリングとトラブルシューティング | ログの種類の紹介や各種設定方法

お問い合わせ

  • 資料のご請求
  • 製品Q&A
  • 詳細説明希望
  • 製品デモ希望
  • 製品価格
  • その他

何でもお気軽にご質問ください

top