Elasticsearch پلتفرمي براي جستجوي توزيعي و تجزيه و تحليل داده ها در زمان واقعي است. در واقع به دليل قابليت استفاده ، ويژگي هاي قدرتمند و مقياس پذيري آن يك انتخاب محبوب است.
اين مقاله نصب Elasticsearch ، پيكربندي آن براي موارد استفاده ، ايمن سازي نصب و شروع كار با سرور مجازي Elasticsearch را به شما آموزش ميدهد.
پيش نيازها
قبل از دنبال كردن اين آموزش ، به موارد زير نياز داريد:
سرور مجازي Ubuntu 18.04 با 4 گيگابايت حافظه رم و دو CPU كه با يك كاربر sudo غير ريشه تنظيم شده باشد. مي توانيد با دنبال كردن راه اندازي سرور مجازي اوليه با اوبونتو 18.04 به اين هدف برسيد
OpenJDK 11 نصب شده باشد
براي اين آموزش ، با حداقل مقدار CPU و RAM مورد نياز براي اجراي Elasticsearch كار خواهيم كرد. توجه داشته باشيد كه ميزان CPU ، RAM و حافظه ذخيره شده مورد نياز سرور مجازي Elasticsearch شما به ميزان تعداد ورود هايي كه انتظار داريد بستگي دارد.
مرحله 1 – نصب و پيكربندي Elasticsearch
مولفه هاي Elasticsearch در مخازن بسته پيش فرض اوبونتو در دسترس نيستند. اما مي توانند پس از افزودن ليست منبع بسته Elastic ، با APT نصب شوند.
به منظور محافظت از سيستم شما در برابر جعل بسته ، همه بسته ها با كليد امضاي Elasticsearch امضا شده اند. بسته هايي كه با استفاده از كليد تأييد شده اند توسط مدير بسته شما قابل اعتماد خواهند بود. در اين مرحله ، كليد GPG عمومي Elasticsearch را وارد كرده و به منظور نصب Elasticsearch ، ليست منبع بسته Elastic را اضافه مي كنيد.
براي شروع ، از cURL ، ابزار خط فرمان براي انتقال داده با URL ، براي وارد كردن كليد عمومي GPG Elasticsearch در APT استفاده كنيد. توجه داشته باشيد كه ما از آرگومان -fsSL براي بي صدا كردن روند و خطاهاي احتمالي (به جز خرابي سرور مجازي) استفاده مي كنيم و به cURL اجازه مي دهيم در صورت تغيير جهت درخواستي را در يك مكان جديد ارائه كند. خروجي دستور cURL را در برنامه apt-key قرار دهيد ، كه كليد عمومي GPG را به APT اضافه مي كند.
$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –

در مرحله بعد ، ليست منبع Elastic را به فهرست منابع Source.list.d اضافه كنيد ، جايي كه APT به دنبال منابع جديد است:
$ echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

سپس ، ليست هاي بسته خود را به روز كنيد تا APT منبع جديد Elastic را بخواند:
$ sudo apt update

سپس با اين دستور Elasticsearch را نصب كنيد:
$ sudo apt install elasticsearch

اكنون Elasticsearch نصب شده است و آماده پيكربندي است.
مرحله 2 – پيكربندي Elasticsearch
براي پيكربندي Elasticsearch ، فايل هاي پيكربندي آن را ويرايش خواهيم كرد. Elasticsearch سه فايل پيكربندي دارد:
elasticsearch.yml براي پيكربندي Elasticsearch ، فايل اصلي پيكربندي
jvm.options براي پيكربندي تنظيمات ماشين مجازي جاوا (JVM) Elasticsearch
log4j2.properties براي پيكربندي ورود به سيستم Elasticsearch
براي اين آموزش ، ما به فايل elasticsearch.yml علاقه منديم ، كه بيشتر گزينه هاي پيكربندي در آن ذخيره شده است. اين فايل در ديركتوري / etc / elasticsearch قرار دارد.
از ويرايشگر متن دلخواه خود براي ويرايش فايل پيكربندي Elasticsearch استفاده كنيد. در اينجا ، ما از nano استفاده خواهيم كرد:
$ sudo nano /etc/elasticsearch/elasticsearch.yml

توجه: فايل پيكربندي Elasticsearch با فرمت YAML است ، به اين معني كه ما بايد قالب indentation را حفظ كنيم. مطمئن شويد كه هيچ فضاي اضافي با ويرايش اين فايل اضافه نمي كنيد.
فايل elasticsearch.yml گزينه هاي پيكربندي را براي خوشه ، گره ، مسيرها ، حافظه ، شبكه ، جستجو و گيت شما فراهم مي كند. بسياري از اين گزينه ها در فايل از قبل پيكربندي شده اند اما مي توانيد آنها را با توجه به نياز خود تغيير دهيد. براي اهداف نمايشي پيكربندي تك سرور مجازي ، فقط تنظيمات ميزبان شبكه را انجام خواهيم داد.
Elasticsearch ترافيك را از همه جاي پورت 9200 گوش مي دهد. بهتر است دسترسي بيروني به نمونه Elasticsearch را محدود كنيد تا از خواندن داده هاي خارجي خود جلوگيري كنيد يا خوشه Elasticsearch را از طريق API REST خود خاموش كنيد. براي محدود كردن دسترسي و در نتيجه افزايش امنيت ، خطي را كه شبكه را مشخص مي كند ، پيدا كنيد ، آن را حذف كنيد و مقدار آن را با localhost جايگزين كنيد ، بنابراين به اين شكل خواهد بود:
/etc/elasticsearch/elasticsearch.yml
. . .
# ———————————- Network ———————————–
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

