Heim Java javaLernprogramm Erstellen Sie ein Protokollerfassungs- und Analysesystem basierend auf Spring Boot und Flume

Erstellen Sie ein Protokollerfassungs- und Analysesystem basierend auf Spring Boot und Flume

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

Da die Größe der Unternehmenssysteme immer größer wird, werden die Systemprotokolle immer größer. Ohne ein zuverlässiges Protokollerfassungs- und -analysesystem ist es schwierig, das System effektiv zu überwachen und zu warten. In diesem Artikel wird erläutert, wie Sie ein effizientes Protokollerfassungs- und Analysesystem basierend auf Spring Boot und Flume erstellen.

  1. Preroquisites

Bevor Sie beginnen, müssen Sie die folgende Software installieren und einrichten:

  • jdk 8 oder über
  • Maven 3.3 oder über
  • apache Flume 1.9.0 oder über
  • elasticsearch 7.6 oder höhere Version
  • Kibana 7.6.2 oder höhere Version
  1. Spring Boot-Anwendungskonfiguration

Zuerst müssen wir eine Spring Boot-Anwendung erstellen und die erforderlichen Abhängigkeiten hinzufügen:

<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>
Nach dem Login kopieren

in der Datei „application.properties“ hinzufügen die folgende Konfiguration:

# 应用端口号
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
Nach dem Login kopieren

In der obigen Konfiguration haben wir die Portnummer der Anwendung, die log4j2-Konfigurationsdatei, die Flume-bezogene Konfiguration und den Elasticsearch-Zugriffs-URI angegeben.

  1. Log Collector

Um Anwendungsprotokolle an Flume zu senden, müssen wir einen benutzerdefinierten log4j2-Appender erstellen.

@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);
        }
    }
}
Nach dem Login kopieren

Im obigen Code haben wir einen log4j2-Appender implementiert, der das Protokollereignis in ein Flume-Ereignis verpackt und an den Flume-Server sendet.

Erstellen Sie eine log4j2-Konfigurationsdatei und konfigurieren Sie 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>
Nach dem Login kopieren

In dieser log4j2-Konfigurationsdatei definieren wir einen FlumeAppender und referenzieren ihn im Root Logger.

  1. Flume-Konfiguration

Wir müssen Flume so konfigurieren, dass es von der Anwendung in Flume Agent gesendete Protokollnachrichten empfängt und an Elasticsearch sendet.

Erstellen Sie eine Flume-Konfigurationsdatei wie unten gezeigt.

# 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
Nach dem Login kopieren

In der Flume-Konfigurationsdatei definieren wir einen Agenten, eine Quelle und eine Senke. Quelle ist ein Avro-Typ, gebunden an Port 41414, Kanal1 ist ein Speichertyp, die Kapazität beträgt 10000 und die Transaktionskapazität beträgt 1000. Die Senke ist ein ElasticsearchSink-Typ, der einen Index mit dem Namen „type“ auf Port 9200 des lokalen Hosts erstellt und ihn stapelweise an Elasticsearch übermittelt, wenn 1000 Ereignisse erreicht sind.

  1. Elasticsearch- und Kibana-Konfiguration

Abschließend müssen wir Elasticsearch und Kibana konfigurieren. In Elasticsearch müssen wir einen Index erstellen, der dem in der Flume-Konfigurationsdatei definierten Indexnamen entspricht.

In Kibana müssen wir ein Indexschema erstellen. Wählen Sie im Hauptmenü von Kibana „Verwaltung“ und dann „Kibana“. Wählen Sie im Kibana-Indexmuster „Indexmuster erstellen“ aus. Geben Sie den in der Flume-Konfigurationsdatei definierten Indexnamen ein und befolgen Sie die Anweisungen zur Konfiguration.

