Q:如何系统层面的去监控一下Windows Server?

A:额……一时间的话……能想到的可能也就是PowerShell+SQL Server+job,试试。

1、关于PowerShell

2、PowerShell脚本的编写与执行

3、获取系统性能情况

=  PowerShell+SQL Server+job 实现监控

一、关于PowerShell

1、什么是PowerShell

  表层面的翻译:强大的Shell。

  强大?

  如果是从知名度和用户的使用量来谈的话,PowerShell相较当下流行的一些面向对象的语言来说应该是逊色太多太多了,但是,作为一款系统内置的脚本语言,和Linux里的Shell一样,说其强大当然是不容置喙的。

  Windows PowerShell 是一种命令行外壳程序和脚本环境,是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。 powershell需要.NET环境的支持,同时支持.NET对象。微软之所以将Powershell 定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。

2、如何打开PowerShell

  1)Win键+R,输入cmd,然后cmd会话框里再输入powershell

  2)Win键+R,输入powershell,即来到其会话框

  3)或是直接找到Windows PowerShell程序双击或是管理员打开

3、学习PowerShell

  一开始接触到PowerShell的时候,也是有一些懵圈的,但多少也还是和DOS、Shell命令有些相似之处,习惯就好。

  推荐学习网站:http://www.pstips.net/powershell-online-tutorials/

二、PowerShell脚本的编写与执行

1、编写脚本(.psl扩展名的脚本文件)

  1)对于简单的小脚本编写,可以通过echo命令重定向进文件,或是将脚本文件通过@‘ ’@闭合起来

PS E:\> echo "Hello China"
Hello China
PS E:\> echo "Hello China">hello.psl
PS E:\> cat .\hello.psl
Hello China
PS E:\> @'
>> dir
>> help dir
>> ls
>> '@>test.psl

  2)复杂点的大脚本编写,一般借助文本编辑器方便些。

2、脚本执行

  1)PowerShell脚本的执行直接是使用脚本文件的相对路径,或者绝对路径

  2)通过别名设置(> Set-Alias),将脚本的执行语句保存为别名,如此,就能像输入命令一样的执行脚本

3、执行策略限制

  脚本能否执行取决于Powershell的执行策略;

  Powershell一般初始化情况下都会禁止脚本执行。只有管理员才有权限更改该策略,非管理员会报错。以管理员身份打开powershell:

PS E:\> Get-ExecutionPolicy
Restricted
PS E:\> Set-ExecutionPolicy Unrestricted 执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): y

  查看所有支持的执行策略:

  1>Unrestricted:权限最高,可以不受限制执行任何脚本。

  2>Default:为Powershell默认的策略:Restricted,不允许任何脚本执行。

  3>AllSigned:所有脚本都必须经过签名才能在运行。

  4>RemoteSigned:本地脚本无限制,但是对来自网络的脚本必须经过签名。

三、获取系统性能情况

1、主机名
PS D:\> $env:computername
2、CPU使用情况
  注意,-f:-filter:过滤,执行;对于不是很清楚的命令可以通过 man 命令 来获取帮助。
3、内存使用情况
PS D:\> $mem = gwmi win32_OperatingSystem
PS D:\> $mem
SystemDirectory : C:\Windows\system32
Organization :
BuildNumber : 15063
RegisteredUser : Windows 用户
SerialNumber : 00331-10000-00001-AA275
Version : 10.0.15063
  1)总内存:
PS D:\> $Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
PS D:\> $Allmem
4003.4 MB
  2)剩余内存:
PS D:\> $Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
PS D:\> $Freemem
285.5 MB
  3)内存使用比:
PS D:\> $Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
PS D:\> $Permem
92.9 %
4、磁盘使用情况
  1)多条件过滤:只获取D、E磁盘的信息
  PS D:\> gwmi win32_logicaldisk -f "drivetype=3 and (DeviceID='E:' or DeviceID='D:')"
  2)辅助智能显示信息:
