実施環境: Splunk Free 8.2.2
0. 概要
Splunk にはデフォルトで、世界地図上にデータを表示できる視覚エフェクトが存在します。
今回は、名前を指定した国を世界地図上で塗りつぶす形式を紹介します。
1. SPL 文の組み方
例として、以下の SPL 文を使用します。
少々わかりにくいですが、日本が塗りつぶされています。
| makeresults count=1
| eval CNT = 100
| eval NAME = "Japan"
| geom geo_countries featureIdField="NAME"
表としては以下のようになります。
なお、 stats コマンドを使うなど情報の取り方によっては「 _time 」列がない場合も多いです。
- | - | _time | featureCollection | geom |
---|---|---|---|---|
値 | 国名 | ログ出力日時 | 地理情報取得元 | 地理情報 |
値 | 国名 | ログ出力日時 | 地理情報取得元 | 地理情報 |
... | ... | ... | ... | ... |
「 featureCollection 」と「 geom 」は geom コマンドにより生成されるフィールドです。
geom コマンドは Splunk 上のルックアップを参照して地理情報を取得するコマンドで、基本的な文法は以下の通りです。
geom ルックアップ名 featureIdField=国名
今回使用したルックアップは、 Splunk にデフォルトで入っている「 geo_countries 」という地理情報が記載されたルックアップです。
「 featureId 」に記載された国名と geom コマンドの「 featureIdField 」オプションで指定した項目に格納された国名を比較して、「 geom 」に入っている地理情報を返します。
Splunk デフォルトの地理情報ルックアップには「 geo_countries 」のほかに、「 geo_us_states 」があります。
こちらを使用すると、アメリカ合衆国の地理情報が取得できます。
実はこの視覚エフェクトに関しては、表の形は結構崩しても表示できます。
究極、「値」と「地理情報」の2項目が入っていれば地図上に情報を表示できてしまったりします。
| makeresults count=1
| eval CNT = 100
| eval NAME = "Japan"
| geom geo_countries featureIdField="NAME"
| fields - _time, NAME, featureCollection
| rename geom AS "地理情報"
- | - |
---|---|
値 | 地理情報 |
値 | 地理情報 |
... | ... |
ただし、このような変形をした場合、地図上の塗りつぶしに補正が効かず、かなり不格好な形になります。
変形する意味もまずないので、 geom コマンドの後ろに処理をつなげるのは避けたほうがよいでしょう。
一方、「値」を2種類にするなど、余計な列を追加してしまうと表示できません。
「値」「国名」「ログ出力日時」「地理情報取得元」「地理情報」以外の情報は入れないようにしてください。
2. 使用方法
Splunk 視覚エフェクトの「 Choropleth Map 」を選択することで使用できます。
3. 地図の移動/拡大/縮小
地図は、ドラッグすることで視点を移動させることが可能です。
拡大/縮小を行う場合は、地図の左上端にあるボタンを押します。
上の2つのボタンは、拡大/縮小を行います。
「 + 」が拡大、「 - 」が縮小です。
その下のボタンを押すと、デフォルトの視点に戻ります。
デフォルトの視点は、フォーマットの全般タブで指定します。
例えば「緯度」を「35」、経度を「135」、ズームを「5」にすると以下の視点がデフォルトになります。
4. 色分け
地図上での色分けの設定は、フォーマットの色タブで実施できます。
「色モード」を設定することで、色分けの方法を変更できます。
具体的にどのような形で色分けされるかは、「プレビュー」で確認できます。
例えば「シーケンシャル」では、以下のように白から最大色へのグラデーションで表示されます。
色数は「倍率数」、色そのものは「最大色」で指定できます。
「ダイバージェント」では「倍率数」「最大色」に加えて「最小色」を選択でき、2色の間のグラデーションで表示されます。
2色のちょうど中間、白色となる値は、「中性点」で指定できます。
前の2種類が値の大きさによりグラデーションを作る形の色分け方法なのに対し、「カテゴリ」は値をそのまま用いた色分け方法です。
値としては数値のほか、文字列も用いることができます。
例えば以下の例では、アメリカ合衆国の州について頭文字別に色分けしています。
| inputlookup geo_us_states
| eval GROUP = substr(featureId, 1, 1)
| table GROUP, featureId
| geom geo_us_states featureIdField="featureId"
5. IP アドレスからの国名の取得方法
データを点形式で世界地図上に表示する で紹介した iplocation コマンドですが、実は今回の視覚エフェクトでも使用できます。
| makeresults count=1
| eval ip = "8.8.8.8"
| iplocation ip
「 Country 」を geom コマンドにかけると、ちょうどアメリカ合衆国が塗りつぶされることが確認できます。
| makeresults count=1
| eval ip = "8.8.8.8"
| iplocation ip
| stats count BY Country
| geom geo_countries featureIdField="Country"