SharePoint の詳細な診断ログを取得してトラブル シューティングを行う方法

こんにちは。
SharePoint サポート チームの成田です。

今回は SharePoint Server 2010 および 2013 において、診断ログと呼ばれるログを “詳細レベル” で出力させる方法について記載したいと思います。(既に SharePoint に慣れ親しんでいる方には既知ネタかもしれません。)
SharePoint 関連のサービスやプロセス (ワーカー プロセス、タイマー サービス、検索サービスなど) は何らかの処理を行うと、診断ログと呼ばれるテキスト ファイルに処理内容やエラーを記録していきます。
既定では警告やエラーを中心とした比較的重要なイベントのみが記録されるようになっていますが、「検索結果が表示されない!」「人の検索ができない!」のような「エラーは発生しないけど動作が変」である場合には、細かな処理についてもログを残すことで SharePoint の処理を詳細に追跡し、原因を特定できる可能性があります。
もちろん、エラーが発生するような場合 (多くの場合は問題が発生するとエラーが発生します) は、詳細にせずとも既定のレベルの診断ログから非常に有効な情報を取得できますので、必ずしも詳細に設定する必要がありませんが、今回はトラブルシューティングの Tips としてご紹介します。

SharePoint Server 2010 および 2013 において診断ログを詳細にして調査する流れ
==============================================================
1. 現在のログの出力レベルの保存
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
本手順はログの出力レベルが既定値から変更していない場合は不要です。ログの出力レベルを変更している場合には、あとで変更前の出力レベルを参照するために本手順をご実施ください。
本手順で使用する Out-GridView コマンドレットを使用するには Windows PowerShell ISE のインストールが必要です。
Windows Server 2012 では既定で有効ですが、2008 R2 では [機能の追加] ウィザードからインストールする必要がありますのでご注意ください。
Windows PowerShell ISE をインストールしない場合は、Out-GridView を使用する代わりに、"Get-SPLogLevel | select area,localizedname,tracesev,eventsev" コマンドを実行することでログの出力レベルを一覧で確認可能です。

1) SharePoint サーバーで [SharePoint 2010 管理シェル] を管理者権限で実行します。
2) 以下のコマンドを実行します。

>Get-SPLogLevel | Out-GridView

3) 表示されたグリッド ビューを全選択してコピーし、Excel などに張り付けてファイルとして保存します。

2. ログ出力レベルの変更
^^^^^^^^^^^^^^^^^^^^^^^^
1) SharePoint サーバーで以下のコマンドを実行します。以下のコマンドによってログの出力レベルを詳細に設定します。

>Set-SPLogLevel -TraceSeverity VerboseEx -EventSeverity Verbose

※上記のコマンドで診断ログの出力レベルを最も詳細 (VerboseEx) に設定していますが、サーバーの全体管理サイトの下記の URL にアクセスし、[トレース ログの記録対象となる重要度の最も低いイベント] ドロップダウンで VerboseEx を選択することでも同じ設定が可能です。(URL の後ろに ?verboseex=true をつけるのがポイントです)

https://<CentralAdminSiteUrl>/_admin/metrics.aspx?verboseex=true

3. ログの採取
^^^^^^^^^^^^^^
1) SharePoint サーバーで以下のコマンドを実行します。以下のコマンドによって診断ログのファイルが新しいファイルに切り替わります。

>New-SPLogFile

※New-SPLogFile は必須ではありませんが、現象の発生手順が予め分かっている場合には、ログ ファイルを切り替えることでファイル サイズを小さくし、解析を容易にすることができます。

2) 調査対象の現象を再現させます。
3) 再度、SharePoint サーバーで [New-SPLogFile] コマンドを実行します。
4) 以下のフォルダに出力された、現象発生時の診断ログから調査します。(エクスプローラーの "更新日時" 列でソートして対象のファイルご確認ください)

<診断ログの既定の保存場所>
パス      :C:\Program Files\Common Files\Microsoft Shared\web server extensions\14\LOGS
ファイル名:<サーバー名>-<日付>-<時間>.log

4. ログ出力レベルの復元
^^^^^^^^^^^^^^^^^^^^^^^^
1) SharePoint サーバーで以下のコマンドを実行します。以下のコマンドによって診断ログの出力レベルが既定値に設定されます。

> Clear-SPLogLevel

補足: 上記コマンドによってログの出力レベルは既定に設定されます。個別にレベルを修正されている場合は手順 1. で取得した情報を参考に、サーバーの全体管理サイトの [監視] - [診断ログの構成] から設定を変更するか、以下のコマンドを使用して個別に設定を行います。

Set-SPLogLevel
https://technet.microsoft.com/ja-jp/library/ff607887.aspx

5. ログの調査
^^^^^^^^^^^^^
診断ログはテキスト ファイルなので、メモ帳などの任意のテキスト エディタで開くことができます。
しかし、ログの量が多くなると目視で調査を行うのが大変になるので、診断ログを調査するためのツールを使うと便利です。 例えば、このようなツールが公開されています。

https://ulsviewer.codeplex.com/
https://sharepointlogviewer.codeplex.com/

ログを調査するには、まずは現象を特定するためのキーワード (エラー メッセージ、ページ URL など) で検索をし、現象に関連するログを特定できたら関連付け ID (CorrelationID) でフィルタすると素早く関連のログを確認できます。
特にエラーが出力されていない場合には解析が難しくなりますが、その場合は正常時との比較調査が有効です。

最後に
========
SharePoint は非常にたくさんのテクノロジ (Windows、AD、Network、IIS、.NET Framework、SQL Server、IE、Office Client など) によって構成され、たくさんの機能 (ポータル、ライブラリ、検索、ディレクトリ同期、外部システムとの連携など) が提供されており、そのトラブルシューティングも大変と思われがちです。
それは多くの場合正しく、調査が困難を極めることもありますが、診断ログからは非常にたくさんの有効な情報を取得できるので診断ログからすぐに原因を特定できることも少なくありません。
特にバージョンが新しくなるにつれますますログが充実し、トラブルシューティングをしやすくなっているという状況もあります。
もし、運悪く問題に遭遇したら、SharePoint の診断ログ (既定のレベルでも十分にトラブルシューティングが可能です) を開き、内容を確認するときっと何かヒントが隠されているはずです。(※診断ログはオンプレミスの SharePoint Server で確認できますが、SharePoint Online では確認できませんのでご了承ください。)
診断ログの解析がうまくいかない場合は、是非私たちサポート サービスのご利用もご検討ください!:)