Maison Java javaDidacticiel Créer un système de collecte et d'analyse de journaux basé sur Spring Boot et Flume

Créer un système de collecte et d'analyse de journaux basé sur Spring Boot et Flume

Jun 23, 2023 am 08:53 AM
spring boot 日志分析 flume

À mesure que l'échelle des systèmes d'entreprise continue de croître, les journaux système deviennent de plus en plus volumineux. Sans un système fiable de collecte et d'analyse des journaux, il est difficile de surveiller et de maintenir efficacement le système. Cet article explique comment créer un système efficace de collecte et d'analyse de journaux basé sur Spring Boot et Flume.

  1. Prerequis pour commencer, vous devez installer et configurer le logiciel suivant:

jdk 8 ou plus

    Maven 3.3 ou au-dessus de
  • apache Flume 1.9.0 ou au-dessus de
  • Lasticsearch 7.6. ou version supérieure
  • Kibana 7.6.2 ou version supérieure
  • Configuration de l'application Spring Boot
  1. Tout d'abord, nous devons créer une application Spring Boot et ajouter les dépendances requises :
  2. <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    Copier après la connexion
dans le fichier application.properties, ajoutez la configuration suivante :

# 应用端口号
server.port=8080

# log4j2配置
logging.config=classpath:log4j2.xml

# flume配置
flume.agentName=myflume
flume.sourceType=avro
flume.clientType=load-balancing
flume.hosts=localhost:41414

# elasticsearch配置
spring.elasticsearch.rest.uris=http://localhost:9200
Copier après la connexion

Dans la configuration ci-dessus, nous avons spécifié le numéro de port de l'application, le fichier de configuration log4j2, la configuration liée à Flume et l'URI d'accès Elasticsearch.

Log Collector

  1. Afin d'envoyer les journaux d'application à Flume, nous devons créer un appender log4j2 personnalisé.
  2. @Plugin(name = "Flume", category = "Core", elementType = "appender", printObject = true)
    public class FlumeAppender extends AbstractAppender {
    
        private static final ObjectMapper MAPPER = new ObjectMapper();
        private final FlumeClient client;
        private final String sourceType;
    
        protected FlumeAppender(String name, Filter filter, Layout<? extends Serializable> layout,
                                FlumeClient client, String sourceType) {
            super(name, filter, layout, true);
            this.client = client;
            this.sourceType = sourceType;
        }
    
        @PluginFactory
        public static FlumeAppender createAppender(@PluginAttr("name") String name,
                                                   @PluginElement("Filters") Filter filter,
                                                   @PluginElement("Layout") Layout<? extends Serializable> layout,
                                                   @PluginAttr("sourceType") String sourceType,
                                                   @PluginAttr("hosts") String hosts) {
            if (name == null) {
                LOGGER.error("FlumeAppender missing name");
                return null;
            }
            if (client == null) {
                LOGGER.error("FlumeAppender missing client");
                return null;
            }
            return new FlumeAppender(name, filter, layout, createClient(hosts), sourceType);
        }
    
        private static FlumeClient createClient(String hosts) {
            LoadBalancingRpcClient rpcClient = new LoadBalancingRpcClient();
            String[] hostArray = hosts.split(",");
            for (String host : hostArray) {
                String[] hostParts = host.split(":");
                rpcClient.addHost(new InetSocketAddress(hostParts[0], Integer.parseInt(hostParts[1])));
            }
            Properties props = new Properties();
            props.setProperty(RpcClientConfigurationConstants.CONFIG_CLIENT_TYPE, "default_loadbalance");
            props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS, hosts);
            props.setProperty(RpcClientConfigurationConstants.CONFIG_MAX_BACKOFF, "10000");
            AvroEventSerializer serializer = new AvroEventSerializer();
            serializer.configure(props, false);
            return new FlumeClient(rpcClient, serializer);
        }
    
        @Override
        public void append(LogEvent event) {
            try {
                byte[] body = ((StringLayout) this.getLayout()).toByteArray(event);
                Map<String, String> headers = new HashMap<>();
                headers.put("timestamp", Long.toString(event.getTimeMillis()));
                headers.put("source", "log4j");
                headers.put("sourceType", sourceType);
                Event flumeEvent = EventBuilder.withBody(body, headers);
                client.sendEvent(flumeEvent);
            } catch (Exception e) {
                LOGGER.error("Failed to send event to Flume", e);
            }
        }
    }
    Copier après la connexion
Dans le code ci-dessus, nous avons implémenté un log4j2 Appender, qui regroupera l'événement de journal dans un événement Flume et l'enverra au serveur Flume.

