Thứ sáu, 01/12/2017 | 00:00 GMT+7

Cách lập bản đồ vị trí của người dùng với GeoIP và ELK (Elasticsearch, Logstash và Kibana)

Định vị địa lý IP, quy trình được sử dụng để xác định vị trí thực của địa chỉ IP, có thể được tận dụng cho nhiều mục đích, chẳng hạn như cá nhân hóa nội dung và phân tích lưu lượng. Phân tích lưu lượng truy cập theo vị trí địa lý có thể cung cấp thông tin chi tiết có giá trị về cơ sở user của bạn vì nó cho phép bạn dễ dàng biết họ đến từ đâu. Điều này có thể giúp bạn đưa ra quyết định sáng suốt về (các) vị trí địa lý lý tưởng của các server ứng dụng của bạn và đối tượng hiện tại của bạn là ai.

Trong hướng dẫn này, ta sẽ chỉ cho bạn cách tạo bản đồ địa lý trực quan cho địa chỉ IP của user ứng dụng của bạn bằng cách sử dụng Elasticsearch, Logstash và Kibana.

Đây là một lời giải thích ngắn gọn về cách tất cả hoạt động. Logstash sử dụng database GeoIP để chuyển đổi địa chỉ IP thành một cặp tọa độ kinh độ và vĩ độ, tức là vị trí vật lý gần đúng của địa chỉ IP. Dữ liệu tọa độ được lưu trữ trong Elasticsearch trong các trường geo_point và cũng được chuyển đổi thành một chuỗi geohash . Kibana sau đó có thể đọc các chuỗi Geohash và vẽ chúng dưới dạng các điểm trên bản đồ Trái đất. Trong Kibana 4, điều này được gọi là trực quan hóa Bản đồ xếp.

Bây giờ ta hãy xem xét các yêu cầu .

Yêu cầu

Để làm theo hướng dẫn này, bạn phải có một ngăn xếp ELK đang hoạt động. Ngoài ra, bạn phải có log chứa địa chỉ IP có thể được lọc thành một trường, chẳng hạn như log truy cập web server . Nếu bạn chưa có hai điều này, bạn có thể làm theo hai hướng dẫn đầu tiên trong loạt bài này. Hướng dẫn đầu tiên sẽ cài đặt ngăn xếp ELK và hướng dẫn thứ hai sẽ chỉ cho bạn cách thu thập và lọc log truy cập Nginx hoặc Apache:

Thêm ánh xạ geo_point vào index Filebeat

Giả sử bạn đã làm theo các hướng dẫn tiên quyết, bạn đã làm được điều này. Tuy nhiên, ta sẽ bao gồm lại bước này trong trường hợp bạn bỏ qua, bởi vì trực quan hóa TileMap yêu cầu tọa độ GeoIP của bạn được lưu trữ trong Elasticsearch dưới dạng loại geo_point .

Trên server đã cài đặt Elasticsearch, hãy download mẫu index Filebeat vào folder chính của bạn:

  • cd ~
  • curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

Sau đó, tải mẫu vào Elasticsearch bằng lệnh này:

  • curl -XPUT 'http://localhost:9200/_template/filebeat' -d@filebeat-index-template.json

Cấu hình Logstash để sử dụng GeoIP

Để có được Logstash lưu trữ tọa độ GeoIP, bạn cần xác định một ứng dụng tạo log chứa địa chỉ IP công cộng mà bạn có thể lọc dưới dạng trường rời rạc. Một ứng dụng khá phổ biến tạo log với thông tin này là web server , chẳng hạn như Nginx hoặc Apache. Ta sẽ sử dụng log truy cập Nginx làm ví dụ. Nếu bạn đang sử dụng các bản ghi khác nhau, hãy thực hiện các điều chỉnh cần thiết cho ví dụ.

Trong hướng dẫn Thêm Bộ lọc vào Logstash , bộ lọc Nginx được lưu trữ trong file có tên 11-nginx-filter.conf . Nếu bộ lọc của bạn nằm ở nơi khác, hãy chỉnh sửa file đó.

Hãy chỉnh sửa bộ lọc Nginx ngay bây giờ:

  • sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

Dưới sự grok , thêm phần tô sáng bên dưới:

11-nginx-filter.conf
filter {   if [type] == "nginx-access" {     grok {       match => { "message" => "%{NGINXACCESS}" }     }     geoip {       source => "clientip"     }   } } 

Điều này cấu hình bộ lọc để chuyển đổi địa chỉ IP được lưu trữ trong trường clientip (được chỉ định trong nguồn ). Ta đang chỉ định nguồnclientip vì đó là tên của trường mà địa chỉ IP của user Nginx đang được lưu trữ. Hãy đảm bảo thay đổi giá trị này nếu bạn đang lưu trữ thông tin địa chỉ IP trong một trường khác.

Lưu và thoát.

Để các thay đổi có hiệu lực, hãy khởi động lại Logstash:

  • sudo service logstash restart

