Powershell을 복수의 DPM 볼륨 용량 확인하기

인프라에 대한 자체적인 모니터링을 구현하기위해 목록을 추출하던 중 DPM의 볼륨 상태를 체크해서 여유공간을 15%이상 유지하고자 했다. 이렇게 하려면 매일마다 접속해서 확인을 해야하는 불편함이 증가되기 때문에 조금 더 손쉽게 하고자 했다. 역시나 DPM도 Microsoft 제품으로 PowerShell 모듈이 있고, 해당 모듈을 이용해서 조합을 한다면 데이터를 손쉽게 뽑을 수 있었다.

<#
  .NOTES
  File Name: Get-DPMHostVolumeUsing.ps1
  Version: 0.3
  Author: ysyukr
#>

# 실행하는 스크립트가 위치한 폴더를 기준으로 잡고, 인증정보가 담긴 PS스크립트를 소환한다.
$pwd = Split-Path -Parent $PSCommandPath;
. "$pwd\conf\PSCre.ps1"

# 인증정보 파일에서 정보를 소환한다.
$PSCre_admin = get_ad_admin
# 날짜를 가져온다.
$datetime = Get-Date -Format "yyyy-MM-dd HH"
# AD 구성원에서 DPM 이름이 들어간 호스트를 가져온다.
$dpm_hosts = Get-ADComputer -Filter 'Name -like "dpm*"'
# 결과 변수를 초기화 한다.
$results = @()

# DPM이 들어간 호스트에서 명령어를 실행한다.
# 여기서는 원격으로 작업하기 때문에 invoke-command로 작성되었다.
foreach ($dpm_host in $dpm_hosts.Name) {
    try {
        $result = Invoke-Command -ComputerName $dpm_host -Authentication Credssp -Credential $PSCre_admin -ArgumentList $dpm_host -ScriptBlock {
            param (
                [String][Parameter(Mandatory = $true)][ValidateNotNull()] $dpm_host
            )
            Get-DPMDisk -DPMServerName $dpm_host
        }
        
        $results += $result

        }
    catch {
        $result = Write-Output $('Exception occured while invoke-command in ' + $dpm_host + ' : ' + $_.Exception.Message);
        $results += $result
    }
}

이렇게 뽑은 정보를 TXT파일로 추출하거나 DB를 설계해서 넣어도 무방하다. 이렇게해서 입력된 데이터를 Kibana나 Grafana와 같은 DashBoard 도구로 시각화를 한다면 더욱이 효과적이다. 물론 스크립트는 DB연결 및 쿼리문이 추가로 있는거지만, 해당 부분은 민감정보가 포함되었을 수 있어 제외했다. 그리고 마지막으로 이 스크립트를 응용해서 스토리지 기능을 하는 서버의 용량 확인을 하고, 앞서 있던 호스트 정보에 대한 것도 조합을 하면 전체 인프라에 대한 이쁜(?) DashBoard를 그릴 수 있다.