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'
}