ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

SplunkとGoogle MapをAPI連携させてみた話

こんにちは、ソリューション技術部の荒木です。

ここ数年、弊社の取り扱い製品の一つであるSplunk*1の 導入に携わる事が多かったので、今回はSplunkのApp「Google GeoCode」についてご紹介したいと思います。

Appsとは?

Splunkの機能を拡張し、データの収集や分析、アラート、ダッシュボード作成などを効率的に行えるようにするのがSplunkの「Apps」です。 これは、特定の用途・デバイス・アプリケーションなどのために用意されたテンプレートとしてSplunk社やコミュニティから提供されており、 Splunkのアカウントがあれば以下のリンクから多種多様なAppsを入手できます。

splunkbase:
https://splunkbase.splunk.com/

App「Google GeoCode」について

このAppの機能は、Google Maps APIの一つであるGoogle GeoCoding APIを使用して文字列で表現された住所情報から緯度/経度に変換したり、 緯度/経度から住所情報に変換する事ができます。

そのため、Appを使用するには事前にAPI Keyを取得しておく必要があります。 (ブログを寄稿した時点では、標準プランで1日に2500リクエストまでは無償で使用できましたが、2018/6/11以降はポリシー変更があるのでご注意を)

API Keyの取得方法: https://developers.google.com/maps/documentation/javascript/get-api-key

このAppを使ってみようと思った背景

以前、お客様から住所情報をもとに統計情報をマップ上に可視化したいという要望があったのですが、 Splunkの標準機能ではIPアドレス or 緯度/経度の情報が必須となり、住所情報だけでは目的を達成できませんでした。

しかし、このAppを使えば作り込み要素なしで簡単にできそうだったので、実際に使い勝手を試してみました。

インストール

インストールに関する要件や手順については、以下のリンク先に記載があります。

Google GeoCodeの詳細:
https://splunkbase.splunk.com/app/3597/#/details

コマンドの使い方

App「Google GeoCode」をインストールすると、専用のコマンド(printgeocode)を使う事ができます。
使い方としては、任意の検索クエリのあとにパイプ(|)でつなぎ、以下のいずれかの書式に従って必要なフィールド名を指定します。

■住所情報から緯度/経度への変換

<任意の検索クエリ> | printgeocode type=geocode address=<address_field>

■緯度/経度から住所情報への変換

<任意の検索クエリ> | printgeocode type=reverse latfield=<lat_field> lonfield=<lon_field>
  • type=<geocode | reverse>
    → geocodeを指定した場合、住所情報から緯度/経度に変換される
      reverseを指定した場合、緯度/経度から住所情報に変換される

  • address=<address_field>
    → 住所情報を表すフィールド名を指定

  • latfield=<lat_field>
    → 緯度を表すフィールド名を指定

  • lonfield=<lon_field>
    → 経度を表すフィールド名を指定

検証

App「Google GeoCode」の使い勝手を試すという事で以下の検証をしてみました。

  • 検証1:住所情報から緯度/経度を取得してみる
  • 検証2:施設名から緯度/経度を取得してみる
  • 検証3:緯度/経度から住所情報を取得してみる

前提

  • Splunk Enterprise 7.1(トライアルライセンス)を使用
  • Splunkサーバからインターネットアクセスできること
  • App「Google GeoCode」がインストールされていること
  • Google GeoCoding APIが使用できる状態であること
  • サーチコマンド(geostats)を使って、マップに可視化する
  • サンプルデータはオープンデータ(以下のリンク先を参照)を使用
    データセット | e-Govデータポータル

サンプルデータの概要説明

このデータはバリアフリーの基準を満たした施設情報に関してCSV形式で纏められたものであり、 施設名、位置情報、住所といった情報も含まれているので、今回行う検証用のデータとしては 非常に使いやすいかと思います。

検証で使用するカラムの説明

add name pref latitude longitude
住所情報  施設名   都道府県名 緯度    経度   

検証1:住所情報から緯度/経度を取得してみる

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table add, name  
| printgeocode type=geocode address=add

住所情報から緯度/経度が取得できていることがわかります。

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table add, name  
| printgeocode type=geocode address=add  
| geostats count latfield=geolocation_lat longfield=geolocation_lon

取得した緯度/経度を使ってマップ上に可視化してみます。

期待した動作となってますね!

検証2:施設名から緯度/経度を取得してみる

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table add, name  
| printgeocode type=geocode address=name

施設名から緯度/経度が取得できていることがわかります。

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table add, name  
| printgeocode type=geocode address=name  
| geostats count latfield=geolocation_lat longfield=geolocation_lon

取得した緯度/経度を使ってマップ上に可視化してみます。

概ね期待した動作ですが、実際の住所と一致しない検索結果もありました。
原因としては、同じ名称の施設名が複数存在する可能性があるため、 別の都道府県にある施設の位置情報を取得してしまったもの考えられます。

検証3:緯度/経度から住所情報を取得してみる

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table name, latitude, longitude

まずは、サンプルデータに含まれる緯度/経度だけを表示してみます。
(便宜上、施設名も表示しています)

検索クエリ

sourcetype=barrier_free pref="福岡県"  
| table name, latitude, longitude  
| printgeocode type=reverse latfield=latitude lonfield=longitude

緯度/経度から住所情報+施設名が取得できていることがわかります。
(住所情報は英語表記で取得されています)

概ね期待した動作でしたが、取得した住所情報が日本語ではなく英語表記となってしまいました。

APIの仕様を確認してみたところ、リクエストパラメータに「language=ja」を追加すれば制御できそうなので、 コマンドのソースファイル「printgeocode.py」を直接いじって再検索すると意図した形で結果を取得できました。

最後に

というわけで、App「Google GeoCode」とその検証結果を紹介してみました。
今回、紹介したAppに需要があるかはさておき、お手軽に Google MapとAPI連携できるので、Splunkをご利用の方は是非お試し下さい。

*1:マシンデータを収集・監視・分析・可視化することができるソフトウェア