A previous version of this article was written by Toli.
הקדמה
Elasticsearch הוא פלטפורמה לחיפוש מבוזר וניתוח של נתונים בזמן אמת. זהו בחירה פופולרית בשל קלות השימוש שלו, התכונות העוצמתיות שלו והקינון.
מאמר זה ידריך אותך דרך התקנת Elasticsearch, הגדרתו למטרת השימוש שלך, מאבטח את ההתקנה שלך, ומתחיל לעבוד עם שרת Elasticsearch שלך.
דרישות מוקדמות
לפני שתמשיך במדריך זה, יהיה עליך להיות ברשותך:
- שרת Ubuntu 22.04 עם 2GB RAM ו-2 CPUs המוגדר עם משתמש sudo לא-ראשי. ניתן להשיג זאת על ידי עקיפת ההתקנת השרת הראשונית עם Ubuntu 22.04
למדריך זה, נעבוד עם כמות מינימלית של מעבד וזיכרון הנדרשים כדי להריץ Elasticsearch. שים לב שכמות המעבד, הזיכרון והאחסון שהשרת שלך יצטרך תלויים בהיקף היומנים שאתה מצפה.
שלב 1 — התקנת והגדרת Elasticsearch
רכיבי Elasticsearch אינם זמינים במאגרי החבילות המובנים של Ubuntu. עם זאת, אפשר להתקין אותם באמצעות APT לאחר הוספת רשימת המקורות של Elastic.
כל החבילות חתומות עם מפתח החתימה של Elasticsearch כדי להגן על המערכת שלך מפני זיוף של חבילות. חבילות שאומתו באמצעות המפתח תתקשר כאמין על ידי מנהל החבילות שלך. בשלב זה, תייבא את המפתח הציבורי של Elasticsearch ותוסיף את רשימת מקור החבילות של Elastic כדי להתקין את Elasticsearch.
כדי להתחיל, השתמש ב־cURL, כלי השורת פקודה להעברת נתונים עם URL, כדי לייבא את המפתח הציבורי של Elasticsearch לתוך APT. שים לב שאנו משתמשים בארגומנטים -fsSL כדי להשתיק את כל התקדמות התהליך ושגיאות אפשריות (למעט כשהשרת נכשל) וכדי לאפשר ל־cURL לבצע בקשה במיקום חדש אם יהיה הפניה. נקבע את הפלט לפקודת gpg --dearmor
, שממירה את המפתח לפורמט שבו apt יכול להשתמש כדי לאמת חבילות שהורדו.
בשלב הבא, הוסף את רשימת מקור Elastic לתיקיית sources.list.d
, שם apt
יחפש מקורות חדשים:
החלק [signed-by=/usr/share/keyrings/elastic.gpg]
בקובץ מציין ל־apt להשתמש במפתח שהורדת כדי לאמת את מידע המאגר והקובץ עבור חבילות Elasticsearch.
לאחר מכן, עדכן את רשימות החבילות שלך כך ש־APT תקרא את המקור החדש של Elastic:
לאחר מכן, התקן Elasticsearch באמצעות הפקודה הבאה:
לחץ על Y
כאשר יתבקש לאשר את ההתקנה. אם תתבקש לאתחל כל שירותים, לחץ על ENTER
כדי לקבל את הברירות המחדלות ולהמשיך. Elasticsearch הותקן כעת ומוכן להתאם אישית.
שלב 2 — הגדרת Elasticsearch
כדי להגדיר את Elasticsearch, נערוך את קובץ התצורה הראשי שלו elasticsearch.yml
שבו נשמרים רוב אפשרויות התצורה שלו. קובץ זה ממוקם בתיקיית /etc/elasticsearch
.
השתמש בעורך הטקסט המועדף עליך כדי לערוך את קובץ התצורה של Elasticsearch. כאן, נשתמש ב־nano
:
הערה: קובץ התצורה של Elasticsearch נמצא בתבנית YAML, וזה אומר שעלינו לשמור על פורמט ההזחה. וודא שאין לך להוסיף שום רווחים נוספים בעת עריכת קובץ זה.
קובץ ה־elasticsearch.yml
מספק אפשרויות הגדרה עבור האשכול, הצומת, הנתיבים, הזיכרון, הרשת, הגלישה והשער. רוב האפשרויות האלה מוגדרות מראש בקובץ אך אתה יכול לשנות אותן לפי הצרכים שלך. למטרת הדגמה של הגדרת שרת יחיד, נשנה רק את ההגדרות עבור מארח הרשת.
Elasticsearch מקשיב לתעבורה מכל מקום בפורט 9200
. כדאי להגביל את גישת החוץ למופע של Elasticsearch כדי למנוע מגורמים חיצוניים לקרוא את הנתונים שלך או לכבות את אשכול ה-Elasticsearch שלך דרך [API הממשק המבוסס על REST] (https://en.wikipedia.org/wiki/Representational_state_transfer). כדי להגביל את הגישה ולכן להגביר את האבטחה, יש למצוא את השורה המציינת network.host
, לבטל את ההערה ממנה, ולהחליף את ערך הערך שלה עם localhost
כך שתראה כך:
. . .
# ---------------------------------- רשת -----------------------------------
#
# הגדר את כתובת הקישור ל-IP מסוים (IPv4 או IPv6):
#
network.host: localhost
. . .
ציינו localhost
כך ש-Elasticsearch יקשיב על כל ממשקי הרשת וה-IP שהוקצו. אם ברצונכם שיקשיב רק על ממשק מסוים, ניתן לציין את ה-IP שלו במקום localhost
. שמרו וסגרו את elasticsearch.yml
. אם אתם משתמשים ב-nano
, ניתן לעשות זאת על ידי לחיצה על CTRL+X
, לאחר מכן Y
ולבסוף ENTER
.
אלו הגדרות מינימליות עם הן ניתן להתחיל כדי להשתמש ב-Elasticsearch. עכשיו תוכלו להתחיל את Elasticsearch לראשונה.
הפעילו את שירות ה-Elasticsearch עם systemctl
. תנו ל-Elasticsearch כמה רגעים להתחיל. אחרת, עשויים להופיע שגיאות לגבי אי אפשרות להתחבר.
לבסוף, הפעילו את הפקודה הבאה כדי לאפשר ל-Elasticsearch להתחיל בכל פעם שהשרת מפעיל:
עם Elasticsearch מאופשר בהפעלת פעולה, בואו נמשיך לשלב הבא כדי לדון באבטחה.
שלב 3 — מאבטח Elasticsearch
ברירת המחדל, Elasticsearch ניתן לשליטה על ידי כל אחד שיש לו גישה ל-HTTP API. זה אינו תמיד סיכון לאבטחה מכיוון ש-Elasticsearch מקשיב רק על ממשק לולאה פנימית (כלומר, 127.0.0.1
), שבו אפשר לגשת רק מקומית. לכן, אין גישה ציבורית אפשרית וכל עוד המשתמשים בשרת הם באמונה, אבטחה עשויה לא להיות דאגה ראשית.
אם נדרש לאפשר גישה מרחוק ל-HTTP API, ניתן להגביל את החשיפה לרשת עם הגנה מרעננת של Ubuntu, UFW. הגנה זו כבר צריכה להיות מופעלת אם עקבתם אחרי השלבים במדריך המקדים הגדרת השרת הראשונית עם Ubuntu 22.04.
כעת נגדיר את הגנת האש כך שתאפשר גישה ליציאת HTTP API המוגדרת כברירת מחדל (TCP 9200) למארח מרוחק שמהימן, בדרך כלל השרת שאתה משתמש בו בהגדרת שרת יחיד, כגון 198.51.100.0
. כדי לאפשר גישה, הקלד את הפקודה הבאה:
כאשר זה נגמר, ניתן להפעיל את UFW עם הפקודה הבאה:
לבסוף, בדוק את מצב ה-UFW עם הפקודה הבאה:
אם ציינת את החוקים בצורה נכונה, תקבל פלט דומה לזה:
OutputStatus: 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.
עליך לקבל את התגובה הבאה:
Output{
"name" : "elastic-22",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ",
"version" : {
"number" : "7.17.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
"build_date" : "2022-02-23T22:20:54.153567231Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
אם קיבלת תגובה דומה לזו מעלה, זה אומר ש־Elasticsearch פועלת בצורה תקינה. אם לא, ודא שעקבת אחר ההוראות להתקנה בצורה נכונה ונתת זמן ל־Elasticsearch להתחיל לפעול לגמרי.
כדי לבצע בדיקה מעמיקה יותר של Elasticsearch, בצע את הפקודה הבאה:
בפלט של הפקודה מעלה תוכל לוודא את כל ההגדרות הנוכחיות עבור הצומת, האשכול, נתיבי היישום, המודולים, ועוד.
שלב 5 — שימוש ב־Elasticsearch
כדי להתחיל להשתמש ב־Elasticsearch, נתחיל ראשית בהוספת נתונים. Elasticsearch משתמשת ב־API RESTful, שמגיב לפקודות CRUD הרגילות: צור, קרא, עדכן, ו־מחק. כדי לעבוד איתו, נשתמש שוב בפקודת cURL.
ניתן להוסיף את הערך הראשון באופן הבא:
עליך לקבל את התגובה הבאה:
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.
זה צריך להיות הפלט התוצאה:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
כדי לשנות ערך קיים, ניתן להשתמש בבקשת HTTP PUT.
אלסטיקסרץ' צריך לאשר שינוי מוצלח כך:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
בדוגמה שלמעלה שינינו את הmessage
של הערך הראשון ל-"שלום, עולם!". עם זאת, מספר הגרסה עלה באופן אוטומטי ל-2
.
ייתכן ששמת לב לארגומנט נוסף pretty
בבקשה שלמעלה. זה מאפשר פורמט קריא לאנשים כך שתוכל לכתוב כל שדה נתונים בשורה חדשה. ניתן גם להאפטים את התוצאות שלך כאשר מאחזרים נתונים כדי לקבל פלט קריא יותר על ידי הכנסת הפקודה הבאה:
עכשיו התגובה תימנמנה לפורמט שבו אנשים יכולים לעבד:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
}
כעת הוספנו ושאילתנו נתונים ב- Elasticsearch. כדי ללמוד על הפעולות האחרות יש לבדוק את תיעוד ה-API.
מסקנה
כעת התקנת, הגדרת והחלת להשתמש ב-Elasticsearch. כדי לחקור עוד את פונקציונליותו של Elasticsearch, אנא הפנה לתיעוד הרשמי של Elasticsearch.