Как преобразовать данные JSON в временные ряды Прометея в PowerShell - PullRequest
0 голосов
/ 22 мая 2019

Использование 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 и записью этого ввышеуказанный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...