این روزا بحث خرید و فروش ارزهای دیجیتال به شدت داغ شده و انواع پلتفرم های موجود هم هرکدوم مشکلات خاص خودشون رو برای کاربر ایرانی دارن تصمیم گرفتم تا با کمک الستیک سرچ یک پنل کاربری ساده برای ردگیری بازار، برای کسایی که لازمش دارن راه بندازم امیدوارم که مفید باشه.
من ابدا متخصص در رابطه با ارزهای دیجیتال نیستم و صرفا علاقمند به کار کردن با داده هام پس سعی میکنم مفاهیم مرتبط با ارز دیجیتال رو تا جایی که میشه بدون تغییر بیارم تا اشتباهی پیش نیاد.این رو هم باید اضافه کنم که نوشته من در دوقسمت منتشر میشه که قسمت اول مراحل ارتباط الستیک سرچ با دیتاست ورودی و در قسمت دوم تنظیمات داخل کیبانا رو توضیح میدم.
در مرحله اول برای اینکه بتونیم پنل کاربریمون رو بسازیم نیاز به راهی داریم که بتونیم این اطلاعات رو از طریق اون بدست بیاریم، که من api لازم رو از وبسایت coinmarketcap بدست اوردم.
الستیک سرچ ورودی های مختلفی رو میتونه پردازش کنه اما برای سادگی کار از فرمت json استفاده میکنم البته اینم اضافه کنم که همه چی بستگی به نوع پاسخی داره که شما از api خودتون میگیرین ولی در هرصورت فرایند کار به یک شکل انجام میشه . برای مثال یه نمونه از فرمت داده هایی رو که از api گرفتم بشکل زیر :
{ "id": "bitcoin", "name": "Bitcoin", "symbol": "BTC", "rank": "1", "price_usd": "573.137", "price_btc": "1.0", "24h_volume_usd": "72855700.0", "market_cap_usd": "9080883500.0", "available_supply": "15844176.0", "total_supply": "15844176.0", "percent_change_1h": "0.04", "percent_change_24h": "-0.3", "percent_change_7d": "-0.57", "last_updated": "1472762067" }
برای اتصال بین api و الستیگ سرچ میشه راه های محتلفی رو پیاده کرد که همش قرار دادی بین شما و طرفی که ازش api اطلاعات رو میگیرین اینجا من از پلاگین http_poller input استفاده کردم ولی شما بسته به نیازتون میتونین از ابزارهای مختلفی استفاده کنین، که براتون داده ها رو تجمیع، رمزگشایی و به url مورد نظرتون ارسال کنه.
خب توی این مرحله راجع به لاگ استش و تنظیماتش توضیح میدم.
برای راه اندازی لاگ استش نیاز داریم که فایل logstash.conf رو بصورتی که میخوایم ایجاد کنیم، درمورد جزییات لاگ استش بعد توضیحات بیشتری میدم ولی فعلا باید تا اینجا بگم که فایل مورد نظرمون سه قسمت داره که قسمت اولش (input) برای تنظیم راه ورودی اطلاعات به داخل لاگ استش که به این صورت من اون رو نوشتم.
input { http_poller{ urls => { url => "https://api.coinmarketcap.com/v1/ticker" } request_timeout => 60 schedule => { cron => "0 * * * *"} codec => "json" metadata_target => "http_poller_metadata" } }
بصورت کلی URL همون آدرس ورودی که قرار لاگ استش از اون دیتای مورد نظر رو بدست بیاره، request_timeout نوعی cron job که بازه زمانی دریافت اطلاعات رو مشخص میکنه و من اون رو برای ساعتی یکبار تنظیم کردم، کدکت josn و متادیتا ها هم گزینه های اختیاری هستن که برای انالیز بهتر ورودی نوشتمشون.
از اونجایی که جواب API یک فایل JSON و از اونجایی که برای بهینه کردن نتایجمون نیاز به ذخیره سازی پاسخ API به فرمت دلخواه داریم که برای این کار از فیلتر mutate استفاده میکنیم لازم اشاره کنم که تمامی فیلدها رو به دیتا تایپ integer ذخیره می کنیم همچنین برای فیلد "last_updated" که اخرین وضعیت اون کوین رو برای ما مشخص میکنه رو با استفاده از دیتاتایپ date و پردازشگر UNIX نگه میداریم.
filter { mutate { convert => { "total_supply" => "integer" } convert => { "rank" => "integer" } convert => { "price_usd" => "integer" } convert => { "market_cap_usd" => "integer" } convert => { "price_btc" => "integer" } convert => { "percent_change_24h" => "integer" } convert => { "max_supply" => "integer" } convert => { "percent_change_7d" => "integer" } convert => { "available_supply" => "integer" } convert => { "percent_change_1h" => "integer" } convert => { "24h_volume_usd" => "integer" } } date { match => ["last_updated","UNIX"] target => "last_updated" } }
فکر میکنم این قسمت نیاز به توضیح زیادی نداشته باشه و واضح باشه که خروجی ما قرار به الستیک سرچ منتقل بشه :
output { elasticsearch { hosts => ["localhost:9200"] } }
ترکیب هر سه قسمت بالا در فایل تنظیمات لاگ استش و اجرای اون باعث میشه که لاگ استش شروع به دریافت اطلاعات از وبسایت ارسال کننده داده ها و ارسال اون به الستیک سرچ. از اینجا به بعد زمانی که ایندکس اطلاعات داخل الستیک سرچ ساخته شد با استفاده از کوئری های الستیک سرچ می تونین شروع به کار کنین.
input { http_poller { urls => { url => "https://api.coinmarketcap.com/v1/ticker" } request_timeout => 60 schedule => { cron => "0 * * * *"} codec => "json" } } filter { mutate { convert => { "total_supply" => "integer" } convert => { "rank" => "integer" } convert => { "price_usd" => "integer" } convert => { "market_cap_usd" => "integer" } convert => { "price_btc" => "integer" } convert => { "percent_change_24h" => "integer" } convert => { "max_supply" => "integer" } convert => { "percent_change_7d" => "integer" } convert => { "available_supply" => "integer" } convert => { "percent_change_1h" => "integer" } convert => { "24h_volume_usd" => "integer" } add_field => { "token" => "<yourUserToken>" } } date { match => ["last_updated","UNIX"] target => "last_updated" } } output { elasticsearch { host => "["localhost:9200"] } }
تا اینجای کار داده های ما شروع به وارد شدن داخل الستیک سرچ کردن از اینجا به بعد باید تنظیمات داخل کیبانا رو انجام بدیم .
خب همونطور که گفتم این قسمت رو همین جا تموم میکنم که نوشته بیشتر از این طولانی نشه و در قسمت بعد تنظیمات داخل کیبانا رو توضیح میدم، امیدوارم که مفید باشه . در آخر هم باید اضافه کنم خوشحال میشم جایی نقصی وجود داره بهم بگین که اون تکمیل کنم.