LoginSignup
6
2

More than 1 year has passed since last update.

Talend入門 (11) ~ロギング~

Last updated at Posted at 2021-11-09

全体の目的

Talendの超簡単なサンプルジョブを作成して,ETLジョブ開発に必要なスキルを習得することが目的です。

対象者

ETL / EAI技術者

環境

使用環境 バージョン
OS Windows10
Talend 7.3.1
PostgreSQL 14.0

サンプル一覧

以下の順番で習得していきます

# 内容
1 はじめてのTalend
2 ファイルI/O
3 データベースI/O
4 tMap
5 イテレータ
6 メタデータ
7 Context変数
8 Global Map
9 tHashInput/tHashOutput
10 エラーハンドリング
11 ロギング(今回)
12 子ジョブ(ジョブのネスト)
13-1 設定ファイル読み込みオリジナル版
13-2 設定ファイル読み込みコンポ版
14 tJava

サンプルコード(Talendプロジェクトデータ)

今回の目的

ロギングの方法について理解する。

ロギングとは

ロギングとはどんなエラーが起きたのか、どんな操作を行ったかなどのデータを時系列で記録し蓄積することです。

IT用語辞典でロギングについて調べると以下のように記述されています。

ロギングとは、起こった出来事についての情報などを一定の形式で時系列に記録・蓄積すること。そのように記録されたデータのことを「ログ」(log)という。
IT用語辞典 e-Words

talendのログ

talendには統計情報ログ、ユーザーログ、流量メーターの3種類のログがあります。それぞれ、特定のコンポーネントで値をキャッチし、その値をロギングします。

また、talendはログをコンソールやファイル、データベースに簡単に出力できます。

サンプルプログラム概要

それぞれサンプルプログラムを動かしながら使い方を見ていきましょう。

サンプル作成

今回はジョブをたくさん作るのでフォルダ上にジョブを作成します。
[Standard]を右クリックしてフォルダの作成
image.png
[ラベル]にlog_sampleと入力し[Finish]ボタンをクリックします。
image.png

tStatCatcherでロギング

リポジトリの[log_sample]を右クリックし[標準ジョブを作成]を選択します。
image.png
[名前]にtLogCatcherと入力し[Finish]ボタンをクリックします。
image.png
[tRowGenerator]と[tLogRow]を配置します。
image.png
[tRowGenerator]のスキーマ編集画面で+を1回クリックし1カラム定義します。

カラム
1列目 newColumn
項目名 設定内容 説明
生成する行数 3 テストデータを3行だけ作成します

image.png
[tRowGenerator_1]と[tLogRow_1]をロウでつなぎます。
[tLogRow_1]のモードはテーブル形式にしておきます。
image.png

[tStatCatcher]と[tLogRow]を配置します。
image.png
[tStatCatcher_1]と[tLogRow_2]をロウでつなぎます。
ロウでつない後、[tLogRow_2]の同期カラムをクリックしてモードはテーブル形式にしておきます。
image.png
実行してみましょう。
image.png
[tStatCatcher]はジョブプロセスメタデータをジョブレベルおよびコンポーネントレベルで収集し、ログデータを後続のコンポーネントに転送します。
[tLogRow_2]で表示した値が[tStatCatcher_1]で取得したログデータとなります。

[tLogRow]だとコンソールにログ結果を表示することになりますが[tFileOutputDelimited]や[tPostgresqlOutput]を使用することでログデータをファイルやデータベースに保存することができます。

tLogCatcherでロギング

[tLogCatcher]はJava例外、[tDie]、[tWarn]で発生したログをキャッチするることができます。[tLogCatcher]の使い方は講義10のエラーハンドリングで詳しく説明しておりますので、今回は省略いたします。

こちらも[tLogCatcher]の後続を[tFileOutputDelimited]や[tPostgresqlOutput]を使用することでログデータをファイルやデータベースに保存することができます。

tFlowMeterCatcherでロギング

リポジトリの[log_sample]を右クリックし[標準ジョブを作成]を選択します。
[名前]にtFlowMeterCatcherと入力し[Finish]ボタンをクリックします。
image.png

[tRowGenerator]と[tFlowMeter]、[tLogRow]x2、[tFlowMeterCatcher]を配置します。
image.png
[tRowGenerator_1]のスキーマ編集画面で+を1回クリックし1カラム定義します。

カラム
1列目 newColumn
項目名 設定内容 説明
生成する行数 3 テストデータを3行だけ作成します

image.png

[tRowGenerator_1]と[tFlowMeter_1]、[tFlowMeter_1]と[tLogRow_1]、[tFlowMeterCatcher_1]と[tLogRow_2]をロウでつなぎます。
[tLogRow_1]と[tLogRow_2]のモードはテーブル形式にしておきます。
実行します。
image.png

[tFlowMeter]は定義されたフローで処理された行数をカウントする機能です。[tFlowMeterCatcher]は[tFlowMeter]のログをキャッチするときに使用します。[tLogRow_2]のカラム[count]を見ると3となっており、正しく行数をカウントしていることがわかります。