ما localhost را مشخص كرده ايم تا Elasticsearch به تمام رابط ها و IP هاي مرزي گوش كند. اگر مي خواهيد فقط به يك رابط خاص گوش دهيد ، مي توانيد IP آن را به جاي localhost مشخص كنيد. elasticsearch.yml را ذخيره كرده و ببنديد. اگر از nano استفاده مي كنيد ، مي توانيد با فشار دادن CTRL + X ، به دنبال آن Y و سپس ENTER اين كار را انجام دهيد.
اين حداقل تنظيماتي است كه مي توانيد با استفاده از Elasticsearch از آنها شروع كنيد. اكنون مي توانيد براي اولين بار Elasticsearch را راه اندازي كنيد.
سرويس Elasticsearch را با systemctl شروع كنيد. براي شروع كار چند لحظه به Elasticsearch وقت بدهيد تا راه اندازي شود. در غير اين صورت ، با خطاي عدم امكان اتصال مواجه شويد.
$ sudo systemctl start elasticsearch

سپس ، دستور زير را اجرا كنيد تا Elasticsearch بتواند هر بار كه سرور مجازي بوت مي شود راه‌اندازي گردد:
$ sudo systemctl enable elasticsearch

با فعال شدن Elasticsearch هنگام راه اندازي ، بياييد به سراغ بحث بعدي در مورد امنيت برويم.
مرحله 3 – امنيت Elasticsearch
به طور پيش فرض ، Elasticsearch توسط هر شخصي كه مي تواند به HTTP API دسترسي داشته باشد قابل كنترل است. اين هميشه يك خطر امنيتي نيست زيرا Elasticsearch فقط در رابط حلقه برگشت (يعني 127.0.0.1) كار ميكند ، كه فقط به صورت محلي قابل دسترسي است. بنابراين ، دسترسي عمومي امكان پذير نيست و تا زماني كه به همه كاربران سرور مجازي اعتماد داشته باشيد ، امنيت با مشكلي مواجه نخواهد بود.
اگر نياز به دسترسي از راه دور باHTTP API داريد ، مي توانيد ميزان قرار گرفتن در معرض شبكه را با فايروال پيش فرض اوبونتو ، UFW ، محدود كنيد. اگر مراحل پيش فرض راه اندازي سرور مجازي اوليه با آموزش اوبونتو 18.04 را دنبال كرده باشيد ، بايد اين فايروال فعال باشد.
اكنون فايروال را پيكربندي مي كنيم تا به پورت پيش فرض Elasticsearch HTTP API (TCP 9200) براي ميزبان از راه دور قابل اعتماد دسترسي پيدا كنيم ، كه به طور كلي سرور مجازي مورد استفاده شما در يك تنظيمات تك سرور مجازي ،مانند 198.51.100.0 است. براي دسترسي ، دستور زير را تايپ كنيد:
$ sudo ufw allow from 198.51.100.0 to any port 9200

پس از اتمام كار ، مي توانيد UFW را با اين دستور فعال كنيد:
$ sudo ufw enable

در آخر ، وضعيت UFW را با دستور زير بررسي كنيد:
$ sudo ufw status

اگر قوانين را بطور صحيح مشخص كرده باشيد ، خروجي بايد به اين شكل باشد:
Output
Status: active

To Action From
— —— —-
9200 ALLOW 198.51.100.0
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)

UFW اكنون بايد براي محافظت از پورت Elasticsearch 9200 فعال و تنظيم شود.
اگر مي خواهيد روي حفاظت بيشتر سرمايه گذاري كنيد ، Elasticsearch افزونه تجاري Shield را براي خريد ارائه مي دهد.
مرحله 4 – آزمايش Elasticsearch
اكنون ، Elasticsearch بايد در پورت 9200 در حال اجرا باشد. شما مي توانيد آن را با cURL و درخواست GET تست كنيد.
$ curl -X GET ‘http://localhost:9200’

بايد پاسخ زير را مشاهده كنيد:
Output
{
“node.name” : “My First Node”,
“cluster.name” : “mycluster1”,
“version” : {
“number” : “2.3.1”,
“build_hash” : “bd980929010aef404e7cb0843e61d0665269fc39”,
“build_timestamp” : “2020-04-04T12:25:05Z”,
“build_snapshot” : false,
“lucene_version” : “5.5.0”
},
“tagline” : “You Know, for Search”
}

