Pour un aperçu détaillé des objectifs, de la conception et de la mise en œuvre de ce projet, consultez ces articles de blog.
Ekanite est un serveur Syslog hautes performances avec recherche de texte intégrée. Son objectif est de faire plusieurs choses, et de les faire correctement : accepter les messages de journal sur le réseau et faciliter la recherche des messages. Ce qui lui manque en fonctionnalités, il le compense en termes de mise au point. Construit dans Go, il n'a aucune dépendance externe, ce qui facilite le déploiement.
Les fonctionnalités incluent :
La recherche est implémentée à l'aide de la bibliothèque de recherche bleve. Pour une analyse des performances de Bleve et des techniques de partitionnement utilisées par Ekanite, consultez cet article.
Le moyen le plus rapide de fonctionner sous OSX et Linux est de télécharger une version binaire prédéfinie. Vous pouvez trouver ces binaires sur la page des versions de Github. Une fois installé, vous pouvez démarrer Ekanite comme ceci :
ekanited -datadir ~ /ekanite_data # Or any directory of your choice.
Pour voir toutes les options d'Ekanite, passez -h
sur la ligne de commande.
Si vous souhaitez construire Ekanite , soit parce que vous voulez le dernier code, soit parce qu'un binaire pré-construit pour la plate-forme n'est pas disponible, jetez un œil à CONTRIBUTING.md.
Pour l'instant, pour qu'Ekanite accepte les journaux, votre client Syslog doit être configuré de telle sorte que les lignes de journal soient conformes à la RFC5424 et au format suivant :
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROC-ID MSGID MSG"
Consultez la RFC pour savoir ce qu'est chacun de ces champs. Le champ TIMESTAMP doit être au format RFC3339. rsyslog et syslog-ng prennent en charge les modèles, ce qui permet à ces programmes de formater correctement les journaux et de les transmettre très facilement à Ekanite. Les modèles et les instructions d'installation pour les deux systèmes sont ci-dessous.
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
Ajoutez ce modèle à /etc/rsyslog.d/23-ekanite.conf
puis redémarrez rsyslog à l'aide de la commande 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);
};
Ajoutez ce modèle à /etc/syslog-ng/syslog-ng.conf
puis redémarrez syslog-ng à l'aide de la commande /etc/init.d/syslog-ng restart
.
Avec ces changements en place, rsyslog ou syslog-ng continuera à envoyer des journaux vers n'importe quelle destination existante, et transmettra également les journaux à Ekanite.
La prise en charge de la recherche est assez simple pour le moment. Vous disposez de deux options : une interface simple de type Telnet et une interface de requête basée sur un navigateur.
Établissez une connexion Telnet avec le serveur de requêtes (voir les options de ligne de commande) et saisissez un terme de recherche. Le langage de requête pris en charge est le langage simple pris en charge par bleve, mais une syntaxe de requête plus sophistiquée, incluant la recherche de valeurs de champ spécifiques, pourrait être bientôt prise en charge.
Par exemple, vous trouverez ci-dessous un exemple de session de recherche, montrant les accès à l'URL de connexion d'un site Wordpress. Les clients telnet se connectent au serveur de requêtes et saisissent la chaîne 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"
Peut-être souhaitez-vous uniquement rechercher les accès POST
à cette 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"
Un programme client plus sophistiqué est prévu.
L'interface basée sur un navigateur accepte également les requêtes de style bleve, identiques à celles décrites dans la section Telnet . Par défaut, l'interface du navigateur est disponible sur http://localhost:8080. Un exemple de session est présenté ci-dessous.
Des statistiques et des diagnostics de base sont disponibles. Visitez http://localhost:9951/debug/vars
pour récupérer ces informations. L'hôte et le port peuvent être modifiés via l'option de ligne de commande -diag
.
L'architecture prend désormais en charge la mise en œuvre facile de nouveaux analyseurs au-delà du stock syslog en 3 étapes simples :
input/parser.go
développez supportedFormats() pour capturer le standard et le name supplémentaires.parser/
, créez le nouvel analyseur de format d'entrée à l'aide des instructions regex appropriées.timestamp
compatible avec RFC3339, par exemple 2006-01-02T15:04:05Z07:00
input/parser.go
, mettez à jour NewParser() pour instancier correctement le nouvel analyseur de format d'entrée. Le projet n'est pas activement entretenu, bien que le développement puisse se reproduire à l'avenir.