Rsyslog-Graylog-Elasticsearch : Différence entre versions
De wikiGite
(→Installation) |
(→Installation) |
||
Ligne 214 : | Ligne 214 : | ||
et exclure local4 de messages | et exclure local4 de messages | ||
*.info;mail.none;authpriv.none;cron.none:local4.none /var/log/messages | *.info;mail.none;authpriv.none;cron.none:local4.none /var/log/messages | ||
− | service syslog stop | + | |
− | service rsyslog restart | + | service syslog stop |
− | chkconfig syslog off | + | service rsyslog restart |
− | chkconfig rsyslog on | + | chkconfig syslog off |
+ | chkconfig rsyslog on | ||
Importer le fichier de dépôt rsyslog | Importer le fichier de dépôt rsyslog |
Version actuelle datée du 13 janvier 2016 à 17:57
Sommaire
Installation de Graylog2/Elascticsearch sur CentOS 7
Rsyslog sera utilisé pour envoyer les logs à partir des serveurs
Composants
1. MongoDB – Stores the configurations and meta information.
2. Elasticsearch – Stores the log messages and offers a searching facility, nodes should have high memory as all the I/O operations are happens here.
3. GrayLog – Log parser, it collect the logs from various inputs.
4. GrayLog Web interface = provides you the web-based portal for managing the logs.
Pré-requis :
yum install screen wget ntp ntpdate
systemctl enable ntpd
systemctl start ntpd
ELASTICSEARCH
Elasticsearch stockera les lignes de logs en provenance des serveurs.
Installation
Installer Oracle jdk :
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u11-b12/jdk-8u11-linux-x64.tar.gz
tar -zxvf jdk-8u11-linux-x64.tar.gz
mv jdk1.8.0_11/ /usr/
/usr/sbin/alternatives --install /usr/bin/java java /usr/jdk1.8.0_11/bin/java 2
/usr/sbin/alternatives --config java
Selectionner le dernier java
Vérifier que la version installée est bien prise en compte :
java -version
ATTENTION pour centos7, bizarrement le rpm met la clé centos6 dans epel.repo. Donc :
vi /etc/yum.repos.d/epel.repo
modifier RPM-GPG-KEY-EPEL-6 par RPM-GPG-KEY-EPEL-7
Importer la clé et créer le fichier de dépôt Elasticsearch :
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.7] name=Elasticsearch repository for 1.7.x packages baseurl=http://packages.elastic.co/elasticsearch/1.7/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
yum install elasticsearch
FORCER Elascticsearch A ECOUTER SUR IPV4 !
vi /etc/systemd/system/multi-user.target.wants/elasticsearch.service
ajouter : " -Djava.net.preferIPv4Stack=true" à la fin de la ligne ExecStart (comme les "-D" déjà existants, ne pas oublier d'ajouter un "\" a la ligne du dessus)
Configuration
vi /etc/elasticsearch/elasticsearch.yml
Modifier :
cluster.name: graylog2 # limiter les connexions à localhost, tout est sur le même serveur network.host: 127.0.0.1 # important, ces 2 lignes lues par Graylog qui ne sait pas les lire dans son propre .conf !! : discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["localhost"]
et ajouter à la fin du fichier :
script.disable_dynamic: true
Modifier éventuellement le chemin des bases :
path.data: /home/elasticsearch/data
Activer et charger le tout :
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl restart elasticsearch.service
Tester l'accès :
curl -X GET http://localhost:9200
{ "status" : 200, "name" : "Glob Herman", "cluster_name" : "graylog2", "version" : { "number" : "1.7.2", "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec", "build_timestamp" : "2015-09-14T09:49:53Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
MONGODB
MongDB stockera uniquement les paramètres de Graylog.
Installation
Créer le fichier de dépôt :
vi /etc/yum.repos.d/mongodb-org-3.0.repo
[mongodb-org-3.0] name=MongoDB Repository baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/ gpgcheck=0 enabled=1
yum install mongodb-org
chkconfig mongod on #(pas encore de fichier d'init systemd)
systemctl start mongod
GRAYLOG2
Graylog receptionnera les logs en provenance des rsyslog et les enverra vers Elasticsearch
Installation
Importer le fichier de dépôt et installer le rpm :
rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-1.2-repository-el7_latest.rpm
yum install graylog-server
Générer une passphrase :
yum install pwgen --enablerepo=epel
pwgen -N 1 -s 96 # Copier la phrase
Puis récupérer le SHA d'un mot de passe pour l'admin Graylog (à ne pas confondre avec le "root" du système)
echo -n mot_de_passe_admin_graylog | sha256sum # Copier le SHA
Configuration
vi /etc/graylog/server/server.conf
Mettre la première phrase sur "password_secret =", et le SHA sur "root_password_sha2 ="
Modifier
root_email = "admin@domain.com" root_timezone = Europe/Paris elasticsearch_shards = 1 # Limiter à localhost (seule l'interface web a besoin de s'y connecter) : rest_transport_uri = http://127.0.0.1:12900/ # Retention 1 index par semaine, 52 semaines (à valider sur un an): rotation_strategy = time #elasticsearch_max_docs_per_index = 20000000 # commenter elasticsearch_max_time_per_index = 7d # à vérifier "1w" pas pris en compte ? elasticsearch_max_number_of_indices = 52 # Décommenter au cas où (ligne déjà existantes dans elasticsearch.yml, qui sera relu par Graylog) : elasticsearch_discovery_zen_ping_multicast_enabled = false elasticsearch_discovery_zen_ping_unicast_hosts = localhost:9300
systemctl restart graylog-server
Vérifier s'il y a des erreurs :
tailf /var/log/graylog-server/server.log
on doit avoir vers la fin : "2015-10-10T13:07:16.078+02:00 INFO [ServerBootstrap] Graylog server up and running."
GRAYLOG WEB INTERFACE
Installation
yum install graylog-web
pwgen -N 1 -s 96 # Générer une nouvelle passphrase
vi /etc/graylog/web/web.conf
ajouter l'URI du serveur Graylog :
graylog2-server.uris="http://127.0.0.1:12900/" Coller la passphrase sur "application.secret="
Relancer l'interface
systemctl restart graylog-web
et s'y connecter : http://<serveur-log>:9000.
Dans l'interface, configurer une input pour syslog dans system > inputs
sélectionner syslog UDP (ou TCP) et cliquer "launch new input"
Dans la fenêtre qui s'ouvre, donner :
le titre "Syslog" port 5514 bind_IP l'ip du serveur graylog FORCER RDNS car les messages syslog ne contiennent pas toujours le hostname mais l'ip
et cliquer sur "launch"
NOTE : on ne peut pas utiliser le port par défaut 514 car il faut être root pour binder un port < 1024, et ce n'est pas conseillé de lancer graylog en root !
RSYSLOG
Rsyslog sera installé à la place de Syslogd sur les système qui ne l'ont pas par défaut, ou mis à jour en V8 sur les autres. Il enverra les logs vers Graylog.
Installation
yum install rsyslog mkdir /etc/rsyslog.d vi /etc/rsyslog.conf
ajouter si ça n'y est pas :
$IncludeConfig /etc/rsyslog.d/*.conf
et exclure local4 de messages
*.info;mail.none;authpriv.none;cron.none:local4.none /var/log/messages
service syslog stop service rsyslog restart chkconfig syslog off chkconfig rsyslog on
Importer le fichier de dépôt rsyslog
vi /etc/yum.repos.d/rsyslog.repo
[rsyslog-v8-stable] name=Adiscon Rsyslog v8-stable for CentOS-$releasever-$basearch baseurl=http://rpms.adiscon.com/v8-stable/epel-$releasever/$basearch enabled=0 gpgcheck=0 protect=1
Et installer :
yum install rsyslog --enablerepo=rsyslog-v8-stable
Configuration
vi /etc/rsyslog.d/90-graylog2.conf
# Template de mise en forme au format Graylog des logs envoyés. La propriété "syslogtag" a été ajoutée au message. $template GRAYLOGRFC5424,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %syslogtag% %msg%\n" # Quelques filtres :programname, isequal, "cced(smd)" stop :msg, contains, "(127.0.0.1[127.0.0.1]) - FTP session closed." stop # Envoi des données. Les logs Apache sont formatés différemment, par un template à part. kern.* @<IP du serveur Graylog>:5514;GRAYLOGRFC5424 *.info;mail.none;cron.none;local4.none @<IP du serveur Graylog>:5514;GRAYLOGRFC5424 local4.* @<IP du serveur Graylog>:5514;TagApacheLog
Pour d'autres logs que le système :
vi /etc/rsyslog.d/10-http-graylog2.conf
- LOG APACHES UNIQUES
# Forward apache logs to graylog2 server $template TagApacheLog,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n" input (type="imfile" File="/var/log/httpd/access_log" Tag="ApacheAccessLog" Severity="info" Facility="local4" addMetadata="on" ) input (type="imfile" File="/var/log/httpd/error_log" Tag="ApacheErrorLog" Severity="info" Facility="local4" addMetadata="on" ) # Filtres AccessLog :msg, contains, "\"HEAD / HTTP/1.0\" 200 - \"-\" \"-\"" stop :msg, contains, "GET /seafhttp/repo" stop :msg, contains, "GET /api2/ping/ HTTP/1.1" stop :msg, contains, "GET /api2/unseen_messages/ HTTP/1.1" stop :msg, contains, "GET /api2/repos/ HTTP/1.1" stop :msg, contains, "GET /apc_info.php?auto HTTP/1.1" stop :msg, contains, "GET /server-status?auto HTTP/1.0" stop :msg, contains, "GET /server-status?auto HTTP/1.1" stop # Filtres ErrorLog :msg, contains, "client denied by server configuration: /var/www/html/server-status" stop
- LOG APACHE MULTIPLES (traitement par wildcard)
# Forward apache logs to graylog2 server if $!metadata!filename contains(".error.log") then { set $.tag = 'ErrorLog'; } else { set $.tag = 'AccessLog'; } $template TagApacheLog,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %$.tag% (%$!metadata!filename%): %msg%\n" input (type="imfile" File="/var/log/httpd/domains/*.log" Tag="ApacheLog" Severity="info" Facility="local4" addMetadata="on" ) # Filtres AccessLog :msg, contains, "\"HEAD / HTTP/1.0\" 200 - \"-\" \"-\"" stop :msg, contains, "GET /seafhttp/repo" stop :msg, contains, "GET /api2/ping/ HTTP/1.1" stop :msg, contains, "GET /api2/unseen_messages/ HTTP/1.1" stop :msg, contains, "GET /api2/repos/ HTTP/1.1" stop :msg, contains, "GET /apc_info.php?auto HTTP/1.1" stop :msg, contains, "GET /server-status?auto HTTP/1.0" stop :msg, contains, "GET /server-status?auto HTTP/1.1" stop # Filtres ErrorLog :msg, contains, "client denied by server configuration: /var/www/html/server-status" stop
Si pas déjà fait, ajouter local4.none dans /etc/syslog/conf pour éviter la double écriture des logs Apache dans /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local4.none /var/log/messages
Relancer le service
service rsyslog restart
TIPS & TRICKS
SUPPRIMER DES MESSAGES par l'API ElasticSearch
curl -XDELETE 'http://localhost:9200/graylog2_0/message/_query?q=host:"<nom_du_serveur>"'
Ou pour tout supprimer :
curl -XDELETE 'http://127.0.0.1:9200/graylog2_*/message/_query?q=host:*'
Vider la base Elasticsearch
Pour tout supprimer après les tests par exemple, arrêter graylog-server et elasticsearch, supprimer tous les répertoires identifié sous la racine identifiée par "path.data". L'arborescence et les bases seront recréées au redémarrage.