设为首页 收藏本站
查看: 1187|回复: 0

[经验分享] Windows事件日志写入SQL Server并PowerBI统计分析

[复制链接]

尚未签到

发表于 2018-10-11 11:17:07 | 显示全部楼层 |阅读模式
  在这里我准备了2台系统,一个Windows Server 2012 R2的域控服务器DC01,一台SQL on CentOS7的SQL数据库服务器
DSC0000.jpg

  首先我使用SQL Manager Studio连接到SQL数据库服务器创建需要存放Windows转发事件日志的数据库“EventCollections”
  CREATE DATABASE EventCollections
  GO
  USE EventCollections
  GO

  -- the table name loosely>  CREATE TABLE [dbo].[GeneralEvents](
  [Id] [int] NULL,
  [LevelDisplayName] [varchar](255) NULL,
  [LogName] [varchar](255) NULL,
  [MachineName] [varchar](255) NULL,
  [Message] [varchar](max) NULL,
  [ProviderName] [varchar](255) NULL,
  [RecordID] [bigint] NULL,
  [TaskDisplayName] [varchar](255) NULL,
  [TimeCreated] [smalldatetime] NULL
  )
  -- Create Unique Clustered Index with IGNORE_DUPE_KEY=ON to avoid duplicates in sqlbulk imports
  CREATE UNIQUE CLUSTERED INDEX [ClusteredIndex-EventCombo] ON [dbo].[GeneralEvents]
  (
  [RecordID] ASC,
  [MachineName] ASC,
  [LogName] ASC
  ) WITH (IGNORE_DUP_KEY = ON)
  GO
DSC0001.jpg

  为了避免后面每小时导入一次日志数据时出现重复,对RecordID,MachineName和LogName使用IGNORE_DUPE_KEY=ON创建唯一的聚集索引
  接下来回到DC服务器配置事件服务
  首先需要配置WinRM,显示可用的侦听器
  winrm e winrm/config/listener
DSC0002.jpg

  执行winrm get winrm/config
  检查
  allowremoteAccess = true
DSC0003.jpg

  在日志源服务器(我们只有DC一台服务器,使用这台既是源也是收集日志服务器)把network Service加入到Event Log Readers组里
DSC0004.jpg

  然后在日志源服务器和收集日志服务器执行如下命令:
  wevtutil sl security /ca:O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;S-1-5-20)
DSC0005.jpg

  接下来打开事件查看器,点击订阅,这是会出现提示,是否启用Windows事件收集器服务,点击“是”
  之间转发使用的HTTP端口是5985
  然后创建一个新的订阅,指定需要收集的计算机,这里输入DC01
DSC0006.jpg

  选择需要订阅哪些日志,这里我选择System
DSC0007.jpg

  选择收集的事件级别
DSC0008.jpg

  在高级里指定收集日志的帐户为域管理员帐户,然后确定
DSC0009.jpg

  点击用户名密码进行输入
DSC00010.jpg

  正常:每15分钟
  最小化带宽:每6小时
  最小化延迟:每30秒
  确定
DSC00011.jpg

  这样就创建好一个收集系统日志的订阅了
DSC00012.jpg

  按照同样的方法再创建一个安全日志的订阅
DSC00013.jpg

  如果要执行命令的审计日志,可以开启下面2个位置的组策略,然后通过事件ID4688查看
  计算机配置 > 策略 > Windows 设置 > 安全设置 > 高级审核配置 > 详细跟踪>审核创建进程
DSC00014.jpg

  管理 模板\系统\审核创建的进程\在创建事件的过程中包含命令行
DSC00015.jpg

  备注:Microsoft不建议永久启用命令行审核。启用此功能后,对Windows安全事件的读取访问权限的任何用户将能够读取任何成功创建的进程的命令行参数。请记住,命令行命令可能包含机密信息,包括密码和其他用户数据
  等待15分钟后事件查看器的已转发事件里就出现了我们订阅的安全和系统日志了
