こんにちは! CData リードエンジニアの杉本です。
今回はサポートへ問い合わせを頂いた際によくご案内するCData Driverのログ出力方法とログにどんな情報が出力されるのか? といった情報をお伝えしたいと思います。
なお、API ServerとData Syncはまた別なので、それは次の機会に。
CData Driverのログはどんな情報が出力されるの?
まず最初に CData Driverのログにはどのような情報が出力されるのか? を抑えておきたいと思います。
1.CData Driverのバージョン・接続プロパティ
私達開発やサポートチームがまず最初に確認するのがこの部分です。Driverの種類やバージョン・ビルドNo、またCData Driverの特徴でもある様々な機能を制御するための接続プロパティです。
ここから認証方法やファイアウォール、プロキシなどの利用状況を確認し、接続できないなどの場合における切り分けを行います。
例えば、ADO.NET EntityFramework や BI ツールなどで UI ベースでCData Driverを扱った場合、どのようなSQLが生成されているか利用ユーザーにはひと目でわからないことが多々あります。
また、スキーマ情報を取得するクエリやキャッシュデータにアクセスしているかどうかも把握することができます。 これらSQLから再現性が取れるかどうか、不正なクエリ、Driverの仕様上実行できないクエリなどが無いかどうか探ることが可能です。
通常であればDBにアクセスすることがDriverの基本的な機能ですが、CData DriverはDynamics や SalesForceといったクラウドサービスに対して、Web API経由でアクセスを行うDriverが数多く存在します。
Driver内部では発行されたSQLを解析して、HTTPリクエストを組み立てているので
4.OAuthなどの認証処理プロセスやSSLネゴシエーション
OAuth認証であれば、各認証フロー時に生成されているURLやリッスンしているポートNoを確認できますので、度のタイミングで認証が失敗しているか、Callbackには何が返ってきているか? などを確認することができます。
上記以外にも様々なデータが確認できますので、なにかエラーが発生した場合は一度Logを出力して、想定されたWeb APIリクエストや認証プロセスが実施されているかどうか確かめてみてください。
もちろん、そのままサポートチームに送付してもらえれば、スムーズに問題の切り分け、確認が可能です。
各テクノロジー(ODBC、JDBC、Excel、ADO.NET)ごとのログ出力プロパティの設定方法
CData Driverからログを出力するには「Logfile」と「Verbostiy」という2つのプロパティを設定する必要があります。
詳しい説明は後述しますが、以下のようにログファイルの出力先、出力ファイル名、ログレベルを指定するプロパティです。
プロパティ名 | 値 | 備考 |
---|---|---|
Logfile | 例)C:\LogFolder\20181128.log | ログの出力先ファイルパスを指定します。対象フォルダは予め作成しておきます。 |
Verbosity | 例)5 | ログの出力レベルを指定します。 |
それぞれのDriverで大きく違いはありませんが、一つづつ簡単に見ていきたいと思います。
ODBC Driver の場合の設定方法
ODBC Driver は ODBC データソースアドミニストレーターから指定することが可能です。
任意のデータソース(User DSNまたはSystem DSN)を選択し、Configurationをクリックすると、最初に接続情報を入力した画面が出てくると思いますので、そこから各「Logfile」と「Verbostiy」のパラメータを指定してください。
JDBC Driver の場合の設定方法
JDBC Driverは接続文字列で指定するので、あまり難しいことはありません。
任意のソースコードの接続文字列、もしくは接続文字列を格納しているセッティングファイル等に直接「Logfile=C:\LogFolder\20181128.log;Verbosity=5;」とプロパティを追加するだけです。
ADO.NET Provider の場合の設定方法
ADO.NET の場合、サーバーエクスプローラーからであれば、「接続の変更」画面を表示して、
「Logfile」と「Verbostiy」のパラメータを指定します。
C#.NET、EntityFramework等で使っている場合は、app.config に
Excel-Addin の場合の設定方法
Excel-Addinの場合は、普段よく利用するであろうデータ選択画面から、接続名の編集をクリックし
接続設定画面で「Logfile」と「Verbostiy」のパラメータを指定すればOKです。
各パラメータについて
「Logfile」
「Logfile」には任意のLogファイル出力個所を指定します。
http://cdn.cdata.com/help/GFD/ado/RSBSalesforce_p_Logfile.htm
例えばCドライブ配下のLogフォルダに出力したい場合は以下のように指定します。
入力例:「C:\Log\CDataLogFile.log」
「Verbostiy」
「Verbostiy」には任意のLog出力レベルを指定します。
http://cdn.cdata.com/help/GFD/ado/RSBSalesforce_p_Verbosity.htm
デフォルト値は「1」となっており、
もし障害やエラーが発生し、原因の切り分けを行いたい、サポートへ問い合わせたい場合は「5」
毎日実行するプログラムでログを取りたい場合は、「1」か「2」を指定するのが望ましいです。
それぞれの設定値において出力される内容は以下の内容となります。
1:Verbosity を1に設定すると、クエリ、返された行数、実行開始とかかった時間、エラーが記録されます。
2:Verbosity を2に設定すると、Verbosity 1に含まれるすべて、キャッシュクエリ、 およびHTTP ヘッダーが記録されます。
3:Verbosity を3に設定すると、2 に加えてHTTP 要求の本文が記録されます。
4:Verbosity を4に設定すると、3 に加えてデータソースとのトランスポートレベルの通信が記録されます。これには、SSL ネゴシエーションが含まれます。
5:Verbosity を5に設定すると、データソースとのやり取りおよび問題のトラブルシューティングに役立つ追加情報も記録されます。これには、インターフェースコマンドが含まれます。通常の実行では、Verbosity を2以上に設定しないでください。高い詳細レベルでは、大量のデータが記録されて、実行に遅れが生じる恐れがあります。
よくある質問
Q1. 接続文字列のパスワードやOAuthシークレットなどは出力されるの?
パスワードやOAuthシークレットなどの文字列は入力画面と同じように伏せ字になりますので、安心してください。
HTTPリクエストのログ上からも隠された状態で出力されます。
Q2. ログローテションしたい場合はどうすればいいの?
「Max Log File Size」というプロパティを指定することで、設定値の容量に達した際に自動的に新しいログが同じフォルダ内に作成され、日にちと時間が末尾に追加されます。
http://cdn.cdata.com/help/GMD/jdbc/RSBDynamicsCRM_p_MaxLogFileSize.htm
おわりに
外部のWeb APIやサービスに依存するため、CData Driverの切り分け方法は他のDriverなどとは異なる点が多いです。そのため、ログに出力される情報は問題の原因特定のためにかなり重宝するものとなっています。
日々のログ出力で運用を監視する場合も役立つものではありますが、CData テクニカルサポートへご依頼いただく際は、是非ログファイルも一緒にご連絡いただけると、迅速な対応が可能になりますので、是非ご協力をお願いできればと思います。