본문 바로가기

Networking

Python and Powershell can be used for NSX Support Bundle

 

NSX/Edge Support Bundle에 있는 대부분의 파일은 json format이기 때문에, 여러 가지 형태로 Filtering을 시도해 볼 수 있습니다.

 

아래는 Python과 Powershell을 활용하여, Edge Support Bundle에 있는 lb-stats.txt 파일을 Filtering 해보는 예제입니다.

다양한 방식으로 접근해 볼 수 있어 분석할 때 활용도가 높을 것으로 생각합니다.

 

1. Python

import json
 
d = {}
with open("lb-stats.txt") as f:
    d = json.load(f)
msg = ""
for lb in d.get("lbs") or []:
    lb_display_name = lb.get("display_name")
    lb_l4_curr_sess = lb.get("l4_curr_sess")
    lb_l4_max_sess = lb.get("l4_max_sess")
    print(f"LB {lb_display_name} {lb_l4_curr_sess} {lb_l4_max_sess}")
    msg = msg + "\n" + f"LB {lb_display_name} {lb_l4_curr_sess} {lb_l4_max_sess}"
    for pool in lb.get("pools") or []:
        pool_display_name = pool.get("display_name")
        pool_curr_sess = pool.get("curr_sess")
        pool_max_sess = pool.get("max_sess")
        print(f"    Pool {pool_display_name} {pool_curr_sess} {pool_max_sess}")
        msg = msg + "\n" + f"   Pool {pool_display_name} {pool_curr_sess} {pool_max_sess}"
 
        member_total_curr_sess = 0
        member_total_max_sess = 0
        for member in pool.get("members") or []:
            member_display_name = member.get("display_name")
            member_curr_sess = member.get("curr_sess")
            member_total_curr_sess = member_total_curr_sess + member_curr_sess
            member_max_sess = member.get("max_sess")
            member_total_max_sess = member_total_max_sess + member_max_sess
            print(f"        Member {member_display_name} {member_curr_sess} {member_max_sess}")
            msg = msg + "\n" + f"       Member {member_display_name} {member_curr_sess} {member_max_sess}"
        if pool_curr_sess != member_total_curr_sess or pool_max_sess != member_total_max_sess:
            print(f"   Mismatched Pool Total: {pool_curr_sess} {pool_max_sess} != {member_total_curr_sess} {member_total_max_sess}")
            msg = msg + "\n" + f"   Mismatched Pool Total: {pool_curr_sess} {pool_max_sess} != {member_total_curr_sess} {member_total_max_sess}" + "\n"
        else:
            print(f"   OK")
            msg = msg + "\n" + f"   OK\n"
             
with open("result.txt", "w") as f:
    f.write(msg)

 

2. Powershell

$gc = Get-Content 'C:\sources\powershell\lb-stats.txt' | ConvertFrom-Json
 
foreach($lbs in $gc.lbs) {
    $lb_display_name = $lbs.display_name
    $lb_l4_curr_sess = $lbs.l4_curr_sess
    $lb_l4_max_sess = $lbs.l4_max_sess
 
    $msg = ""
    $msg = $msg + "`n" + "LB $lb_display_name | $lb_l4_curr_sess | $lb_l4_max_sess"
 
    foreach($pool in $lbs.pools) {
        $pool_display_name = $pool.display_name
        $pool_curr_sess = $pool.curr_sess
        $pool_max_sess = $pool.max_sess
 
        $msg = $msg + "`n" + "`tPool $pool_display_name | $pool_curr_sess | $pool_max_sess"
 
        $member_total_curr_sess = 0
        $member_total_max_sess = 0
         
        foreach($member in $pool.members)
        {
            $member_display_name = $member.display_name
            $member_curr_sess = $member.curr_sess
            $member_total_curr_sess = $member_total_curr_sess + $member_curr_sess
            $member_max_sess = $member.max_sess
            $member_total_max_sess = $member_total_max_sess + $member_max_sess
        }
 
        if(($pool_curr_sess -ne $member_total_curr_sess) -or ($pool_max_sess -ne $member_total_max_sess))
        {
            $msg = $msg + "`n" + "`t`tMismatched Pool Total: $pool_curr_sess | $pool_max_sess != $member_total_curr_sess | $member_total_max_sess" + "`n"    
        }
        else
        {
            $msg = $msg + "`n" + "`t`tOK`n"
        }
 
    }
 
    $msg | Out-File 'C:\sources\powershell\output.txt'
}