יום ראשון, 18 באוקטובר 2009

יוטיליטות #1 - תקצירן הלוגים

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

היוטיליטי הראשון של 2009 שעליו אספר הוא ה- Log Summarizer -


הצורך - שפר עליכם מזלכם והלקוח העצבני שלכם שלח לכם ג'יגה של לוג פרוס דק דק ל- 50 קבצי לוג מתגלגלים. היכן שהוא, באחת מן השורות שבאחד מן הקבצים הללו מסתתרת הודעה המספרת על כך שבסיס הנתונים לא למעלה או שאירעה תקלה בנקודת זמן כזו או אחרת. מה הסיכוי שלכם למצוא את השורה הזו תוך כדי דפדוף אינסופי במליוני הדפסות לוג? גם לו תצמצמו את הסריקה להודעות בעלות חשיבות גבוהה בלבד: (Error, Warning, Info ב- Java.util.logging) אתם עדיין בהחלט מסתכנים בהתקף אפילפטי.


הפתרון - יוטילטת ה- logSummarizer (נכתבה ב- Perl) יודעת לסרוק סדרה מתגלגלת של קבצי לוג של WebSphere Application Server לשלוף ממנה:



א. פרטי קונפיגורציה בסיסיים (גרסת שרת האפליקציה, גרסת האפל', מספר השרתים באשכול, זמן תחילת וסיום הלוג, וכ"ו).
ב. לדוג קודי ודפוסי שגיאה ידועים (נכון לעכשיו ה- 67 שתפסנו בעבר) למשל דפוסים המעידים על קונפיגורציה שגוייה (המוצר שלנו מצריך הרבה קונפיגורציה סביבתית, כמו: DNS, FW, ונשבר בקלות אם זו חסרה).

בסיום ההרצה, וטרם פתיחת הלוג בעורך החביב עליכם (notepad++ בשבילי), כבר ברור וגלוי לפניכם, מה הגרסה המדוברת, כמה זמן השרת פעל, לכמה קהילות מסרים מיידים הוא מחובר? כמה Exceptions אירעו? האם תורים אפליקטיבים גלשו? האם ערכי ברירת מחדל שונו לצורך שיפור ביצועים? האם מישהו מנסה לפנות בטקסט גלוי לפורט SSL? או לפחות באיזה מודול אפליקטיבי התרחשו השגיאות.



תוצאות בשטח - לפעמים הסאמרייזר לא נותן מידע שעוזר לאבחן את התקלה, לפעמים הוא חושף משהו עמום או כיוון חקירה רצוי, ולפעמים הוא פוגע בול במטרה.
בכל אופן, אחרי שהפכתי את השיגור שלו לקל יותר מקל מאוד (מופיע בקליק ימני על קובץ בסייר הקבצים), הרצת סמרייזר היא הדבר הראשון שקורה ברגע שנופלים לי לוגים לידיים.
היוטיליטי בשימוש כזה או אחר על ידי חברי הצוות, צוותי הטסטינג (שיודעים שזוהי דרישת קדם לפתיחת באג) וע"י חלק מאנשי התמיכה. במסגרת ההטמעה, אני מתכוון לעשות screen cast מוקלט של מתן פרשנות נכונה לדפוסים שהסאמרייזר מסוגל לזהות.

הוספת דפוסים - הדפוסים מוגדרים כמערך דו מימדי בגוף הסקריפט. די קל על מנת לאפשר לאדם טכני, חסר ידע בפרל, להוסיף דפוסים משלו (ואולי אני אופטימי מידי?).


עדכון מרחוק - הסמרייזר הוא יצור חי שאליו מתווספים דפוסים חדשים מידי שבוע, שמתי לב שאנשים רבים מחזיקים גרסה מהשנה שבה היי-פייב הופיעו בפסטיגל אשר אינה מעודכנת בדפוסים החדשים (לשם פשטות וזריזות הדפוסים מוטמעים בתוך קובץ הPERL). במטרה לשים קץ לגרסאות המוזאוניות בכל פינה; שילבתי בהרצת היוטיליטי פנייה (בטרד נפרד) לשרת ווב מרכזי שבו נשמרת הגרסה העדכנית ביותר. במידה ונמצאה גרסה חדשה יותר מזו של המשתמש, הסקריפט מוציא על כך הודעה למשתמש בצירוף הוראות כיצד ניתן לעדכן לגרסה האחרונה (הרצה של היוטיליטי עם מתג: updatenow) אם המשתמש יבחר לעשות כן הסמארייזר יוריד את הגרסה האחרונה וידרוס את עצמו איתה (גיבויים נשמרים כמובן בצד). וואלה (בצרפתית לא בערבית) נפתרה בעיית העותקים הפרהיסטוריים.


ביצועים - בתחילה הייתה לי בעיית ביצועים די רצינית. קימפול מוקדם של הביטוי הרגולרי של פרל פתר אותה. כיום, עם כ ~70 דפוסים קצב סריקת הלוג הוא בסביבות 2-3 מגהבייט לשנייה. עונה על הצרכים.


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



לסיום, הנה דף ה"man" של הסאמרייזר (יש בעיית שמאל לימין עם הטקסט האנגלי):

Introduction


The Log summarizer is a small standalone utility that scans through a *chain* of WAS based product log files (SystemOut.log, trace.log, SystemErr.log, etc...) and display a one page summary of known/suspicious user defined patterns (RegEx based) such as: The number of exceptions, errors, null pointer exceptions, application specific error messages, etc.



The utility is a very lightweight alternative to the IBM Support Assistant (ISA) symptom catalog.
The utility is particularly useful for obtaining a quick bird's eye view of huge (even >1GB) log files coming from a customer site, potentially identifying known issues *before* actually having to dive-in with a log viewer and become scroll dizzy.

Main features



  • No installation: written in Perl which is commonly already installed on your customer's Linux OS.

  • Fast: quickly scans through gigabytes of log files, with a single click.

  • Straightforward: Easy command line interface. Results are printed to the standard output.

  • Extendability: you can easily add new patterns of your own, just edit the expressionsArr array in the source code.

  • Testing: comparing  two consecutive daily build runs can allow to easily detect development regressions.


Installation and updates



  1. On windows you will need to have PERL 5.x installed. Download Perl from here.

  2. Download the Log summarizer utility (link removed).

  3. That's it! You're ready to use the summarizer. The next steps are not mandatory.Optional steps:

  4. Keeping up to date - On each execution, the summarizer queries a web repository in search of a new version. If a new version is available an appropriate message tells the user about it. The user can update the utility by running with the -updatenow switch (see usage guide).

  5. For easy integration with windows explorer context menu, see the bonus#1 section.



Usage


Synopsis





logSummarizer.pl [-nomidsummaries] [-noupdatecheck] [-updatenow] [-pause] [-trace] <log file name>


Options



  • -nomidsummaries - Don't display an interim summary report every 20K lines.

  • -noupdatecheck - Don't query the web for possible summarizer version updates.

  • -updatenow - Run a self upgrade command automatically replace the current summarizer version with the latest summarizer version available via the web.

  • -pause - Wait for a key when before returning

  • -trace - Display trace level messages used for debugging the summarizer.


Examples


Run the summarizer against one or a series of  SystemOut.log files:


logSummarizer.pl SystemOut.log



Run the summarizer against one or a series of trace.log files.
Wait for a key when before returning:

perl logSummarizer.pl -pause trace.log


Run a self upgrade command automatically replace the current summarizer version with the latest summarizer version available via the web.


logSummarizer.pl -updatenow



Run the summarizer against one or a series of  SystemOut.log files.
Don't display an interim summary every 20K lines.
Don't query the web for possible summarizer version updates.
Display trace level messages used for debugging the summarizer.

logSummarizer.pl -noMidSummaries -noupdatecheck -trace SystemOut.log



Output example




C:\>logSummarizer.pl SystemOut.log
ST Gateway log summarizer v1.27 (26/05/2009). identifiable patterns: 59
Searching rolling logs with base file name: SystemOut.log
Found 1 files to scan.

Summary
-------
WAS version:                                   ND 6.1.0.23 cf230910.10
App version:                               N/A
Log started at:                                [5/20/09 15:52:59:238 IDT]
Log finished at:                               [5/20/09 16:31:17:535 IDT]
Number of Ext servers found:                   N/A
Exceptions:                                    2
FFDC error reports:                            4
Nasty system Errors:                           1
ERRORs:                                        3
WARNINGs:                                      3
Community *connected* announcements:           2
Community *disconnected* announcements:        0
SSL HANDSHAKE FAILURE:                         1
SSL Exception:                                 3
Null pointer exception lines:                  23
Problem with database connection:              1
Socket Exception:                              3
Number Format Exception:                       1
Unknown Host Exception:                        1
port already in use:                           1
WARNING: untuned max sessions value (5250):    1
[ 1436 lines processed over 1 files]



Contributing new identifiable patterns


If when working with customer logs you stumbled upon  identifiable, clear, repeatable, log pattern, please send me all details and I'll add it to the utility as dedicated to you (visible only in the source)
Currently, the utility is update on a weekly basis.

יום רביעי, 7 באוקטובר 2009

"מילים עין" - אתם ספילברג, המחשב הוא המפיק הראשי

קאט!תמיד רציתם לביים סרט אבל לא היה לכם שקל תשעים לשכור מפיק?
חלמתם לחדש את בחזרה לעתיד 2 אבל מייקל ג'י פוקס כבר בן 90?
כבר טחנתם את האקינטור, ואתם רוצים לראות עוד דברים מגניבים שהמחשב יכול לעשות?
קבלו את  WordsEye! - אתם מתארים סצנה בשפה פשוטה, המחשב שוכר את השחקנים, משיג פרופס, מארגן את כולם לחבילה אחת וחוזר אליכם עם תמונה תוך מקס' 50 מילישניות (כשהשרת עובד).

לדוגמה: בצד שמאל של התמונה (הקליקו עליה לראות בגדול), הזנתי את התיאור הבא:
"הכלב נמצא מול החתול. שני החתולים נמצאים מול הכלב. הגולגולת מעל הכלב. הגולגולת גדולה. החתולים נמצאים על הכסא. ישנו מגן דוד מעל החתולים."
המחשב רינדר והציג מימין. קול!

wordseye

לסיכום: מגניב. יכולות המחשוב (או התוכנה ליתר דיוק) הולכים גדלים כל הזמן.
אציין שמבאס שרוב הזמן מקבלים הודעת שגיאה server busy באתר WordsEye. נקווה שיתקנו.