Windows Event Log bedolgozás MSSQL adatbázisba

2007-04-30 21:06:33
Címkék: windows , script , mssql , event log

Több szerver esetén az eseménynaplókat igencsak nehéz követni. Ráadásul lehetnek olyan alkalmazások, amik teleszemetelik a logot normális működés esetén is. A Windows beépített "Event Viewer-e (eventvwr.msc)" igencsak kevés szűrési lehetőséget kínál, igény lehet esetleg valamilyen kúltúrált módon feldolgozni a naplóban lévő adatokat, bejegyzéseket. Az alább található scriptek segítenek az eseménynapló könnyebb szűrésében olyan módon, hogy egy MSSQL adatbázisba teszik az utolsó gyűjtés óta keletkezett bejegyzéseket, onnan pedig könnyen olvasható módon, tetszőleges feltételekkel szűrve le lehet kérdezni.


Teljes bejegyzés

Tábladefiníció (MSSQL-hez)

CREATE TABLE [dbo].[events] (
[EventID] [int] IDENTITY (1, 1) NOT NULL ,
[RecordNumber] [int] NULL ,
[Category] [int] NULL ,
[CategoryString] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ComputerName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[EventCode] [int] NULL ,
[EventType] [int] NULL ,
[LogFile] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Message] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[SourceName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeGenerated] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Type] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[UserName] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TimeWritten] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
)
GO

 CREATE  CLUSTERED  INDEX [IX_CL_Written] ON [dbo].[events]([TimeWritten]) WITH  FILLFACTOR = 90
GO

 CREATE  UNIQUE  INDEX [IX_Events01] ON [dbo].[events]([EventID]) WITH  FILLFACTOR = 90
GO

A gyűjtő script, visual basicben (evtosql.vbs)

Option Explicit
Dim objWMI, colLoggedEvents, strComputer, objItem, cnames, conn, cmd, rs, lasttime

cnames = Array("MSSQLDB01", "MSSQLDB02")

set conn = CreateObject("ADODB.Connection")
set cmd = CreateObject("ADODB.Command")
set rs = CreateObject("ADODB.RecordSet")
conn.Open "DRIVER={SQL Server};SERVER=mssql_szerver;DATABASE=teszt;UID=teszt;PWD=teszt"
set cmd.ActiveConnection = conn

