若要詳細了解該專案的目標、設計和實施,請查看這些部落格文章。
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 接受日誌,您的 syslog 用戶端必須設定為讓日誌行符合 RFC5424 標準,並採用下列格式:
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
請查閱 RFC 以了解每個欄位的含義。 TIMESTAMP 欄位必須採用 RFC3339 格式。 rsyslog 和 syslog-ng 都支援模板化,這使得這些程式可以輕鬆地正確格式化日誌並將日誌傳輸到 Ekanite。兩個系統的範本和安裝說明如下。
系統日誌
# 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
中,然後使用指令sudo service rsyslog restart
重新啟動 rsyslog 。
系統日誌
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
中,然後使用指令/etc/init.d/syslog-ng restart
重新啟動 syslog-ng 。
完成這些變更後,rsyslog 或 syslog-ng 將繼續將日誌傳送到任何現有目的地,並將日誌轉送至 Ekanite。
目前搜尋支援非常簡單。您有兩個選擇——一個簡單的類似 telnet 的介面和一個基於瀏覽器的查詢介面。
Telnet 到查詢伺服器(請參閱命令列選項)並輸入搜尋字詞。支援的查詢語言是 bleve 支援的簡單語言,但可能很快就會支援更複雜的查詢語法,包括搜尋特定欄位值。
例如,以下是搜尋會話範例,顯示了對 Wordpress 網站的登入 URL 的存取。 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"
也許您只想搜尋對該 URL 的POST
存取:
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
中展開supportedFormats()以捕獲附加的標準和名稱。parser/
中,使用適當的正規表示式語句建立新的輸入格式解析器。timestamp
字段,例如2006-01-02T15:04:05Z07:00
input/parser.go
,更新 NewParser() 以正確實例化新的輸入格式解析器。 儘管將來可能會重新進行開發,但該專案並未積極維護。