構築手順 ssis イベントログ取込み 第2版

117

Click here to load reader

Upload: junichi-anno

Post on 22-Jul-2015

2.439 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 構築手順 Ssis イベントログ取込み 第2版

SSISを使用した ベントログ収集システム

デモ環境構築手順

2010年01月15日 第2.0版

マクロソフト株式会社 エバンジェリスト

安納 順一

SQL Server 2008 R2 BI 添付資料

Page 2: 構築手順 Ssis イベントログ取込み 第2版

はじめに

Page 3: 構築手順 Ssis イベントログ取込み 第2版

注意

本手順書では SQL Server 2008 R2 を使用していますが、操作手順は SQL Server 2008 と同様です。

製品名称については随時読み替えてください。

• Windows Server 2008 または 2008 R2 ■評価版ダウンロード [2008](最大240日) http://www.microsoft.com/japan/windowsserver2008/ trial-software.mspx ※評価機関延長方法 http://support.microsoft.com/kb/948472 [2008R2](最大180日) http://technet.microsoft.com/ja-jp/evalcenter/dd459137.aspx

• SQL Server 2008 R2 CTP 11月版 ■CTP版 http://www.microsoft.com/japan/sqlserver/2008/r2/prodinfo/ downloads.mspx

お手元にソフトウェゕが無い場合には以下より評価版をダウンロード可能です

Page 4: 構築手順 Ssis イベントログ取込み 第2版

テーブル

構築するシステムメージ

データベース:LogReport

ComputerList

Eventlog_Security

Eventlog_Application

Eventlog_System

SSIS

ログを収集するコンピューターとログファイルのリスト

ログファイルごとにテーブルを作成

ネットワーク上のWindows Server または Windows Client から、SSISのWMIデータリーダーを使用してベントログを収集し、SQL Server 2008 / R2 に保存する。 SSISで作成したパッケージは定期的に実行するものとし、前回実行時からの差分はベントログのTimeWritten を基準にして判断するものとする。

Page 5: 構築手順 Ssis イベントログ取込み 第2版

実装する制御フロー

ComputerList 取り込みソースのリスト

EventLogData_<logfilename>

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

参照

Page 6: 構築手順 Ssis イベントログ取込み 第2版

ンストール • 事前に以下のンストールを済ませておく

• Windows Server 2008 / R2 x64

– Active Directory

• SQL Server 2008 R2 EE x64

– ンスタンス機能

• データベースエンジンサービス

– 共有機能

• Business Intelligence Development Studio

• Integration Service

本手順書の環境

• ドメン名 :techfielders.com

• コンピューター名 :SQL01

• SQL Server ンスタンス名 :MSSQLSERVER ※本環境ではすべての機能を1台のサーバーにンストールした

Page 7: 構築手順 Ssis イベントログ取込み 第2版

第1章 準備

Page 8: 構築手順 Ssis イベントログ取込み 第2版

Windows Server にログオン

ドメン全体に対するシステム管理権限を持ったユーザー(規定はAdministrator)でログオンしてください。 本プロジェクトでは、便宜上、SQL Server の管理者 と ドメンの管理者は Administrator であるとします。

Page 9: 構築手順 Ssis イベントログ取込み 第2版

LOGREPORT データベースの作成

Page 10: 構築手順 Ssis イベントログ取込み 第2版

SQL Server Management Studioの起動

[スタート] - [すべてのプログラム] - [SQl Server 2008 R2 Novenver CTP ] - [SQL Server Management Studio] をクリック [サーバーへの接続]ダゕログボックスが起動したら、以下のように選択して[接続] をクリック

Page 11: 構築手順 Ssis イベントログ取込み 第2版

新しいデータベース [データベース]を右クリックし、[新しいデータベース]を選択 [新しいデータベース]ダゕログのデータベース名に「LogReport]と入力し、[OK]

Page 12: 構築手順 Ssis イベントログ取込み 第2版

COMPUTERLISTテーブルの作成

Page 13: 構築手順 Ssis イベントログ取込み 第2版

新規テーブルの作成 [データベース]-[LogReport]-[テーブル] を右クリックして[新しいテーブル]を選択 列名とデータ型を以下の通り入力する。いずれ列もNULLは許容しないものとする。

Page 14: 構築手順 Ssis イベントログ取込み 第2版

テーブル名を設定

保存ボタンをクリックすると[名前の選択]ダゕログが表示されるので、テーブル名として「ComputerList」を入力する

Page 15: 構築手順 Ssis イベントログ取込み 第2版

