Подробное описание целей, дизайна и реализации этого проекта можно найти в этих сообщениях в блоге.
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, чтобы узнать, что представляет собой каждое из этих полей. Поле 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
.
системный журнал-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, и интерфейс запросов на основе браузера.
Подключитесь к серверу запросов через 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/
создайте новый анализатор входного формата, используя соответствующие операторы регулярных выражений.timestamp
, совместимое с RFC3339, например 2006-01-02T15:04:05Z07:00
input/parser.go
и обновите NewParser(), чтобы правильно создать экземпляр синтаксического анализатора нового формата ввода. Проект активно не поддерживается, хотя разработка может возобновиться в будущем.