PowerShell 로 Win-server 성능 을 어떻게 모니터링 하 는 지 상세 하 게 설명 합 니 다.

머리말
Q:어떻게 시스템 차원 에서 윈도 서버 를 감시 합 니까?
A:음..............................................................................
본 고 는 PowerShell 로 Win-server 의 성능 을 모니터링 하 는 것 에 관 한 내용 을 소개 하 였 으 며,다음은 더 이상 말씀 드 리 지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
PowerShell
1,PowerShell 이 무엇 입 니까
강력 한 Shell.
강하 다
인지도 와 사용자 의 사용량 으로 말한다 면 PowerShell 은 현재 유행 하 는 대상 을 대상 으로 하 는 일부 언어 에 비해 너무 손 색 이 많 을 것 입 니 다.그러나 시스템 에 내 장 된 스 크 립 트 언어 로 서 Linux 의 Shell 과 마찬가지 로 강력 하 다 고 말 하 는 것 은 당연히 말참견 할 수 없습니다.
Windows PowerShell 은 명령 행 케이스 프로그램 과 스 크 립 트 환경 으로 windows 기기 에서 시스템 과 응용 프로그램 관 리 를 자동화 하 는 명령 행 스 크 립 트 환경 을 실행 하여 명령 행 사용자 와 스 크 립 트 작성 자가.NET Framework 를 이용 할 수 있 도록 하 는 강력 한 기능 입 니 다.명령 행 프롬프트 cmd.exe 의 확장 으로 볼 수 있 습 니 다.아 닙 니 다.전복 되 어야 합 니 다.powershell 은.NET 환경의 지원 과 함께.NET 대상 을 지원 해 야 합 니 다.마이크로소프트 가 Powershell 을 Power 로 지정 한 것 은 대상 을 완전히 지원 하기 때 문 이 아니다.가 독성,용이 성,현재 모든 셸 의 1 위 를 차지 할 수 있 습 니 다.
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/
2.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:로 컬 스 크 립 트 는 제한 이 없 지만 네트워크 에서 온 스 크 립 트 는 서명 을 거 쳐 야 합 니 다.
3.시스템 성능 획득 현황
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 Ccomputername $Server win32_Processor
 $mem = gwmi -ComputerName $Server win32_OperatingSystem
 $Disks = gwmi CComputer: $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
4.시스템 성능 모니터링:CPU,메모리,디스크
1.psl 스 크 립 트 를 이용 하여 성능 정 보 를 얻 습 니 다.
데 드 사이클 작업 은 job 즉 ok 을 한 번 만 시작 하면 됩 니 다.다시 시작 한 후에 멈 출 까 봐 걱정 되면 start automation 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='[email protected]',
   @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='[email protected]',
   @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='[email protected]',
  @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 성능 에 대한 모니터링 요구 에 도 달 했 지만 각종 우여곡절 로 성능 정 보 를 얻 기 때문에'실시 간 모니터링'으로 제어 하기 어렵다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기