値を追加する ComputerListテーブルを右クリックし、「上位200行の編集」をクリックする 画面右側にテーブルの編集画面が表示されるので、以下のように入力する。ここでは、「SQL01」の「Systemベントログ」と「Applicationベントログ」を指定している。

Page 16: 構築手順 Ssis イベントログ取込み 第2版

SSISプロジェクトの作成

Page 17: 構築手順 Ssis イベントログ取込み 第2版

Business Intelligence Development Studio の起動

[スタート] - [すべてのプログラム] - [SQl Server 2008 R2 Novenver CTP ] - [SQL Server Business Intelligence Development Studio] をクリック

Page 18: 構築手順 Ssis イベントログ取込み 第2版

プロジェクトの作成

[フゔル]-[新規作成]-[プロジェクト]をクリック

Page 19: 構築手順 Ssis イベントログ取込み 第2版

Integration Services プロジェクトを選択

[Integration Services プロジェクト] を選択し、プロジェクト名をにゅうりょくして [OK] をクリック。

プロジェクト名は「LogReport」とした

Page 20: 構築手順 Ssis イベントログ取込み 第2版

パッケージ名を設定

ここでは、プロジェクト名と同じ名前「LogReport」

とした

画面右側のソリューションエクスプローラーの[SSISパッケージ]ノード配下で、パッケージをクリックして名前を指定する

Page 21: 構築手順 Ssis イベントログ取込み 第2版

第2章 パッケージの作成

Page 22: 構築手順 Ssis イベントログ取込み 第2版

1.制御フローの作成

Page 23: 構築手順 Ssis イベントログ取込み 第2版

制御フローを開く

[制御フロー]タブをクリックして制御フローウゖンドウを開く

Page 24: 構築手順 Ssis イベントログ取込み 第2版

「ソース取り込み」部の作成 ComputerListテーブルに接続し、ベントログが格納されているコンピューターと、取込対象のベントログの名前に一覧を取得する

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

Page 25: 構築手順 Ssis イベントログ取込み 第2版

[SQL実行タスク]を張り付ける

[ツールボックス]の[制御フロー項目]より[SQL実行タスク]を、制御フローフゖールドにドラッグ&ドロップする

Page 26: 構築手順 Ssis イベントログ取込み 第2版

タスクの名称を変更する

制御フロー項目の名称を既定の「SQL実行タスク1」から「ソース取り込み」に変更する。※変更しなくても動作に影響はない

Page 27: 構築手順 Ssis イベントログ取込み 第2版

プロパテゖシートを開く

「ソース取り込み」をダブルクリックして、プロパテゖシートを開く

Page 28: 構築手順 Ssis イベントログ取込み 第2版

ConnectionTypeの選択

[ConnectionType]から[ADO.NET]を選択する。 ADO.NETが無い場合には、[OLE DB]のままでもよい

Page 29: 構築手順 Ssis イベントログ取込み 第2版

接続マネージャーの作成① [Connection]から[新しい接続]を選択して[ADO.NETの接続マネージャーの構成]を開き、[新規作成]をクリックする

<新しい接続>を選択

Page 30: 構築手順 Ssis イベントログ取込み 第2版

接続マネージャーの作成②

[サーバー名]と[データベースの名の選択または入力] を入力する ここでは、「sql01」 および 「LogReport」 を入力した。

SQL Serverのサーバー名 「sql01」

事前に作成しておいたデータベース「LogReport」

Page 31: 構築手順 Ssis イベントログ取込み 第2版

接続マネージャーの作成③

sql01.LogReport という名前の接続マネージャーが作成されたことを確認

Page 32: 構築手順 Ssis イベントログ取込み 第2版

ComputerListテーブルのレコードを取得するためのSQL文を入力

[SQLSourceType] が 「直接入力」になっていることを確認し、[SQLStatement] 欄にSQL文を入力する

Select ComputerName,LogfileName From dbo.ComputerList

Page 33: 構築手順 Ssis イベントログ取込み 第2版

結果セットを設定

[ResultSet] を 「完全な結果セット」に設定する。 これにより、SQLの結果が「データセット」で返される。

Page 34: 構築手順 Ssis イベントログ取込み 第2版

結果セットの格納先を設定① SQLの戻り値である結果セットの格納先となる変数を設定する。 [結果セット] - [追加] をクリックし、[結果名]に「0」を入力。 [変数名]をプルダウンして「<新しい変数>」を選択する。

