要详细了解该项目的目标、设计和实施,请查看这些博客文章。
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() 以正确实例化新的输入格式解析器。 尽管将来可能会重新进行开发,但该项目并未得到积极维护。