<[Web サーバー立ち上げ体験日記]SQL Server 2008 SP1 + CU1 のインストール
IIS のアクセスログは ODBC ログを使用することによって SQL Server のデータベースに格納することができます。
設定をするにあたり、以下のサイトを参考にさせていただきました。
# 私もこういった情報を提供できるように精進したいと思います。
IIS7 – post #57 – How to setup ODBC Logging in IIS 7.0
How to configure IIS 7.0 for ODBC logging?
【IIS7】 そろそろいいことばかりでなく、現実的なことも重要か
手順としては
- 役割サービスの追加
- SQL Server の設定
- ODBC の設定
- IIS の設定
になります。
[機能の追加]
ODBC ログを使用するために、IIS に [ODBC ログ] の役割サービスを追加します。
- サーバーマネージャ を起動します。
- [役割] の [役割サービスの追加] をクリックします。
- [状態と診断] の [カスタムログ] [ODBC ログ] を有効にし、[次へ] をクリックします。
? - [インストール] をクリックします。
- インストールが完了したら [閉じる] をクリックします。
[ODBC ログ] をインストールすることにより、[C:WindowsSystem32inetsrvlogtemp.sql] が追加され、ODBC ログの
Class ID がレジストリに追加されるようですね。
?
ODBC ログはカスタム ログとして実装されているのでカスタムログの役割サービスも必要になります。
# カスタムログの一種として実装されているイメージでしょうか。
[SQL Server の設定]
ODBC ログの記録用のデータベースとテーブルを SQL Server 上に作成する必要があります。
また、情報を見たところ SQL Server 認証でないとログを保存できなさそうですので Windows 認証から SQL Server 認証に
変更する必要があります。
- SQL Server Enterprise Manager を起動します。
- サーバー名を右クリックして [プロパティ] をクリックします。
- [セキュリティ] をクリックし、[SQL Server 認証モードと Windows 認証モード] を選択し、[OK] をクリックします。
- サーバー名を右クリックして [再起動] をクリックします。
- [データベース] を右クリックして [新しいデータベース] をクリックします。
- 新しいデータベースを作成します。
# 今まで気にしていなかったのですが SQL Server 2008 Express の標準 (model データベース) の復旧モデルは [単純] なんですね。 - [セキュリティ] を右クリックして [新規作成] → [新しいログイン] をクリックします。
- [SQL Server 認証] のログインを作成します。
? - 作成したデータベースにユーザーが追加されていますので右クリックをして [プロパティ] をクリックします。
- [データベース ロールのメンバシップ] として [db_datawriter] を設定しておきます。
- 作成したデータベースに対して [C:WindowsSystem32inetsrvlogtemp.sql] を実行して ODBC ログ用の
テーブルを作成します。
[ODBC の設定]
作成したデータベースを使用する ODBC を作成します。
- [管理ツール] → [データソース (ODBC)] をクリックします。
- [システム DSN] タブの [追加] をクリックします。
- ドライバは [SQL Server] を選択し、[完了] をクリックします。
- [データソース名]、[サーバー] を入力し、[次へ] をクリックします。
? - [ユーザーが入力する SQL Server 用のログイン ID とパスワードを使う] を選択し、作成した SQL Server 認証の
ユーザ情報を入力し、[次へ] をクリックします。
- 既定のデータベースを ODBC ログ記録用のデータベースに設定し、[次へ] をクリックします。
- [完了] をクリックします。
- [OK] をクリックして ODBC を作成します。
[IIS の設定]
ODBC ログの設定は GUI から行うことはできません。
IIS サービスマネージャでも以下のような画面が表示されます。
?
[appcmd.exe] を使用するか、[applicationHost.config] を直接修正することによって設定します。
参考にさせていただいた URL の情報にコマンドが載っていますので今回はそれを使って設定してみたいと思います。
- コマンドプロンプトで以下のコマンドを実行し、ログの記録方法を [ODBC ログ] に設定します。
# <サイト名> は ODBC ログを設定するサイト名を入力してください。
cd %systemroot%system32inetsrv
appcmd set site /site.name:"<サイト名>" /logFile.customLogPluginClsid:"{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
appcmd set site /site.name:"<サイト名>" /logFile.logFormat:"Custom" - コマンドプロンプトで以下のコマンドを実行し、ODBC ログに使用する ODBC の情報を設定します。
# 一部改行されている個所がありますが appcmd は一行で入力してください。また <> の個所は各情報を入力します。
cd %systemroot%system32inetsrv
appcmd set config "Default Web Site" /section:odbcLogging /dataSource:"<ODBC 名>" /commit:appHost
appcmd set config "Default Web Site" /section:odbcLogging /tableName:"<ODBC ログ テーブル名>" /commit:appHost
appcmd set config "Default Web Site" /section:odbcLogging /userName:"<SQL Server 認証ユーザー名>" /commit:appHost
appcmd set config "Default Web Site" /section:odbcLogging /password:"<SQL Server 認証ユーザーのパスワード>" /commit:appHost
以上で ODBC ログの設定は完了です。
テーブルを検索したところきちんとレコードが格納されていました。
ただし、SQL Server に接続できないと [500] のエラーになってしまうようです…。
実運用で使うには少し厳しそうですね。
あと取得項目として [Referer] がないのも気になります。インターネット公開サイトでは欲しいですよねこの項目は。
カスタムログとして自作すると [500] のエラーも回避できるようになるのでしょうか??
# 取得項目は増やせると思いますが。
ODBC ログの設定はできたので、せっかくですから Reporting Service を使ってアクセスログを表示することにチャレンジしたいと思います。
# アクセスログを Reporting Serivce で表示したかったのでSQL Server Express に With Advanced Services を使っています。
>[Web サーバー立ち上げ体験日記]SQL Server のデータを Reporting Serivces で表示のイメージ