株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

VMware SD-WAN APIとExcelでカスタムレポートの作成も簡単!!

皆様、こんにちは。VMware SD-WAN製品担当SEの富田です。

 

概要

VMware SD-WANは、コントローラ型(コントローラーの名前をオーケストレータと呼びます)で動作する拠点間をつなぐVPN製品です。昨今、ネットワーク製品などでもコントローラー型の製品を使い運用の簡素化などが行われるケースが増えてきました。
コントローラー型の製品は複数の機器を1か所で管理することが可能で運用レポートをグラフィカルに表示する機能も有しており非常に有益なのですが、規定フォーマットなどに修正するにはデータ取得や再入力に手間がかかります。そこでExcelにREST-APIを組み合わせることで必要なレポートを簡単に作成する方法をご紹介します。今回は、API[/metrics/getEdgeLinkSeries]を利用してWAN回線の帯域を取得します。

VMwareSD-WANのAPIの紹介

VeloCloudはJSON-RPC形式とREST-API形式の2種類のAPIをサポートしています。今回はREST-APIを利用します。APIを利用する認証方式はAPIトークンとCookieベース認証の2種類あります。今回はAPIトークンを利用します。JSON-PPC形式やCookieベース認証についての詳しい説明はAPIレファレンスを見てください。

VMwareSD-WAN APIのお作法

VMware SD-WANで、APIトークンを利用する場合はHTTPのリクエストヘッダにAuthorizationヘッダーを以下の形式で付け加えるだけです。

Authorization: Token <api-key>

OAuthのアクセストークンはBearerと記載しますがVMware SD-WANではTokenと記載するので注意が必要です。
 
APIトークンは、オーケストレータへログイン、管理->管理者->ユーザ名の順に進みAPIトークンのアクションから新規APIをクリックしてAPIトークンを作成します。名前と有効期間を入力します。作成したAPIトークンを選択してアクションからAPIトークンをダウンロードを選択しキーをダウンロードしてください。REST-APIのアクセスURLは以下のようにAPI毎に変わります。

https://(VCOのホスト名,IPアドレス)/portal/rest/(APIの名称)

指定したURLへApplication/json形式のデータをPOSTすることで利用します。

/metrics/getEdgeLinkSeriesの取得

APIレファレンスで/metrics/getEdgeLinkSeriesの仕様を確認します。APIレファレンスをしたまでスクロールさせて/metrics/getEdgeLinkSeriesを探します。POST /metrics/getEdgeLinkSeries /metrics/getEdgeLinkSeriesをクリックすると詳細が表示されます。

f:id:networld-blog-post:20210716143047p:plain

  
ParametersのBodyを確認するのですが、Modelをクリックして詳細を確認します。
赤の*マークがついているパラメータは必須項目で他は任意のパラメータです。

f:id:networld-blog-post:20210716143214p:plain

Edgeデバイスを指定するため、EdgeIDでデバイス指定します。EdgeIDの調べ方はオーケストレータでEdgeの詳細画面を表示してURLをチェックします。
/edge/の後の数値がEdgeIDですのでこのIDを入れます。
intervalのstartに取得開始日を入れます今回は1日前を指定し、endは省略(本日まで)にします。
metricsに取得するデータのタイプを選びます。今回はbytesRX(受信バイト数)とbytesTX(送信バイト数)にします。

f:id:networld-blog-post:20210716143446p:plain

 
実際のHTTPで送信する内容は以下の通りになります。

POST /portal/rest/metrics/getEdgeLinkMetrics HTTP/1.1
Authorization: Token <api-key>
Content-Type: application/json

{"edgeId":<EdgeID>,
  "interval": {
    "start":1626575333 
  },
  "metrics": ["bytesRX","bytesTx"]
}

APIとExcelを組み合わせてレポート作成

EXCELを開きます。

ExcelのB2セルに取得開始時間と入力し、開始時間を入れる値をC2に作ります。
関数で( =NOW()-1-9/24)とします。(-1は1日前を指し、-9/24は時刻を世界標準時に修正しています)
B3セルに"UNIX時間"と入力し、セルC3に=INT*1*86400)と入力します。

f:id:networld-blog-post:20210719112652p:plain

 

入力が終わったら、B2を選んだ状態でテーブルとして書式設定を行ってください。
※ 先頭行をテーブルの見出しとして使用するのチェックは外してください。

