2017年7月5日 エンジニアリング

ソラコムとのパートナーシップとVPGメトリックの可視化

著者 Kosho Owa (JP)

ソラコムとのパートナーシップ

Elasticはソラコムの「SPS 認定済パートナー」となり、IoTデバイスそのものや、ネットワークトラフィック、データやメトリックの可視化・分析において、協業することになりました。特にIoTビジネスの加速や、セキュリティに対する要件が高まるにつれて、スケーラブルでリアルタイムな分析エンジンであるElasticsearchや、そのパワフルな可視化を実現するKibanaに対する期待も高まっています。Elastic Stackをはじめとする当社の製品群が、ソラコムのお客様の要望にお応えできるものと自信を持っています。

VPGのメトリックの可視化

この協業の結果として、SORACOM Junctionのインスペクション機能を使用して、Virtual Private Gateway (VPG)のメトリックをElastic Cloudに送信し、容易に可視化することができるようになりました。このSORACOM Junctionのインスペクション機能は、VPGを通過するパケットのサイズ、アプリケーションなどの情報を提供し、これをAmazon KinesisやLambdaを利用して、一定時間ごとにElastic Cloud上に展開したElasticsearchクラスターにメトリックを送ることができます。

その詳細な手順は、ソラコムのDevelopersサイト「SORACOM Junctionのインスペクション機能を使用して、VPGを通過するパケットの統計情報を可視化する」で公開されていますが、ユーザーは事前にElastic Cloudにサインナップし、クラスターを作成しておく必要があります。

Elastic Cloudは14日間の無償トライアルを提供しており、この期間はSORACOM Junctionのインスペクション機能を利用したメトリックの分析・可視化の価値を感じていただくのに十分な時間であると考えています。また、トライアル期間が終了後も、最小のクラスター(1GBメモリ、24GBストレージ)、HAオプション無しの契約で、一月に66USドル(約7,500円)で運用いただくことができます。

Elasticは、このSORACOM Junctionのインスペクション機能が提供するJSON形式のデータを格納するためのIndex Template、可視化するためのKibanaのDashboardをサンプルとして提供しています。このDashboardでは、Elasticsearch、Kibanaの5.4で導入されたTime Series Visual Builderで作成された、美しいチャートを体験いただくことができます。

Kibana Dashboard

高度な利用方法

Elastic Cloudを利用する利点は、Elasticsearchの開発者による運営とサポートに加え、X-Packの機能にアクセスできることがあります。今回は、特にX-Packが提供する数々の機能の中でも、Alertingを利用して一定のデータ使用量を超過した際に、Slackで通知する方法を考えてみましょう。

まず、SlackのCustom IntegrationsのIncomming WebHooksより、Webhook URLを作成します。それをElastic Cloudの管理コンソールより当該クラスターのConfigurationを開き、以下の通りUser Settingsに設定します。

xpack.notification.slack:
  account:
     soracom-vpg-monitor:
       url: https://hooks.slack.com/services/XXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

次に、当月のデータ使用量を取得するために、以下の様なクエリーとAggregationを検討します。

GET soracom-*/_search
{
  "size": 0, 
  "query": {
    "range": {
      "@timestamp": {
        "gte": "now/M+9h"
      }
    }
  },
  "aggs": {
    "sum-bytes": {
      "sum": {
        "field": "detected.protos.bytes"
      }
    }
  }
}

Rangeクエリーで、Date Mathを使用していることに注目ください。

これを利用して、Slackにメッセージを送るためのWatchを作成します。Kibanaの Management から Watcher を選択し、以下のWatchを追加します。

{
  "trigger": {
    "schedule": {
      "interval": "30m"
    }
  },
  "input": {
    "search": {
      "request": {
        "search_type": "query_then_fetch",
        "indices": [
          "soracom-*"
        ],
        "types": [],
        "body": {
          "size": 0,
          "query": {
            "range": {
              "@timestamp": {
                "gte": "now/M+9h"
              }
            }
          },
          "aggs": {
            "sumbytes": {
              "sum": {
                "field": "detected.protos.bytes"
              }
            }
          }
        }
      }
    }
  },
  "condition": {
    "compare": {
      "ctx.payload.aggregations.sumbytes.value": {
        "gte": "{{ctx.metadata.bytes-threshold}}"
      }
    }
  },
  "actions": {
    "notify-slack": {
      "throttle_period_in_millis": 8640000,
      "slack": {
        "account": "soracom-vpg-monitor",
        "message": {
          "from": "SORACOM VPG Realtime Metrics Monitor",
          "text": "Exceeded the monthly traffic usage threshold.\n Current: {{ctx.payload.aggregations.sumbytes.value}} bytes"
        }
      }
    }
  },
  "metadata": {
    "bytes-threshold": 20000000
  }
}

このWatchは、当月の利用合計が20000000バイトを越えると先に作成したSlackのWebHookを呼び出します。このチェックは30分ごとに行いますが、一度条件に一致すると24時間(8640000ミリ秒)は再度通知を行いません。それぞれmetadata.bytes-thresholdtrigger.schedule.intervalactions.notify-slack.throttle_period_in_millisで設定していますので、運用状況に合わせて変更してください。今回は、Slackのメッセージを送信しましたが、メールを送信したり、Elasticsearchにインデックスしたり、他のWebHookを呼び出すといったことができます。Alertingの設定方法は、X-Pack for the Elastic Stack » Alerting on Cluster and Index Eventsに詳しい記載があります。

また、ElasticはElastic Stackに異常検知が可能なMachine Learningを追加することを発表しました。現在のところ、Elastic Cloudでは利用可能ではありませんが、VPGのメトリックに留まらず、IoTデバイスが生成するトラフィックや、そのデータも含め、通常とは異なる傾向を容易に検知できる様になることが見込まれます。

今後も、ぜひ当社とソラコムのパートナーシップにご期待ください。