


Créer un système de collecte et d'analyse de journaux basé sur Spring Boot et 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.
- 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
- Tout d'abord, nous devons créer une application Spring Boot et ajouter les dépendances requises :
<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>
# 应用端口号 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
Log Collector
- Afin d'envoyer les journaux d'application à Flume, nous devons créer un appender log4j2 personnalisé.
@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); } } }
<?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>
Configuration Flume
- Nous devons configurer Flume pour recevoir les messages de journal envoyés depuis l'application dans Flume Agent et les envoyer à Elasticsearch.
# 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
Configuration d'Elasticsearch et Kibana
- 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.
Conclusion
- 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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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 ? 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.

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 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.

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.

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.

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 ? 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 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