こちらも[tFlowMeterCatcher]の後続を[tFileOutputDelimited]や[tPostgresqlOutput]を使用することでログデータをファイルやデータベースに保存することができます。

発展

これまでに[tStatCatcher]、[tLogCatcher]、[tFlowMeterCatcher]の3つのコンポーネントを使用してロギングできることを学んできました。そしてさらに、talendにはより簡単にロギングできる機能があります。

統計&ログでロギング

リポジトリの[log_sample]を右クリックし[標準ジョブを作成]を選択します。
[名前]にjoblogと入力し[Finish]ボタンをクリックします。
image.png

[tRowGenerator]x2、[tFlowMeter]、[tLowRog]、[tPostgresqlOutput]、[tDie]を配置します。
image.png
[tRowGenerator_1]、[tRowGenerator_2]のスキーマ編集画面で+を1回クリックし1カラム定義します。

カラム
1列目 newColumn
項目名 設定内容 説明
生成する行数 3 テストデータを3行だけ作成します

[tRowGenerator_1]と[tFlowMeter_1]、[tFlowMeter_1]と[tLogRow_1]、[tRowGenerator_2]と[tDBOutput_1]をロウでつなぎます。
[tRowGenerator_1]と[tRowGenerator_2]をOnSubjobk、[tRowGenerator_2]と[tDie]をOnSubjobErrorでつなぎます。
image.png

[tLogRow_1]のモードはテーブル形式にしておきます。
[tDBOutput_1]でエラーが出てほしいのでここでは何も設定しません。
image.png

コンソールに出力

まずはログをコンソールに出力してみます。
[ジョブ]から[統計&ログ]をクリックし、以下のように設定します。

項目名 設定内容
プロジェクト設定の使用 チェックをはずす
統計情報ログの使用 チェックを付ける
ユーザーログの使用 チェックを付ける
流量メータの使用 チェックを付ける
コンソールに出力 チェックを付ける

image.png

実行してみましょう。
image.png
image.png
長くて少しわかりにくいですが
以下のログは統計情報ログによるジョブがスタートしたときのログになります。

2021-11-08 11:54:29|UBZuxI|UBZuxI|UBZuxI|14356|LOCAL_PROJECT|joblog|_byFY4EA6EeycNM2CtAxbOA|0.1|Default||begin||

以下のログは流量メータによる定義されたフローで処理された行数をカウントしたログになります。

2021-11-08 11:54:29|UBZuxI|UBZuxI|UBZuxI|14356|LOCAL_PROJECT|joblog|_byFY4EA6EeycNM2CtAxbOA|0.1|Default|tFlowMeter_1|row1|3||

以下のログはユーザーログによる終了コードのログになります。

2021-11-08 11:54:29|UBZuxI|UBZuxI|UBZuxI|LOCAL_PROJECT|joblog|Default|5|tDie|tDie_1|the end is near|4

以下のログはユーザーログによるPostgreSQLでのエラーについてのログになります。

2021-11-08 11:54:29|UBZuxI|UBZuxI|UBZuxI|LOCAL_PROJECT|joblog|Default|6|Java Exception|tDBOutput_1|org.postgresql.util.PSQLException:FATAL: 開始パケットで指定されたPostgreSQLユーザー名は存在しません(pgjdbc: server-encoding として windows-31j  を自動検出しました、メッセージが読めない場合はデータベースログおよび host, port, dbname, user, password, pg_dba.conf を確認してください)|1

以下のログは統計情報ログによるジョブが終了したときのログになります。

2021-11-08 11:54:29|UBZuxI|UBZuxI|UBZuxI|14356|LOCAL_PROJECT|joblog|_byFY4EA6EeycNM2CtAxbOA|0.1|Default||end|failure|283

ファイルに出力

続いてログをファイルに出力してみます。
[ジョブ]から[統計&ログ]をクリックし、以下のように設定します。

項目名 設定内容
プロジェクト設定の使用 チェックをはずす
統計情報ログの使用 チェックを付ける
ユーザーログの使用 チェックを付ける
流量メータの使用 チェックを付ける
ファイルに出力 チェックを付ける
ファイルパス "C:/talend/workspace/joblog"
統計ファイル名 "stats_file.txt"
ユーザーログファイル名 "logs_file.txt"
メーターファイル名 "meter_file.txt"
エンコーディング UTF-8

image.png

実行してみましょう。
image.png

C:/talend/workspace/joblogを開くとドキュメントファイルが3つ作成されています。
image.png