PS D:\> gwmi Win32_LogicalDisk | Foreach-Object { 'Disk {0} has {1:0.0} GB space available' -f $_.Caption, ($_.FreeSpace / 1024MB) }
Disk C: has 53.1 GB space available
Disk D: has 183.5 GB space available
Disk E: has 164.1 GB space available
5、大合集:执行脚本获取CPU、内存信息
PS D:\> cat .\GetCPUMem.ps1
$Server = $env:computername
#server's CPU Mem Hardinfor
$cpu = Get-WMIObject –computername $Server win32_Processor
$mem = gwmi -ComputerName $Server win32_OperatingSystem
$Disks = gwmi –Computer: $Server win32_logicaldisk -filter "drivetype=3"
$Havecpu = "{0:0.0} %" -f $cpu.LoadPercentage
$Allmem = "{0:0.0} MB" -f ($mem.TotalVisibleMemorySize / 1KB)
$Freemem = "{0:0.0} MB" -f ($mem.FreePhysicalMemory / 1KB)
$Permem = "{0:0.0} %" -f ((($mem.TotalVisibleMemorySize-$mem.FreePhysicalMemory)/$mem.TotalVisibleMemorySize)*100)
Write-Host "COMPUTER:$Server"`r`n
# `r`n表示换行输出
Write-Host "CPU:$Havecpu"`r`n
Write-Host "Total Mem:$Allmem"
Write-Host "Free Mem:$Freemem"
Write-Host "Used Mem:$Permem"`r`n
$IpAdd = (Get-WmiObject -class win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').ipaddress[0]
Write-Host "Ipaddress:$IpAdd"`r`n PS D:\> .\GetCPUMem.ps1
COMPUTER:DESKTOP-P8MIUHK CPU:15.0 % Total Mem:4003.4 MB
Free Mem:272.9 MB
Used Mem:93.2 % Ipaddress:192.168.203.111

四、系统性能监控:CPU、内存、Disk

1、利用psl脚本获取性能信息

  死循环作业,只需要启动一次job即ok,如果担心重启之后停掉,就设置:start automatically when SQL Server Agent start。

2、监控标准把控
  1)CPU:80%
  2)内存:60% (通过io 和 ple 侧面反映内存情况)
  3)Disk:90%
