クロール ログの出力方法
こんにちは。
SharePoint サポートチームのくらたです。
今回は「クロール ログの出力方法」についての紹介したいと思います。お客様から「クロール ログは画面で見ることは出来るが、ファイルなどに一覧で出力することが出来ないんですか?」とご質問を頂くことがあります。
クロール ログとは以下のようにクロールの結果を記載したログになりますが、MOSS 2007 では、UI 上からは確認出来るものの、ファイルなどにエクスポートする機能は搭載しておりません。そこで、今回は SQL サーバー データベース内のテーブルから、クロールログと同様の内容を確認するという代替案についてご説明いたします。(SQL サーバーだとテーブルの内容はファイルに出力できますよね。)
では、クロール ログの内容を把握するために、具体的に SQL サーバーのどのテーブルを参照すれば良いのかを見ていきましょう。
クロールの状況は、検索データベース (既定では SharedService1_Search_DB) の以下の 2 つのテーブルを参照することにより、確認できます。
1) MSSCrawlURL テーブル
クロール ログと同等の情報が記録されています。
2) MSSCrawlHistory テーブル
クロール 履歴の情報が記録されています。
テーブルの詳細は以下になります。
1) MSSCrawlURL テーブル
MSSCrawlURL テーブルには、とても多くの列が存在しますが、具体的に参照して頂きたい列は限られてます。くらたの経験上、以下の4 つの列を参照して頂ければ概ねクロール ログと同様の状況を把握することが可能です。
列名 |
内容 |
DisplayURL |
アイテムの URLを表します。 |
ErrorID |
エラー内容の詳細を表します。エラー メッセージの詳細は、MSSCrawlErrorList テーブルに記載されています。 |
ErrorLevel |
エラーの種類を表します。 ErrorLevel = 0 の場合 : 成功 ErrorLevel = 1 の場合 : 警告 ErrorLevel = 2 の場合 : エラー |
LastTouchStart |
クロールした時刻を表します。 |
例えば、クロールが警告になった URL を確認する場合は、以下の SQL 文を実行します。
SELECT [DisplayURL],[ErrorID],[ErrorLevel],[LastTouchStart] FROM [< 検索データベース名>].[dbo].[MSSCrawlURL] where ErrorLevel = 1 |
くらたの検証環境で確認したところ、以下のような結果が返ってきました。
上記より、https://kokurata165324x/searchcenter が、警告 (ErrorID = 4) により失敗していることが確認出来ます。
エラー内容の詳細は、MSSCrawlErrorList テーブルから確認することが出来、具体的には以下のような SQL 文を実行することで、確認することが可能です。
SELECT * FROM [< 検索データベース名>].[dbo].[MSSCrawlErrorList] where ErrorID = <ErrorID> |
では、実際に実行してみましょう。
上記のように、ErrorID = 4 は、“この URL のコンテンツはインデックス付けしない属性を持つため、サーバーによって除外されています。” という警告メッセージであることが確認できます。
実際のクロール ログを見てもやはり警告が出ていました。。。
今回はエラーについての切り分けが目的ではないので、エラー内容についてはふれませんが、このようにしてクロールログの内容を SQL データベースから確認することが可能です。
なお、上記の SQL を別々に実行するのも大変ですので、以下の SQL 文を使用し、INNER JOIN で MSSCrawlErrorList テーブルと MSSCrawlURL テーブルと連結して、表示させるとより便利ですね。
SELECT MSSCrawlURL.DisplayURL, MSSCrawlURL.ErrorID, MSSCrawlURL.ErrorLevel, MSSCrawlURL.LastTouchStart,MSSCrawlErrorList.ErrorMsg FROM [< 検索データベース名>].[dbo].[MSSCrawlErrorList] INNER JOIN [< 検索データベース名>].[dbo].[MSSCrawlURL] ON MSSCrawlErrorList.ErrorID = MSSCrawlURL.ErrorID Where MSSCrawlErrorList.ErrorLevel = <ErrorLevel> |
実際に実行し、警告のクロール (ErrorLevel = 1) を表示させてみると、以下のようになります。
2) MSSCrawlHistory テーブル
MSSCrawlHistory テーブルを参照することにより、クロール履歴を確認することが可能です。詳細なクロール履歴は、UI 上から把握することは出来ないため、SQL データベースを参照することは非常に有効な手段になります。
MSSCrawlHistory テーブルには、以下の列が存在します。
説明 |
内容 |
CrawlID |
クロールごとに内部的保持する一意の識別子を表します。 |
ProjectID |
プロジェクトの種類を表します。 ProjectID = 1 の場合 : Portal Content (コンテンツのクロール) ProjectID = 2 の場合 : Anchor Project (リンク関連の処理) |
CrawlType |
クロールの種類を表します。 CrawlType = 1 の場合 : フル クロール CrawlType = 2 の場合 : 増分 クロール CrawlType = 6 の場合 : 削除 クロール ※後述の「削除クロールって何? 」をご参照ください。 |
RequestTime |
リクエスト時刻 |
Status |
現在の状態を表します。 Status = 1 の場合 : 初期化 Status = 2 の場合 : 開始アドレスが初期化されています Status = 4 の場合 : 開始 Status = 5 の場合 : エラー Status = 11 の場合 : 完了 Status = 9 の場合 : 一時停止 Status = 12 の場合 : 停止 |
StartTime |
開始時刻 |
EndTime |
終了時刻 |
SuccessCount |
成功したアイテム数 |
ErrorCount |
エラーになったアイテム数 |
WarningCount |
警告になったアイテム数 |
実際に以下の SQL 文により、MSSCrawlHistory テーブルの中身を参照してみましょう。
上記のように、MSSCrawlHistory テーブルを参照することにより、クロール 履歴を参照できます。
削除クロールって何?
----------------------
削除クロールとは、以下の状況などに実行される処理のことです。
- コンテンツ ソースを削除した場合
- コンテンツ ソースの開始アドレスが削除された場合
くらたの検証環境で、具体的に以下のように、開始アドレスを削除してみると・・・。
削除クロールが実行されたことが確認できます。
さらに、クロール ログには以下のように記載されています。
今回は、検索データベースに保存されたクロール結果の情報について解説いたしましたが、いかがでしょうか。SQL サーバーを直接確認する以外にも、Visual Studio 等を使用したプログラムを開発することで、クロールログを取得することが可能です。プログラムの開発については、割愛しますがクロールログが出力可能なツール (Search Crawl Log Viewer) が以下に公開されておりますのでご紹介します。本ツールはサンプルコードも公開されておりますので、プログラムを開発される上でご参照ください。
Creating an Enterprise Search Crawl Log Viewer for SharePoint Server 2007
https://msdn.microsoft.com/en-us/library/cc751807.aspx
また、以下のサイトから Search Crawl Log Viewer のサンプル コードをダウンロードできます。
https://code.msdn.microsoft.com/crawllogviewersample
なお、上述に紹介しましたデータベースのテーブルは、以下の技術情報などで公開されておりますので、ぜひご参照ください。
[MS-SRCHTP]: Search Topology Protocol Specification
https://msdn.microsoft.com/en-us/library/dd948668.aspx
[MS-SQLPADM]: SQL Administration Protocol Specification