CData Software は、世界中で知られた標準規格のデータドライバーを提供しています。いわゆるエレベータートークで30秒で CData Software の製品を説明すると、いろいろな反応や質問をいただきます。「Selesforce にはデータベースなんてないから、取ってこられないでしょ?」「まさかクラウドサービスのDBをハッキングして変な方法で取りに行っているのでは?」「なんでSQLでAPI にアクセスできるの?」「通信のセキュリティは大丈夫なの?」などなど。
そこで、この記事では、CData のログを解析して、CData がどうやってSaaSデータソースのデータと通信しているかを見てみましょう。ログを見ることで、ユーザーが正しい方法でデータソースに接続してくることが分かります。ログによって、開発者が接続の問題が発生したときに、トラブルの原因を探ることも用意です。システムインテグレータの方は ログを一度見ておくことで、エンドユーザーからのさまざまな質問に答えることができます。
- データソースからドライバー側に送られてきている実際のデータはなに?
- パフォーマンスに関連する接続プロパティ、たとえば、ページサイズやタイムアウト設定、最適なものに設定されているか?
- アプリケーションン側からなんのSQL が投げられているのか?
- 一定の時間にどれだけの数の接続を開いたのか?
- データソースとの接続にはどれだけの時間がかかったのか? データ処理にはどれくらいの時間がかかったのか?
#ログの設定
使いたいドライバーをインストールします(こちらから30日の無償評価版が利用できます)。
データソース毎に必要な接続設定を行います。詳細はドキュメントの接続設定項を参照してください。
接続文字列や接続URL において、ログファイルのプロパティにファイルパス(例: C:\Users\public\SalesforceLog.txt)を設定します、次にVerbosity (ログの粒度)を1~5で設定します。
#ログの説明
実際にログからどアプリケーション(今回はExcel)、ドライバー、データソース(今回はSalesforce)との間で起こっていることを読み解きましょう。
下には、CData Software のSalesforce Driver のログが示されています。いくつかの項目ではセキュリティの関係上 データを省略・削除しています。
- Salesforce との接続がオープンします。
- 次にドライバー側から指定されたアカウントへの接続文字列が送られます。そこにはUser, Password, Security Token などが渡されています。
- コネクションが確立され、取引先(Account)テーブルからデータを取得するSQLが実行されています。
- 74項目のSQLが4msで発行されたと記録されています。
- SalesforceへのRequestはSOAP通信にてPOSTメソッドで発行されていることが確認できます。
- その際にSSL証明書が受け入れられたことも確認できます。
- Responseとして正常な[HTTP/1.1 200 OK]を受け取っています。
- その後にRequest時とResponse時のHTTP Headerの情報が記録されています。
- 最終的には接続がクローズされたことが確認できます。
2016-11-29T15:43:53.559+09:00 5 [Connection: 26] _persist_oauthaccesstoken: [], _persist_oauthaccesstokensecret: [*****], _persist_token_timestamp: [], _persist_oauthexpiresin: [], _persist_oauthrefreshtoken: []
2016-11-29T15:43:53.560+09:00 1 [Connection: 26] Opened Salesforce connection. Version: [15.0.6039.0]. Edition: [ Excel Add-In ].
2016-11-29T15:43:53.560+09:00 1 [Connection: 26] Connection String: _userconnection="26";allornone="False";autocache="False";cachelocation="***";cachemetadata="False";callbackurl="http://localhost:33333";catalog="CData";firewalltype="NONE";initiateoauth="getandrefresh";logfile="***";loginurl="https://login.salesforce.com/services/Soap/c/33.0";oauthsessionexpiresin="900";offline="False";password="*****";proxyautodetect="True";readonly="False";schema="Salesforce";securitytoken="***";sessiontimeout="10";sslclientcertsubject="*";timeout="60";user="***";usesandbox="False";verbosity="1".
2016-11-29T15:43:53.560+09:00 2 [Connection: 26] Executed query: [ SELECT * FROM [Account] LIMIT 10 ].
2016-11-29T15:43:53.561+09:00 5 [Connection: 26] Retrieved 74 cached columns of the table Account.
2016-11-29T15:43:53.564+09:00 4 [Connection: 26] Executed column schema query: [Account].Success: 74 results (4 ms)
2016-11-29T15:43:53.565+09:00 5 [Connection: 26] Retrieved 74 cached columns of the table Account.
2016-11-29T15:43:53.594+09:00 5 [Connection: 26] _persist_oauthaccesstoken: [], _persist_oauthaccesstokensecret: [*****], _persist_token_timestamp: [], _persist_oauthexpiresin: [], _persist_oauthrefreshtoken: []
2016-11-29T15:43:53.595+09:00 2 [Request] POST https://login.salesforce.com/services/Soap/c/33.0
2016-11-29T15:43:53.702+09:00 4 User Authorized SSL Cert: [TRUSTED] Server Cert: [LS0t...] Accepted: True
2016-11-29T15:43:53.901+09:00 2 [Response] HTTP/1.1 200 OK, 807 Bytes Transferred
2016-11-29T15:43:53.905+09:00 3 [Request]
[HTTP Headers]
HTTP Auth Scheme: 0
...
2016-11-29T15:43:53.905+09:00 3 [Response]
[HTTP Headers]
HTTP/1.1 200 OK
...
2016-11-29T15:43:53.965+09:00 5 [Connection: 26] _persist_oauthaccesstoken: [], _persist_oauthaccesstokensecret: [*****], _persist_token_timestamp: [], _persist_oauthexpiresin: [], _persist_oauthrefreshtoken: []
2016-11-29T15:43:53.965+09:00 5 [Connection: 26] Retrieved 74 cached columns of the table Account.
2016-11-29T15:43:53.967+09:00 2 [Request] POST https://ap.salesforce.com/services/Soap/c/33.0/00D10000000aTHc
2016-11-29T15:43:54.064+09:00 4 User Authorized SSL Cert: [] Server Cert: [LS0t...] Accepted: True
2016-11-29T15:43:54.185+09:00 2 [Response] HTTP/1.1 200 OK, 2565 Bytes Transferred
2016-11-29T15:43:54.185+09:00 3 [Request]
[HTTP Headers]
HTTP Auth Scheme: 0
...
2016-11-29T15:43:54.185+09:00 3 [Response]
[HTTP Headers]
HTTP/1.1 200 OK
...
2016-11-29T15:43:54.185+09:00 1 [Connection: 26] Executed query: [ SELECT * FROM [Account] LIMIT 10 ]. Success: 10 results ( 625 ) ms
2016-11-29T15:43:54.914+09:00 4 [Connection: 26] Executed sys_disconnect: Success: (2 ms)
2016-11-29T15:43:54.914+09:00 1 [Connection: 26] Closed Salesforce connection.
このように、CData Driverでは SaaS に対して正規のAPIを発行して、データのやり取りを行っていることを確認できました。