1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4501字,需瀏覽 10分鐘

         ·

        2021-02-17 01:45

        1、需求

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

        2、方案探討

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

        3、GeoIp processor 介紹

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

        4、導(dǎo)入一條數(shù)據(jù)實戰(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 類型。具體 Geoip 類型張什么樣?后面會揭曉。

        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)建索引的時候指定缺省管道(index.default_pipeline)的方式。
        這樣的好處是:
        • 靈活:用戶只關(guān)心 bulk 批量寫入數(shù)據(jù)。
        • 零寫入代碼修改:甚至寫入數(shù)據(jù)的代碼一行都不需要改就可以。

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

        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"
        ????????}
        ??????}
        ????}
        ??}
        }
        寫入后的數(shù)據(jù),查看返回如下:
        ?"_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.city_name:城市
        • geoip.continent_name:大陸名稱
        • geoip.country_iso_code:國家編碼
        • geoip.location:經(jīng)緯度坐標,必須是:geo_point 類型
        • geoip.region_iso_code:地域編碼
        • geoip.region_name:地域名稱
        第二:為節(jié)省存儲,Mapping 可以優(yōu)化。
        • 比如:所有的默認字符串類型改成:keyword 類型。
        第三:為了后面的作圖必須將 location 設(shè)置為 geo_point 類型。
        以上三個步驟:就完成了單條數(shù)據(jù)的寫入。

        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)建坐標圖

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

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

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

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

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

        6、小結(jié)

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

        參考

        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 最少必要知識教程 V1.0 》低調(diào)發(fā)布
        2. 從實戰(zhàn)中來,到實戰(zhàn)中去——Elasticsearch 技能更快提升方法論
        3. 實戰(zhàn) | ELK實現(xiàn)全量Elastic日報(2017-2019)多維度可視化分析
        4. 相信堅持的力量!Elastic 日報 1000期+ 了......

        中國最大的 Elastic 非官方公眾號
        點擊查看“閱讀原文”,獲取近10小時進階視頻教程,和全球近1000 位 Elastic 愛好者一起每日精進 ELK 技能!
        瀏覽 73
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产成人精品网站 | 爱搞搞就要搞搞 | 欧美成人大香蕉 | 99精国产麻豆久久婷婷 | 日逼逼逼 | 成人性爱网站在线观看 | 婷婷在线综合一区二区 | 澳门一级毛片 | 免费观看性生交大片大学生全黄 | 成人免费A片AAA毛片西瓜 |