Использование PowerShell для запуска стороннего API и возврата данных в формате JSON Я хотел бы отформатировать этот ответ в удобном формате временных рядов Прометея.
Пример форматирования Прометея:
<metric name>{<label name>=<label value>, ...}
Получение данных из API в PS не проблема, но я немного растерялся, как их преобразовать.Вот пример ответа JSON
{
"d": {
"results": [
{
"Name": "HomeOffice1",
"icmpmfs": {
"icmpresults": [
{
"im_AvgResponseTime": "20.2"
}
]
},
"portmfs": {
"portdata": [
{
"im_Availability": "100.0",
"im_Utilization": "0.129264109333333"
}
]
}
},
{
"Name": "HomeOffice2",
"icmpmfs": {
"icmpresults": [
{
"im_AvgResponseTime": "64.8"
}
]
},
"portmfs": {
"portdata": [
{
"im_Availability": "100.0",
"im_Utilization": "0.266945682666667"
}
]
}
},
{
"Name": "HomeOffice3",
"icmpmfs": {
"icmpresults": []
},
"portmfs": {
"portdata": [
{
"im_Availability": "100.0",
"im_Utilization": "0.114650546666667"
}
]
}
},
{
"Name": "HomeOffice4",
"icmpmfs": {
"icmpresults": []
},
"portmfs": {
"portdata": [
{
"im_Availability": "100.0",
"im_Utilization": "5.95813333333333E-4"
}
]
}
},
{
"Name": "HomeOffice5",
"icmpmfs": {
"icmpresults": [
{
"im_AvgResponseTime": "73.6"
}
]
},
"portmfs": {
"portdata": [
{
"im_Availability": "100.0",
"im_Utilization": "0.0743622133333333"
}
]
}
}
]
}
}
Если я преобразую этот ответ в PowerShell, я могу добавить метки, чтобы подтянуть вложенный JSON, чтобы он выглядел следующим образом:
$Results = $Obj.d.results |
Select Name, @{Label="Utilization";Expression={$_.portmfs.portdata.im_Utilization}},
@{Label="Availability";Expression={$_.portmfs.portdata.im_Availability}},
@{Label="AvgResponse";Expression={$_.icmpmfs.icmpresults.im_AvgResponseTime}}
Name : HomeOffice1
Utilization : 0.129264109333333
Availability : 100.0
AvgResponse : 20.2
Name : HomeOffice2
Utilization : 0.266945682666667
Availability : 100.0
AvgResponse : 64.8
Name : HomeOffice3
Utilization : 0.114650546666667
Availability : 100.0
AvgResponse :
Name : HomeOffice4
Utilization : 5.95813333333333E-4
Availability : 100.0
AvgResponse :
Name : HomeOffice5
Utilization : 0.0743622133333333
Availability : 100.0
AvgResponse : 73.6
Чтобы соответствовать формату Prometheus, мне нужно было бы вывести каждый HomeOffice как его собственное имя метрики с такими значениями:
HomeOffice1{Utilization,Availability,AvgResponse=0.129264109333333,100.0,20.2}
У меня проблемы с циклическим перемещением по объекту JSON или PowerShell и записью этого ввышеуказанный формат.