3、T-SQL存储过程
USE [TestDB]
GO
/*系统性能监控:CPU、内存、disk*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc M_cpumem
--手动获取数据库服务器IP
@ip nvarchar(20)
AS
BEGIN
/*获取CPU、内存使用情况信息*/
--作业Get-CPU_Mem,执行powershell脚本
DECLARE @cm nvarchar(100)
SET @cm=(
SELECT log
FROM msdb.dbo.sysjobstepslogs)
--cpu使用率
DECLARE @cpu int
SET @cpu=CAST((SELECT SUBSTRING(@cm,5,4)) AS numeric(2,0))
--内存使用率
DECLARE @mem int
SET @mem=CAST((SELECT SUBSTRING(@cm,22,4)) AS numeric(2,0)) /*CPU过载报警监控*/
--CPU使用率大于80%说明系统出现高耗
IF (@cpu>80)
BEGIN
DECLARE @str_subject_cpu nvarchar(100),@str_html_cpu nvarchar(max);
SET @str_subject_cpu='服务器:'+@ip+' CPU高耗报警'
--CPU或调度器当前分配的工作情况
SET @str_html_cpu='Dear All:
<br>&nbsp;&nbsp;系统CPU>80%,请参阅系统调度情况,进行性能优化处理!<br>
<table border=1 >'+
'<tr>
<td style="width: 80px"><p align="center" >Scheduler_ID</p></td>
<td style="width: 80px"><p align="center" >CPU_ID</p></td>
<td style="width: 150px"><p align="center" >状态</p></td>
<td style="width: 80px"><p align="center" >Is_Idle</p></td>
<td style="width: 90px"><p align="center" >当前任务数</p></td>
<td style="width: 80px"><p align="center" >等待调度线程数</p></td>
<td style="width: 90px"><p align="center" >当前线程数</p></td>
<td style="width: 90px"><p align="center" >活动线程数</p></td>
<td style="width: 90px"><p align="center" >挂起任务数</p></td>
</tr>'+
CAST((
SELECT
td=scheduler_id,'',
td=cpu_id,'',
td=status,'',
td=is_idle,'',
td=current_tasks_count,'',
td=runnable_tasks_count,'',
td=current_workers_count,'',
td=active_workers_count,'',
td=work_queue_count,''
FROM master.sys.dm_os_schedulers
WHERE scheduler_id<255
FOR xml path('tr'),type
) AS nvarchar(max))+
N'</table>';
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name='Email',
@recipients='xxx@xxx.com',
@subject=@str_subject_cpu,
@body=@str_html_cpu,
@body_format='HTML'
END
END /*内存过载报警监控*/
--内存使用率大于60%说明系统出现高耗
IF (@mem>60)
BEGIN
DECLARE @str_subject_mem nvarchar(100),@str_html_mem nvarchar(max);
SET @str_subject_mem='服务器:'+@ip+' 内存高耗报警'
--系统性能计数器
SET @str_html_mem='Dear All:
<br>&nbsp;&nbsp;系统Memory>60%,请参阅系统性能监控情况,进行性能优化处理!<br>
<table border=1 >'+
'<tr>
<td style="width: 150px"><p align="center" >Object_Name</p></td>
<td style="width: 150px"><p align="center" >Counter_Name</p></td>
<td style="width: 100px"><p align="center" >Value</p></td>
</tr>'+
CAST((
SELECT
td=object_name,'',
td=counter_name,'',
td=cntr_value,''
FROM sys.dm_os_performance_counters
WHERE object_name in ('SQLServer:Buffer Manager','SQLServer:Memory Manager')
AND counter_name in ('Buffer cache hit ratio','Checkpoint pages/sec','Lazy writes/sec','Page lIFe expectancy','Memory Grants PENDing','Target Server Memory (KB)','Total Server Memory (KB)')
FOR xml path('tr'),type
) AS nvarchar(max))+
N'</table>';
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@profile_name='Email',
@recipients='xxx@xxx.com',
@subject=@str_subject_mem,
@body=@str_html_mem,
@body_format='HTML'
END
END /*磁盘使用报警监控*/
--磁盘可使用率小于15%时进行邮件报警
CREATE TABLE temp_disk_space(Drive_Name nvarchar(50),Total_Space_GB NUMERIC(18,2),Free_Space_GB NUMERIC(18,2))
INSERT INTO temp_disk_space
SELECT DISTINCT
vs.volume_mount_point,
CAST(vs.total_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2)),
CAST(vs.available_bytes / 1024.0 / 1024 / 1024 AS NUMERIC(18,2))
FROM sys.master_files AS f
CROSS APPLY sys.dm_os_volume_stats(f.database_id,f.file_id) AS vs SELECT Drive_Name,(Free_Space_GB * 100)/Total_Space_GB AS [% Free_Space]
INTO #temp_space_monitor
FROM temp_disk_space
ORDER BY Drive_Name IF exists(SELECT 1 FROM #temp_space_monitor WHERE [% Free_Space] < 15)
BEGIN
DECLARE @str_subject_disk nvarchar(100);
SET @str_subject_disk='服务器:'+@ip+' 磁盘空间不足'
EXEC msdb.dbo.sp_send_dbmail
@profile_name='Email',
@recipients='xxx@xxx.com',
@subject=@str_subject_disk,
@body = 'Dear ALL:
请及时清理磁盘,磁盘空间使用情况见附件!',
@query = 'SELECT * FROM TestDB.dbo.temp_disk_space', --使用全称
@attach_query_result_as_file = 1,
@query_attachment_filename = 'disk.txt'
END DROP table TestDB.dbo.temp_disk_space, #temp_space_monitor END
4、最后就是将上面的存储过程添加到定时作业里进行监控
 
总结:最后的功能是实现了,到达了Windows Server性能的监控要求,但是,几经波折地获取性能信息,真的是有点儿难把控到“实时监控”。

利用PowerShell监控Win-Server性能的更多相关文章

  1. SQL Server Profiler监控SQL Server性能

    全面掌握SQL Server Profiler 1.       原理与相关概念介绍 SQL Server Profiler,大家已经非常熟悉.常常在性能优化中使用,本文档详细介绍SQL Server ...

  2. powershell加win的dns服务器,解决网站负载均衡问题

    用我发明的powershell填坑法,加windows的dns服务器.从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题. ------------------------win2012r2 ...

  3. LR如何利用siteScope监控MySQL性能

    本次实验,是在自己的电脑上使用APMServ5.2.6部署Discuz2.X论坛下,对该论坛的数据库MySQL5.1进行性能测试的,下面讲述LoadRunner在设计场景时,如何利用siteScope ...

  4. [AlwaysOn Availability Groups]使用Powershell监控AlwayOn健康

    使用Powershell监控AlwayOn健康 1.基本命令概述 AlwayOn Dashboard是很有用的查看整体AG健康状况的工具.但是这个工具不是用于7*24监控的.如果应用程序夜间发送严重的 ...

  5. 用脚本定时监控SQL Server主从一致性

    用脚本定时监控SQL Server主从一致性 首先说一下我们的环境 我们使用的是事务复制,复制是单向的,主服务器和从服务器都在同一个机房,当然不同机房也可以,只需要改一下IP和端口 下面的脚本在我们的 ...

  6. Nagios利用NSClient++监控Windows主机

    在Nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的.其功能类似于check_nrpe.不过还需要搭配另外一个软件NSClient++,它则类似于NRP ...

  7. SQL Server 性能优化详解

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  8. sql server性能调优

    转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...

  9. 监控 SQL Server (2005/2008) 的运行状况

    Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...

随机推荐

  1. 什么是OKR?

    什么是OKR OKR全称是Objectives and Key Results,即目标与关键成果法.OKR是一套定义和跟踪目标及其完成情况的管理工具和方法.1999年 Intel公司发明了这种方法,后 ...

  2. 一个label两种颜色,一个label两种字体

    -(void)addLabel{ UILabel *label = [[UILabel alloc]init]; label.backgroundColor = [UIColor grayColor] ...

  3. python编码转换

    Pyton内部的字符串一般都是unicode编码或字节字符串编码:代码中字符串的默认编码与代码文件本身的编码是一致的:编码转换通常需要以unicode编码作为中间编码进行转换,即先将其他编码的字符串解 ...

  4. Gson 2.8.jar基础

    1.下载包 json    { xxx:xxx,xx:xxx,...... }   对象符号     都可以下载 Gson      开源项目 Jackson     杰克逊 Fastjson     ...

  5. HTML5 学习03——内联 SVG

    什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用于定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺 ...

  6. 阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)

    说明: 1.必须要有一台机器具有外网IP的ECS. 2.如果不想配置具有外网IP的ECS时,可以购买NAT网关,但需要钱,贵.下面会说明NAT网关的配置. 3.最后吐槽一下阿里云VPC网关导致不能按照 ...

  7. Eclipse/myEclipse 代码提示/自动提示/自动完成设置

    设置eclipse/myEclipse代码提示可以方便开发者,不用在记住拉杂的单词,只用打出首字母,就会出现提示菜单.如同dreamweaver一样方便. 1.菜单window->Prefere ...

  8. EasyMock 简单使用

    参考案例:(本位使用markdown编写)https://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/https://www.yii ...

  9. TensorFlow相关

    TensorFlow的55个经典案例(转) https://blog.csdn.net/xzy_thu/article/details/76220654 随笔分类 - 数据挖掘及机器学习  www.c ...

  10. WPF参考

    web 调用本地exe 程序,传入参数https://www.cnblogs.com/anjou/p/10045177.html WPF常用控件样式https://www.cnblogs.com/s0 ...