லாக்குகள்
லாக்குகள் என்பது ஒரு பயன்பாடு அல்லது ஒரு சாதனத்தால் அனுப்பப்படும் செய்திகளின் தொடர் ஆகும், இது ஒரு நிகழ்வு பற்றிய ஒன்று அல்லது அதற்கு மேற்பட்ட வரிகளின் விவரங்களால், அல்லது சில நேரங்களில் அந்த பயன்பாட்டின் ஆரோக்கியத்தால் குறிக்கப்படுகிறது. பொதுவாக, லாக்குகள் ஒரு கோப்பில் அனுப்பப்படும், சில நேரங்களில் அவை பகுப்பாய்வு மற்றும் ஒருங்கி ணைப்பு செய்யும் ஒரு கலெக்டருக்கு அனுப்பப்படும். மெகாபைட்கள்/நாள் முதல் டெராபைட்கள்/மணி நேரம் வரை - எந்த அளவிலும் லாக் தரவை உருவாக்குதல், உட்கொள்ளல் மற்றும் நிர்வகித்தல் பணியை எளிதாக்குவதை நோக்கமாகக் கொண்ட பல முழு-அம்ச லாக் aggregators, frameworks மற்றும் தயாரிப்புகள் உள்ளன.
லாக்குகள் ஒரு நேரத்தில் ஒரே ஒரு பயன்பாட்டால் உமிழப்படுகின்றன, பொதுவாக அந்த ஒரு பயன்பாட்டின் எல்லைக்குள் சம்பந்தப்படுகின்றன - டெவலப்பர்கள் விரும்பினால் லாக்களை சிக்கலானதாகவும் நுணுக்கமானதாகவும் வைக்க சுதந்திரம் உள்ளது. எங்கள் நோக்கங்களுக்காக, லாக்குகளை ட்ரேஸ்களிலிருந்து அடிப்படையில் வேறுபட்ட சிக்னலாக கருதுகிறோம், ட்ரேஸ்கள் ஒன்றுக்கு மேற்பட்ட பயன்பாடு அல்லது சேவையிலிருந்து நிகழ்வுகளால் உருவாக்கப்படுகின்றன, மேலும் response latency, service faults, request parameters போன்ற சேவைகளுக்கிடை யிலான இணைப்பு பற்றிய சூழலுடன் கூடியவை.
லாக்குகளில் உள்ள தரவு ஒரு காலக்கட்டத்தில் திரட்டப்படவும் முடியும். எடுத்துக்காட்டாக, அவை புள்ளியியல் சார்ந்ததாக இருக்கலாம் (எ.கா., முந்தைய நிமிடத்தில் வழங்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கை). அவை structured, free-form, verbose ஆகவும், எந்த எழுத்து மொழியிலும் இருக்கலாம்.
லாக்கிங்கின் முதன்மை பயன்பாட்டு வழக்குகள் விவரிப்பது:
- ஒரு நிகழ்வு, அதன் நிலை மற்றும் காலம், மற்றும் பிற முக்கிய புள்ளிவிவரங்கள் உட்பட
- அந்த நிகழ்வுடன் தொடர்புடைய பிழைகள் அல்லது எச்சரிக்கைகள் (எ.கா., stack traces, timeouts)
- பயன்பாடு தொடங்குதல், start-up மற்றும் shutdown செய்திகள்
லாக்குகள் மாற்ற முடியாதவையாக இருக்க வேண்டும், மேலும் பல லாக் மேலாண்மை அமைப்புகள் லாக் தரவை மாற்ற முயற்சிகளைப் பாதுகாக்கவும், கண்டறியவும் வழிமுறைகளை உள்ளடக்கியவை.
உங்கள் லாக்கிங் தேவைகளைப் பொருட்படுத்தாமல், நாங்கள் அடையாளம் கண்ட சிறந்த நடைமுறைகள் இவை.
Structured logging வெற்றிக்கு முக்கியம்
பல அமைப்புகள் அரை-structured வடிவத்தில் லாக்களை உமிழும். எடுத்துக்காட்டாக, ஒரு Apache web server இவ்வாறு லாக்களை எழுதலாம், ஒவ்வொரு வரியும் ஒற்றை web request-க்கு சம்பந்தப்பட்டது:
192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200 3395 127.0.0.1 - - [28/Jul/2006:10:22:04 -0300] "GET / HTTP/1.0" 200 2216
ஒரு Java stack trace பல வரிகளை உள்ளடக்கிய ஒற்றை நிகழ்வாக இருக்கலாம், குறைவான structured:
Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
ஒரு Python error log நிகழ்வு இவ்வாறு தோன்றலாம்:
Traceback (most recent call last):
File "e.py", line 7, in <module>
raise TypeError("Again !?!")
TypeError: Again !?!
இந்த மூன்று உதாரணங்களில், முதலாவது மட்டுமே மனிதர்கள் மற்றும் ஒரு லாக் aggregation அமைப்பு இரண்டாலும் எளிதாக parse செய்யக்கூடியது. Structured logs பயன்படுத்துவது லாக் தரவை விரைவாகவும் திறம்படவும் செயலாக்குவதை எளிதாக்குகிறது, மனிதர்கள் மற்றும் இயந்திரங்கள் இரண்டிற்கும் அவர்கள் தேடுவதை உடனடியாகக் கண்டறிய தேவையான தரவை வழங்குகிறது.
மிகவும் பொதுவாகப் புரிந்துகொள்ளப்படும் லாக் வடிவம் JSON ஆகும், அதில் ஒரு நிகழ்வின் ஒவ்வொரு கூறும் key/value ஜோடியாகக் குறிக்கப்படுகிறது. JSON-ல், மேலே உள்ள python உதாரணம் இவ்வாறு மாற்றி எழுதப்படலாம்:
{
"level", "ERROR"
"file": "e.py",
"line": 7,
"error": "TypeError(\"Again !?!\")"
}
Structured logs பயன்படுத்துவது உங்கள் தரவை ஒரு லாக் அமைப்பிலிருந்து மற்றொன்றுக்கு எடுத்துச் செல்லக்கூடியதாக ஆக்குகிறது, மேம்பாட்டை எளிமைப்படுத்துகிறது, மற்றும் operational diagnosis-ஐ வேகமாக (குறைவான பிழைகளுடன்) செய்கிறது. மேலும், JSON பயன்படுத்துவது லாக் செய்தியின் schema-வை உண்மையான தரவுடன் உட்பொதிக்கிறது, இது அதிநவீன லாக் பகுப்பாய்வு அமைப்புகள் உங்கள் செய்திகளை தானாகவே index செய்ய உதவுகிறது.