DSC00016.jpg

  最后我在DC上执行如下PowerShell命令,将已转发事件的日志写入SQL里

  • 如果SQL是台Windows并且加域,那么可以采用集成身份验证方式登陆,执行下面脚本
  # While this script is intended to run on an hourly basis, the filter is set for going back 65 minutes.
  # This allows the script to run for 5 minutes without any missing any events. Because we setup the
  # table using the IGNORE_DUPE_KEY = ON, duplicate entries are ignored in the database.
  $xml = @'
  
  
  *[System[TimeCreated[timediff(@SystemTime) <= 3900000]]]
  
  
  '@

  $events = Get-WinEvent -FilterXml $xml | Select-Object>  $connectionString = "Data Source=sqlserver;Integrated Security=true;Initial Catalog=EventCollections;"
  $bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $connectionString
  $bulkCopy.DestinationTableName = "GeneralEvents"
  $dt = New-Object "System.Data.DataTable"
  # build the datatable
  $cols = $events | select -first 1 | get-member -MemberType NoteProperty | select -Expand Name
  foreach ($col in $cols) {$null = $dt.Columns.Add($col)}
  foreach ($event in $events)
  {
  $row = $dt.NewRow()
  foreach ($col in $cols) { $row.Item($col) = $event.$col }
  $dt.Rows.Add($row)
  }
  # Write to the database!
  $bulkCopy.WriteToServer($dt)

  • 如果是采用sa帐户登陆就执行如下:
  $xml = @'
  
  
  *[System[TimeCreated[timediff(@SystemTime) <= 3900000]]]
  
  
  '@

  $events = Get-WinEvent -FilterXml $xml | Select-Object>
  $connectionString = "Data Source=sqlserver;user>  $bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $connectionString
  $bulkCopy.DestinationTableName = "GeneralEvents"
  $dt = New-Object "System.Data.DataTable"
  # build the datatable
  $cols = $events | select -first 1 | get-member -MemberType NoteProperty | select -Expand Name
  foreach ($col in $cols) {$null = $dt.Columns.Add($col)}
  foreach ($event in $events)
  {
  $row = $dt.NewRow()
  foreach ($col in $cols) { $row.Item($col) = $event.$col }
  $dt.Rows.Add($row)
  }
  # Write to the database!
  $bulkCopy.WriteToServer($dt)
  其中上面这段:
  
  
  *[System[TimeCreated[timediff(@SystemTime) <= 3900000]]]
  
  
  取自于已转发事件的“筛选当前日志”
DSC00017.jpg

  XML内容
DSC00018.jpg

  执行完成以后可以到SQL去检查日志是否已经写进SQL
  select * from GeneralEvents
  可以看到日志成功写入SQL里
DSC00019.jpg

  最后就是做一个Windows计划任务把上面的Powershell脚本每隔1小时自动执行一次了
  把上面成功执行的脚本保存成ps1文件,并把这个文件剪切到C盘根目录下
DSC00020.jpg

  打开任务计划程序,创建一个基本任务
DSC00021.jpg

  下一步
DSC00022.jpg

  选择每天
DSC00023.jpg

  下一步
DSC00024.jpg

  启动程序
DSC00025.jpg

  在程序里选择powershell的启动路径C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  参数添加-command ". 'c:\event-into-sql.ps1'"
DSC00026.jpg

  勾选“但单击“完成”时,打开此任务属性的对话框”,然后完成
DSC00027.jpg

  设置执行该计划任务的帐户,以及权限
DSC00028.jpg

  在触发器里修改每日为如下图所示
DSC00029.jpg

  确定,创建完成
DSC00030.jpg

  到这里就大功告成了。既然事件日志都写入SQL了,那么就可以利用PowerBI Desktop去读取SQL的数据进行事件日志统计分析了,如下图:
DSC00031.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-620320-1-1.html 上篇帖子: 实战分区表:SQL Server 2k5&2k8系列(三) 下篇帖子: Centos 7.3下 Linux For SQL Server安装及配置介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表