f:id:networld-blog-post:20210716152352p:plain

左上にテーブル名が表示されるので"入力値"に変更します。


SD-WANから受け取ったデータを挿入するセルE2を選択した状態で、データタブのデータの取得->そのほかのデータソースから->空のクエリを選択します。

f:id:networld-blog-post:20210716144342p:plain

選択するとPower Queryエディター画面が表示されます。

まずはプロパティー名を変更します。管理上分かりやすい名前を付けると良いです。
今回は「SD-WAN メトリック」とします。

f:id:networld-blog-post:20210716144604p:plain
APIからデータを取得するためのステップを以下の手順で追加していきます。

  1. URLの指定
     fx マークをクリックすると、ステップにカスタム1と表示されるため、カスタム1を右クリックして名前をurlに変更します。

    f:id:networld-blog-post:20210716144848p:plain

     fx マークの右側にURLを入力します。

    f:id:networld-blog-post:20210716145403p:plain

  2. HTTPヘッダの入力
     fx マークをクリック、名前変更でhttpheaderというステップを追加します。vマークをクリックして複数行入力可能にして、以下のように入力します。改行は、SHIFTキーを押しながらEnterで入力できます。
    = [
    #"Content-Type" = "application/json",
    #"Authorization" = "Token <apitoken>"
    ]

    f:id:networld-blog-post:20210716145723p:plain

  3. start日を取得
     fx マークをクリック、名前変更でstartdateというステップを追加します。
    以下のように入力します。セルC2から日付を読み込むためのものです。
    = Excel.CurrentWorkbook(){[Name="入力値"]}[Content]{1}[列2]
    ※ テーブル化したデータの0行の列2の値を取得するとの意味です。

    f:id:networld-blog-post:20210716153245p:plain



  4. 送信するBody部分を入力
     fx マークをクリック、名前変更でpostbodyというステップを追加します。
    少しややこしいのですが、PowerQueryでJsonのデータを表現する場合、{と[、}と]が入れ替わります。また:記号は=として入力します。
    intervalのstartの個所は、値を直接入れずstartdateというステップ名を入力することで1日前の値が自動的に入力されます。

    = [#"edgeId"=<EdgeID>,
    #"interval"=[
    #"start"=start
    ],
    #"metrics"= {"bytesRx","bytesTx"}
    ]

    f:id:networld-blog-post:20210716155226p:plain

  5. REST-APIから情報を取得する
     fx マークをクリック、名前変更でgetRestというステップを追加します。
    以下のように決まった文字列を入れます。
    = Json.Document(Web.Contents(url,[Headers = httpheader,Content = Json.FromValue(postbody)]))f:id:networld-blog-post:20210716164246p:plain

  6. プライバシーに関する情報と出たら続行をクリックし、パブリックを選択して続行をクリックすると自動的にAPIから応答を取得します。
  7. 取得したJsonをテーブルへ変換してExcelへの出力を整形します。
    getRestを選びテーブルへの変換をクリックすることでテーブルへ変換します。

    f:id:networld-blog-post:20210719133613p:plain

  8. テーブル化が終わりましたが、列がまとまっているため変換タブの構造化列=>展開をクリックして列を展開します。

    f:id:networld-blog-post:20210719134207p:plain

  9. 展開する列の選択画面になるのですべてが選択されていることを確認してOKをクリックします。
  10. 8と同様な作業をCloumn1.linkとCloumn1.seriesで行いデータを展開します。
  11. Column1.series.dataを選択して8と同様に構造化列、展開を選択しすべてのデータを展開します。
  12. 最後に、閉じて読み込むをクリックするとデータがExcelのシートへ挿入されます。f:id:networld-blog-post:20210719135003p:plain
    SD-WANオーケストレータから取得したデータの一部を表示した画像
取り込んだデータを更新する場合

再度同じデータを読み込む場合は、Excelのデータからすべて更新をクリックすると最新の値へ置き換わります。f:id:networld-blog-post:20210719135130p:plain

まとめ

このようにPowerQueryを利用するとAPIから必要なデータを簡単に取り込むことが出来るようになります。
メタデータを利用してレポートを作成するときにお役立てください。

 

*1:C2-DATE(1970,1,1