Avec le développement continu d'Internet et des technologies de l'information, l'analyse des journaux est devenue un élément indispensable des processus d'entreprise, de sécurité des réseaux et d'optimisation des systèmes. Dans le passé, les méthodes d'analyse des journaux reposaient principalement sur la lecture, le filtrage et l'analyse manuels, ce qui était difficile pour de grandes quantités de données. L'émergence de plates-formes d'analyse de journaux peut traiter les données de journaux de manière efficace et précise, augmentant ainsi la valeur des données. Cet article présentera une plateforme d'analyse de journaux ELK open source implémentée à l'aide de PHP.
1. Introduction à ELK
ELK est l'abréviation de trois logiciels open source : Elasticsearch, Logstash et Kibana. Elasticsearch est un moteur de recherche basé sur Lucene qui peut traiter de grandes quantités de données et interroger rapidement ; Logstash est un outil de collecte et de traitement de journaux open source qui peut collecter, analyser, filtrer et transformer une variété de journaux. Kibana est un outil de traitement de données. Visual ; et des outils interactifs capables de générer rapidement divers graphiques et tableaux de bord.
ELK présente les caractéristiques d'une utilisation simple, de performances efficaces, d'une forte évolutivité, etc., et prend en charge plusieurs sources de données. Il peut aider les entreprises à créer rapidement une puissante plate-forme d'analyse des journaux pour surveiller l'état de fonctionnement des systèmes et des applications.
2. PHP implémente ELK
Dans le processus d'utilisation d'ELK, nous utilisons généralement Logstash pour collecter, analyser et transformer les journaux, puis stocker les données dans Elasticsearch, à l'aide de Kibana pour l'affichage visuel. En tant que langage de script côté serveur populaire, PHP peut également collecter et stocker des journaux à l'aide des bibliothèques Logstash et Elasticsearch.
1. Installer Logstash
L'installation de Logstash est très simple Nous pouvons sélectionner la version correspondante via la page de téléchargement du site officiel, puis la décompresser dans la version spécifiée. annuaire. Par exemple, nous pouvons l'installer dans un système Linux via la commande suivante :
curl -L -O https://download.elastic.co/logstash/logstash/logstash-5.5.2.tar.gz tar -zxvf logstash-5.5.2.tar.gz cd logstash-5.5.2/bin/ ./logstash -e 'input { stdin { } } output { stdout {} }'
Après avoir exécuté la commande ci-dessus, nous pouvons tester si Logstash est installé avec succès via l'entrée standard. Bien entendu, afin de mieux introduire l'utilisation de PHP pour collecter les journaux, nous devons également installer des bibliothèques associées.
2. Installez la bibliothèque Elasticsearch
Nous utilisons Composer pour gérer les dépendances de la bibliothèque PHP. Après avoir installé Logstash, nous pouvons utiliser la commande suivante pour installer la bibliothèque dépendante d'Elasticsearch :
composer require elasticsearch/elasticsearch
3 Configurer Logstash
Avant d'utiliser Logstash pour la collecte de journaux, nous devons également configurer. Paramètres liés à Logstash. Tout d’abord, nous devons définir l’entrée de Logstash. Dans la configuration d'entrée, nous pouvons utiliser des plug-ins très utiles, tels que :
input { file { path => "/var/log/apache2/access.log" type => "apache_access" } }
filter { if [type] == "apache_access" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } }
output { elasticsearch { hosts => ["localhost:9200"] index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" user => "elastic" password => "changeme" } }
<?php require 'vendor/autoload.php'; use ElasticsearchClientBuilder; $client = ClientBuilder::create()->build(); $log_path = '/var/log/apache2/access.log'; $log_index = 'apache_access'; if(!file_exists($log_path)) { echo "Log file '{$log_path}' not exists."; exit; } $file_size = filesize($log_path); if($file_size == 0) { exit; } $lines = file($log_path); if(empty($lines)) { exit; } foreach($lines as $line) { $log = []; $log['@timestamp'] = date('c'); $log['message'] = $line; $log['type'] = $log_index; $params = [ 'body' => $log, 'index' => 'logs', 'type' => $log_index ]; $response = $client->index($params); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!