Wir müssen außerdem ein Dashboard für Kibana erstellen, um die Protokollmeldungen der Anwendung anzuzeigen. Wählen Sie im Hauptmenü von Kibana „Dashboard“ und dann „Dashboard erstellen“. Wählen Sie im Reiter „Visualisierungen“ die Option „Visualisierung hinzufügen“ aus. Wählen Sie Datentabelle aus und konfigurieren Sie die erforderlichen Felder und Visualisierungsoptionen.

  1. Fazit

In diesem Artikel haben wir vorgestellt, wie man mit Spring Boot und Flume ein effizientes System zur Protokollerfassung und -analyse aufbaut. Wir haben einen benutzerdefinierten log4j2-Appender implementiert, um die Protokollereignisse der Anwendung an den Flume-Server zu senden, und haben Elasticsearch und Kibana für die Protokollanalyse und -visualisierung verwendet. Ich hoffe, dieser Artikel kann Ihnen beim Aufbau Ihres eigenen Protokollerfassungs- und Analysesystems helfen.

Das obige ist der detaillierte Inhalt vonErstellen Sie ein Protokollerfassungs- und Analysesystem basierend auf Spring Boot und Flume. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich Splunk für die Protokollanalyse in einer Linux-Umgebung? Wie verwende ich Splunk für die Protokollanalyse in einer Linux-Umgebung? Jul 29, 2023 pm 05:45 PM

