Cette expérience est basée sur l'analyse du journal ELK lorsque ELFK a été configuré
Cette expérience est basée sur l'analyse du journal ELK lorsque ELFK a été configuré
Analyse architecturale
La première couche, la couche de collecte de données La couche de collecte de données est située sur le cluster de serveurs d'entreprise le plus à gauche. Filebeat est installé sur chaque serveur d'entreprise pour la collecte des journaux, puis les journaux d'origine collectés sont envoyés au cluster Kafka+zookeeper. La deuxième couche, la couche de file d'attente des messages Une fois le journal d'origine envoyé au cluster Kafka+zookeeper, il sera stocké de manière centralisée. À ce stade, filbeat est le producteur du message et le message stocké peut être consommé à tout moment. La troisième couche, la couche d'analyse de données Logstash, en tant que consommateur, ira au nœud du cluster Kafka + zookeeper pour extraire le journal d'origine en temps réel, puis analyser, nettoyer et filtrer le journal d'origine obtenu conformément aux règles, et enfin transmettre le journal nettoyé au cluster Elasticsearch. La quatrième couche, le stockage persistant des données Après avoir reçu les données envoyées par logstash, le cluster Elasticsearch effectue des opérations telles que l'écriture sur disque et la création d'une bibliothèque d'index, et enfin stocke les données structurées sur le cluster Elasticsearch. La cinquième couche, requête de données et couche d'affichage Kibana est une plate-forme d'affichage de données visuelles. Lorsqu'il y a une demande de récupération de données, il lit les données du cluster Elasticsearch, puis effectue des graphiques visuels et une analyse multidimensionnelle.
Construire ELK + Filebeat + Kafka + Zookeeper
zIP : Cluster : Port : 192.168.83.11 Elasticsearch+Kibana+kafka+zookeeper+proxy inverse nginx 9100 9200 5601 9092 3288 8080 peut installer filebeat 192.168.83.12 Elasticsearch+ Logstash+kafka+zookeeper+filebeat+proxy inverse ngin x 9100 920 0 9600 9092 3288 Aléatoire 8080 192.168.83.13 Elasticsearch+kafka+zookeeper+proxy inverse nginxz 9100 9200 9092 3288
root@elk2 ~]# netstat -antp |grep filebeat tcp 1 0 192.168.83.12:40348 192.168.83.11:9092 CLOSE_WAIT 6975/filebeat tcp 0 0 192.168.83.12:51220 192.168.83.12:9 092 ÉTABLI 6975/filebeat
1.3 machines installent zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz --no-check-certificate
1.1 Décompressez et installez le progiciel zookeeper
cd /opt télécharger le paquet apache-zookeeper-3.8.0-bin.tar.gz tar zxf apache-zookeeper-3.8.0-bin.tar.gz décompresser mv apache-zookeeper-3.8.0-bin /usr/local/ zookeeper -3.8.0 #Coupez le répertoire décompressé dans /usr/local/ cd /usr/local/zookeeper-3.8.0/conf/ cp zoo_sample.cfg zoo.cfg Sauvegardez et copiez le fichier de configuration du modèle sous zoo.cfg
1.2 Modifier le fichier de configuration de la configuration Zookeeper
cd /usr/local/zookeeper-3.8.0/conf #Entrez le résumé du fichier de configuration de zookeeper ls et vous pouvez voir le fichier de configuration du modèle zoo_sample.cfg cp zoo_sample.cfg zoo.cfg Copiez le fichier de configuration du modèle dans zoo.cfg mkdir - p /usr /local/zookeeper-3.8.0/data mkdir -p dataLogDir=/usr/local/zookeeper-3.8.0/1ogs vim zoo.cfg # Le nombre de millisecondes de chaque tick tickTime=2000 # Le nombre de ticks que la phase initiale de synchronisation peut prendre # initLimit=10 # Le nombre de ticks qui peuvent s'écouler entre # l'envoi d'une requête et l'obtention d'un accusé de réception syncLimit=5 # le répertoire où l'instantané est stocké. # n'utilisez pas /tmp pour le stockage, / tmp ici est juste # exemple sakés. dataDir=/usr/local/zookeeper-3.8.0/data dataLogDir=/usr/local/zookeeper-3.8.0/1ogs # le port auquel les clients se connecteront clientPort=2181 # le nombre maximum de connexions client. # augmentez cette valeur si vous avez besoin de gérer plus de clients #maxClientCnxns=60 # # Assurez-vous de lire la section maintenance du # guide de l'administrateur avant d'activer la purge automatique. # # https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # Le nombre d'instantanés à conserver dans dataDir #autopurge.snapRetainCount=3 # Intervalle de la tâche de purge en heures # Définir sur "0" pour désactiver la fonction de purge automatique #autopurge.purgeInterval=1 ## Fournisseurs de métriques # # https://prometheus.io Metrics Exporter #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider #metricsProvider.httpHost=0.0.0.0 #metricsProvider.httpPort=7000 #metricsProvider.exportJvmInfo=true serveur.1=192.168.83.11:3188:3288 serveur.2=192.168.83.12:3188:3288 serveur.3=192.168.83.13:3188:3288
scp zoo.cfg elk2:/usr/local/zookeeper-3.8.0/conf/zoo.cfg scp zoo.cfg elk3:/usr/local/zookeeper-3.8.0/conf/zoo.cfg
1.3 Définissez le numéro myid et lancez le script. Ne configurez pas la synchronisation ici. L'opération suivante consiste à configurer une machine et une machine.
echo 1 >/usr/local/zookeeper-3.8.0/data/myid # configure echo 2 sur node1 >/usr/local/zookeeper-3.8.0/data/myid # configure echo 3 sur node2 >/usr/local/ configuré sur zookeeper-3.8.0/data/myid #node3
1.4 Deux façons de démarrer zookeeper
cd /usr/local/zookeeper-3.8.0/bin ls ./zkServer.sh start #Démarrez trois serveurs à la fois avant de pouvoir voir l' état. /zkServer.sh status #Vérifiez l'état
[root@elk1 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX activé par défaut Utilisation de la configuration : /usr/local/zookeeper-3.8.0/bin/../conf/zoo.cfg Port client trouvé : 2181. Adresse client : localhost. Client SSL : faux. Mode : follower [root@elk2 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX activé par défaut Utilisation de la configuration : /usr/local/zookeeper-3.8.0/bin/../conf/zoo. cfg Port client trouvé : 2181. Adresse client : localhost. Client SSL : faux. Mode : leader [root@elk3 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX activé par défaut Utilisation de la configuration : /usr/local/zookeeper-3.8.0/bin/../conf/zoo. cfg Port client trouvé : 2181. Adresse client : localhost. Client SSL : faux. Mode : suiveur
1.5 Recommandation de démarrage du script
Le deuxième type de script qui doit être exécuté pour démarrer 3 nœuds #//configure le script de démarrage, le script crée vim dans le répertoire où le démarrage est démarré /etc/init.d/zookeeper #!/bin/bash #chkconfig :2345 20 90 #description :Zookeeper Service Control Script ZK_HOME='/usr/local/zookeeper-3.8.0' case $1 in start) echo "----------zookeeper start------ ----" $ZK_HOME/bin/zkServer.sh start ;; stop) echo "---------- zookeeper arrêté -----------" $ZK_HOME/bin/zkServer .sh stop ;; restart ) echo "---------- zookeeper restart ------------" $ZK_HOME/bin/zkServer.sh restart ;; *) status) echo "---- --- --- statut de gardien de zoo ------------" $ZK_HOME/bin/zkServer.sh status ;; echo "Usage : $0 {start|stop|restart|status}" esac cd /usr/local/zookeeper-3.8.0/bin dans l'opération de service du nœud 1 chmod +x /etc /init.d/zookeeper chkconfig --add zookeeper #Ajouter au service de gestion du système zookeeper start Démarrer le service service zookeeper status Après avoir consulté l'état, il est suivi dans l'opération de service du nœud 2 chmod +x /etc/init.d/zookeeper chkconfig --add zookeeper #Rejoindre le service de gestion du système zookeeper start Démarrer le service service zookeeper status Après avoir vérifié l'état, le leader est le deuxième à démarrer, il est le leader dans l'opération de service du nœud 3 chmod +x /etc/init.d /zookeeper chkconfig --add zookeeper #Join Aller au service de gestion du système zookeeper start pour démarrer le service service zookeeper status Après avoir vu l'état, c'est un suiveur
2. Installer kafka (3 machines doivent fonctionner)
#downloadkafka cd /opt wget http://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgz uploadkafka_2.13-2.7.1.tgz to/opt tar zxf kafka_2 .13 -2.7.1.tgz mv kafka_2.13-2.7.1 /usr/local/kafka
2.2 Modifier le fichier de configuration
cd /usr/local/kafka/config/ cp server.properties server.properties.bak vim server.properties 192.168.83.11配置 broker.id=1 listeners=PLAINTEXT://192.168.83.11:9092 zookeeper.connect=192.168.83.11 :2181,192.168.83.12:2181,192.168.83.13:2181 192.168.83.13配置 broker.id=2 listeners=PLAINTEXT://192.168.83.12:9092 zookeeper.connect=192.168.83.11:2181,192 .168.83.12:2181, 192.168.83.13:21810:2181 192.168.83.13配置 broker.id=3 listeners=PLAINTEXT://192.168.83.13:9092 zookeeper.connect=192.168.83.11:2181,192.168.83.12:2181,19 2.168.83.13:2181
2.3 Ajouter des commandes pertinentes à l'environnement système
vim /etc/profile 末行加入 export KAFKA_HOME=/usr/local/kafka export PATH=$PATH:$KAFKA_HOME/bin source /etc/profile [root@elk1 config]# scp /etc/profile elk2:/etc/profile profile 100% 1888 1.4MB/s 00:00 [root@elk1 config]# scp /etc/profile elk3:/etc/profile profile
2.3 Ajouter des commandes pertinentes à l'environnement système
cd /usr/local/kafka/config/kafka-server-start.sh -daemon server.properties netstat -antp | grep 9092
2.4 Fonctionnement de la ligne de commande Kafka
Créer un sujet kafka-topics.sh --create --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 --replication-factor 2 --partitions 3 --topic test --zookeeper: définir zookeeper cluster Adresse du serveur, s'il y a plusieurs adresses IP séparées par des virgules, utilisez généralement une adresse IP –replication -factor : définissez le nombre de copies de partition, 1 représente une copie unique, 2 est recommandé définir le nom du sujet afficher tous les sujets du serveur actuel kafka-topics.sh --list --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 vérifier les détails d'un sujet kafka-topics.sh --describe -- zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 message de libération kafka-console-producer.sh --broker-list 192.168.121.10:9092,192.168.121.12 :90 92 192,168 .121.14:9092 - -test de sujet message de consommation de test de sujet kafka-console-consumer.sh --bootstrap-server 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092 --topic test --from-beginning --from-beginning : mettra tous les sujets précédents dans le sujet Lire toutes les données et modifier le nombre de partitions kafka-topics.sh --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --alter --topic test --partitions 6Supprimer le sujet kafka-topics.sh --delete --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --topic test
3. Configurer le filebeat de la couche d'acquisition de données
3.1 Format de journal personnalisé
3.1 定制日志格式 [root@elk2 ~]# vim /etc/nginx/nginx.conf user nginx; worker_processes auto ; avis error_log /var/log/nginx/error.log ; pid /var/run/nginx.pid ; événements { worker_connections 1024 ; } http { inclure /etc/nginx/mime.types ; default_type application/octet-stream ; # log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$upstream_addr" $request_time' ; # access_log /var/log/nginx/access.log main2 ; log_format json '{"@timestamp": "$http_user_agent"' '}' ; access_log /var/log/nginx/access.log json ; envoyer le fichier ; #tcp_nopush activé ; keepalive_timeout 65 ; #gzip activé ; recherche élastique en amont { zone elasticsearch 64K ; serveur 192.168.83.11:9200 ; serveur 192.168.83.12:9200 ; serveur 192.168.83.13:9200 ; } serveur { écouter 8080 ; nom_serveur localhost ; emplacement / { proxy_pass http://elasticsearch; racine html ; index index.html index.htm; } } inclure /etc/nginx/conf.d/*.conf ; }
3.2 installer filebeat
[root@elk2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm [root@elk2 ~]# rpm -ivh filebeat-6.0.0-x86_64 .rpm
3.3 Modifier le fichier de configuration filebeat.yml
[root@elk2 ~]# vim /etc/filebeat/filebeat.yml activé : vrais chemins : - /var/log/nginx/*.log #----------------- --------- Sortie d'Elasticsearch ------------------------------ output.kafka : # tableau d'hôtes à se connecter à. hôtes : ["192.168.83.11:9092","192.168.83.12:9092","192.168.83.13:9092"] # 145 sujet : "nginx-es"
3.4 démarrer le battement de fichier
[root@elk2 ~]# systemctl redémarre filebeat
4. Une fois tous les composants déployés, démarrez le déploiement de la configuration
4.1 Créer un sujet nginx-es sur kafka
kafka-topics.sh --create --zookeeper 192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:2181 --replication-factor 1 --partitions 1 --topic nginx-es
4.2 Modifier le fichier de configuration de logstash
[root@elk2 ~]# vim /etc/logstash/conf.d/nginxlog.conf input{ kafka{ topic=>"nginx-es" codec=>"json" decor_events=>true bootstrap_servers=>"192.168.83.11 : 9092,192.168.83.12:9092,192.168.83.13:9092" } } sortie { elasticsearch { hosts=>["192.168.83.11:9200","192.168.83.12:9200","192.168.83.13:9200"] index= >'nginx-log-%{+YYYY-MM-dd}' } } 重启logstash systemctl restart logstash