<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于 Elasticsearch + kibana 實(shí)現(xiàn) IP 地址分布地圖可視化

          共 4501字,需瀏覽 10分鐘

           ·

          2021-02-17 01:45

          1、需求

          • 有一批特定用途(文末揭曉)的 IP 地址。
          • 想通過(guò)地圖形式可視化展示 IP 地址對(duì)應(yīng)的經(jīng)緯度坐標(biāo)的分布。

          2、方案探討

          基礎(chǔ)方案如下:
          • 第一步:IP 地址轉(zhuǎn)經(jīng)緯度坐標(biāo)。
          實(shí)現(xiàn)借助第三方工具:https://ipstack.com/
          • 第二步:經(jīng)緯度坐標(biāo)借助可視化工具(如:echarts)渲染展示。
          這時(shí)候不免進(jìn)一步思考:
          有沒(méi)有更快捷的方案呢?ELK 能實(shí)現(xiàn)不?
          已知的知識(shí)點(diǎn):
          • Elasticsearch 支持 Geo-point、Geo-shape 數(shù)據(jù)類(lèi)型。
          • Kibana 支持 Coordinate Map(坐標(biāo)圖)、Region Map(區(qū)域地圖)可視化地圖展示。
          兩個(gè)已知知識(shí)點(diǎn)一整合不就是基于 Elasticsearch + Kibana 的可視化展示方案嗎?
          且慢,有沒(méi)有更快捷的 IP 地址轉(zhuǎn)經(jīng)緯度坐標(biāo)的信息呢?
          有的。Ingest 數(shù)據(jù)預(yù)處理管道的 GeoIP processor (處理器)就能達(dá)到這個(gè)目的。
          整體架構(gòu)圖如下圖所示:

          3、GeoIp processor 介紹

          官方解讀如下:GeoIp processor 根據(jù)來(lái)自 Maxmind 數(shù)據(jù)庫(kù)的數(shù)據(jù)添加有關(guān)IP地址地理位置的信息。
          默認(rèn)情況下,GeoIp processor 將此信息添加到 geoip 字段下。GeoIp processor 可以解析 IPv4 和 IPv6 地址。
          更多 ?Maxmind 數(shù)據(jù)庫(kù)信息參見(jiàn):
          https://dev.maxmind.com/geoip/geoip2/geolite2/
          在 Elasticsearch 早期版本中 GeoIp processor 需要安裝插件才能使用。7.X 版本后,ES 已自帶,不需要安裝。

          4、導(dǎo)入一條數(shù)據(jù)實(shí)戰(zhàn)一把

          4.1 步驟 1:創(chuàng)建預(yù)處理管道

          PUT?_ingest/pipeline/geoip_pipeline
          {
          ??"description"?:?"Add?geoip?info",
          ??"processors"?:?[
          ????{
          ??????"geoip"?:?{
          ????????"field"?:?"ip"
          ??????}
          ????}
          ??]
          }
          該預(yù)處理的目的就是:將輸入的 IP 字段轉(zhuǎn)換為:Geoip 類(lèi)型。具體 Geoip 類(lèi)型張什么樣?后面會(huì)揭曉。

          4.2 步驟 2:創(chuàng)建索引

          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"
          ??????}
          ????}
          ??}
          }
          考慮到后面要批量導(dǎo)入數(shù)千條+數(shù)據(jù),我們采用了取巧的方式。
          使用了在創(chuàng)建索引的時(shí)候指定缺省管道(index.default_pipeline)的方式。
          這樣的好處是:
          • 靈活:用戶只關(guān)心 bulk 批量寫(xiě)入數(shù)據(jù)。
          • 零寫(xiě)入代碼修改:甚至寫(xiě)入數(shù)據(jù)的代碼一行都不需要改就可以。

          4.3 步驟 3:寫(xiě)入一條數(shù)據(jù)

          PUT?niu_20210215/_doc/1
          {
          ??"ip":?"8.8.8.8"
          }
          這時(shí)候,我們查看一下完整的 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"
          ????????}
          ??????}
          ????}
          ??}
          }
          寫(xiě)入后的數(shù)據(jù),查看返回如下:
          ?"_source"?:?{
          ??"geoip"?:?{
          ????"continent_name"?:?"North?America",
          ????"country_iso_code"?:?"US",
          ????"location"?:?{
          ??????"lon"?:?-97.822,
          ??????"lat"?:?37.751
          ????}
          ??},
          ??"ip"?:?"8.8.8.8"
          }
          有點(diǎn)長(zhǎng),銘毅解讀一下:
          第一:geoip 是 object 類(lèi)型,它有幾個(gè)子字段,含義如下:
          • geoip.city_name:城市
          • geoip.continent_name:大陸名稱(chēng)
          • geoip.country_iso_code:國(guó)家編碼
          • geoip.location:經(jīng)緯度坐標(biāo),必須是:geo_point 類(lèi)型
          • geoip.region_iso_code:地域編碼
          • geoip.region_name:地域名稱(chēng)
          第二:為節(jié)省存儲(chǔ),Mapping 可以優(yōu)化。
          • 比如:所有的默認(rèn)字符串類(lèi)型改成:keyword 類(lèi)型。
          第三:為了后面的作圖必須將 location 設(shè)置為 geo_point 類(lèi)型。
          以上三個(gè)步驟:就完成了單條數(shù)據(jù)的寫(xiě)入。

          4.4 步驟 4:kibana 可視化展示

          4.4.1 創(chuàng)建關(guān)聯(lián)索引模板

          目的:創(chuàng)建可視化需要關(guān)聯(lián)的索引數(shù)據(jù)。

          4.4.2 ?創(chuàng)建坐標(biāo)圖

          選擇左側(cè)導(dǎo)航欄的 Visualize,然后選擇右側(cè) Create new visualization,然后再選擇:Coordinate Map 即可。
          本文Elasticsearch + kibana 均選用 7.2 ?版本。

          4.4.3 ?可視化基礎(chǔ)設(shè)置,執(zhí)行后,就能看到可視化結(jié)果。

          如前所述,這里要強(qiáng)調(diào)的是:geoip.location 必須是?geo_point?類(lèi)型。

          5、批量導(dǎo)入數(shù)據(jù)后可視化展示

          基于第 4 節(jié)的導(dǎo)入一條數(shù)據(jù),python 批量 bulk 導(dǎo)入本地文件數(shù)據(jù)后,可視化效果如下圖所示:
          • 因?yàn)?span style="color: rgb(1, 1, 1);">全局設(shè)置了 default_pipeline,寫(xiě)入數(shù)據(jù)不需要做任何特殊處理了。
          換 dark 風(fēng)格顯示如下:
          PS:文章開(kāi)頭提到的:特定用途——通過(guò)模擬 port scan 獲取的全網(wǎng)部分開(kāi)放 9200 端口的公網(wǎng) IP(僅個(gè)人學(xué)習(xí)用,未任何其他用途)。

          6、小結(jié)

          • 基礎(chǔ)方案大家都能想到,有沒(méi)有更簡(jiǎn)單的、更快捷的方式呢?是需要我們考慮的。
          • 本文拋磚引玉,Kibana 新版本的可視化功能更強(qiáng)大,需要學(xué)習(xí)的點(diǎn)還有很多......

          參考

          https://blog.ruanbekker.com/blog/2018/09/12/using-the-geoip-processor-plugin-with-elasticsearch-to-enrich-your-location-based-data/
          推薦:
          1. 全網(wǎng)首發(fā)!《 Elasticsearch 最少必要知識(shí)教程 V1.0 》低調(diào)發(fā)布
          2. 從實(shí)戰(zhàn)中來(lái),到實(shí)戰(zhàn)中去——Elasticsearch 技能更快提升方法論
          3. 實(shí)戰(zhàn) | ELK實(shí)現(xiàn)全量Elastic日?qǐng)?bào)(2017-2019)多維度可視化分析
          4. 相信堅(jiān)持的力量!Elastic 日?qǐng)?bào) 1000期+ 了......

          中國(guó)最大的 Elastic 非官方公眾號(hào)
          點(diǎn)擊查看“閱讀原文”,獲取近10小時(shí)進(jìn)階視頻教程,和全球近1000 位 Elastic 愛(ài)好者一起每日精進(jìn) ELK 技能!
          瀏覽 73
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费国产网站在线观看 | 俺来也俺也去成人女优 | 国产精品18 进进出出17c | 国产精品福利在线播放 | 日韩一级片免费观看 |