Wie verwende ich Splunk für die Protokollanalyse in einer Linux-Umgebung? Überblick: Splunk ist ein leistungsstarkes Protokollanalysetool, mit dem wir in Echtzeit wertvolle Informationen aus umfangreichen Protokolldaten suchen, analysieren und extrahieren können. In diesem Artikel erfahren Sie, wie Sie Splunk in einer Linux-Umgebung installieren und konfigurieren und es für die Protokollanalyse verwenden. Splunk installieren: Zuerst müssen wir Splunk herunterladen und auf dem Linux-System installieren. Die spezifischen Vorgänge sind wie folgt: Öffnen Sie die offizielle Splunk-Website (www.

Spring Boot+MyBatis+Atomikos+MySQL (mit Quellcode) Spring Boot+MyBatis+Atomikos+MySQL (mit Quellcode) Aug 15, 2023 pm 04:12 PM

In tatsächlichen Projekten versuchen wir, verteilte Transaktionen zu vermeiden. Manchmal ist es jedoch wirklich notwendig, einige Dienste aufzuteilen, was zu Problemen bei verteilten Transaktionen führt. Gleichzeitig werden in Vorstellungsgesprächen auch verteilte Transaktionen auf dem Markt gefragt. Sie können diesen Fall üben und im Vorstellungsgespräch über 123 sprechen.

So führen Sie eine Protokollanalyse und Fehlerdiagnose auf Linux-Systemen durch So führen Sie eine Protokollanalyse und Fehlerdiagnose auf Linux-Systemen durch Nov 07, 2023 am 11:42 AM

Für die Protokollanalyse und Fehlerdiagnose von Linux-Systemen sind spezifische Codebeispiele erforderlich. In Linux-Systemen sind Protokolle sehr wichtig. Sie zeichnen den Betriebsstatus des Systems und das Auftreten verschiedener Ereignisse auf. Durch die Analyse und Diagnose von Systemprotokollen können wir uns dabei helfen, die Ursache für Systemausfälle zu finden und das Problem rechtzeitig zu lösen. In diesem Artikel werden einige häufig verwendete Linux-Protokollanalyse- und Fehlerdiagnosemethoden vorgestellt und entsprechende Codebeispiele gegeben. Der Speicherort und das Format von Protokolldateien. In Linux-Systemen werden Protokolldateien im Allgemeinen in /var/lo gespeichert

Protokollanalyse und Überwachung des Nginx Proxy Managers Protokollanalyse und Überwachung des Nginx Proxy Managers Sep 26, 2023 am 09:21 AM

Für die Protokollanalyse und -überwachung von NginxProxyManager sind spezifische Codebeispiele erforderlich. Einführung: NginxProxyManager ist ein auf Nginx basierendes Proxyserver-Verwaltungstool. Es bietet eine einfache und effektive Methode zur Verwaltung und Überwachung von Proxyservern. Im tatsächlichen Betrieb müssen wir häufig die Protokolle von NginxProxyManager analysieren und überwachen, um potenzielle Probleme zu erkennen oder die Leistung rechtzeitig zu optimieren. In diesem Artikel wird erläutert, wie einige häufig verwendete Methoden verwendet werden

Spring Boot implementiert die MySQL-Technologie zur Lese-/Schreibtrennung Spring Boot implementiert die MySQL-Technologie zur Lese-/Schreibtrennung Aug 15, 2023 pm 04:52 PM

So erreichen Sie die Lese-Schreib-Trennung, Spring Boot-Projekt, die Datenbank ist MySQL und die Persistenzschicht verwendet MyBatis.

Aufbau eines Protokollanalysesystems mit Python und Redis: So überwachen Sie den Systemzustand in Echtzeit Aufbau eines Protokollanalysesystems mit Python und Redis: So überwachen Sie den Systemzustand in Echtzeit Jul 29, 2023 pm 04:09 PM

Erstellen eines Protokollanalysesystems mit Python und Redis: So überwachen Sie den Systemzustand in Echtzeit. Einführung: Bei der Entwicklung und Wartung eines Systems ist es sehr wichtig, den Zustand des Systems zu überwachen. Ein gutes Überwachungssystem ermöglicht es uns, den Status des Systems in Echtzeit zu verstehen, Probleme rechtzeitig zu erkennen und zu lösen sowie die Stabilität und Leistung des Systems zu verbessern. In diesem Artikel wird erläutert, wie Sie mit Python und Redis ein einfaches, aber praktisches Protokollanalysesystem erstellen, um den Betriebsstatus des Systems in Echtzeit zu überwachen. Richten Sie die Umgebung ein: Zuerst müssen wir Python einrichten und

Wie verwende ich den Befehl grep für die Protokollanalyse unter Linux? Wie verwende ich den Befehl grep für die Protokollanalyse unter Linux? Jul 29, 2023 pm 02:12 PM

Wie verwende ich den Befehl grep für die Protokollanalyse unter Linux? Einleitung: Protokolle sind wichtige Aufzeichnungen, die während des Systembetriebs, der Wartung und Fehlerbehebung erstellt werden. Die Protokollanalyse ist eine wesentliche Aufgabe. Im Linux-Betriebssystem ist der Befehl grep ein leistungsstarkes Textsuchwerkzeug, das sich sehr gut für die Protokollanalyse eignet. In diesem Artikel wird die Verwendung des häufig für die Protokollanalyse verwendeten grep-Befehls vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Einführung in den grep-Befehl grep ist eine Datei im Linux-System

So verwenden Sie Nginx Proxy Manager zum Sammeln und Analysieren von Website-Zugriffsprotokollen So verwenden Sie Nginx Proxy Manager zum Sammeln und Analysieren von Website-Zugriffsprotokollen Sep 26, 2023 am 08:15 AM

So verwenden Sie NginxProxyManager zum Sammeln und Analysieren von Website-Zugriffsprotokollen. Einführung: Mit der rasanten Entwicklung des Internets ist die Analyse von Website-Protokollen zu einem wichtigen Bestandteil geworden. Durch das Sammeln und Analysieren von Website-Zugriffsprotokollen können wir das Verhalten und die Gewohnheiten der Benutzer verstehen, die Website-Leistung optimieren und die Benutzererfahrung verbessern. In diesem Artikel wird erläutert, wie Sie mit NginxProxyManager Website-Zugriffsprotokolle sammeln und analysieren, einschließlich der Konfiguration und Erfassung von NginxProxyManager

See all articles