نصب Elasticsearch و Kibana با Docker

خیلی از نرم‌افزارهایی که امروز باهاشون کار می‌کنیم یا توسعه‌شون می‌دیم به نوعی قابلیت جستجو دارن؛ حالا هر کدوم، این قابلیت رو با روش‌های مختلفی پیاده کردن؛ بعضیا با یه کوئری SQL ساده سرچ رو انجام میدن، بعضیام (مثل گوگل)‌ از یه دنیا ابزار و نرم‌افرار پیچیده استفاده می‌کنن؛ خیلیام برای پیاده‌کردن این قابلیت از Elasticsearch استفاده می‌کنن؛ Elasticsearch یه موتور جستجوئه که بر مبنای Lucene طراحی شده و امکانات خیلی خوبی برای انجام جستجوی پیشرفته روی حجم زیادی از متن رو به ما میده.اگه بخوایم خیلی ساده روش کار با Elasticsearch رو بگیم به این شکل هستش که ما متن‌هامون رو با استفاده از REST API می‌فرستیم سمت Elasticsearch، اون ایندکسشون می‌کنه و بعد دوباره با فرستادن کوئری، جستجو رو انجام میده و نتایج رو بر می‌گردونه؛ البته برای زبان‌های مختلف، Clientش به صورت Library پیاده شده و لازم نیست مستقیم REST بزنیم!رابط کاربری Elasticsearch گرافیکی نیست و فقط با استفاده از REST APIهاش میشه باهاش کار کرد؛ بنابراین اگر بخوایم اطلاعات رو به صورت گرافیکی (مثلا با نمودار یا جدول) نمایش بدیم، یا باید خودمون نرم‌افزاری طراحی کنیم که اطلاعات رو از Elasticsearch بگیره و نمایش بده یا از Kibana استفاده کنیم.به تعریف خود سایت الستیک، Kibana ابزار گرافیکی برای چرخیدن توی اطلاعات، نمایش دادن اون‌ها و کشف داده‌های جدید از اطلاعات موجوده.Kibanaترکیب Elasticsearch و Kibana (و ابزارهای کمکی مثل Logstash و Beatها که اینجا در موردشون صحبت نمی‌کنیم) باعث شده تا Elasticsearch صرفا یه ابزار جستجو نباشه و توی دنیای DevOpsها، به ابزاری برای جمع‌آوری و تجمیع Logها و رویدادها و مانیتورینگ اونها تبدیل بشه.با این مقدمه بریم سراغ نصبشون.نصب Elasticsearch و Kibana با استفاده از داکرپیش‌نیازهافرض بر اینه که می‌خوایم Elasticsearch و Kibana رو روی اوبونتو سرور بریزیم و دایره لغتمون یه مقدار لینوکسی خواهد بود.از اونجایی که می‌خوایم Elasticsearch و Kibana رو با داکر نصب کنیم لازمه روی سیستممون داکر و داکر کامپوز نصب باشه؛ توی این مقاله گفتم چجوری میشه داکر و داکر کامپوز رو روی اوبونتو نصب کرد.همچنین چون می‌خوایم ایمیج‌ها رو از DockerHub دانلود کنیم لازمه از تحریم‌شکن استفاده کنیم که توی این مقاله فعالسازی شکن توی اوبونتو رو توضیح دادم.نصب Elasticsearch و Kibanaخب اول از همه برا اینکه خیلی درگیر 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: &quot3.9&quot services: elasticsearch: container_name: elasticsearch image: elasticsearch:7.14.1 restart: unless-stopped environment: - discovery.type=single-node - bootstrap.memory_lock=true - &quotES_JAVA_OPTS=-Xms512m -Xmx512m&quot ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 volumes: - /opt/elk/elasticsearch/data:/usr/share/elasticsearch/data ports: - &quot9200:9200&quot kibana: container_name: kibana image: kibana:7.14.1 restart: unless-stopped environment: ELASTICSEARCH_URL: http://elasticsearch:9200 ELASTICSEARCH_HOSTS: '[&quothttp://elasticsearch:9200&quot]' ports: - &quot5601:5601&quotبعد هم دستور پایین رو می‌زنیم تا اجرا بشن:docker compose up -dکه بار اول شروع می‌کنه ایمیج‌ها رو دانلود کنه:بعد از اینکه دانلودشون کرد، بعد از چند ثانیه (تا یکی دو دقیقه) قاعدتا هر دو کانتینر قابل استفاده هستن:که می‌تونیم با رفتن به آدرس سرورمون (مثلا http://192.168.230.128:5601) صفحه Kibana رو ببینیم:http://IP_OR_DOMAIN:5601تمام!چندتا نکته در مورد docker-compose.yaml بالاایمیج‌ها یه مقدار قدیمی هستن (توی زمان نوشتن این متن، آخرین نسخه ۷.۱۵.۲ هستش)؛ برای اینکه بخواید از آخرین نسخه استفاده کنید باید از رجیستری خود سایت elastic استفاده کنید (به جای elasticsearch:7.14.1 بذارید docker.elastic.co/elasticsearch/elasticsearch:7.15.2 و به جای kibana:7.14.1 بذارید docker.elastic.co/kibana/kibana:7.15.2)؛ توی تجربه شخصی رجیستری elastic خیلی اذیت کرد (با شکن و راه‌های دیگه تست کردم؛ یا دانلود نمی‌شد یا خیلی کند بود) برای همین اینجا ایمیجایی که روی DockerHub موجود هستن رو گذاشتم.بهتره که مقدار رم (ES_JAVA_OPTS) رو به شکل نوشته شده تعیین نکنیم؛ یا اصلا محدودیت نذاریم (خودش بر اساس میزان رم موجود بهترین میزان رو اختصاص میده) یا با روشی که اینجا گفته شده انجامش بدیم.برای توضیحات بیشتر می‌تونید به این صفحه و این صفحه مراجعه کنید؛ من هم در قسمت نظرات یا ایمیل mkay1375@gmail.com در خدمت هستم.