基於 Elasticsearch + kibana 實現 IP 地址分布地圖可視化

2022-01-23 銘毅天下Elasticsearch
1、需求想通過地圖形式可視化展示 IP 地址對應的經緯度坐標的分布。2、方案探討實現藉助第三方工具:https://ipstack.com/第二步:經緯度坐標藉助可視化工具(如:echarts)渲染展示。Elasticsearch 支持 Geo-point、Geo-shape 數據類型。Kibana 支持 Coordinate Map(坐標圖)、Region Map(區域地圖)可視化地圖展示。兩個已知知識點一整合不就是基於 Elasticsearch + Kibana 的可視化展示方案嗎?且慢,有沒有更快捷的 IP 地址轉經緯度坐標的信息呢?有的。Ingest 數據預處理管道的 GeoIP processor (處理器)就能達到這個目的。3、GeoIp processor 介紹官方解讀如下:GeoIp processor 根據來自 Maxmind 資料庫的數據添加有關IP位址地理位置的信息。默認情況下,GeoIp processor 將此信息添加到 geoip 欄位下。GeoIp processor 可以解析 IPv4 和 IPv6 地址。https://dev.maxmind.com/geoip/geoip2/geolite2/在 Elasticsearch 早期版本中 GeoIp processor 需要安裝插件才能使用。7.X 版本後,ES 已自帶,不需要安裝。4、導入一條數據實戰一把4.1 步驟 1:創建預處理管道
PUT _ingest/pipeline/geoip_pipeline
{
  "description" : "Add geoip info",
  "processors" : [
    {
      "geoip" : {
        "field" : "ip"
      }
    }
  ]
}

該預處理的目的就是:將輸入的 IP 欄位轉換為:Geoip 類型。具體 Geoip 類型張什麼樣?後面會揭曉。4.2 步驟 2:創建索引
DELETE niu_20210215
PUT niu_20210215
{
  "settings": {
    "index.default_pipeline": "geoip_pipeline",
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "geoip": {
        "properties": {
          "location": {
            "type": "geo_point"
          }
        }
      },
      "ip":{
        "type":"keyword"
      }
    }
  }
}

考慮到後面要批量導入數千條+數據,我們採用了取巧的方式。使用了在創建索引的時候指定預設管道(index.default_pipeline)的方式。零寫入代碼修改:甚至寫入數據的代碼一行都不需要改就可以。4.3 步驟 3:寫入一條數據
PUT niu_20210215/_doc/1
{
  "ip": "8.8.8.8"
}