Page 35: 構築手順 Ssis イベントログ取込み 第2版

結果セットの格納先を設定②

結果セットを格納する変数を定義する。 以下の通りに入力し、[OK]をクリック。

変数名

変数のスコープ

持ち間違えてしまったら次のページを参照していったん削除し、 再度同じ操作を繰り返す

「Object」を選択

Page 36: 構築手順 Ssis イベントログ取込み 第2版

結果セットの格納先を設定③

変数の定義を間違えた場合には、いったん削除し、②の操作を再度行う。

左端にある「変数」をクリックして変数一覧を表示する 画面左端に「変数」ボタンが無い場合には、 [表示]メニュー-[その他のウィンドウ]-[変数] を選択

クリックして削除

Page 37: 構築手順 Ssis イベントログ取込み 第2版

デバッグの実行① ここまでの設定が正しく行われていることを確認するために、デバッグを実行してみる。画面上の[デバッグ開始ボタン]をクリックし、最終的に「ソース取り込み」が緑色になることを確認する。 終了したら「デバッグ停止」をクリックする。

問題なければ緑色になる

「緑」ではなく「赤」の場合には設定に問題があるので、次のページを参照のこと

デバッグ開始

デバッグ停止

Page 38: 構築手順 Ssis イベントログ取込み 第2版

デバッグの実行② デバッグ結果が「赤」くなりエラーとなった場合には、[進行状況]タブをクリックしてエラーメッセージを確認する。

この場合はSQL文の列名に間違いがあることがわかる

Page 39: 構築手順 Ssis イベントログ取込み 第2版

「ソースごとに繰り返し」部の作成 「ソース取り込み」で作成した「ComputerList」オブジェクトからデータを繰り返して取り出す処理を作成する

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ ※ループの作成のみ

Page 40: 構築手順 Ssis イベントログ取込み 第2版

Foreachループコンテナを配置