اگر پاسخي مشابه پاسخ فوق مي بينيد ، Elasticsearch به درستي كار مي كند. در غير اين صورت ، اطمينان حاصل كنيد كه دستورالعمل هاي نصب را به درستي رعايت كرده ايد و زماني را براي شروع كامل Elasticsearch ارائه كرده ايد.
براي انجام يك بررسي دقيق تر از Elasticsearch ، دستور زير را اجرا كنيد:
$ curl -XGET ‘http://localhost:9200/_nodes?pretty’

در خروجي از دستور فوق مي توانيد تمام تنظيمات فعلي گره ، خوشه ، مسيرهاي برنامه ، ماژول ها و موارد ديگر را تأييد كنيد.
مرحله 5 – استفاده از Elasticsearch
براي شروع استفاده از Elasticsearch ، ابتدا اجازه دهيد داده هايي را اضافه كنيم. Elasticsearch از API RESTful استفاده مي كند ، كه به دستورات معمول CRUD پاسخ مي دهد: ايجاد (create ) ، خواندن (read)، به روزرساني (update) و حذف (delete). براي كار با آن ، دوباره از دستور cURL استفاده خواهيم كرد.
شما مي توانيد اولين ورودي خود را مانند اين اضافه كنيد:
$ curl -XPOST -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1’ -d ‘{ “message”: “Hello World!” }’

شما بايد پاسخ زير را دريافت كنيد:
Output
{“_index”:”tutorial”,”_type”:”helloworld”,”_id”:”1″,”_version”:2,”result”:”updated”,”_shards”:{“total”:2,”successful”:1,”failed”:0},”_seq_no”:1,”_primary_term”:1}

با cURL ، يك درخواست HTTP POST را به سرور مجازي Elasticsearch ارسال كرديم. URI درخواست /tutorial/helloworld/1 با چندين پارامتر بود:
tutorial  ايندكس داده ها در Elasticsearch است.
helloworld  نوع است.
1  شناسه ورود ما تحت فهرست و نوع فوق است.
شما مي توانيد اين اولين ورودي را با درخواست HTTP GET بازيابي كنيد.
$ curl -X GET -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1’ -d ‘{ “message”: “Hello World!” }’

اين خروجي بايد حاصل شود:
Output
{“_index”:”tutorial”,”_type”:”helloworld”,”_id”:”1″,”_version”:1,”found”:true,”_source”:{ “message”: “Hello, World!” }}

براي تغيير يك ورودي موجود ، مي توانيد از درخواست HTTP PUT استفاده كنيد.
$ curl -X PUT -H “Content-Type: application/json” ‘localhost:9200/tutorial/helloworld/1?pretty’ -d ‘

$ {

$ “message”: “Hello, People!”

$ }’

Elasticsearch بايد اصلاح موفقيت آميز مانند اين را تصديق كند:
Output
{
“_index” : “tutorial”,
“_type” : “helloworld”,
“_id” : “1”,
“_version” : 2,
“_shards” : {
“total” : 2,
“successful” : 1,
“failed” : 0
},
“created” : false
}

در مثال بالا پيام ورودي اول را در “hello people!” تغيير داده ايم. با اين كار ، تعداد نسخه به طور خودكار به 2 افزايش يافته است.
ممكن است در درخواست فوق آرگومان اضافي pretty را به خوبي مشاهده كرده باشيد. اين كار فرمت قابل خواندن توسط انسان را ممكن مي سازد تا بتوانيد هر فيلد داده را روي يك رديف جديد بنويسيد. همچنين مي توانيد هنگام بازيابي داده ها نتايج خود را “پيش بيني كنيد” تا با وارد كردن دستور زير ، خروجي خواناتري بدست آوريد:
$ curl -X GET -H “Content-Type: application/json” ‘http://localhost:9200/tutorial/helloworld/1?pretty’

در حال حاضر پاسخ براي تجزيه و تحليل يك انسان فرمت بندي خواهد شد:
Output
{
“_index” : “tutorial”,
“_type” : “helloworld”,
“_id” : “1”,
“_version” : 2,
“found” : true,
“_source” : {
“message” : “Hello, People!”
}
}

اكنون داده هاي موجود در Elasticsearch اضافه و پرس و جو شده است. براي كسب اطلاعات در مورد ساير عمليات ، لطفاً مستندات API را بررسي كنيد.
نتيجه
اكنون Elasticsearch را نصب ، پيكربندي و شروع به استفاده كرده ايد. از زمان انتشار اوليه Elasticsearch ، الاستيك سه ابزار اضافي – Logstash ، Kabana و Beats را توسعه داده است كه در رابطه با Elasticsearch بعنوان بخشي از Elastic Stack مورد استفاده قرار مي گيرد. اين ابزارها با همكاري هم ، اين امكان را به شما مي دهند تا ورودهاي ايجاد شده از هر منبع و با هر فرمي را در روشي كه به centralized logging شناخته مي شود جستجو ، تجزيه و تحليل كنيد. براي شروع كار با Elastic Stack در اوبونتو 18.04 ، لطفاً به راهنماي ما درمورد نحوه نصب Elasticsearch ،Logstash و Kibana (Elastic Stack) در اوبونتو 18.04 مراجعه كنيد.