Créez un fichier de configuration log4j2 et configurez FlumeAppender.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Flume name="flume" sourceType="spring-boot" hosts="${flume.hosts}">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Flume>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="flume"/>
        </Root>
    </Loggers>
</Configuration>
Copier après la connexion

Dans ce fichier de configuration log4j2, nous définissons un FlumeAppender et le référençons dans le Root Logger.

Configuration Flume

  1. Nous devons configurer Flume pour recevoir les messages de journal envoyés depuis l'application dans Flume Agent et les envoyer à Elasticsearch.
Créez un fichier de configuration Flume comme indiqué ci-dessous.

# Define the agent name and the agent sources and sinks
myflume.sources = mysource
myflume.sinks = mysink
myflume.channels = channel1

# Define the source
myflume.sources.mysource.type = avro
myflume.sources.mysource.bind = 0.0.0.0
myflume.sources.mysource.port = 41414

# Define the channel
myflume.channels.channel1.type = memory
myflume.channels.channel1.capacity = 10000
myflume.channels.channel1.transactionCapacity = 1000

# Define the sink
myflume.sinks.mysink.type = org.elasticsearch.hadoop.flume.ElasticsearchSink
myflume.sinks.mysink.hostNames = localhost:9200
myflume.sinks.mysink.indexName = ${type}-%{+YYYY.MM.dd}
myflume.sinks.mysink.batchSize = 1000
myflume.sinks.mysink.typeName = ${type}

# Link the source and sink with the channel
myflume.sources.mysource.channels = channel1
myflume.sinks.mysink.channel = channel1
Copier après la connexion
Dans le fichier de configuration Flume, nous définissons un agent, une source et un récepteur. La source est de type Avro, liée au port 41414, Channel1 est un type de mémoire, la capacité est de 10 000 et transactionCapacity est de 1 000. Le récepteur est un type ElasticsearchSink qui crée un index nommé type sur le port 9200 de l'hôte local et le soumet à Elasticsearch par lots lorsque 1 000 événements sont atteints.

Configuration d'Elasticsearch et Kibana

  1. Enfin, nous devons configurer Elasticsearch et Kibana. Dans Elasticsearch, nous devons créer un index qui correspond au nom d'index défini dans le fichier de configuration Flume.
Dans Kibana, nous devons créer un schéma d'index. Dans le menu principal de Kibana, sélectionnez « Gestion » puis « Kibana ». Dans le modèle d'index Kibana, sélectionnez « Créer un modèle d'index ». Entrez le nom d'index défini dans le fichier de configuration Flume et suivez les invites pour le configurer.

Nous devons également créer un tableau de bord pour Kibana afin de visualiser les messages du journal de l'application. Dans le menu principal de Kibana, sélectionnez « Tableau de bord » puis « Créer un tableau de bord ». Dans l'onglet "Visualisations", sélectionnez "Ajouter une visualisation". Sélectionnez Table de données et configurez les champs requis et les options de visualisation.

Conclusion

  1. Dans cet article, nous avons présenté comment utiliser Spring Boot et Flume pour créer un système efficace de collecte et d'analyse de journaux. Nous avons implémenté un appender log4j2 personnalisé pour envoyer les événements de journal de l'application au serveur Flume, et utilisé Elasticsearch et Kibana pour l'analyse et la visualisation des journaux. J'espère que cet article pourra vous aider à créer votre propre système de collecte et d'analyse de journaux.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Splunk pour l'analyse des journaux dans un environnement Linux ? Comment utiliser Splunk pour l'analyse des journaux dans un environnement Linux ? Jul 29, 2023 pm 05:45 PM