logs_file.txt
2021-11-08 13:18:18;9lkqSn;9lkqSn;9lkqSn;LOCAL_PROJECT;joblog;Default;5;tDie;tDie_1;the end is near;4
2021-11-08 13:18:18;9lkqSn;9lkqSn;9lkqSn;LOCAL_PROJECT;joblog;Default;6;Java Exception;tDBOutput_1;org.postgresql.util.PSQLException:FATAL: 開始パケットで指定されたPostgreSQLユーザー名は存在しません(pgjdbc: server-encoding として windows-31j  を自動検出しました、メッセージが読めない場合はデータベースログおよび host, port, dbname, user, password, pg_dba.conf を確認してください);1
meter_file.txt
2021-11-08 13:18:18;9lkqSn;9lkqSn;9lkqSn;16300;LOCAL_PROJECT;joblog;_byFY4EA6EeycNM2CtAxbOA;0.1;Default;tFlowMeter_1;row1;3;;
stats_file.txt
2021-11-08 13:18:18;9lkqSn;9lkqSn;9lkqSn;16300;LOCAL_PROJECT;joblog;_byFY4EA6EeycNM2CtAxbOA;0.1;Default;;begin;;
2021-11-08 13:18:18;9lkqSn;9lkqSn;9lkqSn;16300;LOCAL_PROJECT;joblog;_byFY4EA6EeycNM2CtAxbOA;0.1;Default;;end;failure;345

何回か実行してからファイルの中身を確認するとログが溜まっていく様子が見れると思います。

データベースに出力

続いてログをデータベースに出力してみます。
[ジョブ]から[統計&ログ]をクリックし、以下のように設定します。

項目名 設定内容
プロジェクト設定の使用 チェックをはずす
統計情報ログの使用 チェックを付ける
ユーザーログの使用 チェックを付ける
流量メータの使用 チェックを付ける
ファイルに出力 チェックを付ける
プロパティタイプからパスワード DBの設定を記述する
統計テーブル "stats_table"
ユーザーログテーブル "logs_table"
メーターテーブル "meter_table"

image.png

実行してみましょう。
image.png

データベースには以下のように登録されます。

postgres=# select * from stats_table;
       moment        |  pid   | father_pid | root_pid | system_pid |    project    |  job   |    job_repository_id    | job_version | context | origin | message_type | message | duration
---------------------+--------+------------+----------+------------+---------------+--------+-------------------------+-------------+---------+--------+--------------+---------+----------
 2021-11-08 13:38:22 | 7F7tW4 | 7F7tW4     | 7F7tW4   |      15968 | LOCAL_PROJECT | joblog | _byFY4EA6EeycNM2CtAxbOA | 0.1         | Default |        | begin        |         |
 2021-11-08 13:38:23 | 7F7tW4 | 7F7tW4     | 7F7tW4   |      15968 | LOCAL_PROJECT | joblog | _byFY4EA6EeycNM2CtAxbOA | 0.1         | Default |        | end          | failure |      382
(2 行)


postgres=# select * from logs_table;
       moment        |  pid   | root_pid | father_pid |    project    |  job   | context | priority |      type      |   origin    |                                                                                                                                         message                                                                                                                                          | code
---------------------+--------+----------+------------+---------------+--------+---------+----------+----------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------
 2021-11-08 13:38:23 | 7F7tW4 | 7F7tW4   | 7F7tW4     | LOCAL_PROJECT | joblog | Default |        5 | tDie           | tDie_1      | the end is near                                                                                                                                                                                                                                                                          |    4
 2021-11-08 13:38:23 | 7F7tW4 | 7F7tW4   | 7F7tW4     | LOCAL_PROJECT | joblog | Default |        6 | Java Exception | tDBOutput_1 | org.postgresql.util.PSQLException:FATAL: 開始パケットで指定されたPostgreSQLユーザー名は存在しません(pgjdbc: server-encoding として windows-31j  を自動検出しました、メッセージが読めない場合はデータベースログおよび host, port, dbname, user, password, pg_dba.conf を確認してください) |    1
(2 行)


postgres=# select * from meter_table;
       moment        |  pid   | father_pid | root_pid | system_pid |    project    |  job   |    job_repository_id    | job_version | context |    origin    | label | count | reference | thresholds
---------------------+--------+------------+----------+------------+---------------+--------+-------------------------+-------------+---------+--------------+-------+-------+-----------+------------
 2021-11-08 13:38:23 | 7F7tW4 | 7F7tW4     | 7F7tW4   |      15968 | LOCAL_PROJECT | joblog | _byFY4EA6EeycNM2CtAxbOA | 0.1         | Default | tFlowMeter_1 | row1  |     3 |           |
(1 行)

まとめ

今回はロギングの方法をコンポーネントを配置する場合と[統計&ログ]から設定する場合を試しました。
あらたに利用したコンポーネントと用途をおさらいしておきます。

  • tStatCatcher
    • ジョブの開始と終了をキャッチするコンポーネント
  • tFlowMeter
    • 定義されたフローで処理された行数をカウントするコンポーネント
  • tFlowMeterCatcher
    • tFlowMeterの結果をキャッチするコンポーネント

毎度のことですが、ほんのさわりの部分だけを解説していますのでぜひここから深掘りしてみてください。

次回以降

次回は子ジョブをやっていきます。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2