لإلقاء نظرة تفصيلية على أهداف هذا المشروع وتصميمه وتنفيذه، قم بمراجعة منشورات المدونة هذه.
Ekanite هو خادم سجل نظام عالي الأداء مع بحث نصي مدمج. هدفه هو القيام ببعض الأمور، وتنفيذها بشكل جيد - قبول رسائل السجل عبر الشبكة، وتسهيل البحث في الرسائل. ما ينقصه في الميزة، يعوضه في التركيز. مدمج في Go، ولا يحتوي على أي تبعيات خارجية، مما يجعل النشر سهلاً.
تشمل الميزات:
يتم تنفيذ البحث باستخدام مكتبة البحث bleve. للاطلاع على بعض تحليلات أداء bleve، وتقنيات التجزئة التي تستخدمها Ekanite، راجع هذا المنشور.
أسرع طريقة للتشغيل على OSX وLinux هي تنزيل إصدار ثنائي تم إنشاؤه مسبقًا. يمكنك العثور على هذه الثنائيات على صفحة إصدارات Github. بمجرد التثبيت، يمكنك تشغيل Ekanite كما يلي:
ekanited -datadir ~ /ekanite_data # Or any directory of your choice.
لرؤية جميع خيارات Ekanite، قم بتمرير -h
في سطر الأوامر.
إذا كنت ترغب في إنشاء Ekanite ، إما لأنك تريد أحدث التعليمات البرمجية أو لعدم توفر ثنائي تم إنشاؤه مسبقًا للنظام الأساسي، فقم بإلقاء نظرة على CONTRIBUTING.md.
في الوقت الحالي، لكي يقبل Ekanite السجلات، يجب تكوين عميل سجل النظام الخاص بك بحيث تكون سطور السجل متوافقة مع RFC5424، وبالتنسيق التالي:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
استشر RFC لمعرفة ماهية كل حقل من هذه الحقول. يجب أن يكون حقل الطابع الزمني بتنسيق RFC3339. يدعم كل من rsyslog وsyslog-ng القوالب، مما يجعل من السهل جدًا على تلك البرامج تنسيق السجلات بشكل صحيح ونقل السجلات إلى Ekanite. القوالب وتعليمات التثبيت لكلا النظامين موجودة أدناه.
rsyslog
# Send messages to Ekanite over TCP using the template. Assumes Ekanite is listening on 127.0.0.1:5514
$template Ekanite,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% - %msg%n"
*.* @@127.0.0.1:5514;Ekanite
أضف هذا القالب إلى /etc/rsyslog.d/23-ekanite.conf
ثم أعد تشغيل rsyslog باستخدام الأمر sudo service rsyslog restart
.
سجل النظام نانوغرام
source s_ekanite {
system(); # Check which OS & collect system logs
internal(); # Collect syslog-ng logs
};
template Ekanite { template("<${PRI}>1 ${ISODATE} ${HOST} ${PROGRAM} ${PID} - $MSGn"); template_escape(no) };
destination d_ekanite {
tcp("127.0.0.1" port(5514) template(Ekanite));
};
log {
source(s_ekanite);
destination(d_ekanite);
};
أضف هذا القالب إلى /etc/syslog-ng/syslog-ng.conf
ثم أعد تشغيل syslog-ng باستخدام الأمر /etc/init.d/syslog-ng restart
.
مع تطبيق هذه التغييرات، سيستمر rsyslog أو syslog-ng في إرسال السجلات إلى أي وجهة موجودة، وكذلك إعادة توجيه السجلات إلى Ekanite.
دعم البحث بسيط جدًا في الوقت الحالي. لديك خياران - واجهة بسيطة تشبه telnet، وواجهة استعلام قائمة على المتصفح.
Telnet إلى خادم الاستعلام (راجع خيارات سطر الأوامر) وأدخل مصطلح البحث. لغة الاستعلام المدعومة هي اللغة البسيطة التي يدعمها bleve، ولكن قد يتم دعم صيغة استعلام أكثر تعقيدًا، بما في ذلك البحث عن قيم حقول محددة، قريبًا.
على سبيل المثال، يوجد أدناه مثال لجلسة بحث، توضح الوصول إلى عنوان URL لتسجيل الدخول لموقع Wordpress. يتصل عملاء telnet بخادم الاستعلام ويدخلون سلسلة login
$ telnet 127.0.0.1 9950
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
login
<134>0 2015-05-05T23:50:17.025568+00:00 fisher apache-access - - 65.98.59.154 - - [05/May/2015:23:50:12 +0000] "GET /wp-login.php HTTP/1.0" 200 206 "-" "-"
<134>0 2015-05-06T01:24:41.232890+00:00 fisher apache-access - - 104.140.83.221 - - [06/May/2015:01:24:40 +0000] "GET /wp-login.php?action=register HTTP/1.0" 200 206 "http://www.philipotoole.com/" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17"
<134>0 2015-05-06T01:24:41.232895+00:00 fisher apache-access - - 104.140.83.221 - - [06/May/2015:01:24:40 +0000] "GET /wp-login.php?action=register HTTP/1.1" 200 243 "http://www.philipotoole.com/wp-login.php?action=register" "Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17"
<134>0 2015-05-06T02:47:54.612953+00:00 fisher apache-access - - 184.68.20.22 - - [06/May/2015:02:47:51 +0000] "GET /wp-login.php HTTP/1.1" 200 243 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17"
<134>0 2015-05-06T04:20:49.008609+00:00 fisher apache-access - - 193.104.41.186 - - [06/May/2015:04:20:46 +0000] "POST /wp-login.php HTTP/1.1" 200 206 "-" "Opera 10.00"
ربما تريد فقط البحث عن وصولات POST
إلى عنوان URL هذا:
login -GET
<134>0 2015-05-06T04:20:49.008609+00:00 fisher apache-access - - 193.104.41.186 - - [06/May/2015:04:20:46 +0000] "POST /wp-login.php HTTP/1.1" 200 206 "-" "Opera 10.00"
يتم التخطيط لبرنامج عميل أكثر تطوراً.
تقبل الواجهة المستندة إلى المستعرض أيضًا استعلامات بنمط bleve، مماثلة لتلك الموضحة في قسم Telnet . بشكل افتراضي، تتوفر واجهة المتصفح على http://localhost:8080. يتم عرض جلسة مثال أدناه.
تتوفر الإحصائيات والتشخيصات الأساسية. تفضل بزيارة http://localhost:9951/debug/vars
لاسترداد هذه المعلومات. يمكن تغيير المضيف والمنفذ عبر خيار سطر الأوامر -diag
.
تدعم البنية الآن التنفيذ السهل للموزعين الجدد خارج سجل نظام المخزون في 3 خطوات سهلة:
input/parser.go
قم بتوسيع supportFormats() لالتقاط المعيار والاسم الإضافيين.parser/
، قم بإنشاء محلل تنسيق الإدخال الجديد باستخدام عبارات regex المناسبة.timestamp
متوافق مع RFC3339، على سبيل المثال 2006-01-02T15:04:05Z07:00
input/parser.go
، قم بتحديث NewParser() لإنشاء مثيل للمحلل اللغوي لتنسيق الإدخال الجديد بشكل صحيح. لا تتم صيانة المشروع بشكل نشط، على الرغم من أن التطوير قد يحدث مرة أخرى في المستقبل.