侧边栏壁纸
  • 累计撰写 123 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Logstash转换geoip地理坐标并绘图

梁来福
2024-05-24 / 0 评论 / 0 点赞 / 16 阅读 / 3761 字
温馨提示:
本文最后更新于 2024-05-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Logstash配置

Logstash配置文件,添加geoip解析请求的IP地址

# 把需要解析的字段加入geoip的source中
cat > /etc/logstash/conf.d/redis_grok_geoip.conf << 'EOF'
input {
  redis {
    host => "172.16.49.130"
    port =>"6379"
    db => "0"
    key => "nginx-access"
    data_type => "list"
  }
}

filter {
  grok {
     match => { "message" => "%{IP:client_ip} - - \[%{HTTPDATE:access_time}\] \"%{DATA:method} %{DATA:URL} %{DATA:http}\" %{NUMBER:status_code:long} %{NUMBER:response_bytes:long} \"(-|%{DATA:referrer})\" \"(-|%{DATA:user_agent})\" \"(-|%{IP:x_forwarded})\"" }
     remove_field => ["message"]
  }

  geoip {
    source => "client_ip" 
  }
}

output {
   stdout {}
   elasticsearch {
     hosts => "http://172.16.49.130:9200"
     manage_template => false
     index =>"nginx-access-%{+yyyy.MM}"
  }
}
EOF

启动查看解析数据

# 使用ab压测工具生成日志信息
ab -c 10 -n 1000 http://172.16.49.130/google/
# 如果访问的地址是内网地址,自行将日志内的访问IP改为公网地址

# 启动logstash,此时可以看到已经将日志解析,而且IP字段解析出了国家代码地理坐标等信息
[root@002 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis_grok_geoip.conf
......
       "status_code" => "200",
            "method" => "GET",
             "geoip" => {
         "country_code3" => "US",
              "latitude" => 37.751,
             "longitude" => -97.822,
         "country_code2" => "US",
        "continent_code" => "NA",
              "location" => {
            "lon" => -97.822,
            "lat" => 37.751
        },
              "timezone" => "America/Chicago",
                    "ip" => "15.117.17.153",
          "country_name" => "United States"
    },
......

以上转换出地理坐标等都没有问题,但是添加到Kibana的图表中类型没有转换成地理坐标的类型,无法识别。所以需要自己手动映射索引。

Kibana绘制地址位置图

创建索引映射

ES删除掉之前的索引,Kibana也清除这个索引。

进入控制台在Console使用API创建新的索引,自己手动映射地理位置字段

PUT /nginx-access-2024.05

POST /nginx-access-2024.05/_mapping
{
  "properties": {
    "geoip": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

执行PUT创建索引

鼠标点到那行点执行

执行POST映射

此时ES中已经创建好索引并且映射完成,但是还没有数据。

访问信息

# 使用ab压测工具生成日志,IP如果是内网手动修改日志为公网。
# 或者可以使用echo命令直接追加日志
[root@002 nginx]# echo '18.117.17.153 - - [23/May/2024:17:50:23 +0800] "GET / HTTP/1.0" 200 615 "-" "ApacheBench/2.3" "-"' >> access.log

Kibana添加索引

注意:此时添加完索引,type已经变成geo_point,而不是string或number。

图表展示

控制台Hone -> Maps -> Add layer -> Documents

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
博主关闭了所有页面的评论