כיצד לפשט ניתוח יומני מכולות Docker באמצעות Elastic Stack

רישום הוא מרכיב חיוני בכל יישום. יומנים מאפשרים לך לנתח ולהתגנב שיא למה שקורה בתוך קוד היישום שלך כמו סיפור. מפתחי תוכנה מבלים חלק גדול מחיי היום יום שלהם במעקב אחר, פתרון בעיות וניקוי באגים, מה שלעתים יכול להיות סיוט. רישום מאפשר למפתחי תוכנה להפוך את התהליך הקדחתני הזה להרבה יותר קל וחלק.

אם מיצית את היישום שלך עם פלטפורמת מיכל כמו Docker, ייתכן שאתה מכיר את יומני העגינההמאפשר לראות את היומנים שנוצרו בתוך היישום שלך פועלים בתוך מיכל העגינה שלך. מדוע אם כן לחשוב על Elastic Stack כדי לנתח את יומניך? ובכן, יש כאן בעיקר שתי בעיות צריבה:

  • תאר לעצמך שיש לך עשרות, מאות או אפילו אלפי מכולות שיוצרים יומנים - SSH- כניסה לכל אותם שרתים וחילוץ יומנים לא יעבוד טוב.
  • כמו כן, מיכלים הם בלתי ניתנים לשינוי וארעיים, מה שאומר שיש להם אורך חיים קצר יותר. אז ברגע שהמכולות שלך נעלמו והוחלפו במכולות חדשות, כל יומני היישומים שלך הקשורים למכולות ישנות נעלמו.

אז הפיתרון האולטימטיבי לכך הוא יצירת רכיב רישום ריכוזי לאיסוף כל יומני המכולה שלכם למקום אחד. כאן נכנס ערימות אלסטיות.

מחסנית אלסטית מורכבת בעיקר מארבעה מרכיבים עיקריים:

  • Beats הוא החבר החדש שהפך את מחסנית ELK לכינוי אלסטי סטאק. פעימות הינן משלוחי נתונים של יומן משקל קל שיכולים לדחוף יומנים אל מחסנית ELK. לפוסט זה אשתמש ב- Filebeats, בן למשפחת Beats, המציע דרך קלה לאיסוף והעברה וריכוז של יומנים וקבצים.
  • Logstash הוא רכיב שמאגד , משנה ומעביר יומנים ממקומות קלט מרובים אל Elasticsearch.
  • חיפוש אלסטיקה הואמנוע חיפוש וניתוח מבוזר JSON שמאחסן ואינדקס נתונים (ערכי יומן במקרה זה) בצורה ניתנת להרחבה וניתנת לניהול.
  • Kibana הוא ממשק משתמש מועשר לניתוח נתונים וגישה אליהם בקלות בחיפוש אלסטיקה .

בפוסט זה נבדוק כיצד להשתמש ברכיבים שהוזכרו לעיל ולהטמיע מנתח יומנים מרכזי לאיסוף ולחילוץ יומני ממיכלי Docker.

למטרות מאמר זה, השתמשתי בשני מופעי t2.AWS EC2 קטנים, בהם פועלת אובונטו 18.04 המותקנת עם Docker ו- Docker. מופע 1 מריץ אפליקציית webc tomcat והמופע 2 מריץ מחסנית ELK (Elasticsearch, Logstash, Kibana).

ב- Linux כברירת מחדל יומני העגינה נמצאים במיקום זה:

/ var / lib / docker / containers // gt; -json.log

כל יומני העגינה ייאספו באמצעות Filebeat המופעל בתוך מכונת המארח כמכולה. Filebeat יותקן על כל מכונת מארח העגינה (אנו נשתמש בקובץ העגינה המותאם אישית של Filebeat וביחידת המערכת לשם כך שיוסבר בסעיף הגדרת Filebeat.)

אפליקציית האינטרנט של tomcat תכתוב יומנים למיקום הנ"ל באמצעות מנהל ההתקן של רישום העגינה ברירת המחדל. לאחר מכן, Filebeat יחלץ יומנים מאותו מיקום וידחוף אותם לכיוון Logstash.

דבר חשוב נוסף שיש לציין הוא כי מלבד יומני יישומים, אנו זקוקים גם למטא נתונים המשויכים למכולות, כגון שם מיכל, תמונה, תגים, מארח וכו '... זה יאפשר לנו לזהות באופן ספציפי את המארח והמכולה המדויקים שיוצרים היומנים. . ניתן לשלוח נתונים אלה בקלות על ידי Filebeat יחד עם רשומות יומן היישומים.

על ידי ביצוע יישום מסוג זה, המכולות הפועלות אינן צריכות לדאוג למנהל הרישום, לאופן בו אוספים ודוחפים יומנים. Filebeat ידאג לאלה. זה ידוע לעיתים קרובות כעקרון אחריות יחידה.

קביעת תצורה של Filebeat

