Envoi de journaux au serveur Graylog2

11

Je viens de configurer un serveur Graylog2 et je cherche à envoyer tous les journaux de mon serveur principal au serveur graylog. J'ai activé la journalisation pour le serveur principal et j'envoie des journaux à mon serveur Graylog en ajoutant *.* @logs.example.com:1337à /etc/rsyslog.conf.

Ce que je veux, c'est que Graylog2 collecte tous mes journaux Apache, les journaux système (pour les connexions SSH, les connexions rejetées) et tous les autres journaux que je dois surveiller.

Pour les journaux Apache, j'aimerais également les journaux Rails. Mes sites sont situés dans /srv/www/puis la structure est sitename.com/public_htmlet sitename.com/logs. J'ai de nombreux sites sur le serveur et j'aimerais voir facilement toutes les erreurs et en faire de jolis graphiques, c'est pourquoi je veux utiliser Graylog2 ...

Les fichiers journaux du dossier logs sont access.loget error.log.

Les journaux Rails seraient entrés sitename.com/public_html/log. Cela contient production.log.

Dean Perry
la source
Quelle est la question ici? Si vous avez installé rsyslog, vous pouvez l'utiliser pour envoyer les journaux Rails / Apache à Graylog2 ( rsyslog.com/doc/imfile.html )
polynôme

Réponses:

10

C'est vieux, mais je pensais que j'écrirais cette méthode que j'utilise pour un site à trafic faible / moyen (je ne sais pas si cela fonctionnera bien pour un site à fort trafic):

Dans Apache, je définis un format CustomLog appelé graylog2_accessqui formate le journal d'accès au format GELF, puis j'envoie mon journal via Graylog2 en canalisant les données du journal via nc pour envoyer des messages GELF à l'entrée de Graylog2.

Voici le format personnalisé qu'il crée (lisible par l'homme):

{ 
 "version": "1.1",
 "host": "%V",
 "short_message": "%r",
 "timestamp": %{%s}t,
 "level": 6,
 "_user_agent": "%{User-Agent}i",
 "_source_ip": "%a",
 "_duration_usec": %D,
 "_duration_sec": %T,
 "_request_size_byte": %O,
 "_http_status": %s,
 "_http_request_path": "%U",
 "_http_request": "%U%q",
 "_http_method": "%m",
 "_http_referer": "%{Referer}i"
}

Pour la configuration Apache, voici une version copier / coller:

LogFormat "{ \"version\": \"1.1\", \"host\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"_user_agent\": \"%{User-Agent}i\", \"_source_ip\": \"%a\", \"_duration_usec\": %D, \"_duration_sec\": %T, \"_request_size_byte\": %O, \"_http_status\": %s, \"_http_request_path\": \"%U\", \"_http_request\": \"%U%q\", \"_http_method\": \"%m\", \"_http_referer\": \"%{Referer}i\" }" graylog2_access

Puis dans votre configuration d'hôte:

CustomLog "|nc -u graylogserver 12201" graylog2_access
ETL
la source
+1 Bien! Je dois essayer ceci sur l'un de nos systèmes, mais avec ERREUR à la place.
Henk
@Henk - si vous faites un format pour le journal des erreurs, faites-le moi savoir, je le veux mais je n'ai pas encore pris le temps. Consultez également serverfault.com/questions/582510/… pour des informations sur les choses que j'ai rencontrées plus tard.
ETL
5

Vous pouvez également envoyer vos fichiers journaux au serveur graylog2 à l'aide de cette simple commande:

tail -F -q $yourlogfile |   while read -r line ; do   echo "<7> $hostnamesendingthelog $line" | nc -w 1 -u $graylogserver 514;   done;

Je l'utilise principalement à des fins de test pour déterminer si mon format de journal est adapté pour une interrogation facile dans graylog2. Pour une utilisation en production, vous ne devrez pas configurer rsyslog ou syslog-ng.

Vous pouvez probablement suivre votre fichier journal de rails et voir ce qui se passe.

Pierig Le Saux
la source
J'aime la simplicité de cette réponse: simple et sans outils supplémentaires. Je ne sais pas quoi faire des horodatages du fichier journal: peut-être qu'il n'y a rien à faire et qu'ils n'ont pas d'importance?
texas-bronius
2

Graylog2 n'accepte que les journaux dans deux formats: syslog standard et le format de journal étendu Graylog (alias GELF). Les journaux arbitraires sur disque auront besoin d'un processus tiers pour consommer les journaux et les traduire dans un formulaire qui vous sera utile.

Jetez un oeil à Logstash . La plupart des gens le considèrent comme un outil pour indexer les fichiers journaux à l'aide d'ElasticSearch, mais il contient également un "routeur de journaux" à usage général qui vous permet de suivre un tas de fichiers sur le disque et de les envoyer à un composant de journalisation comme Graylog.

natacado
la source
2
Rsyslog peut facilement lire les journaux: rsyslog.com/doc/imfile.html
polynomial
1
Bien que rsyslog puisse utiliser d'autres fichiers en entrée, l'utilisation de logstash a l'avantage de pouvoir utiliser les expressions régulières prédéfinies de Grok (voir logstash.net/docs/1.0.17/filters/grok ) pour obtenir une certaine structure dans les messages de journal et pas seulement du texte en clair.
joschi
syslog-ng peut faire de même avec une configuration plus propre comparée à rsyslog: loggly.com/support/sending-data/logging-from/syslog/syslog-ng/…
HVNSweeting
2

Vous pouvez utiliser les apache2gelfscripts d'ici .

Anton
la source