ツールボックスの「制御フロー項目」から[Foreachループコンテナー」をドラッグ&ドロップして配置する

Page 41: 構築手順 Ssis イベントログ取込み 第2版

「ソース取り込み」と「Foreachループコンテナ」の接続

「ソース取り込み」下部の「緑の線」をクリックし、次に「Foreachループコンテナー」をクリックすると、以下のように接続される。 これは、「ソース取り込み」処理が完了したら「Foreachループコンテナ」に処理が移ることを意味している。

Page 42: 構築手順 Ssis イベントログ取込み 第2版

Foreachループコンテナの名称変更

Foreachループコンテナの名称を、「ソースごとに処理を繰り返し」に変更する。※変更しなくても処理自体に影響はない

Page 43: 構築手順 Ssis イベントログ取込み 第2版

Foreachループコンテナの引数を設定 Foreachループコンテナの引数を設定するため、[コレクション]を選択する

ADO列挙子を選択

「ソース取り込み」の戻り値(データセット)が格納されているComputerList を選択

ComputerList内のレコードをすべて取り込むことを指定

Page 44: 構築手順 Ssis イベントログ取込み 第2版

引数 User::ComputerList の格納先変数を定義①

ComputerList 変数は データセットであるため、これを1行ずつ取り込むための変数を定義し、ComputerList から読み込んだレコードの格納先を指定する。 なお、ComputerListは1行あたり2列(ComputerName, LogFileName)が含まれるので、2つの変数を定義する必要がある。

ComputerName

User::ComputerList

LogFileName

ComputerName LogFileName

User::ComputerName

User::LogFileName

列0 列1

列0

列1

Page 45: 構築手順 Ssis イベントログ取込み 第2版

引数 User::ComputerList の格納先変数を定義②

ンデックスには「0」を入れる

変数 tmpComputerName を定義する

Page 46: 構築手順 Ssis イベントログ取込み 第2版

引数 User::ComputerList の格納先変数を定義③

ンデックスには「1」を入れる

変数 tmpLogFileName を定義する

Page 47: 構築手順 Ssis イベントログ取込み 第2版

引数 User::ComputerList の格納先変数を定義④

以下のように定義されてることを確認する。 くれぐれも、変数名とンデックス番号の対応に間違いが無いように!

Page 48: 構築手順 Ssis イベントログ取込み 第2版

デバッグ ~ブレークポントの設定 「ソースごとに処理を繰り返し」を右クリックして[ブレークポントの編集] を選択する 「ブレークポントの設定」画面が表示されるので「ループの各繰り返しの開始点で停止します」をチェックする

Page 49: 構築手順 Ssis イベントログ取込み 第2版

デバッグ ~ 実行

①実行する ②この状態でいったん

停止する

③ローカルウゖンドウのペンをドラッグし

て大きくする

④Variables の「+」をクリックして展開する

ブレークポントが設定されていることを示

している

Page 50: 構築手順 Ssis イベントログ取込み 第2版

デバッグ ~変数をウオッチ式に追加 [ローカル]ウゖンドウの「Variable 一覧」から「User::tmpComputerName」 と 「User::tmpLogFileName」を選択後、右クリックして「ウオッチ式の追加」をクリック

選択して右クリック

Page 51: 構築手順 Ssis イベントログ取込み 第2版

デバッグ ~ウオッチ画面で変数の中身を確認

①デバッグ開始

②ループの頭でいったん停止する 処理中の項目は黄色くなる

③変数の値がComputerListテーブル内のレコードと同じであることを確認する

ComputerListテーブルのレコードの数だけ繰り返すことに注意する

Page 52: 構築手順 Ssis イベントログ取込み 第2版

「テーブル作成」部の作成 ループの頭では、ベントログを格納するレコードが存在するかどうかをチェックし、なければ作成する

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

Page 53: 構築手順 Ssis イベントログ取込み 第2版

SQL実行タスクをループ内に配置

テーブルを作成するためのSQL文を発行するので、[ツールボックス]-[制御フロー項目]から[SQL実行タスク] を選択し、「ソースごと処理を繰り返し」内にドラッグする

Page 54: 構築手順 Ssis イベントログ取込み 第2版

SQL実行タスクの名前を変更する

SQL実行タスクの名前を「テーブル作成」に変更する ※この作業は処理自体に影響を与えません

Page 55: 構築手順 Ssis イベントログ取込み 第2版

接続オブジェクトを選択 SQL実行タスク「テーブル作成」をダブルクリックしてプロパテゖシートを表示する ConnectionType で「ADO.NET」を選択 Connection には、既に作成してある接続マネージャ「sql01.LogReport」を選択する

sql01.LogReport は、ComputerList テーブルへの接続にも使用したもの。要は接続文字列なので同じものを使用しても問題はない。

Page 56: 構築手順 Ssis イベントログ取込み 第2版

SQLStatementをExpressionで作成① ループを1回まわるたびに、ベントログのフゔル名(tmpLogFileName)を使用したテーブルを作成したい。しかし固定の SQL文を設定したので、テーブル名も固定になってしまう。そこで、[SQLStatement]に記述するSQL文に変数「User::tmpLogFileName」を使用できるようにする。 そのためには Expression(式)機能を使用する。この機能を使用すると、各属性の値を「式」を使って表現することができ、式の中には「変数」を使用することができる。

「式」を選択 クリック

Page 57: 構築手順 Ssis イベントログ取込み 第2版

SQLStatementをExpressionで作成②

②クリック

①SqlStatementSource を選択

Page 58: 構築手順 Ssis イベントログ取込み 第2版

※ Eventlog_<LogFileName>テーブル の形式

Number(int)(key)

Category(nvarchar(50))

CategoryString(nvarchar(50))

ComputerName(nvarchar(50))

Data(nvarchar(max))

EventCode(nvarchar(50))

EventIdentifier(nvarchar(50))

InsertionStrings(nvarchar(50))

Logfile(nvarchar(50))

Message(nvarchar(max))

RecordNumber(int)

SourceName(nvarchar(max))

TimeGenerated(datetime)

TimeWritten(datetime)

Type(nvarchar(50))

User(nvarchar(50))

作成したいテーブルは以下の形式

Page 59: 構築手順 Ssis イベントログ取込み 第2版

SQLStatementをExpressionで作成③

次のページへ

[式ビルダー]に「もしテーブルが無かったら作成する」SQL文を記述する

ここにSQL文を入力する

Page 60: 構築手順 Ssis イベントログ取込み 第2版

"IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[EventLogData_"+ @[User::tmpLogfileName] +"]') AND type in (N'U') ) "+ "CREATE TABLE [dbo].[EventLogData_"+ @[User::tmpLogfileName] +"] ( [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_"+ @[User::tmpLogfileName] +"] 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]"

Page 61: 構築手順 Ssis イベントログ取込み 第2版

デバッグ デバッグを実行し、ComputerListで指定したテーブルが作成されるかどうかを確認する。テーブルの名前は「Eventlog_Security」などとなる。

すべてのタスクが緑で完了することを確認

SQL Server Management Studioで、ComputerListで指定したテーブルが作成されたことを確認する。 確認後は削除してしまってもよい。

Page 62: 構築手順 Ssis イベントログ取込み 第2版

「取込範囲のチェック」部の作成 定期的に実行して最新のベントログを取り込む場合、前回取り込んだベントログの範囲をチェックする必要がある。ここではベントログのTimeWritten を使用する。

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

Page 63: 構築手順 Ssis イベントログ取込み 第2版

「SQL実行タスク」をループ内に配置する 既に保存されているベントログの最終の「TimeWritten」値をチェックするためのには、SQL文を発行して確認する必要がある。そのため、SQL文を発行するための「SQL実行タスク」をループ内に配置する。

Page 64: 構築手順 Ssis イベントログ取込み 第2版

「テーブルの作成」と「SQL実行タスク」を接続

「テーブル作成」の次に取込範囲のチェックを実施するので、「テーブル作成」の緑の矢印を「SQL実行タスク」に接続する。

Page 65: 構築手順 Ssis イベントログ取込み 第2版

「SQL実行タスク」の名前を変更

「SQL実行タスク」を「取込範囲のチェック」に名称を変更する

Page 66: 構築手順 Ssis イベントログ取込み 第2版

接続オブジェクトを選択① SQL実行タスク「取込範囲のチェック成」をダブルクリックしてプロパテゖシートを表示する

ConnectionType で「OLE DB」を選択 Connection で、「<新しい接続>」を選択する

このタスクでは戻り値がDateTime形式となる。ADO.NET では、戻り値が無い場合にNULLを格納しようとするが、OLE DBで接続すると「1989/12/30 00:00:00」を戻すためエラーとならず都合がよい。

Page 67: 構築手順 Ssis イベントログ取込み 第2版

接続オブジェクトを選択②

Page 68: 構築手順 Ssis イベントログ取込み 第2版

「SQLStatement」の値を「式」で定義する① ループを1回まわるたびに、テーブル名「Eventlog_<User::tmpLogFileName>」 に格納されている「<User::ComputerName>」のログから、最大の 「TimeWritten」値をチェックしたい。そのために、 Expression(式)機能を使用してSQL文を作成する。

①「式」を選択 ②クリック

Page 69: 構築手順 Ssis イベントログ取込み 第2版

「SQLStatement」の値を「式」で定義する②

②クリック

①SqlStatementSource を選択

Page 70: 構築手順 Ssis イベントログ取込み 第2版

「SQLStatement」の値を「式」で定義する③

Page 71: 構築手順 Ssis イベントログ取込み 第2版

"Select Max( TimeWritten ) as MaxTimeWritten From [LogReport].[dbo].[EventLogData_"+ @[User::tmpLogFileName] + "] Where [ComputerName] Like '" + @[User::tmpComputerName] + "%'"

@[User::tmpLogFileName] はログフゔル名 @[User::tmpComputerName] はコンピューター名

[ComputerName] 列を前方一致で検索している

戻り値は MaxTimeWritten に格納される

変数名は大文字小文字を区別することに注意!

Page 72: 構築手順 Ssis イベントログ取込み 第2版

戻り値を設定①

①「全般」を選択

②「単一行」を選択

SQL文の戻り値は「TimeWritten」値のうち最も新しい日時。つまり、単一行の値が返される。

Page 73: 構築手順 Ssis イベントログ取込み 第2版

戻り値を設定② 結果セットの設定 「結果セット」-「追加」をクリック 「結果名」に「0」を入力し、「変数名」から「<新しい変数>」を選択

Page 74: 構築手順 Ssis イベントログ取込み 第2版

戻り値を設定③ 変数の定義

SQL文も戻り値が格納される、MaxTimeWritten 変数を定義する

日付の形式を指定する 形式があっていれば適当な値でOK

変数のスコープはループ内のみでよいので「ソースごとに処理を繰り返

し」ループを選択してある

Page 75: 構築手順 Ssis イベントログ取込み 第2版

デバッグの実行①

「デバッグ開始」ボタンをクリックし、デバッグを開始する ループの頭でいったん停止するので、画面下部のローカルウゖンドウから[Valuables]-[User;;MaxTimeWritten]を右クリックして[ウォッチ式の追加]をクリック この時点では変数には初期値が格納されている。

Page 76: 構築手順 Ssis イベントログ取込み 第2版

デバッグの実行②

ウォッチ式の一覧に「User::MaxTimeWritten」が表示されたことを確認したら、「再開」ボタンでデバッグを再開する。

初期値

レコードが無いと「1899/12/30 0:00:00」が返される

Page 77: 構築手順 Ssis イベントログ取込み 第2版

デバッグの実行③ 全てが「緑」となり正常に完了することを確認する。

Page 78: 構築手順 Ssis イベントログ取込み 第2版

「イベントログを一括取得」部の作成 WMIを使用してリモートコンピューターのベントログを一括取得する。 取得したベントログはデータセットに格納される。

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

Page 79: 構築手順 Ssis イベントログ取込み 第2版

「WMIデータリーダータスク」を配置

Page 80: 構築手順 Ssis イベントログ取込み 第2版

タスク名の変更と優先順位制約の接続

タスク名を「ベントログを一括取得」に変更し、「取込範囲のチェック」から「ベントログを一括取得」に対して優先順位制約(緑の線のこと)を接続する

Page 81: 構築手順 Ssis イベントログ取込み 第2版

WMI接続用の接続マネージャーを作成

「テスト」をクリックしてLocalhostと接続できることを確認してみる

Page 82: 構築手順 Ssis イベントログ取込み 第2版

WMI用のクエリー設定

WMI 用のクエリー(WQL)は変数に格納して渡すように設定する

Page 83: 構築手順 Ssis イベントログ取込み 第2版

WQLを格納する変数の定義

これが変数名

Page 84: 構築手順 Ssis イベントログ取込み 第2版

戻り値の設定①

データテーブル形式

「変数」を選択

<新しい変数>

戻り値はベントログが格納されたデータセットとなる。 データセットはあとで使用するために、変数に格納する。

Page 85: 構築手順 Ssis イベントログ取込み 第2版

戻り値の設定② 変数の定義

必ずObject形式を選択する!

Page 86: 構築手順 Ssis イベントログ取込み 第2版

変数の「式」を設定する① 画面左側の「変数」をクリックして変数一覧を表示する。 いま作成した「WQL」をクリックすると、画面右下のプロパテゖシートに「WQL」のプロパテゖが表示される

Page 87: 構築手順 Ssis イベントログ取込み 第2版

変数の「式」を設定する②

Page 88: 構築手順 Ssis イベントログ取込み 第2版

変数の「式」を設定する③

忘れずに「True」にする

Page 89: 構築手順 Ssis イベントログ取込み 第2版

"Select * from Win32_NTLogEvent where logfile='"+ @[User::tmpLogFileName] + "' and TimeWritten > '" + (DT_WSTR, 20) @[User::MaxTimeWritten] + "'"

• @[User::tmpLogFileName] は検索したいログフゔル名 • (DT_WSTR, 20) は 20バトのUnicode文字列 • @[User::MaxTimeWritten] は最も新しいレコードの書き込み日時

Page 90: 構築手順 Ssis イベントログ取込み 第2版

デバッグ①

「デバッグ開始」ボタンをクリックして、デバッグを開始する。 「ローカル」ウゖンドウから「User::WQL」を右クリックして「ウォッチ式の追加」を実行する。

Page 91: 構築手順 Ssis イベントログ取込み 第2版

デバッグ②

変数 User::WQL にWQL文が代入されていることを確認する

取得してくるログが多い場合、「ベントログの一括取得」はしばらく黄色のままになることがある。

Page 92: 構築手順 Ssis イベントログ取込み 第2版

「レコードを1件ずつ取り出し」部の作成

前項のゕウトプットであるベントログが格納されたデータセットを1行ずつ読み込むためのForEachループを作成する。取り出したレコードは各列を変数に格納する。

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

※ループの作成のみ

Page 93: 構築手順 Ssis イベントログ取込み 第2版

Foreachループコンテナを配置する

Page 94: 構築手順 Ssis イベントログ取込み 第2版

コンテナ名を変更し優先順位制約の接続

Page 95: 構築手順 Ssis イベントログ取込み 第2版

引数の設定 ループの引数として、WMIの戻り値である User::EventDataを設定する

EventDataはデータセットが格納されている

Page 96: 構築手順 Ssis イベントログ取込み 第2版

引数の各カラム格納する変数を定義する 全てObject型で定義する。最終的に、次のページと同じくなるようにする。

間違えずに!

Page 97: 構築手順 Ssis イベントログ取込み 第2版

各変数はベントログの各カラムに対応しており、順番も各カラムの並び順

全てObject型

Page 98: 構築手順 Ssis イベントログ取込み 第2版

デバッグ デバッグを実行し、処理が正常に完了することを確認する。

Page 99: 構築手順 Ssis イベントログ取込み 第2版

「INSERT文を作成」部の作成

ここではSQL Serverに格納するためのInsert文をスクリプトタスクを使用して作成する。ベントログにはさまざまな文字列が含まれているため、SQL文エラーとならないよう簡単なVB.NETを使用して微調整する。

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成 ここ

Page 100: 構築手順 Ssis イベントログ取込み 第2版

スクリプトタスクの配置

「レコードを1件ずつ取り出し」ループに、「スクリプトタスク」を配置する

Page 101: 構築手順 Ssis イベントログ取込み 第2版

名称を「Insert文を作成」に変更する

Page 102: 構築手順 Ssis イベントログ取込み 第2版

スクリプト言語を「VB」に切り替える

Page 103: 構築手順 Ssis イベントログ取込み 第2版

変数を定義する①

「レコードを1件ずつ取り出す」ループをクリックし、「変数」ボックスを表示する。 以下の「変数の新規作成」ボタンをクリックして新しい変数を定義する。

スコープを「レコードを1件ずつ取り出す」にするということ

Page 104: 構築手順 Ssis イベントログ取込み 第2版

変数を定義する② InsertSQL変数を作成

この後のタスクで実行するSQL文が格納される変数。

Page 105: 構築手順 Ssis イベントログ取込み 第2版

引数を指定する

スクリプトタスクの引数として、前項「レコードを1件ずつ取り出し」で作成した変数すべてと、いま作成した InsertSQL を指定する。

Page 106: 構築手順 Ssis イベントログ取込み 第2版

引数を指定する②

Page 107: 構築手順 Ssis イベントログ取込み 第2版

スクリプト編集画面を開く

次ページ以降のスクリプトを入力する

Page 108: 構築手順 Ssis イベントログ取込み 第2版

Dim strCategory As String = "" If Not IsDBNull(Dts.Variables("User::Category").Value) Then strCategory = Dts.Variables("User::Category").Value.ToString End If Dim strCategoryString As String = "" If Not IsDBNull(Dts.Variables("User::CategoryString").Value) Then strCategoryString = Dts.Variables("User::CategoryString").Value.ToString End If Dim strComputerName As String = "" If Not IsDBNull(Dts.Variables("User::ComputerName").Value) Then strComputerName = Dts.Variables("User::ComputerName").Value End If Dim strData As String = "" If Not IsDBNull(Dts.Variables("User::Data").Value) Then strData = Dts.Variables("User::Data").Value.ToString End If Dim strEventCode As String = "" If Not IsDBNull(Dts.Variables("User::EventCode").Value) Then strEventCode = Dts.Variables("User::EventCode").Value.ToString End If Dim strEventIdentifier As String = "" If Not IsDBNull(Dts.Variables("User::EventIdentifier").Value) Then strEventIdentifier = Dts.Variables("User::EventIdentifier").Value.ToString End If

変数を初期化 -----------------ここから

Page 109: 構築手順 Ssis イベントログ取込み 第2版

Dim strEventType As String = "" If Not IsDBNull(Dts.Variables("User::EventType").Value) Then strEventType = Dts.Variables("User::EventType").Value.ToString End If Dim strInsertionString As String = "" If Not IsDBNull(Dts.Variables("User::InsertionString").Value) Then strInsertionString = Dts.Variables("User::InsertionString").Value.ToString End If Dim strLogfile As String = "" If Not IsDBNull(Dts.Variables("User::Logfile").Value) Then strLogfile = Dts.Variables("User::Logfile").Value.ToString End If Dim strMessage As String = "" If Not IsDBNull(Dts.Variables("User::Message").Value) Then strMessage = Dts.Variables("User::Message").Value.ToString strMessage = Replace(strMessage, "'", "-") End If Dim strRecordNumber As String = "" If Not IsDBNull(Dts.Variables("User::RecordNumber").Value) Then strRecordNumber = Dts.Variables("User::RecordNumber").Value.ToString End If

変数を初期化

Message内のシンングルクオーテーションをハフンに置き換え

Page 110: 構築手順 Ssis イベントログ取込み 第2版

Dim strSourceName As String = "" If Not IsDBNull(Dts.Variables("User::SourceName").Value) Then strSourceName = Dts.Variables("User::SourceName").Value.ToString End If Dim strTimeGenerated As String = "19000101 00:00:00" If Not IsDBNull(Dts.Variables("User::TimeGenerated").Value) Then strTimeGenerated = Dts.Variables("User::TimeGenerated").Value.ToString ‘YYYYMMDD HH:NN:SS 形式を生成

strTimeGenerated = Mid(strTimeGenerated, 1, 8) & " " & _ Mid(strTimeGenerated, 9, 2) & ":" & _ Mid(strTimeGenerated, 11, 2) & ":" & _ Mid(strTimeGenerated, 13, 2) End If Dim strTimeWritten As String = "19000101 00:00:00" If Not IsDBNull(Dts.Variables("User::TimeWritten").Value) Then strTimeWritten = Dts.Variables("User::TimeWritten").Value.ToString 'YYYYMMDD HH:NN:SS strTimeWritten = Mid(strTimeWritten, 1, 8) & " " & _ Mid(strTimeWritten, 9, 2) & ":" & _ Mid(strTimeWritten, 11, 2) & ":" & _ Mid(strTimeWritten, 13, 2) End If

変数を初期化

Page 111: 構築手順 Ssis イベントログ取込み 第2版

変数を初期化 Dim strType As String = "" If Not IsDBNull(Dts.Variables("User::Type").Value) Then strType = Dts.Variables("User::Type").Value.ToString End If Dim strUser As String = "" If Not IsDBNull(Dts.Variables("User::User").Value) Then strUser = Dts.Variables("User::User").Value.ToString End If

Page 112: 構築手順 Ssis イベントログ取込み 第2版

Dim strSQL As String = "INSERT INTO [LogReport].[dbo].[EventLogData_" & strLogfile & "] ([Category]" & _ ",[CategoryString]" & _ ",[ComputerName]" & _ ",[Data]" & _ ",[EventCode]" & _ ",[EventIdentifier]" & _ ",[EventType]" & _ ",[InsertionStrings]" & _ ",[LogFile]" & _ ",[Message]" & _ ",[RecordNumber]" & _ ",[SourceName]" & _ ",[TimeGenerated]" & _ ",[TimeWritten]" & _ ",[Type]" & _ ",[User])" & _

" VALUES('" & strCategory & "'," & _ "'" & strCategoryString & "'," & _ "'" & strComputerName & "'," & _ "'" & strData & "'," & _ "'" & strEventCode & "'," & _ "'" & strEventIdentifier & "'," & _ "'" & strEventType & "'," & _ "'" & strInsertionString & "'," & _ "'" & strLogfile & "'," & _ "'" & strMessage & "'," & _ "" & strRecordNumber & "," & _ "'" & strSourceName & "'," & _ "'" & strTimeGenerated & "'," & _ "'" & strTimeWritten & "'," & _ "'" & strType & "'," & _ "'" & strUser & "')"

SQL文を作成

Page 113: 構築手順 Ssis イベントログ取込み 第2版

Dts.Variables("User::InsertSQL").Value = strSQL Dts.Variables("User::Category").Value = Nothing Dts.Variables("User::CategoryString").Value = Nothing Dts.Variables("User::ComputerName").Value = Nothing Dts.Variables("User::Data").Value = Nothing Dts.Variables("User::EventCode").Value = Nothing Dts.Variables("User::EventIdentifier").Value = Nothing Dts.Variables("User::EventType").Value = Nothing Dts.Variables("User::InsertionString").Value = Nothing Dts.Variables("User::Logfile").Value = Nothing Dts.Variables("User::Message").Value = Nothing Dts.Variables("User::RecordNumber").Value = Nothing Dts.Variables("User::SourceName").Value = Nothing Dts.Variables("User::TimeGenerated").Value = Nothing Dts.Variables("User::TimeWritten").Value = Nothing Dts.Variables("User::Type").Value = Nothing Dts.Variables("User::User").Value = Nothing

生成したSQL文を、InsertSQL変数に格納 ここで作成したInsertSQLを、この後のタスクで実行する

-----------------ここまで

Page 114: 構築手順 Ssis イベントログ取込み 第2版

「INSERT INTOを実行」部の作成

作成したInsert文を実行してSQL Serverにデータを格納する

ソース取得

開始

ソースごとに処理を繰り返し

テーブル作成

取り込み範囲のチェック

ベントログを一括取得

レコードを1件ずつ取り出し

Insert into …

終了

Insert 文を生成

ここ

Page 115: 構築手順 Ssis イベントログ取込み 第2版
Page 116: 構築手順 Ssis イベントログ取込み 第2版
Page 117: 構築手順 Ssis イベントログ取込み 第2版