2010. 9. 8. 18:17
PowerShell을 이용하여 IIS 로그파일 경로를 지정하시면 송/수신된 데이터 량을 확인 할 수 있습니다.
여기서 약간 더 변형을 한다면, IIS의 내용중 로그 디렉토리에 대한 정보를 확인하여 각 사용자 별로 일일 송/수신 데이터 량을 확인 할 수도 있습니다.
우선 소스부터 보시죠..
# 로그 파일 경로를 입력 받습니다.
Param (
[String] $Path
)
Param (
[String] $Path
)
# 필요한 변수들을 미리 지정 합니다.
[INT]$RECV_TOTAL="0"
[INT]$SEND_TOTAL="0"
[INT]$CS_NUM=0;
[INT]$SC_NUM=0;
$KB=1024
$MB=1024*1024
$GB=1024*1024*1024
[INT]$RECV_TOTAL="0"
[INT]$SEND_TOTAL="0"
[INT]$CS_NUM=0;
[INT]$SC_NUM=0;
$KB=1024
$MB=1024*1024
$GB=1024*1024*1024
get-content $Path | %{
#Pattern Check
if ( $_ | Select-String -Pattern "#Fields" ) {
# Fields 값에 대한 마이너스 값 처리.
[INT]$CNT=-1;
foreach ($element in $_.Split(' '))
{
if ( $element -eq "sc-bytes" ){
$SC_NUM=$CNT;
}elseif ( $element -eq "cs-bytes" ) {
$CS_NUM=$CNT;
}
$CNT+=1;
}
}
elseif ( $_ | Select-String -Pattern "^[^#]" )
{
#Pattern Check
if ( $_ | Select-String -Pattern "#Fields" ) {
# Fields 값에 대한 마이너스 값 처리.
[INT]$CNT=-1;
foreach ($element in $_.Split(' '))
{
if ( $element -eq "sc-bytes" ){
$SC_NUM=$CNT;
}elseif ( $element -eq "cs-bytes" ) {
$CS_NUM=$CNT;
}
$CNT+=1;
}
}
elseif ( $_ | Select-String -Pattern "^[^#]" )
{
# 실제 송/수신된 값을 Split 명령을 통해 저장합니다.
[int]$SEND_BYTE=$_.Split(' ')[$SC_NUM];
[int]$RECV_BYTE=$_.Split(' ')[$CS_NUM];
[int]$RECV_TOTAL+=$RECV_BYTE;
[int]$SEND_TOTAL+=$SEND_BYTE;
}
}
[int]$SEND_BYTE=$_.Split(' ')[$SC_NUM];
[int]$RECV_BYTE=$_.Split(' ')[$CS_NUM];
[int]$RECV_TOTAL+=$RECV_BYTE;
[int]$SEND_TOTAL+=$SEND_BYTE;
}
}
If ( $RECV_TOTAL -gt $GB ){
$RECV_TOTAL = $RECV_TOTAL / $GB
Write-Host "Total In : $RECV_TOTAL GByte"
} elseif ( $RECV_TOTAL -gt $MB){
$RECV_TOTAL = $RECV_TOTAL / $MB
Write-Host "Total In : $RECV_TOTAL MByte"
}elseif ( $RECV_TOTAL -gt $KB){
$RECV_TOTAL = $RECV_TOTAL / $KB
Write-Host "Total In : $RECV_TOTAL KByte"
}else{
Write-Host "Total In : $RECV_TOTAL Byte"
}
$RECV_TOTAL = $RECV_TOTAL / $GB
Write-Host "Total In : $RECV_TOTAL GByte"
} elseif ( $RECV_TOTAL -gt $MB){
$RECV_TOTAL = $RECV_TOTAL / $MB
Write-Host "Total In : $RECV_TOTAL MByte"
}elseif ( $RECV_TOTAL -gt $KB){
$RECV_TOTAL = $RECV_TOTAL / $KB
Write-Host "Total In : $RECV_TOTAL KByte"
}else{
Write-Host "Total In : $RECV_TOTAL Byte"
}
If ( $SEND_TOTAL -gt $GB ){
$SEND_TOTAL = $SEND_TOTAL / $GB
Write-Host "Total Out : $SEND_TOTAL GByte"
} elseif ( $SEND_TOTAL -gt $MB){
$SEND_TOTAL = $SEND_TOTAL / $MB
Write-Host "Total Out : $SEND_TOTAL MByte"
}elseif ( $SEND_TOTAL -gt $KB){
$SEND_TOTAL = $SEND_TOTAL / $KB
Write-Host "Total Out : $SEND_TOTAL KByte"
}else{
Write-Host "Total Out : $SEND_TOTAL Byte"
}
$SEND_TOTAL = $SEND_TOTAL / $GB
Write-Host "Total Out : $SEND_TOTAL GByte"
} elseif ( $SEND_TOTAL -gt $MB){
$SEND_TOTAL = $SEND_TOTAL / $MB
Write-Host "Total Out : $SEND_TOTAL MByte"
}elseif ( $SEND_TOTAL -gt $KB){
$SEND_TOTAL = $SEND_TOTAL / $KB
Write-Host "Total Out : $SEND_TOTAL KByte"
}else{
Write-Host "Total Out : $SEND_TOTAL Byte"
}
우선 간단한 소스이니 얼마든지 변형이 가능 합니다.
추가적으로 더 나간다면, 여러대의 서버를 관리하는 관리자의 경우 각 서버들에 대한 FTP 접속 계정을 만들고 FTP로 접속하여 각 로그 파일들을 다운로드 받은 뒤 해당 파일에 대한 체크 후 자동 삭제 하는 과정을 통해 모든 IIS 서버에 대한 각 계정별 트래픽 값을 확인 할 수도 있습니다.
그냥 단순히 참고만.. ^^.
'Powershell > 마성민' 카테고리의 다른 글
PowerShell에서 FTP 연결 (Download 편) (0) | 2010.09.28 |
---|---|
PowerShell 자체 인증서 생성과 스크립트 인증 하기 (0) | 2010.07.21 |