Comment utiliser Splunk pour l’analyse des journaux dans un environnement Linux ? Présentation : Splunk est un puissant outil d'analyse de journaux qui peut nous aider à rechercher, analyser et extraire des informations précieuses en temps réel à partir de données de journaux massives. Cet article explique comment installer et configurer Splunk dans un environnement Linux et l'utiliser pour l'analyse des journaux. Installer Splunk : Tout d'abord, nous devons télécharger et installer Splunk sur le système Linux. Les opérations spécifiques sont les suivantes : Ouvrez le site officiel de Splunk (www.

Spring Boot+MyBatis+Atomikos+MySQL (avec code source) Spring Boot+MyBatis+Atomikos+MySQL (avec code source) Aug 15, 2023 pm 04:12 PM

Dans les projets réels, nous essayons d'éviter les transactions distribuées. Cependant, il est parfois vraiment nécessaire de procéder à un fractionnement des services, ce qui entraînera des problèmes de transactions distribuées. Dans le même temps, des transactions distribuées sont également demandées sur le marché lors des entretiens. Vous pouvez vous entraîner avec ce cas et parler de 123 lors de l'entretien.

Comment effectuer une analyse des journaux et un diagnostic des pannes sur les systèmes Linux Comment effectuer une analyse des journaux et un diagnostic des pannes sur les systèmes Linux Nov 07, 2023 am 11:42 AM

Comment effectuer une analyse des journaux et un diagnostic des pannes des systèmes Linux nécessite des exemples de code spécifiques. Dans les systèmes Linux, les journaux sont très importants. Ils enregistrent l'état de fonctionnement du système et l'apparition de divers événements. En analysant et en diagnostiquant les journaux système, nous pouvons nous aider à trouver la cause de la panne du système et à résoudre le problème à temps. Cet article présentera certaines méthodes d'analyse des journaux Linux et de diagnostic des pannes couramment utilisées, et donnera des exemples de code correspondants. L'emplacement et le format des fichiers journaux Dans les systèmes Linux, les fichiers journaux sont généralement stockés dans /var/lo.

Analyse des journaux et surveillance de Nginx Proxy Manager Analyse des journaux et surveillance de Nginx Proxy Manager Sep 26, 2023 am 09:21 AM

L'analyse et la surveillance des journaux de NginxProxyManager nécessitent des exemples de code spécifiques Introduction : NginxProxyManager est un outil de gestion de serveur proxy basé sur Nginx. Il fournit une méthode simple et efficace pour gérer et surveiller les serveurs proxy. En fonctionnement réel, nous avons souvent besoin d'analyser et de surveiller les journaux de NginxProxyManager afin de découvrir des problèmes potentiels ou d'optimiser les performances à temps. Cet article explique comment utiliser certains outils couramment utilisés.

Spring Boot implémente la technologie de séparation lecture-écriture MySQL Spring Boot implémente la technologie de séparation lecture-écriture MySQL Aug 15, 2023 pm 04:52 PM

Comment réaliser la séparation lecture-écriture, projet Spring Boot, la base de données est MySQL et la couche de persistance utilise MyBatis.

Création d'un système d'analyse des journaux à l'aide de Python et Redis : comment surveiller l'état du système en temps réel Création d'un système d'analyse des journaux à l'aide de Python et Redis : comment surveiller l'état du système en temps réel Jul 29, 2023 pm 04:09 PM

Construire un système d'analyse de journaux à l'aide de Python et Redis : Comment surveiller la santé du système en temps réel Introduction : Lors du développement et de la maintenance d'un système, il est très important de surveiller la santé du système. Un bon système de surveillance nous permet de comprendre l'état du système en temps réel, de découvrir et de résoudre les problèmes à temps et d'améliorer la stabilité et les performances du système. Cet article expliquera comment utiliser Python et Redis pour créer un système d'analyse de journaux simple mais pratique afin de surveiller l'état de fonctionnement du système en temps réel. Configurer l'environnement : tout d'abord, nous devons configurer Python et

Comment utiliser la commande grep pour l'analyse des journaux sous Linux ? Comment utiliser la commande grep pour l'analyse des journaux sous Linux ? Jul 29, 2023 pm 02:12 PM

Comment utiliser la commande grep pour l’analyse des journaux sous Linux ? Introduction : Les journaux sont des enregistrements importants générés pendant le fonctionnement du système, pour le fonctionnement, la maintenance et le dépannage, l'analyse des journaux est une tâche essentielle. Dans le système d'exploitation Linux, la commande grep est un puissant outil de recherche de texte très adapté à l'analyse des journaux. Cet article explique comment utiliser la commande grep couramment utilisée pour l'analyse des journaux et fournit des exemples de code spécifiques. 1. Introduction à la commande grep grep est un fichier dans le système Linux

Comment utiliser Nginx Proxy Manager pour collecter et analyser les journaux d'accès au site Web Comment utiliser Nginx Proxy Manager pour collecter et analyser les journaux d'accès au site Web Sep 26, 2023 am 08:15 AM

Comment utiliser NginxProxyManager pour collecter et analyser les journaux d'accès aux sites Web Introduction : Avec le développement rapide d'Internet, l'analyse des journaux de sites Web est devenue un élément important. En collectant et en analysant les journaux d'accès aux sites Web, nous pouvons comprendre les habitudes comportementales des utilisateurs, optimiser les performances du site Web et améliorer l'expérience utilisateur. Cet article explique comment utiliser NginxProxyManager pour collecter et analyser les journaux d'accès aux sites Web, y compris la configuration de NginxProxyManager, la collecte

See all articles