PowerShell 로 Win-server 성능 을 어떻게 모니터링 하 는 지 상세 하 게 설명 합 니 다.
12573 단어 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> 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> 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 성능 에 대한 모니터링 요구 에 도 달 했 지만 각종 우여곡절 로 성능 정 보 를 얻 기 때문에'실시 간 모니터링'으로 제어 하기 어렵다.
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Powershell 7을 사용하여 Samba 서버로 파일을 전송하는 방법.MSSQL 덤프를 복사하여 콜드 스토리지 솔루션으로 원격 Linux Samba 서버에 저장하도록 설계한 twoScripts를 공유하고 싶습니다. 모든 서버가 Windows 서버였으며 내가 이것을 만들기로 결정한 이유...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.