עבור סעיף זה filebeat.yml ו- Dockerfile הושגו מ- repo github של ברונו COSTE לדוגמא- filebeat-docker-logging. תודה רבה לעבודה המדהימה שלו. אבל מכיוון שביצעתי מספר שינויים ב- filebeat.yml בהתאם לדרישות מאמר זה, אירחתי את אלה עם filebeat.service (קובץ systemd) בנפרד ברשותי. אתה יכול לגשת לריבו כאן.

כצעד הראשוני, עליך לעדכן את קובץ ה- filebeat.yml המכיל את תצורות ה- Filebeat. להלן קובץ לדוגמא filebeat.yml שתוכל להשתמש בו. שימו לב לשורה 21, לשדה output.logstash ולשדה hosts. הגדרתי את זה לכתובת ה- IP של השרת שאני מריץ את מחסנית ELK שלי, אבל אתה יכול לשנות אותו אם אתה מפעיל את Logstash בשרת נפרד. כברירת מחדל Logstash מאזין ל- Filebeat ביציאה 5044.

למידע נוסף על פרמטרי התצורה של Filebeat Docker, עיין כאן.

לאחר מכן תוכל ליצור תמונת Docker משלך באמצעות קובץ ה- Docker הבא.

לאחר בניית התמונה, תוכל לדחוף אותה למאגר העגינה שלך. כעת מכיוון שיש לך את היכולת להריץ את Filebeat כמכולה עוגן, זה רק עניין של הפעלת מיכל Filebeat במקרים המארחים שלך שבהם פועלים מכולות. הנה פקודת ההפעלה של העגינה.

docker run -v '/var/lib/docker/containers:/usr/share/dockerlogs/data:ro' -v '/var/run/docker.sock:/var/run/docker.sock' --name filebeat ${YOUR_FILEBEAT_DOCKER_IMAGE}:latest

בפקודה Docker לעיל, שים לב לשני פרמטרי ה- bind bind: / var / lib / docker / containers הוא הנתיב שבו קיימים יומני ה- docker במחשב המארח, והוא קשור ל / usr / share / dockerlogs / נתיב נתונים בתוך Filebeat מיכל עם גישה לקריאה בלבד. בטיעון הרכבה השני, /var/run/docker.sock מאוגד לדמון הדוקר של מיכל Filebeat. זהו שקע ה- unix שדמון הדוקר מקשיב לו כברירת מחדל וניתן להשתמש בו כדי לתקשר עם הדמון מתוך מיכל. זה מאפשר למכל ה- Filebeat שלנו להשיג מטא נתונים של Docker ולהעשיר את ערכי יומן המכולות יחד עם המטא נתונים ולדחוף אותם למחסנית ELK.

אם ברצונך להפוך את התהליך לאוטומטי, כתבתי קובץ Systemd Unit לניהול Filebeat כשירות.

קביעת תצורה של ערמת ELK

לשם כך אשתמש במופע ה- EC2 השני שלי, שבו אני מריץ את מחסנית ELK. אתה יכול לעשות זאת על ידי פשוט להתקין Docker compose ולבדוק את זה repiantony / docker-elk repo ופשוט להריץ docker-compose up -d

שים לב שכל כללי חומת האש שלך מאפשרים תעבורה נכנסת אל Logstash, Elasticsearch ו- Kibana.

לפני הפעלת מחסנית ELK עליך לוודא שקובץ logstash.conf מוגדר כראוי להאזנה ליומני פעימות נכנסות ביציאה 5044 והיומנים מתווספים כראוי למארח elasticsearch. כמו כן עליך להקפיד להוסיף פרמטר אינדקס לחיפוש האלסטיקה שלך כדי לזהות את היומנים שנוצרו על ידי Filbeat באופן ייחודי.

ברשימת ה- docker-elk שלך תוכל למצוא את הקובץ logstash.conf על ידי ביצוע שם הנתיב של docker-elk / logstash / pipeline. זהו קובץ התצורה להגדרת תצורות Logstash. עליך לעדכן אותו באופן הבא:

ברגע שתעשה זאת, תוכל לגשת ללוח המחוונים של Kibana שלך ביציאה 5601 כברירת מחדל, כפי שהוגדר בקובץ docker-compose.yml ב- repiantony / docker-elk.

בכרטיסיית הניהול, תוכל ליצור דפוס אינדקס עבור יומני Filebeat. זה צריך להיעשות לפני שתוכל להציג את היומנים בלוח המחוונים של Kibana.

אם המכולות שלך דוחפות כהלכה יומנים אל אלסטיקס חיפוש דרך Logstash, ויצרת בהצלחה את דפוס האינדקס, אתה יכול לעבור לכרטיסייה גלה בלוח המחוונים של Kibana ולהציג את יומני יישומי המכולה של Docker יחד עם מטא נתונים של דוקר תחת תבנית האינדקס filebeat *.

הפניות

  1. //www.elastic.co/guide/en/beats/filebeat/current/filebeat-getting-started.html
  2. //medium.com/@bcoste/powerful-logging-with-docker-filebeat-and-elasticsearch-8ad021aecd87
  3. //www.elastic.co/guide/en/logstash/current/configuration.html
  4. //medium.com/lucjuggery/about-var-run-docker-sock-3bfd276e12fd