SQL Server 2008 で統合ログ管理システムを構築しよう<br />マイクロソフト株式会社<br />エバンジェリスト<br />安納 順一<br />http://blogs.technet.com/junichia/<br />
本日のスケジュール<br />13:30~16:30<br /> SQL Server2008で統合ログ管理システムを構築しよう <br />16:45~17:45<br /> SQL Serverエキスパートによる特別セッション 「Hyper...
本セミナーの目的と内容<br />目的:SQL Server は単なる「必須ソフト」ではないことを知る<br />   「なんか新しいことができそうだな」という夢を見る<br />内容:インフラ上のログをSQL Serverに集めて一元管理する...
お願い<br /><ul><li>細かな手順を全てお話しすることができません!すみません!
SSIS/SSRS の考え方と「難解な部分」の解説を中心に行います
本日作成したプロジェクトと、その手順はBLOGに掲載しますhttp://blogs.technet.com/junichia/
より理解を深めるためにおすすめ(私もこれで勉強しました)■SQL Server 2008 自習書シリーズ http://technet.microsoft.com/ja-jp/sqlserver/dd610200.aspx■SQL Server...
2010年1-3月の間に 本セミナーの発展系を実施予定です(w/ Developer Evangelist 小高)是非とも開発担当の方とともにお越しください</li></li></ul><li>使用する環境<br />Windows Serve...
ログ管理システムのイメージ<br />【取り込み】<br />・イベントログをデータベースに蓄積<br />・定期的に取り込みタスクを実行<br />・サーバーが増えても柔軟に対応可能<br />【統計資料】<br />・期間を指定してレポート...
ITPROを支える3つの機能<br />必要最小限のSQL文の知識と、若干のコーディング力が求められる<br />SSIS:SQL Server Integration Service<br />データ移入作業の可視化<br />・外部ファイル...
イベントログ<br />第1章 ログの取り込み<br />SSIS<br />データが無ければはじまらない!<br />SQL<br />DB<br />取り込みプロセスの部品化と可視化<br />
テーブル構成<br />ComputerList<br />ComputerName<br />LogFileName<br />EventLogData_&lt;Logfile&gt;<br />Number(int)(key)<br />C...
Eventlogを取り込む際の留意点<br />Category<br />カテゴリ番号<br />CategoryString<br />カテゴリ名<br />ComputerName<br />イベントを生成したコンピュータ名<br />D...
イベントログを取得するスクリプト例<br />strComputer = “.”<br />Set objService= GetObject(“winmgmts: & strComputer & “
ootcimv2”)<br />Set o...
Logfile 属性について<br />使用可能なLogfile属性は、以下のコマンドで調査できる<br />C:&gt; wmicnteventlog list brief<br />FileSizeLogfileName          ...
(参考)WINEVTChannels 配下のイベント<br />HKLMSOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannels 配下のイベントは Win32_NTLogEvent では取得できな...
制御フローを実装する<br />取り込みプロセスをSSISでデザイン<br />※利用手順は自習書を!<br />
作業のはじまり<br />使用するツール<br /><ul><li>SQL Server Business Intelligence Development Studio
SQL Server Management Studio</li></ul>はじめにやること<br /><ul><li>SQL Server Management Studio を起動
SQL Server Business Intelligence Development Studioを起動し、[ファイル]-[新規作成]-[プロジェクト]から「Integration Service プロジェクト」を選択</li></ul> ...
制御フローを考えてみる<br />開始<br />SSIS<br />ソース取得<br />Computer List<br /> 取り込みソースのリスト<br />ソースごとに処理を繰り返し <br />テーブル作成<br />取り込み範囲の...
制御フローを作成するには<br />開始<br /><ul><li>部品(制御フロー項目)をデザイン画面にドラッグ&ドロップ
各部品のパラメタを設定する
部品同士を矢印で接続して「フロー」を決める</li></ul>SSIS<br />ソース取得<br />事前に処理の流れを決めておくことが重要<br />ソースごとに処理を繰り返し <br />テーブル作成<br />取り込み範囲のチェック<b...
使用する部品(制御フロー項目)<br /><ul><li>SQL文を発行するための部品
「接続オブジェクト」の定義が必要
処理を繰り返すための部品
ファイルや変数、レコードセットの読み込みに使用
処理回数が未定の場合に使用する
VB.NETまたはC#を使用して柔軟な処理を実装したい場合に使用
文字列の細かな処理などに使用すると便利
WMIを使用した処理結果を受け取る場合に使用
今回はイベントログの取得に使用している
ちなみに、EXEコマンドを実行したい場合には</li></li></ul><li>SSIS 知っておきたい知識<br />
部品(制御フロー項目)のI/O<br />各部品は、複数のI/Oから選択することができる<br />接続マネージャー<br />Input<br />Output<br />直接入力<br />部品<br />データベース<br />データベー...
接続マネージャー<br /><ul><li>各部品(制御フロー項目)が外部リソースに接続する際に使用
部品間で共有が可能</li></ul>部品<br />WMIデータリーダー<br />ファイル接続<br />WQL<br />変数<br />WMI接続<br />
変数<br />処理フローの中で使用できる、俗にいう「変数」<br />スコープの設定が可能(プロジェクト全体/ループ内/部品内)<br />選択可能な型<br />Boolean/Byte/Char/DateTime/DBNull/Doube...
Expressions属性により、変数が呼び出されたときに、ダイナミックに値を挿入することができる</li></ul>超便利!<br />
Expressions属性<br /><ul><li>部品(制御フロー項目)、接続マネージャー、変数などに用意されている属性の1つ
Expression(式)を記載することで、指定した他の属性にダイナミックに値を代入することができる</li></ul>(例)SQL実行タスク<br />SqlStatementSource属性にはSQL文を記載するが、処理によって接続先のテー...
Expressions属性の使用例<br />&quot;IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id= OBJECT_ID(N&apos;[dbo].[EventLogDat...
スクリプトタスク内での変数の使用<br />スクリプト内で変数取り扱うことで、VB.NETやC#を使用した柔軟な加工が可能<br />(例)DateTimeカラムに保存する前にDateTime形式に変換<br />Dim strTimeGene...
処理を実装してみる<br />
処理1:ソース(コンピュータ一覧)の取得<br />イベントログの取り込み元を取得する<br />接続マネージャ<br />SQLタスク<br />SQLStatement<br />Select ComputerName,LogfileNa...
処理2:ソースごとに処理を繰り返し<br />User::ComputerList<br />ADO列挙子<br />(データセット)<br />Foreachループ<br />User::tmpComputerName<br />User::...
処理3:テーブルを作成<br />&lt;LogfileName&gt;イベントログを格納するテーブルが無い場合には作成する<br />User::tmpComputerName<br />User::tmpLogfileName<br />d...
処理4:取り込み範囲のチェック<br />変数はスコープ内であればどこででも使える<br />User::tmpComputerName<br />User::tmpLogfileName<br />dbo.Eventlog_&lt;Logfi...
処理4:イベントログを一括取得<br />User::tmpComputerName<br />User::tmpLogfileName<br />User::MaxRecordNumber<br />接続マネージャ(WMI)<br />Exp...
処理5:レコードを1件ずつ取り出し<br />User::EventData<br />取り出した値が見えずらい場合にはObject形式にしておくと便利<br />Foreachループ<br />User::Category<br />User...
処理6:Insert 文を生成<br />SQL文を生成するにあたり、各値をSQLServerに取り込み可能な形式に整形する<br />User::Category<br />User::User<br />変数の値がNullかどうかをチェック...
Upcoming SlideShare
Loading in …5
×

SQL Server 2008 で統合ログ管理システムを構築しよう

4,516 views

Published on

2009年9月25日 TechFieldersセミナー
「SQL Server 2008 R2 を使用して統合ログ管理
システムを構築しよう」

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,516
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SQL Server 2008 で統合ログ管理システムを構築しよう

  1. 1. SQL Server 2008 で統合ログ管理システムを構築しよう<br />マイクロソフト株式会社<br />エバンジェリスト<br />安納 順一<br />http://blogs.technet.com/junichia/<br />
  2. 2. 本日のスケジュール<br />13:30~16:30<br /> SQL Server2008で統合ログ管理システムを構築しよう <br />16:45~17:45<br /> SQL Serverエキスパートによる特別セッション 「Hyper-V による SQL Server の統合」 講師: 伊藤忠テクノソリューションズ株式会社  後藤 真人 様 <br />17:45~18:30<br /> ライトニングトーク<br />18:30~<br /> 懇親会<br />
  3. 3. 本セミナーの目的と内容<br />目的:SQL Server は単なる「必須ソフト」ではないことを知る<br />   「なんか新しいことができそうだな」という夢を見る<br />内容:インフラ上のログをSQL Serverに集めて一元管理する<br />
  4. 4. お願い<br /><ul><li>細かな手順を全てお話しすることができません!すみません!
  5. 5. SSIS/SSRS の考え方と「難解な部分」の解説を中心に行います
  6. 6. 本日作成したプロジェクトと、その手順はBLOGに掲載しますhttp://blogs.technet.com/junichia/
  7. 7. より理解を深めるためにおすすめ(私もこれで勉強しました)■SQL Server 2008 自習書シリーズ http://technet.microsoft.com/ja-jp/sqlserver/dd610200.aspx■SQL Server バーチャルラボ  http://technet.microsoft.com/ja-jp/virtuallabs/cc879114.aspx
  8. 8. 2010年1-3月の間に 本セミナーの発展系を実施予定です(w/ Developer Evangelist 小高)是非とも開発担当の方とともにお越しください</li></li></ul><li>使用する環境<br />Windows Server 2008 R2x64<br />・Active Directory<br />Windows Server 2008 R2x64<br />・Internet Information Service<br />SQL Server 2008 Enterprise Edition x64<br />・インスタンス機能<br /> -データベースエンジンサービス<br />  -フルテキストサーチ<br /> -Analysis Service<br /> -Reporting Service<br />・共有機能<br /> -Business Intelligence Development Studio<br /> -Integration Service<br />Windows 7 x64<br />SQL Server Report Builder 2.0<br />(ダウンロードセンターにて提供)<br />
  9. 9. ログ管理システムのイメージ<br />【取り込み】<br />・イベントログをデータベースに蓄積<br />・定期的に取り込みタスクを実行<br />・サーバーが増えても柔軟に対応可能<br />【統計資料】<br />・期間を指定してレポートを作成<br />・レポートの体裁は事前に定義できる<br />・レポートはブラウザから表示できる<br />イベントログ<br />SSIS<br />SQL<br />DB<br />SSRS<br />SSAS<br />
  10. 10. ITPROを支える3つの機能<br />必要最小限のSQL文の知識と、若干のコーディング力が求められる<br />SSIS:SQL Server Integration Service<br />データ移入作業の可視化<br />・外部ファイル、データベースからの取り込み<br />・データ変換<br />SSRS:SQL Server Reporting Service<br />資料作成の単純化<br />・レポートテンプレートの作成、表示、印刷<br />・パラメタ化による動的なレポートの生成<br />SSAS:SQL Server Analysis Service<br />・多次元データベースによる分析(OLAP)<br />・データマイニング<br />
  11. 11. イベントログ<br />第1章 ログの取り込み<br />SSIS<br />データが無ければはじまらない!<br />SQL<br />DB<br />取り込みプロセスの部品化と可視化<br />
  12. 12. テーブル構成<br />ComputerList<br />ComputerName<br />LogFileName<br />EventLogData_&lt;Logfile&gt;<br />Number(int)(key)<br />Category(nvarchar(50))<br />&lt;logfile&gt; には、Application, System, Security などが入る<br />CategoryString(nvarchar(50))<br />ComputerName(nvarchar(50))<br />Data(nvarchar(max))<br />Server01<br />Server02<br />EventCode(nvarchar(50))<br />EventIdentifier(nvarchar(50))<br />InsertionStrings(nvarchar(50))<br />Logfile(nvarchar(50))<br />Message(ntext)<br />System<br />Application<br />Security<br />RecordNumber(int)<br />SourceName(nvarchar(max))<br />TimeGenerated(datetime)<br />TimeWritten(datetime)<br />Type(nvarchar(50))<br />User(nvarchar(50))<br />
  13. 13. Eventlogを取り込む際の留意点<br />Category<br />カテゴリ番号<br />CategoryString<br />カテゴリ名<br />ComputerName<br />イベントを生成したコンピュータ名<br />Data<br />イベントの付帯情報<br />EventCode<br />Uint16 形式のイベントID<br />EventIdentifier<br />Uint32 形式のイベントID<br />イベントの付帯情報<br />InsertionStrings<br />Logfile<br />ログファイルの名前(System,Application,Security など)<br />イベントの説明文。4000文字(bstr)を超える可能性あり。<br />シングルクオーテーションが含まれることが多い。<br />Message<br />2,147,483,647 <br />RecordNumber<br />イベントレコードの通番 int32(max 9,223,372,036,854,775,807)<br />SourceName<br />イベントを生成したソースプロセス(MSSQL,MSInstaller など)<br />イベントが発生した日時。標準時で生成。<br />TimeGenerated<br />TimeWritten<br />イベントが書き込まれた日時。標準時で生成。<br />Type<br />イベントのタイプ(情報、エラー、警告、成功の監査、失敗の監査)<br />User<br />イベントを発生させたユーザー<br />
  14. 14. イベントログを取得するスクリプト例<br />strComputer = “.”<br />Set objService= GetObject(“winmgmts: & strComputer & “ ootcimv2”)<br />Set objEvtSet = objService.ExecQuery_<br />(&quot;Select * From Win32_NTLogEvent Where Logfile=&apos;System&apos;&quot;)<br />For Each e In objEvtSet<br />wscript.echoe.ComputerName & &quot;,&quot; & e.EventCode<br />Next<br />
  15. 15. Logfile 属性について<br />使用可能なLogfile属性は、以下のコマンドで調査できる<br />C:&gt; wmicnteventlog list brief<br />FileSizeLogfileName Name NumberOfRecords<br />6361088 Application C:WindowsSystem32WinevtLogsApplication.evtx 8022 <br />69632 HardwareEvents C:WindowsSystem32WinevtLogsHardwareEvents.evtx 0 <br />69632 Internet Explorer C:WindowsSystem32WinevtLogsInternet Explorer.evtx 0 <br />69632 Key Management Service C:WindowsSystem32WinevtLogsKey Management Service.evtx 0 <br />69632 Media Center C:WindowsSystem32WinevtLogsMedia Center.evtx 0 <br />1052672 OAlerts C:WindowsSystem32WinevtLogsOAlerts.evtx 254 <br />69632 ODiag C:WindowsSystem32WinevtLogsODiag.evtx 0 <br />69632 Operations Manager C:WindowsSystem32WinevtLogsOperations Manager.evtx 120 <br />69632 OSession C:WindowsSystem32WinevtLogsOSession.evtx 4 <br />30740480 Security C:WindowsSystem32WinevtLogsSecurity.evtx 40359 <br />8458240 System C:WindowsSystem32WinevtLogsSystem.evtx 20623 <br />1118208 Windows PowerShell C:WindowsSystem32WinevtLogsWindows PowerShell.evtx<br />
  16. 16. (参考)WINEVTChannels 配下のイベント<br />HKLMSOFTWAREMicrosoftWindowsCurrentVersionWINEVTChannels 配下のイベントは Win32_NTLogEvent では取得できない。<br />C:&gt;wevtutil.exe<br />代替策<br />
  17. 17. 制御フローを実装する<br />取り込みプロセスをSSISでデザイン<br />※利用手順は自習書を!<br />
  18. 18. 作業のはじまり<br />使用するツール<br /><ul><li>SQL Server Business Intelligence Development Studio
  19. 19. SQL Server Management Studio</li></ul>はじめにやること<br /><ul><li>SQL Server Management Studio を起動
  20. 20. SQL Server Business Intelligence Development Studioを起動し、[ファイル]-[新規作成]-[プロジェクト]から「Integration Service プロジェクト」を選択</li></ul>   <br />
  21. 21. 制御フローを考えてみる<br />開始<br />SSIS<br />ソース取得<br />Computer List<br /> 取り込みソースのリスト<br />ソースごとに処理を繰り返し <br />テーブル作成<br />取り込み範囲のチェック<br />イベントログを一括取得<br />レコードを1件ずつ取り出し<br />Insert 文を生成<br />Insert into …<br />EventLog Database<br />終了<br />
  22. 22. 制御フローを作成するには<br />開始<br /><ul><li>部品(制御フロー項目)をデザイン画面にドラッグ&ドロップ
  23. 23. 各部品のパラメタを設定する
  24. 24. 部品同士を矢印で接続して「フロー」を決める</li></ul>SSIS<br />ソース取得<br />事前に処理の流れを決めておくことが重要<br />ソースごとに処理を繰り返し <br />テーブル作成<br />取り込み範囲のチェック<br />イベントログを一括取得<br />レコードごとに Insert 繰り返し<br />Insert into …<br />終了<br />
  25. 25. 使用する部品(制御フロー項目)<br /><ul><li>SQL文を発行するための部品
  26. 26. 「接続オブジェクト」の定義が必要
  27. 27. 処理を繰り返すための部品
  28. 28. ファイルや変数、レコードセットの読み込みに使用
  29. 29. 処理回数が未定の場合に使用する
  30. 30. VB.NETまたはC#を使用して柔軟な処理を実装したい場合に使用
  31. 31. 文字列の細かな処理などに使用すると便利
  32. 32. WMIを使用した処理結果を受け取る場合に使用
  33. 33. 今回はイベントログの取得に使用している
  34. 34. ちなみに、EXEコマンドを実行したい場合には</li></li></ul><li>SSIS 知っておきたい知識<br />
  35. 35. 部品(制御フロー項目)のI/O<br />各部品は、複数のI/Oから選択することができる<br />接続マネージャー<br />Input<br />Output<br />直接入力<br />部品<br />データベース<br />データベース<br />ファイル<br />ファイル<br />変数<br />変数<br />(例)<br />SQL文<br />変数<br />変数<br />結果のレコードセットを変数に格納し、次の処理で使用できる<br />ループの中で処理する場合に、SQL文を変えながら処理が可能<br />
  36. 36. 接続マネージャー<br /><ul><li>各部品(制御フロー項目)が外部リソースに接続する際に使用
  37. 37. 部品間で共有が可能</li></ul>部品<br />WMIデータリーダー<br />ファイル接続<br />WQL<br />変数<br />WMI接続<br />
  38. 38. 変数<br />処理フローの中で使用できる、俗にいう「変数」<br />スコープの設定が可能(プロジェクト全体/ループ内/部品内)<br />選択可能な型<br />Boolean/Byte/Char/DateTime/DBNull/Doube/Int16/Int32/<br />Int64/Object/SByte/Single/String/Uint32/UInt64<br />TIPS<br /><ul><li>受け取る値の型がよくわからない場合には、「Object」型を選択しておくとよい
  39. 39. Expressions属性により、変数が呼び出されたときに、ダイナミックに値を挿入することができる</li></ul>超便利!<br />
  40. 40. Expressions属性<br /><ul><li>部品(制御フロー項目)、接続マネージャー、変数などに用意されている属性の1つ
  41. 41. Expression(式)を記載することで、指定した他の属性にダイナミックに値を代入することができる</li></ul>(例)SQL実行タスク<br />SqlStatementSource属性にはSQL文を記載するが、処理によって接続先のテーブルを変えたい場合がある。<br />Expressions属性を使用することで、SqlStatementSourceの値を部品が呼ばれる都度変更することができる。<br />
  42. 42. Expressions属性の使用例<br />&quot;IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id= OBJECT_ID(N&apos;[dbo].[EventLogData_&quot;+  @[User::tmpLogfileName]  +&quot;]&apos;) AND type in (N&apos;U&apos;) ) &quot;+ <br />&quot;CREATE TABLE [dbo].[EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;] ( [Number] [int] IDENTITY(1,1) NOT NULL, [Category] [nvarchar](50) NULL, [CategoryString] [nvarchar](50) NULL, [ComputerName] [nvarchar](50) NULL, [Data] [nvarchar](max) NULL, [EventCode] [nvarchar](50) NULL, [EventIdentifier] [nvarchar](50) NULL, [EventType] [nvarchar](50) NULL, [InsertionStrings] [nvarchar](50) NULL, [LogFile] [nvarchar](50) NULL, [Message] [ntext] NULL, [RecordNumber] [int] NULL, [SourceName] [nvarchar](max) NULL, [TimeGenerated] [datetime] NULL, [TimeWritten] [datetime] NULL, [Type] [nvarchar](50) NULL, [User] [nvarchar](50) NULL, CONSTRAINT [PK_EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;] PRIMARY KEY CLUSTERED ( [Number] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]&quot;<br />テーブル名に、変数@[User::tmpLogfileName] を使用することで、部品が呼ばれるたびに、異なるテーブルに対して処理を行うことができる<br />
  43. 43. スクリプトタスク内での変数の使用<br />スクリプト内で変数取り扱うことで、VB.NETやC#を使用した柔軟な加工が可能<br />(例)DateTimeカラムに保存する前にDateTime形式に変換<br />Dim strTimeGenerated As String = “19000101 00:00:00”<br />If Not IsDBNull(Dts.Variables(“User::TimeGenerated”).Value)Then<br />strTimeGenerated= Dts.Variables(“User::TimeGenerated”).Value<br />strTimeGenerated = Mid(strTimeGenerated, 1, 8) & “ “ & _<br />Mid(strTimeGenerated, 9, 2) & “ “ & _<br />Mid(strTimeGenerated , 11, 2) & “ “ & _<br /> Mid(strTimeGenerated, 13, 2)<br />
  44. 44. 処理を実装してみる<br />
  45. 45. 処理1:ソース(コンピュータ一覧)の取得<br />イベントログの取り込み元を取得する<br />接続マネージャ<br />SQLタスク<br />SQLStatement<br />Select ComputerName,LogfileName<br />From dbo.ComputerList<br />dbo.ComputerList<br />User::ComputerList<br />
  46. 46. 処理2:ソースごとに処理を繰り返し<br />User::ComputerList<br />ADO列挙子<br />(データセット)<br />Foreachループ<br />User::tmpComputerName<br />User::tmpLogfileName<br />テーブル作成<br />取り込み範囲のチェック<br />イベントログを一括取得<br />Foreachループ<br />レコードを1件ずつ取り出し<br />Insert 文を生成<br />Insert into …<br />
  47. 47. 処理3:テーブルを作成<br />&lt;LogfileName&gt;イベントログを格納するテーブルが無い場合には作成する<br />User::tmpComputerName<br />User::tmpLogfileName<br />dbo.Eventlog_&lt;LogfileName&gt;<br />SQL文タスク<br />Expressions(SQLStatement)<br />接続マネージャ<br />&quot;IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[dbo].[EventLogData_&quot;+ @[User::tmpLogfileName]  +&quot;]&apos;) AND type in (N&apos;U&apos;) ) &quot;+ <br />&quot;CREATE TABLE [dbo].[EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;] ([Number] [int] IDENTITY(1,1) NOT NULL,<br /> [Category] [nvarchar](50) NULL, <br />[CategoryString] [nvarchar](50) NULL,<br /> [ComputerName] [nvarchar](50) NULL,<br /> [Data] [nvarchar](max) NULL, [EventCode] [nvarchar](50) <br /> ・<br /> ・<br /> [User] [nvarchar](50) NULL, <br />CONSTRAINT [PK_EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;]<br />PRIMARY KEY CLUSTERED ( [Number] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]&quot;<br />完全なSQL文はAppendixに掲載<br />
  48. 48. 処理4:取り込み範囲のチェック<br />変数はスコープ内であればどこででも使える<br />User::tmpComputerName<br />User::tmpLogfileName<br />dbo.Eventlog_&lt;LogfileName&gt;<br />SQLタスク<br />接続マネージャ<br />Expressions(SQLStatement)<br />SelectMAX(RecordNumber) as MaxRecordNumber<br />from [EventLog].[dbo].[EventLogData” + @[User::tmpLogfileName] + “] <br />Where [ComputerName] Like ‘“ + @[User::tmpComputerName]” + “’%”<br />テーブルには複数のコンピュータのイベントログが格納されていることに注意<br />User::MaxRecordNumber<br />
  49. 49. 処理4:イベントログを一括取得<br />User::tmpComputerName<br />User::tmpLogfileName<br />User::MaxRecordNumber<br />接続マネージャ(WMI)<br />Expression(ConnectionString)<br />WMIデータリーダー<br />WQLQuerySource<br />属性値に変数を使用できる<br />User::ConnectionString<br />User::WQL<br />Expression(Value)<br />Expression(Value)<br />“ServerName=”+@[User::tmpComputerName]+”;Namespace=ootimv2;UserNtAuth;UserName=;”<br />“Select *from Win32_NTLogEvent where logfile=“ + @[User::tmpLogfileName] + “’ and RecordNumber &gt; “ + (DT_WSTR 10) @(User::MaxRecordNumber)<br />Expressionsの中では「」は制御記号<br />キャストが可能<br />User::EventData<br />
  50. 50. 処理5:レコードを1件ずつ取り出し<br />User::EventData<br />取り出した値が見えずらい場合にはObject形式にしておくと便利<br />Foreachループ<br />User::Category<br />User::CategoryString<br />User::ComputerName<br />User::Type<br />User::User<br />Insert 文を生成<br />Insert into を実行<br />
  51. 51. 処理6:Insert 文を生成<br />SQL文を生成するにあたり、各値をSQLServerに取り込み可能な形式に整形する<br />User::Category<br />User::User<br />変数の値がNullかどうかをチェックしてから取り出す<br />Scriptタスク<br />Dim strCategory As String = &quot;&quot;<br />If Not IsDBNull(Dts.Variables(&quot;User::Category&quot;).Value) Then<br />strCategory= Dts.Variables(&quot;User::Category&quot;).Value.ToString<br />End If<br />Dim strMessage As String = &quot;&quot;<br />If Not IsDBNull(Dts.Variables(&quot;User::Message&quot;).Value) Then<br />strMessage = Dts.Variables(&quot;User::Message&quot;).Value.ToString<br />strMessage = Replace(strMessage, &quot;&apos;&quot;, &quot;-&quot;)<br />End If<br />Messageにはシングルクオーテーションが含まれているので置き換え<br />
  52. 52. Scriptタスク<br />Dim strTimeGenerated As String = &quot;19000101 00:00:00&quot;<br />If Not IsDBNull(Dts.Variables(&quot;User::TimeGenerated&quot;).Value) Then<br />strTimeGenerated = Dts.Variables(&quot;User::TimeGenerated&quot;).Value.ToString<br />strTimeGenerated= Mid(strTimeGenerated, 1, 8) & &quot; &quot; & _<br /> Mid(strTimeGenerated, 9, 2) & &quot;:&quot; & _<br /> Mid(strTimeGenerated, 11, 2) & &quot;:&quot; & _<br /> Mid(strTimeGenerated, 13, 2)<br />End If<br />Dim strSQL As String = &quot;INSERT INTO [EventLog].[dbo].[EventLogData_&quot; & strLogfile & &quot;] ([Category]&quot; & _<br />&quot;,[CategoryString]&quot; & _<br />&quot;,[ComputerName]&quot; & _<br />&quot; VALUES(&apos;&quot; & strCategory & &quot;&apos;,&quot; & _<br />&quot;&apos;&quot; & strCategoryString & &quot;&apos;,&quot; & _<br />&quot;&apos;&quot; & strComputerName & &quot;&apos;,&quot; & _<br />Dts.Variables(&quot;User::InsertSQL&quot;).Value = strSQL<br />DateTime列に取り込めるように整形<br />SQL文を生成<br />User::InsertSQL<br />
  53. 53. 処理7:Insert Into を実行<br />User::InsertSQL<br />SQLタスク<br />SQLStatement<br />dbo.Eventlog_&lt;LogfileName&gt;<br />&apos;)<br />User::InsertSQL<br />Value<br />INSERT INTO [EventLog].[dbo].[EventLogData_Application] ([Category],[CategoryString],[ComputerName],[Data],[EventCode],[EventIdentifier],[EventType],[InsertionStrings],[LogFile],[Message],[RecordNumber],[SourceName],[TimeGenerated],[TimeWritten],[Type],[User]) VALUES(&apos;0&apos;,&apos;&apos;,&apos;TF-SQL01-01.t6303.contoso.co.jp&apos;,&apos;&apos;,&apos;12290&apos;,&apos;1073819650&apos;,&apos;3&apos;,&apos;System.String[]&apos;,&apos;Application&apos;,&apos;Package &quot;Package&quot; has been cancelled.&apos;,3205,&apos;SQLISPackage100&apos;,&apos;20090923 03:23:31&apos;,&apos;20090923 03:23:31&apos;,&apos;情報&apos;,&apos;T6303administrator&apos;)<br />接続マネージャ<br />
  54. 54. 最後に:処理の自動化<br />プロセスを実装し終えたら<br />・[ビルド]する<br />  - binフォルダに .dtsxファイルが作成される<br />・SQL Server Agent ジョブとして登録<br />  - SQLServerAgent サービスを起動しておく(自動起動にする)<br />  - .dtsxファイル(パッケージファイル)を登録<br />
  55. 55. SSIS<br />SQL<br />DB<br />SSRS<br />第2章 レポートの作成<br />資料は時間をかけずに作りたい!<br />報告書のテンプレート化<br />
  56. 56. Eventlogを分析するには<br /><ul><li>それぞれのデータの関連性を機械的に見出すのは難しい
  57. 57. 日時をキーに、それぞれのデータを比較、分析するのがおすすめ</li></ul>日時<br />System<br />Application<br />Security<br />パフォーマンスログ<br />・・・・・・・・<br />本件は、次回のセミナーにて…<br />
  58. 58. 作業のはじまり<br />使用するツール<br /><ul><li>MicrosoftSQL Server Report Builder 2.0</li></ul>はじめにやること<br /><ul><li>MicrosoftSQL Server Report Builder 2.0 を起動する
  59. 59. SSRSに接続http://ServerName/Repor_Server/</li></li></ul><li>作りたいレポート<br />タイプ<br />開始年月日<br />V<br />YYYYMMDD<br />□全て<br />□エラー<br />□警告<br />□情報<br />終了年月日<br />YYYYMMDD<br />エラー<br />警告<br />情報<br />コンピュータ名<br />コンピュータ名<br />CmputerName<br />SourceName<br />エラー<br />警告<br />情報<br />0<br />Windows-Search<br />Computer01<br />0<br />10<br />5<br />Security-SPP<br />24<br />55<br />1<br />Application Error<br />1<br />0<br />
  60. 60. グラフフィールドの設定<br />比較したい数字<br />Count(type)<br />凡例<br />グラフフィールド<br />横軸が持つ要素<br />Type<br />横軸の指標<br />ComputerName<br />
  61. 61. マトリックスの設定<br />行ごとに比較したい指標<br />行グループ<br />コンピュータごとに複数のソース名が表示される<br />比較したい値<br />
  62. 62. パラメータの設定<br /><ul><li>データセットのクエリ設定で、以下のようにWhere句を追記する</li></ul>Where EventLogData_Application.Type IN (@p1) AND<br />EventLogData_Application.TimeGenerated &gt;= (@p2)<br />EventLogData_Application.TimeGenerated &lt;= (@p3)<br /><ul><li>各パラメータをレポートフィールド上にドラッグドロップする</li></li></ul><li>デザインが終わったら<br /><ul><li>サーバーに保存
  63. 63. 以下のURLでアクセスhttp://<ServerName>/Reports/またはhttp://<ServerName>/Report_Server/</li></ul>注意<br /><ul><li>一度サーバーに保存するとReport Builderでのプレビューが行えなくなります</li></ul> ※再度 ローカルに保存しなおしてからReport Builderを再起動することで  プレビューができるようになります<br />
  64. 64. まとめ<br />
  65. 65. <ul><li>BIは我々の手の届くところにあります
  66. 66. SQL Server はもはやツールの一部です
  67. 67. SSIS/SSRS/SSAS も価格の一部です
  68. 68. インフラ担当SEのみなさんが体感してください!</li></li></ul><li>本日のセミナーを みなさんの会社で実施してみませんか?<br />講師はあなたです!<br />進呈<br />SQL Server2008 勉強会キット<br />・SQL Server 2008 各種自習書<br />・本日のセミナー資料<br />・本日のデモンストレーションで使用したプロジェクト<br />・デモ環境の構築手順書<br />TechNetPlusDirect Subscription<br />詳細は近日公開!<br />
  69. 69. 「オラクル都市伝説」を読み解くシリーズ(動画)<br />YouTube上で近日公開!<br />SQL Server プロダクトマネージャー 北川が、オラクル社の人気コラム「都市伝説シリーズ シーズン2」を正しく読み解きます。<br />詳しくは、9月30日発行の TechNet Flashをご覧ください!<br />北川のBLOGもご覧ください http://blogs.technet.com/sqlpm-j/<br />
  70. 70. Appendix<br />
  71. 71. SQL文タスク「テーブルが無ければ作成する」で使われているSQL文<br />&quot;IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[dbo].[EventLogData_&quot;+  @[User::tmpLogfileName]  +&quot;]&apos;) AND type in (N&apos;U&apos;) ) &quot;+ <br />&quot;CREATE TABLE [dbo].[EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;] ( [Number] [int] IDENTITY(1,1) NOT NULL, [Category] [nvarchar](50) NULL, [CategoryString] [nvarchar](50) NULL, [ComputerName] [nvarchar](50) NULL, [Data] [nvarchar](max) NULL, [EventCode] [nvarchar](50) NULL, [EventIdentifier] [nvarchar](50) NULL, [EventType] [nvarchar](50) NULL, [InsertionStrings] [nvarchar](50) NULL, [LogFile] [nvarchar](50) NULL, [Message] [ntext] NULL, [RecordNumber] [int] NULL, [SourceName] [nvarchar](max) NULL, [TimeGenerated] [datetime] NULL, [TimeWritten] [datetime] NULL, [Type] [nvarchar](50) NULL, [User] [nvarchar](50) NULL, CONSTRAINT [PK_EventLogData_&quot;+ @[User::tmpLogfileName] +&quot;] PRIMARY KEY CLUSTERED ( [Number] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]&quot;<br />

×