For Each strComputer In cnames

  rs.Open "select ISNULL(MAX(TimeWritten), '2007') as TimeWritten from events where ComputerName = '" & strComputer & "'", conn
  lasttime = rs("TimeWritten")
  rs.Close

  set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent where TimeWritten > '" & lasttime & "' and LogFile != 'Security'")

  WScript.Echo "Processing: " & strComputer
  For Each objItem in colLoggedEvents
      cmd.CommandText = "insert into events (RecordNumber, Category, CategoryString, ComputerName, EventCode, EventType, LogFile, Message, SourceName, TimeGenerated, Type, TimeWritten, UserName) values (" & _
      "" & objItem.RecordNumber & ", " & _
      "" & objItem.Category & ", " & _
      "'" & objItem.CategoryString & "', " & _
      "'" & objItem.ComputerName & "', " & _
      "" & objItem.EventCode & ", " & _
      "" & objItem.EventType & ", " & _
      "'" & objItem.LogFile & "', " & _
      "'" & Replace(objItem.Message & " ", "'", """") & "', " & _
      "'" & objItem.SourceName & "', " & _
      "'" & objItem.TimeGenerated & "', " & _
      "'" & objItem.Type & "', " & _
      "'" & objItem.TimeWritten & "', " & _
      "'" & objItem.User & "')"
      cmd.Execute
  Next
  WScript.Echo "Done: " & strComputer

Next

WSCript.Quit

Egy kellemes kis lekérdezés, amit tetszőlegesen lehet szűrni az értékes információért (events.sql)

print ''
print ''
print '~~~~~~~~~'
print 'Esemenyek'
print '~~~~~~~~~'
print ''
declare @day int
set @day = 3
select  SubString(TimeWritten, 1, 4) + '-' + SubString(TimeWritten, 5, 2) + '-' +
        SubString(TimeWritten, 7, 2) + ' ' + SubString(TimeWritten, 9, 2) + ':' +
        SubString(TimeWritten, 11, 2) + ':' + SubString(TimeWritten, 13, 2) [TimeWritten]
       ,SubString(ComputerName, 1, 15) [ComputerName]
       ,SubString(LogFile, 1, 3) [Log]
       ,SubString(SourceName, 1, 20) [SourceName]
       ,SubString(Type, 1, 1) [Type]
       ,SubString(Replace(SubString(Message, 1, 512), char(13)+char(10), ''), 1, 60) [Message]
  from teszt.dbo.events
 where EventType != 3
   and SourceName not in ('W32Time', 'Print')
   and TimeWritten > (Cast(DatePart(yyyy, GetDate()-@day) as varchar(4))
       +CASE
         WHEN DatePart(mm, GetDate()-@day)<10
         THEN '0'+Cast(DatePart(mm, GetDate()-@day) as varchar(4))
         ELSE Cast(DatePart(mm, GetDate()-@day) as varchar(4))
        END
       +CASE
         WHEN DatePart(dd, GetDate()-@day)<10
         THEN '0'+Cast(DatePart(dd, GetDate()-@day) as varchar(4))
         ELSE Cast(DatePart(dd, GetDate()-@day) as varchar(4))
        END)
 order by TimeWritten desc

Egy batch fájl, ami mindent elintéz (evsql.bat)

@echo off
cscript evtosql.vbs
osql -E -s "|" -w 146 -S MSSQL_SZERVER -i events.sql | findstr /v "affec" | findstr /v ">"
echo Vege
pause > nul

Windows Event Log bedolgozás MSSQL adatbázisba [update 1]

2015-04-30 22:23:52
Címkék: windows , script , mssql , event log

Korábbi leírás alapján kicsit módosított scriptek.

Tábladefiníció (MSSQL 2012-höz)


Teljes bejegyzés
CREATE TABLE [dbo].[events](
    [EventID] [int] IDENTITY(1,1) NOT NULL,
    [RecordNumber] [int] NULL,
    [Category] [int] NULL,
    [CategoryString] [varchar](255) NULL,
    [ComputerName] [varchar](255) NULL,
    [EventCode] [int] NULL,
    [EventType] [int] NULL,
    [LogFile] [varchar](32) NULL,
    [Message] [text] NULL,
    [SourceName] [varchar](255) NULL,
    [TimeGenerated] [datetime] NULL,
    [Type] [varchar](255) NULL,
    [UserName] [varchar](255) NULL,
    [TimeWritten] [datetime] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];

A gyűjtő script, visual basicben (transfer.vbs)

Option Explicit
Dim objWMI, wbtTimeWritten, wbtTimeGenerated, colLoggedEvents, strComputer, objItem, cnames, conn, cmd, rs, lasttime, dtmRegular

cnames = Array( _
    "SQL-01", _
    "SQL-02" _
)

set wbtTimeWritten = CreateObject("WbemScripting.SWbemDateTime")
set wbtTimeGenerated = CreateObject("WbemScripting.SWbemDateTime")
set conn = CreateObject("ADODB.Connection")
set cmd  = CreateObject("ADODB.Command")
set rs   = CreateObject("ADODB.RecordSet")

conn.Provider                                = "sqloledb"
conn.Properties("Data Source").Value         = "SQL-02\SQLINSTANCE"
conn.Properties("Initial Catalog").Value     = "Management"
conn.Properties("Integrated Security").Value = "SSPI"
conn.Open

set cmd.ActiveConnection = conn

For Each strComputer In cnames
    rs.Open "select ISNULL(MAX(TimeWritten), '2007-01-01') as TimeWritten from events where ComputerName = '" & strComputer & "'", conn
    wbtTimeWritten.SetVarDate rs("TimeWritten"), true
    WScript.Stdout.write "Last: " & strComputer & " / " & wbtTimeWritten.value
    rs.Close

    set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    set colLoggedEvents = objWMI.ExecQuery("Select * from Win32_NTLogEvent where TimeWritten > '" & wbtTimeWritten.Value & "' and LogFile != 'Security'")

    WScript.Stdout.write " " & colLoggedEvents.count & " rows"
    For Each objItem in colLoggedEvents
        wbtTimeWritten.Value = objItem.TimeWritten
        wbtTimeGenerated.Value = objItem.TimeGenerated

        dtmRegular = wbtTimeWritten.GetVarDate(false)
        dtmRegular = DateAdd("h", 2, dtmRegular)
        wbtTimeWritten.SetVarDate dtmRegular, false

        dtmRegular = wbtTimeGenerated.GetVarDate(false)
        dtmRegular = DateAdd("h", 2, dtmRegular)
        wbtTimeGenerated.SetVarDate dtmRegular, false

        cmd.CommandText = "insert into events (RecordNumber, Category, CategoryString, ComputerName, EventCode, EventType, LogFile, Message, SourceName, TimeGenerated, Type, TimeWritten, UserName) values (" & _
        "" & objItem.RecordNumber & ", " & _
        "" & objItem.Category & ", " & _
        "'" & objItem.CategoryString & "', " & _
        "'" & strComputer & "', " & _
        "" & objItem.EventCode & ", " & _
        "" & objItem.EventType & ", " & _
        "'" & objItem.LogFile & "', " & _
        "'" & Replace(objItem.Message & " ", "'", """") & "', " & _
        "'" & objItem.SourceName & "', " & _
        "'" & wbtTimeGenerated.Year & "-" & wbtTimeGenerated.Month & "-" & wbtTimeGenerated.Day & " " & wbtTimeGenerated.Hours & ":" & wbtTimeGenerated.Minutes & ":" & wbtTimeGenerated.Seconds & "', " & _
        "'" & objItem.Type & "', " & _
        "'" & wbtTimeWritten.Year & "-" & wbtTimeWritten.Month & "-" & wbtTimeWritten.Day & " " & wbtTimeWritten.Hours & ":" & wbtTimeWritten.Minutes & ":" & wbtTimeWritten.Seconds & "', " & _
        "'" & objItem.User & "')"
        cmd.Execute
    Next
    WScript.Echo " done."
Next

WSCript.Quit

Egy kellemes kis lekérdezés, amit tetszőlegesen lehet szűrni az értékes információért (events.sql)

print ''
print ''
print '~~~~~~~~~'
print 'Esemenyek'
print '~~~~~~~~~'
print ''
declare @day int
set @day = 7
select [TimeWritten]
       ,SubString(ComputerName, 1, 15) [ComputerName]
       ,SubString(LogFile, 1, 3) [Log]
       ,SubString(SourceName, 1, 20) [SourceName]
       ,SubString(Type, 1, 1) [Type]
       ,SubString(Replace(SubString(Message, 1, 512), char(13)+char(10), ''), 1, 120) [Message]
  from Mgmt.dbo.events
 where EventType != 3
   and SourceName not in ('W32Time', 'Print')
   and TimeWritten > CURRENT_TIMESTAMP-@day
 order by TimeWritten desc

Egy batch fájl, ami mindent elintéz (evsql.bat)

@echo off
cscript transfer.vbs
osql -E -s "|" -w 206 -S SQL-02\SQLINSTANCE -i events.sql | findstr /v "affec" | findstr /v ">" | less
pause

Olcsó asztali órás rádió Androidból

2017-04-14 22:36:00
14

Konzol kimenet színezés

2017-01-06 13:08:37
0

Windows Event Log bedolgozás MSSQL adatbázisba [update 1]

2015-04-30 22:23:52
0

Az internetadó margójára

2014-11-01 10:39:57
0

A C4nn0N logó

2014-07-26 20:50:32
0

Virtualizálás Xen 4.4-gyel Ubuntu 14.04 alatt (64 bit)

2014-04-30 09:46:38
1

Xen és XenServer előadás

2014-04-17 06:11:00
0

HLDS-V8: Javascripttel programozható HLDS (CS 1.6)

2014-03-15 09:33:53
0

Node.js lazy hibakezelés

2013-08-19 22:08:35
0

Office 2013 animáció kikapcsolása

2013-07-02 08:31:35
1

Node.js ékezetes szövegbevitel konzolból / parancssorból

2013-06-27 07:41:54
0

Egy Counter Strike szerver üzemeltetési tapasztalatai

2013-05-17 14:21:14
7

Hogyan tegyünk grafikus felületet Ubuntu 10.04 Serverre?

2013-05-07 08:19:05
2

Torrent tracker node.js-ben 65 sorban

2013-04-28 10:23:25
0

Hányadik vagyok a Google-ben?

2013-04-24 09:09:01
0

Virtualizálás Xen 4.1-gyel Ubuntu 12.04 alatt (64 bit)

2013-01-22 08:58:15
2

Cloud Backup - Ments a felhőbe

2012-05-02 21:46:13
0

VIP plugin CS 1.6-hoz

2012-04-22 16:35:07
7

Ki az az admin?

2012-03-17 23:45:04
0

Csináltam egy blogot

2011-12-09 15:32:11
2

Az IT szabályozásokról

2009-09-01 17:30:58
0

Twitter - IRC gateway, avagy hogyan twitteljünk irc protokollon

2009-06-05 09:51:47
0

Hogyan lehet blokkolhatatlan hirdetéseket elhelyezni egy weblapon?

2008-10-28 10:56:30
11

Virtualizálás Xen-nel Ubuntu 8.04.1 Server-en

2008-09-04 18:46:02
0

Hogyan tegyünk grafikus felületet Ubuntu 8.04 Serverre?

2008-05-19 20:02:29
0

FAR Manager kedvcsináló I.

2008-05-02 11:41:02
0

Far Manager 1.80 - Open Source

2008-01-04 21:11:19
0

IBM DB2 9.5 Express install Ubuntu 7.10 Serverre

2007-12-19 10:35:03
0

IBM Websphere Application Server 6.1.0.3 Express és WAS Plugin install Ubuntu 7.10 Serverre

2007-12-19 10:33:27
0

Hogyan tegyünk grafikus felületet Ubuntu 7.10 Serverre?

2007-12-11 22:00:17
0

Warezolás, gazemberség?

2007-11-20 21:01:00
0

iSCSI Target és Initiator installálása Ubuntu 6.06.1 LTS-re

2007-10-13 18:23:40
0

Oracle 11g R1 install Ubuntu 6.06.1-re

2007-08-18 14:13:04
0

How to install Oracle 11g R1 on Ubuntu 6.06.1 LTS

2007-08-18 14:13:04
0

Hogyan tegyünk grafikus felületet Ubuntu 6.06.1 Serverre?

2007-08-18 14:09:55
0

Apache2 - WebDAV - Ubuntu 6.06.1 - Windows XP kliens

2007-08-13 19:48:34
0

CVS beállítása Ubuntu 6.06.1-re

2007-05-21 19:39:32
0

IBM DB2 8.2 Express install Debian 4.0-ra (64 bit)

2007-05-15 20:21:33
0

IBM DB2 8.2 Express install Ubuntu 6.06.1-re

2007-05-09 20:47:34
0

Lemez olvasási/írási sebesség tesztelés linux alatt

2007-05-05 20:14:30
0

Oracle Applications tippek 1.

2007-05-03 20:47:55
0

Windows Event Log bedolgozás MSSQL adatbázisba

2007-04-30 21:06:33
0

Oracle tippek 1.

2007-04-30 17:20:25
0

MySQL automatikus backup készítés jelszó felfedése nélkül

2007-04-18 23:42:51
0

LVM - logikai lemezkezelés (skicc)

2007-04-15 19:28:33
0

Counter Strike 1.6 telepítése Ubuntu 6.06.1-re

2007-04-08 12:15:32
0