خیلی از نرمافزارهایی که امروز باهاشون کار میکنیم یا توسعهشون میدیم به نوعی قابلیت جستجو دارن؛ حالا هر کدوم، این قابلیت رو با روشهای مختلفی پیاده کردن؛ بعضیا با یه کوئری SQL ساده سرچ رو انجام میدن، بعضیام (مثل گوگل) از یه دنیا ابزار و نرمافرار پیچیده استفاده میکنن؛ خیلیام برای پیادهکردن این قابلیت از Elasticsearch استفاده میکنن؛ Elasticsearch یه موتور جستجوئه که بر مبنای Lucene طراحی شده و امکانات خیلی خوبی برای انجام جستجوی پیشرفته روی حجم زیادی از متن رو به ما میده.
اگه بخوایم خیلی ساده روش کار با Elasticsearch رو بگیم به این شکل هستش که ما متنهامون رو با استفاده از REST API میفرستیم سمت Elasticsearch، اون ایندکسشون میکنه و بعد دوباره با فرستادن کوئری، جستجو رو انجام میده و نتایج رو بر میگردونه؛ البته برای زبانهای مختلف، Clientش به صورت Library پیاده شده و لازم نیست مستقیم REST بزنیم!
رابط کاربری Elasticsearch گرافیکی نیست و فقط با استفاده از REST APIهاش میشه باهاش کار کرد؛ بنابراین اگر بخوایم اطلاعات رو به صورت گرافیکی (مثلا با نمودار یا جدول) نمایش بدیم، یا باید خودمون نرمافزاری طراحی کنیم که اطلاعات رو از Elasticsearch بگیره و نمایش بده یا از Kibana استفاده کنیم.
به تعریف خود سایت الستیک، Kibana ابزار گرافیکی برای چرخیدن توی اطلاعات، نمایش دادن اونها و کشف دادههای جدید از اطلاعات موجوده.
ترکیب Elasticsearch و Kibana (و ابزارهای کمکی مثل Logstash و Beatها که اینجا در موردشون صحبت نمیکنیم) باعث شده تا Elasticsearch صرفا یه ابزار جستجو نباشه و توی دنیای DevOpsها، به ابزاری برای جمعآوری و تجمیع Logها و رویدادها و مانیتورینگ اونها تبدیل بشه.
با این مقدمه بریم سراغ نصبشون.
فرض بر اینه که میخوایم Elasticsearch و Kibana رو روی اوبونتو سرور بریزیم و دایره لغتمون یه مقدار لینوکسی خواهد بود.
از اونجایی که میخوایم Elasticsearch و Kibana رو با داکر نصب کنیم لازمه روی سیستممون داکر و داکر کامپوز نصب باشه؛ توی این مقاله گفتم چجوری میشه داکر و داکر کامپوز رو روی اوبونتو نصب کرد.
همچنین چون میخوایم ایمیجها رو از DockerHub دانلود کنیم لازمه از تحریمشکن استفاده کنیم که توی این مقاله فعالسازی شکن توی اوبونتو رو توضیح دادم.
خب اول از همه برا اینکه خیلی درگیر sudo و دسترسی و اینا نشیم با زدن دستور پایین دسترسی root بگیریم:
sudo su
حالا لازمه مقدار vm.max_map_count رو افزایش بدیم؛ برای اینکه مقدار گفته شده به طور دائم تغییر کنه فایل پایین رو باز میکنیم:
vim /etc/sysctl.conf
و این مقدار رو بهش اضافه میکنیم (یا اگه وجود داشت تغییرش میدیم):
vm.max_map_count=262144
برای اینکه مقدار بالا تنظیم بشه باید سیستم ریبوت بشه ولی با دستور پایین میتونیم بدون ریبوت مقدار رو تنظیم کنیم:
sysctl -w vm.max_map_count=262144
حالا بریم پوشهی مورد نیازمون رو که قراره دیتا داخل اون قرار بگیره بسازیم و دسترسیش رو میزون کنیم:
mkdir -p /opt/elk/elasticsearch/data chmod g+rwx /opt/elk/elasticsearch/data chgrp 0 /opt/elk/elasticsearch/data cd /opt/elk
بعد یه فایل docker-compose.yaml بسازیم و محتویاتشو این قرار بدیم:
version: "3.9" services: elasticsearch: container_name: elasticsearch image: elasticsearch:7.14.1 restart: unless-stopped environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - /opt/elk/elasticsearch/data:/usr/share/elasticsearch/data ports: - "9200:9200" kibana: container_name: kibana image: kibana:7.14.1 restart: unless-stopped environment: ELASTICSEARCH_URL: http://elasticsearch:9200 ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]' ports: - "5601:5601"
بعد هم دستور پایین رو میزنیم تا اجرا بشن:
docker compose up -d
که بار اول شروع میکنه ایمیجها رو دانلود کنه:
بعد از اینکه دانلودشون کرد، بعد از چند ثانیه (تا یکی دو دقیقه) قاعدتا هر دو کانتینر قابل استفاده هستن:
که میتونیم با رفتن به آدرس سرورمون (مثلا http://192.168.230.128:5601) صفحه Kibana رو ببینیم:
تمام!
برای توضیحات بیشتر میتونید به این صفحه و این صفحه مراجعه کنید؛ من هم در قسمت نظرات یا ایمیل mkay1375@gmail.com در خدمت هستم.