نمایش موقعیت کاربران به کمک GeoIP و ELK – راهنمای جامع


موقعیتیابی جغرافیایی آیپی (IP Geolocation) پروسهای است که برای تعیین موقعیت فیزیکی یک آدرس IP استفاده میشود و میتوان از آن در مقاصد مختلفی از قبیل شخصیسازی محتوا و تحلیل ترافیک بهره گرفت. تحلیل ترافیک از طریق موقعیت جغرافیایی میتواند بینشهای مختلفی در مورد کاربران ارائه کند و بدین ترتیب میتوان به سادگی متوجه شد که کاربران یک وبسایت یا اپلیکیشن اهل کجا هستند. بدین ترتیب میتوان تصمیمهای آگاهانهای در مورد مکان مناسب برای سرورهای اپلیکیشن و هویت کاربران آن گرفت.
در این راهنما روش ایجاد نگاشت جغرافیایی از آدرسهای IP کاربران اپلیکیشن به کمک Elasticsearch, Logstash و Kibana را به شما آموزش میدهیم.
در ابتدا توضیحی کوتاه در مورد طرز کار آن میدهیم. Logstash از پایگاه داده GeoIP برای تبدیل آدرسهای IP به مختصات طول و عرض جغرافیایی متناظر آن استفاده میکند. بدین ترتیب موقعیت فیزیکی تقریبی آدرس IP مشخص میشود. این دادههای جغرافیایی در الاستیکسرچ در فیلدهای geo_point ذخیره و به رشتههای Geohash نیز تبدیل میشوند. سپس Kibana میتواند این رشتههای Geohash را خوانده و آنها را به صورت نقاطی روی نقشه دنیا ترسیم کند. در نسخه 4 Kibana این فرایند به نام بصریسازی نقشه (Tile Map visualization) نامیده میشود.
پیشنیازها
برای مطالعه این راهنما باید ابتدا یک استک ELK را آماده کرده باشیم. به علاوه میبایست Log هایی داشته باشیم که حاوی آدرسهای IP باشند که بتوان آنها را در یک فیلد فیلتر کرد، مثلاً لاگهای دسترسی به وبسرور بدین منظور مناسب هستند. اگر این دو مورد را ندارید میتوانید از راهنمای «نصب مجموعه ELK شامل Elasticsearch، Logstash و Kibana» استفاده کنید.
افزودن نگاشت geo_point به اندیس Filebeat
با فرض این که پیشنیازهای این راهنما را آماده ساختهاید، پس قبلاً این کار را انجام دادهاید. با این حال یک بار دیگر این مرحله را تکرار میکنیم تا اگر در راهنمای تنظیم Logstash فراموش کردهاید انجام دهید، مطمئن باشیم که همه چیز درست است. بصریسازی TileMap نیازمند این است که مختصات GeoIP در الاستیکسرچ از نوع geo_point ذخیره شده باشد.
در سروری که الاستیکسرچ روی آن نصب شده است، قالب اندیس Filebeat را در دایرکتوری home خود دانلود کنید:
cd ~ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
سپس این قالب را با دستور زیر در الاستیکسرچ بارگذاری نمایید:
curl -XPUT 'http://localhost:9200/_template/filebeat' -d@filebeat-index-template.json
پیکربندی Logstash برای استفاده از GeoIP
برای این که Logstash مختصات GeoIP را ذخیره کند، باید اپلیکیشنی را شناسایی کنید که لاگهایی تولید میکند که حاوی آدرسهای IP عمومی هستند و بتوانید آنها را در فیلدهای گسستهای فیلتر کنید. یکی از بهترین مورد از چنین اپلیکیشنهایی وبسرورها هستند که از آن جمله میتوان به Nginx و Apache اشاره کرد. ما در این نوشته از لاگهای دسترسی Nginx به عنوان قالب استفاده میکنیم. اگر لاگهای شما متفاوت است، باید تغییرات مورد نیاز را روی مثالها اعمال کنید.
ما فیلترهای Nginx برای Logstash را در فایلی به صورت ذخیره کردهایم. اگر فایل شما در مسیر دیگری قرار دارد تغییرات لازم را اعمال کنید. در ادامه این فیلترهای Nginx را ویرایش میکنیم:
sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
در بخش grok موارد هایلایت شده زیر را اضافه کنید:
filter { if [type] == "nginx-access" { grok { match => { "message" => "%{NGINXACCESS}" } } geoip { source => "clientip" } } }
بدین ترتیب فایل طوری پیکربندی میشود که آدرس IP ذخیره شده در فیلد clientip را تبدیل کند. به این دلیل منبع را به صورت clientip مورد اشاره قرار میدهیم که نام فیلدی است که آدرس IP کاربر Nginx دران ذخیره میشود. اگر اطلاعات آدرس IP در فیلد دیگری ذخیره میشود، اطمینان حاصل کنید که تغییرات لازم را اعمال کردهاید. فایل را ذخیره کرده و خارج شوید. برای این که تغییرات اعمال شوند، باید Logstash را ریاستارت کنیم:
sudo service logstash restart
اگر همه چیز به درستی پیکربندی شده باشد، Logstash اینک باید مختصات GeoIP را از لاگهای دسترسی Nginx (یا هر اپلیکیشنی که لاگها را تولید میکند) ثبت کند. توجه داشته باشید که این تغییر معطوف به دادههای سابق نمیشود و از این رو اطلاعات جغرافیایی به لاگهایی که قبلاً گردآوری کردهاید اضافه نخواهند شد. در ادامه بررسی کارکرد صحیح GeoIP در Kibana را بررسی میکنیم.
اتصال به Kibana
سادهترین روش برای تأیید این که Logstash به درستی پیکربندی و GeoIP فعال شده، این است که Kibana را در یک مرورگر وب باز کنیم. پیامی را پیدا کنید که نشان میدهد اپلیکیشن شما به دلیل فعالسازی ماژول GeoIP در Logstash ایجاد شده است. اگر از مثال Nginx استفاده میکنید، میتوانید به دنبال عبارت "type: "nginx-access بگردید. سپس یکی از پیامها را باز کنید تا به جدول فیلدهای آن نگاه کنید. در این جدول باید فیلدهای GeoIP را ببینید که حاوی اطلاعاتی در مورد آدرسهای IP هستند که به اطلاعات مختصات جغرافیایی نگاشت شدهاند. برای نمونه:
توجه کنید که اگر هیچ لاگی مشاهده نمیکنید، میتوانید با مراجعه به اپلیکیشن این لاگها را تولید کنید و مطمئن شوید که فیلترِ زمانی روی یک زمان متأخر تنظیم شده است. همچنین دقت کنید که Kibana ممکن است نتواند یک مختصات جغرافیایی را برای همه آدرسهای IP تشخیص دهد. اگر تنها یک آدرس را تست میکنید و به نظر میرسد که جواب نمیدهد، پیش از اقدام به عیبیابی، آدرسهای دیگر را نیز تست کنید. اگر پس از بررسیهای فوق همچنان اطلاعات GeoIP را مشاهده نمیکنید، یا این که این اطلاعات صحیح نیستند، احتمالاً نرمافزار Logstash را به درستی پیکربندی نکردهاید. اگر اطلاعات GeoIP صحیحی را در این بخش میبینید، پس آماده هستید که بصریسازی نقشه خود را ایجاد کنید.
ایجاد بصریسازی نقشه
توجه کنید که اگر تاکنون از بصریسازیهای Kibana استفاده نکردهاید، از راهنمای «شیوه استفاده از داشبوردها و بصریسازیهای Kibana» استفاده کنید. برای نمایش آدرسهای IP در Kibana ابتدا باید بصریسازی نقشه را ایجاد کنید. بنابراین در منوی اصلی روی Visualize کلیک کنید و زیر بخش Create a new visualization گزینه Tile map را انتخاب نمایید. سپس زیر گزینه Select a search source میتوانید هر یک از دو گزینه را انتخاب کنید. اگر یک جستجوی ذخیره شده دارید، که در آن پیامهای لاگ که قرار است روی نقشه نمایش یابند را جستجو کردهاید، میتوانید از این جستجو استفاده کنید. ما از گزینه From a new search استفاده میکنیم.
زمانی که از شما خواسته میشود Select an index pattern انتخاب کنید، گزینه *-filebeat را از منوی بازشدنی انتخاب نمایید. بدین ترتیب به صفحهای با یک نقشه خالی هدایت میشوید.
در نوار جستجو عبارت type: nginx-access یا هر عبارت دیگری که میخواهید را وارد کنید تا با اطلاعات لاگ حاوی آن GeoIP مطابقت داشته باشد. مطمئن شوید که دوره زمانی (در بخش راست-بالای صفحه) برای یافتن برخی مدخلها در لاگ به طور صحیحی تنظیم شده است. اگر به جای نقشه پیام No results found را میبینید، باید عبارت مورد جستجو یا دوره زمانی را تغییر دهید.
زمانی که موفق شدید برخی نتایج را بیابید بر روی Geo Coordinates زیر هدر buckets در ستون سمت چپ کلیک کنید. دکمه سبز رنگ «play» در این زمان فعال میشود. روی آن کلیک کنید تا مختصات جغرافیایی مورد نظرتان روی نقشه ترسیم شوند:
زمانی که از نتیجه بصریسازی راضی بودید، مطمئن شوید که آن را با استفاده از دکمه Save Visualization (آیکون فلاپی دیسک) که در کنار نوار جستجو قرار دارد ذخیره میکنید.
سخن پایانی
اینک که اطلاعات GeoIP را در Kibana روی نقشه بردید، کار ما تمام شده تلقی میشود. این نقشه، خود ایدهای در مورد پراکندگی موقعیت جغرافیایی کاربران به شما میدهد. هر چند با افزودن لاگهای دیگری به داشبورد میتوانید از این دادهها بهرهبرداری دوچندان بکنید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- نصب مجموعه ELK روی سرور اوبونتو ۱۴.۰۴ — از صفر تا صد
- ابزارها و راهکارهای مدیریت وبسایتها
- ایجاد آدرس کوتاه و منحصر به فرد برای هر مکان با AngularJS و PHP — راهنمای جامع
- نمایش و رسم نمودار برای دادهها — معرفی و کاربردها
- مجموعه آموزشهای طراحی و برنامهنویسی وب
- اینفوگرافیک چیست و چه فرقی با بصری سازی دادهها دارد؟
==