這時候,我們查看一下完整的 Mapping 張什麼樣?
{
  "niu_20210215" : {
    "mappings" : {
      "properties" : {
        "geoip" : {
          "properties" : {
            "city_name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "continent_name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "country_iso_code" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "location" : {
              "type" : "geo_point"
            },
            "region_iso_code" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "region_name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        },
        "ip" : {
          "type" : "keyword"
        }
      }
    }
  }
}

 "_source" : {
  "geoip" : {
    "continent_name" : "North America",
    "country_iso_code" : "US",
    "location" : {
      "lon" : -97.822,
      "lat" : 37.751
    }
  },
  "ip" : "8.8.8.8"
}

第一:geoip 是 object 類型,它有幾個子欄位,含義如下:geoip.continent_name:大陸名稱geoip.country_iso_code:國家編碼geoip.location:經緯度坐標,必須是:geo_point 類型geoip.region_iso_code:地域編碼比如:所有的默認字符串類型改成:keyword 類型。第三:為了後面的作圖必須將 location 設置為 geo_point 類型。4.4 步驟 4:kibana 可視化展示4.4.1 創建關聯索引模板4.4.2  創建坐標圖選擇左側導航欄的 Visualize,然後選擇右側 Create new visualization,然後再選擇:Coordinate Map 即可。本文Elasticsearch + kibana 均選用 7.2  版本。4.4.3  可視化基礎設置,執行後,就能看到可視化結果。如前所述,這裡要強調的是:geoip.location 必須是 geo_point 類型。5、批量導入數據後可視化展示基於第 4 節的導入一條數據,python 批量 bulk 導入本地文件數據後,可視化效果如下圖所示:因為全局設置了 default_pipeline,寫入數據不需要做任何特殊處理了。PS:文章開頭提到的:特定用途——通過模擬 port scan 獲取的全網部分開放 9200 埠的公網 IP(僅個人學習用,未任何其他用途)。
6、小結

基礎方案大家都能想到,有沒有更簡單的、更快捷的方式呢?是需要我們考慮的。本文拋磚引玉,Kibana 新版本的可視化功能更強大,需要學習的點還有很多.參考https://blog.ruanbekker.com/blog/2018/09/12/using-the-geoip-processor-plugin-with-elasticsearch-to-enrich-your-location-based-data/點擊查看「閱讀原文」,獲取近10小時進階視頻教程,和全球近1000 位 Elastic 愛好者一起每日精進 ELK 技能!

相關焦點

  • dotNet Core 3.1 使用 Elasticsearch
    Elasticsearch 是基於 Lucene 的搜尋引擎。可以非常方便地實現分布式的全文搜索,本文介紹在 dotNet Core 3.1 中怎樣使用  Elasticsearch 。/bin/elasticsearch-plugin install [https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip](https://github.com/medcl/elasticsearch-analysis-ik/releases
  • 在虛擬機CentOs7安裝ElasticSearch-7.12.0
    2)將主機的文件選中拖到遠程虛擬機即可把文件上傳到伺服器我這裡的文件主要是:elasticsearch-7.12.0-linux-x86_64.tar.gz因為這裡elasticsearchtar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz5)切換目錄cd /software/elasticsearch-7.12.0/config編輯輸入以下內容,注意單位是m
  • ELK教程1:ElasticSearch集群的部署
    本篇文章將講講解如何部署ELK,然後講解如何 使用Filebeat採集Spring Boot的日誌輸出到Logstash上,logstash再將日誌輸出到Elasticsearch上,最後展示到kibana上面。
  • 基於Docker快速搭建ELK
    Docker平臺速搭建一套完整的ELK系統,相關的鏡像直接從Docker Hub上獲取,可以快速實現日誌的採集和分析檢索。準備鏡像l  獲取ES鏡像:docker pull elasticsearch:latestl  獲取kibana鏡像:docker pull kibana:latestl  獲取logstash鏡像:docker pull logstash:latest啟動Elasticsearch
  • 高級調優 - 查找和修復慢速 Elasticsearch 查詢
    考慮熱/溫架構(非常適用於基於時間的索引)以及 Elasticsearch 中的翻轉(rollover)/收縮(shrink)功能,以有效管理分片數量。任何部署的良好開端都是執行適當的容量規劃,以幫助確定每個搜索用例的最佳分片數量。搜索線程池顯示 「rejected」 計數持續增加,這是基於最後一次集群重啟的累積數。
  • ElasticSearch 索引設計指南
    format=json&h=name,ip,node.rolec. 計算 buffer ,buffer + shard_count 為最終的分片數。通常比例係數為30%,buffer為比例係數 * shard_count日誌類型數據分片大小建議在 30~50G 之間為佳。具體 templates 的維護與設計管理,請見下章節。
  • 利用HDFS實現ElasticSearch7.2容災方案
    案例模擬ElasticSearch7.2集群環境,採用snapshot API基於快照的方式備份集群。 案例演示HDFS分布式文件系統作為倉庫舉例。;/value></property>配置 yarn-site.xmlyarn-site.xml<property>  <name>yarn.resourcemanager.hostname</name>  <value>elasticsearch01&
  • Elasticsearch支持的數據類型及其用法
    ,數據結構是Elasticsearch的基礎功能,理解數據結構及其用法,非常重要。Elasticsearch數據結構Elasticsearch支持的數據類型比較豐富,本文根據官方文檔做了歸類,如下表所示。
  • 該怎麼學elasticsearch?看這篇就夠啦~
    Elasticsearch是一個基於Lucene的搜索伺服器。它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口。Elasticsearch是用Java語言開發的,並作為Apache許可條款下的開放源碼發布,是一種流行的企業級搜尋引擎。
  • Elasticsearch自定義分詞器
    14、Mmseg 分詞器也支持 Elasticsearch下載地址:https://github.com/medcl/elasticsearch-analysis-mmseg/releases 根據對應的版本進行下載如何使用:1、創建索引:1curl -XPUT http://localhost:9200/index
  • 知乎Live全文搜索之讓elasticsearch_dsl支持asyncio
    「知乎Live全文搜索」是我用來學習elasticsearch、elasticsearch_dsl、asyncio、sanic和微信小程序項目。我想做時知乎還不提供Live的搜索,現在雖然提供了一個入口,但是感覺搜索的效果我覺得並不好。前面在公眾號我已經發了很多相關的asyncio、elasticsearch_dsl和sanic的內容,前面那些全部是給從今天開始的內容做鋪墊。
  • Linux環境快速搭建elasticsearch6.5.4集群和Head插件
    集群和Head插件;環境信息作業系統:Ubuntu 16.04.5 LTSJDK:1.8.0_191elasticsearch:6.5.4nodejs:v10.15.0本次實戰準備了兩臺機器,它們的基本情況如下所示:IP位址hostname備註192.168.119.152node
  • Elasticsearch 性能調優指南——推薦實戰 DSL
    1、乾貨 | Elasticsearch 運維實戰常用命令清單2、乾貨 | Elasticsearch Top10 監控指標3、你不得不關注的 Elasticsearch Top X 關鍵指標>  "index.search.slowlog.threshold.query.debug": "2s",  "index.search.slowlog.threshold.query.trace": "500ms",  "index.search.slowlog.threshold.fetch.warn": "1s",  "index.search.slowlog.threshold.fetch.info
  • 乾貨 | Elasticsearch 開發實戰常用命令清單
    0、背景 Elasticsearch 具有一組豐富的易於理解的 REST API,這些 API  均可如下幾種方式通過 HTTP 調用進行訪問。開發實戰環節,我推薦使用:kibana Dev-tools。
  • 乾貨 | 一步步拆解 Elasticsearch BM25 模型評分細節
    Elasticsearch 5 之前的版本,評分機制或者打分模型基於 TF-IDF 實現。從 Elasticsearch 5 開始,Elasticsearch 的默認相似度算法是 Okapi BM25,Okapi BM25模型於 1994 年提出,BM25 的 BM 是縮寫自 Best Match, 25 是經過 25 次迭代調整之後得出的算法,該模型也是基於 TF/IDF 進化來的,Okapi 信息檢索系統是第一個實現此功能的系統
  • 在 Linux 中找出所有在線主機的 IP 地址
    本篇教程會向你展示如何找出所有連接到給定網絡的主機的 IP 地址。這裡我們會使用 Nmap 工具[2]來找出所有連接到相同網絡的設備的IP位址。Nmap (Network Mapper 的簡稱)是一款開源、強大並且多功能的探查網絡的命令行工具,用來執行安全掃描、網絡審計[3]、查找遠程主機的開放埠[4]等等。