Nếu mọi thứ được cấu hình chính xác, Logstash bây giờ sẽ lưu trữ tọa độ GeoIP với log truy cập Nginx của bạn (hoặc bất kỳ ứng dụng nào đang tạo log ). Lưu ý thay đổi này không có hiệu lực trở về trước, vì vậy các bản ghi đã thu thập trước đó của bạn sẽ không được thêm thông tin GeoIP.
Hãy xác minh chức năng GeoIP đang hoạt động bình thường trong Kibana.

Kết nối với Kibana

Cách dễ nhất để xác minh xem Logstash có được cấu hình chính xác hay không, với GeoIP được bật, là mở Kibana trong trình duyệt web. Làm điều đó ngay bây giờ.

Tìm thông báo log mà ứng dụng của bạn đã tạo từ khi bạn bật module GeoIP trong Logstash. Theo ví dụ về Nginx, ta có thể tìm kiếm Kibana cho type: " nginx-access " để thu hẹp lựa chọn log .

Sau đó, mở rộng một trong các thông báo để xem bảng các trường. Bạn sẽ thấy một số mới geoip lĩnh vực có chứa thông tin về làm thế nào địa chỉ IP được ánh xạ tới một vị trí địa lý thực sự. Ví dụ:

Các trường GeoIP mẫu

Lưu ý: Nếu bạn không thấy bất kỳ log nào, hãy tạo một số log bằng cách truy cập ứng dụng của bạn và đảm bảo bộ lọc thời gian của bạn được đặt thành thời gian gần đây.

Cũng lưu ý Kibana có thể không phân giải được vị trí địa lý cho mọi địa chỉ IP. Nếu bạn chỉ đang thử nghiệm với một địa chỉ và nó dường như không hoạt động, hãy thử một số địa chỉ khác trước khi khắc phục sự cố.

Nếu sau tất cả những điều đó, bạn không thấy bất kỳ thông tin GeoIP nào (hoặc nếu nó không chính xác), có thể bạn đã không cấu hình Logstash đúng cách.

Nếu bạn thấy thông tin GeoIP thích hợp trong chế độ xem này, bạn đã sẵn sàng để tạo trực quan hóa bản đồ của bạn .

Tạo hình ảnh hóa bản đồ xếp

Lưu ý: Nếu bạn chưa sử dụng hình ảnh hóa Kibana, hãy xem Hướng dẫn về Trang tổng quan và Hình ảnh hóa Kibana .

Để vạch ra địa chỉ IP trong Kibana, hãy tạo hình ảnh trực quan về Bản đồ xếp.

Nhấp vào Hình ảnh hóa trong menu chính.

Trong Tạo hình ảnh trực quan mới , hãy chọn Bản đồ xếp .

Trong Chọn nguồn tìm kiếm, bạn có thể chọn một trong hai tùy chọn. Nếu bạn có một tìm kiếm đã lưu sẽ tìm thấy thông báo log mà bạn muốn ánh xạ, hãy chọn tìm kiếm đó. Ta sẽ tiếp tục như thể bạn nhấp vào Từ một tìm kiếm mới .

Khi được yêu cầu Chọn mẫu index , hãy chọn filebeat- * từ menu thả xuống. Thao tác này sẽ đưa bạn đến một trang có bản đồ trống:

Giao diện xây dựng bản đồ ô mặc định của Kibana

Trong thanh tìm kiếm, hãy nhập type: nginx-access hoặc một cụm từ tìm kiếm khác sẽ trùng với log chứa thông tin địa lý. Đảm bảo khoảng thời gian của bạn (góc trên bên phải của trang) đủ để trùng với một số mục log . Nếu bạn thấy Không tìm thấy kết quả thay vì bản đồ, bạn cần cập nhật thời gian hoặc cụm từ tìm kiếm của bạn .

Khi bạn có một số kết quả, hãy nhấp vào Tọa độ Địa lý bên dưới tiêu đề group ở cột bên trái. Nút "phát" màu xanh lá cây sẽ hoạt động. Nhấp vào nó và vị trí địa lý của bạn sẽ được vẽ trên bản đồ:

Bản đồ ô Kibana với nhiều điểm

Khi thấy ổn với hình ảnh trực quan của bạn , hãy nhớ lưu nó bằng cách sử dụng nút Lưu hình ảnh hóa (biểu tượng đĩa mềm) bên cạnh thanh tìm kiếm.

Kết luận

Đến đây bạn đã có thông tin GeoIP của bạn được ánh xạ trong Kibana, bạn nên cài đặt . Bản thân nó sẽ cung cấp cho bạn một ý tưởng sơ bộ về vị trí địa lý của user của bạn. Nó thậm chí có thể hữu ích hơn nếu bạn tương quan nó với các log khác của bạn bằng cách thêm nó vào trang tổng quan.

Chúc may mắn!


Tags:

Các tin liên quan