หากต้องการดูรายละเอียดเกี่ยวกับเป้าหมาย การออกแบบ และการดำเนินโครงการนี้ โปรดดูบล็อกโพสต์เหล่านี้
Ekanite เป็นเซิร์ฟเวอร์ syslog ประสิทธิภาพสูงพร้อมการค้นหาข้อความในตัว เป้าหมายคือการทำสองสิ่งและทำได้ดี -- ยอมรับข้อความบันทึกผ่านเครือข่าย และทำให้ง่ายต่อการค้นหาข้อความ สิ่งที่ขาดคุณสมบัติไปก็ชดเชยให้อยู่ในโฟกัส Go ในตัว ไม่มีการพึ่งพาภายนอก ซึ่งทำให้การปรับใช้เป็นเรื่องง่าย
คุณสมบัติได้แก่:
การค้นหาดำเนินการโดยใช้ไลบรารีการค้นหา bleve สำหรับการวิเคราะห์ประสิทธิภาพของ bleve และเทคนิคการแบ่งส่วนที่ใช้โดย Ekanite โปรดดูโพสต์นี้
วิธีที่เร็วที่สุดในการทำงานบน OSX และ Linux คือการดาวน์โหลดไบนารีรุ่นที่สร้างไว้ล่วงหน้า คุณสามารถค้นหาไบนารีเหล่านี้ได้ในหน้าเผยแพร่ Github เมื่อติดตั้งแล้ว คุณสามารถเริ่ม Ekanite ได้ดังนี้:
ekanited -datadir ~ /ekanite_data # Or any directory of your choice.
หากต้องการดูตัวเลือก Ekanite ทั้งหมด ให้ส่ง -h
บนบรรทัดคำสั่ง
หากคุณต้องการสร้าง Ekanite เนื่องจากคุณต้องการโค้ดล่าสุดหรือไบนารีที่สร้างไว้ล่วงหน้าสำหรับแพลตฟอร์มไม่พร้อมใช้งาน โปรดดูที่ CONTRIBUTING.md
ในตอนนี้ เพื่อให้ Ekanite ยอมรับบันทึก ไคลเอ็นต์ syslog ของคุณจะต้องได้รับการกำหนดค่าเพื่อให้บรรทัดบันทึกเป็นไปตาม RFC5424 และอยู่ในรูปแบบต่อไปนี้:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
ปรึกษา RFC เพื่อเรียนรู้ว่าแต่ละสาขาเหล่านี้คืออะไร ช่อง TIMESTAMP ต้องอยู่ในรูปแบบ 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
syslog-ng
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 ไปยังเซิร์ฟเวอร์แบบสอบถาม (ดูตัวเลือกบรรทัดคำสั่ง) และป้อนคำค้นหา ภาษาคิวรีที่รองรับคือภาษาธรรมดาที่ 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
ขณะนี้สถาปัตยกรรมสนับสนุนการใช้งาน parsers ใหม่นอกเหนือจากบันทึกระบบหุ้นได้อย่างง่ายดายใน 3 ขั้นตอนง่ายๆ:
input/parser.go
ขยาย รองรับรูปแบบ() เพื่อบันทึก มาตรฐาน และ ชื่อ เพิ่มเติมparser/
ให้สร้าง parser รูปแบบอินพุตใหม่โดยใช้คำสั่ง regex ที่เหมาะสมtimestamp
ที่เข้ากันได้กับ RFC3339 เช่น 2006-01-02T15:04:05Z07:00
input/parser.go
อัปเดต NewParser() เพื่อสร้างอินสแตนซ์ของ parser รูปแบบอินพุตใหม่อย่างถูกต้อง โครงการนี้ไม่ได้รับการดูแลอย่างแข็งขัน แม้ว่าการพัฒนาอาจเกิดขึ้นอีกครั้งในอนาคต