Construire la pile ELK sur Mac OS X et générer le journal JAVA vers Elasticsearch (log4j2)

Salut à tous, depuis longtemps sans voir.

Construction de pile ELK

Préparation

Homebrew et JAVA JDK sont nécessaires pour installer ELK. Si vous ne l'avez pas installé, veuillez le mettre en premier. Homebrew Sous mon chemin de travail

$ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

Java SDK Veuillez consulter Oracle ** Téléchargements Java SE **. J'ai choisi JDK 8 au cas où.

ELK

Qu'est-ce que ELK

ELK stack est un terme général désignant les trois produits d'Elasticsearch: Elasticsearch (analyse) + Logstash (collection) + Kibana (visualisation). (Quand il bouge réellement, il se déplace selon le flux LEK) Elasticsearch Elasticsearch est un moteur de recherche en texte intégral open source développé par Elastic. Vous pouvez extraire rapidement un document contenant le mot souhaité à partir d'un grand nombre de documents.

Étant donné qu'Elasticsearch n'est pas une base de données relationnelle, vous ne pouvez pas utiliser d'instructions SQL. Utilisez plutôt l'interface RESTful.

Cette fois, Elasticsearch 6.2.4 sera utilisé.

Installation

$ brew install elasticsearch

Configurer un hôte

Tout d'abord, vous trouverez ʻelasticsearch.yml`.

$ brew info elasticssearch

Je pense que de telles informations sortiront.

...(Blah Blah Blah)...
Data:    /usr/local/var/lib/elasticsearch/elasticsearch_JP23417/
Logs:    /usr/local/var/log/elasticsearch/elasticsearch_JP23417.log
Plugins: /usr/local/var/elasticsearch/plugins/
Config:  /usr/local/etc/elasticsearch/
...(Blah Blah Blah)...

ʻElasticsearch.yml est sous le chemin dans Config`. Ouvrez-le et remplacez «network.host» par votre adresse IP réelle. Cette fois, je vais le construire dans un environnement local, donc je l'ai décommenté et mis comme ça.

network.host: localhost

Contrôle de fonctionnement

Démarrez Elasticsearch avec brew services elasticsearch start. Elasticsearch fonctionne sur le port 9200 par défaut, donc si vous visitez http: // localhost: 9200, vous verrez ces informations.

{
  "name" : "ry1EXQC",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ZMYVLV-eR-G5hBrQ6QmSGA",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Logstash Logstash est un pipeline de traitement de données open source côté serveur. Capture simultanément les données d'un grand nombre de sources, les convertit et les envoie à votre coffre-fort préféré (cache). La réserve recommandée est, bien sûr, la recherche élastique.

Cette fois, Logstash 6.2.4 sera utilisé.

Installer et lancer

$ brew install logstash
$ brew services start logstash

Logstash fonctionne en fait avec le fichier config. Vous devez placer une configuration différente pour chaque scène. Vous devriez pouvoir exécuter Kibana avec cela pour le moment, donc je vous expliquerai en détail plus tard.

Kibana Kibana est un outil de visualisation simple pour les données Elasticsearch.

Cette fois, j'utiliserai Kibana 6.2.4.

Installation

$ brew install kibana

Définir le port et la recherche élastique

Tout d'abord, vous trouverez kibana.yml.

$ brew info kibana

Je pense que de telles informations sortiront.

...(Blah Blah Blah)...
Config: /usr/local/etc/kibana/
...(Blah Blah Blah)...

«kibana.yml» est sous le chemin décrit dans «Config». Ouvrez-le et remplacez server.port et ʻelasticsearch.url` ceux que vous utilisez réellement. Cette fois, je l'ai configuré comme ça avec les paramètres par défaut.

...(Blah Blah Blah)...
server.port: 5601 

...(Blah Blah Blah)...

elasticsearch.url: "http://localhost:9200”
...(Blah Blah Blah)...

Vérification

Si vous pouvez le faire, vous devriez pouvoir le vérifier à partir de http: // localhost: 5601 / status. Un écran comme celui-ci apparaîtra. スクリーンショット 2018-09-12 16.56.32.png

Sortie de journal par JAVA (log4j2)

Cette fois, nous allons créer un outil pour envoyer des journaux à Elasticsearch par TCP.

Créer un projet Maven

Je suis sûr que certains IDE généreront automatiquement un projet Maven, mais veuillez l'utiliser. Il n'y a pas de problème s'il est généré de cette manière. Pour votre information. スクリーンショット 2018-09-12 17.07.29.png Le nom du paquet cette fois est log4j2.local (en fait, tout va bien).

Emplacement de la bibliothèque Maven

En d'autres termes, c'est le contenu de pom.xml. Ajoutez ce qui suit à la balise dependencies.

pom.xml


<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
</dependencies>

Placement de Log4j2

En d'autres termes, c'est le contenu de log4j2.xml. Log4j2 décide où envoyer le journal en conséquence. Cette fois, bien sûr, il sera envoyé à Elasticsearch via Logstash, mais compte tenu de la facilité de débogage, je l'ai fait sortir vers la console pour le moment.

log4j2.xml


<configuration status="OFF">
    <appenders>
        <Socket name="Logstash" host="localhost" port="9601" protocol="TCP">
            <PatternLayout pattern="%d|%t|%p|%c|%L|%m%n" />
        </Socket>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d|%t|%p|%c|%L|%m%n" />
        </Console>
    </appenders>
    <loggers>
        <root level="all">
            <AppenderRef ref="Logstash"/>
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

Si vous souhaitez personnaliser, veuillez vous référer à ** Cette page **.

Classe principale

C'est le comportement pour sortir le journal.

Main.java


package log4j2.local;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;


public class Main {
    private static Logger logger = LogManager.getLogger("test");

    public static void main(String[] args) {
        logger.error("Message d'erreur");
    }
}

Lorsque vous faites cela, vous verrez un journal comme celui-ci dans la console. (Bien sûr, il n'est pas enregistré dans Elasticsearch car il n'est pas encore connecté à Logstash.)

2018-09-12 12:55:13,962|main|ERROR|test|13|Message d'erreur

Placer Logstash

Configuration de Logstash

Vous pouvez utiliser n'importe quel chemin et créer logstash-tcp.conf. (Puisqu'il s'agit d'une communication TCP, je viens de lui donner ce nom.) Logstash peut utiliser tous les ports 9600-9700 par défaut, donc cette fois nous utiliserons le port 9601. (Veillez à utiliser le même port ** que la balise <Socket> de log4j2.xml.)

logstash-tcp.conf


input {
    tcp {
        host => "localhost"
        port => "9601"
        mode => "server"
        type => "eslocallogger"
    }
}

filter {
    mutate{
        split => ["message","|"]
        add_field =>   {
            "Datetime" => "%{[message][0]}"
        }
        add_field =>   {
            "Classname" => "%{[message][1]}"
        }
        add_field =>   {
            "Level" => "%{[message][2]}"
        }
        add_field =>   {
            "Logger" => "%{[message][3]}"
        }
        add_field =>   {
            "Message" => "%{[message][5]}"
        }
    }
}
output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts => "localhost:9200"
    }
}

J'ai utilisé Filter pour séparer les schémas ici, mais les colonnes par défaut sont automatiquement analysées même si vous ne les utilisez pas. (Ici, les messages d'erreur qui arrivent dans Logstash sont séparés par «|».)

Connectez Logstash pour configurer et redémarrer

$ brew services stop logstash
$ logstash -f ./logstash-tcp.conf --experimental-java-execution

Avec l'indicateur --experimental-java-execution, il fonctionnera sur le moteur JAVA. Pour plus d'informations, veuillez consulter ** Découvrez le nouveau moteur d'exécution Java Logstash **. Certes, cela augmentera considérablement le débit.

Courons

Console

2018-09-12 18:05:39,737|main|ERROR|test|13|Message d'erreur

Logstash Console

[2018-09-12T18:05:40,464][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline {:pipeline_id=>"main", :thread=>"#<Thread:0x5caa3237 sleep>"}
{
         "Level" => "ERROR",
    "@timestamp" => 2018-09-12T09:05:39.847Z,
        "Logger" => "test",
          "port" => 60614,
       "message" => [
        [0] "2018-09-12 18:05:39,737",
        [1] "main",
        [2] "ERROR",
        [3] "test",
        [4] "13",
        [5] "Message d'erreur"
    ],
          "type" => "eslocallogger",
       "Message" => "Message d'erreur",
      "Datetime" => "2018-09-12 18:05:39,737",
          "host" => "localhost",
      "@version" => "1",
     "Classname" => "main"
}

Kibana Si vous allez à l'écran ** Gestion ** de Kibana et rechargez, vous devriez voir un écran comme celui-ci. スクリーンショット 2018-09-12 18.08.52.png Allez à «Étape suivante», définissez «filtre» sur «@ horodatage» et cliquez sur «Créer un modèle d'index» pour commencer à visualiser l'index. スクリーンショット 2018-09-12 18.11.16.png Lorsque vous entrez dans l'écran «Découvrir», vous pouvez voir les données sur l'axe du temps. スクリーンショット 2018-09-12 18.11.25.png Pour plus de détails, reportez-vous à ** Comment utiliser Kibana **.

Source de référence

Installing the ELK Stack on Mac OS X ElasticSearch + Logstash + Kibana + log4j2 Official 6.1.1 Edition Anguist Arrangement Utiliser comme un filtre LogStash Elastic Stack

Recommended Posts

Construire la pile ELK sur Mac OS X et générer le journal JAVA vers Elasticsearch (log4j2)
Enregistrer la sortie dans un fichier en Java
Activez la sortie du journal vers les fichiers et la console à l'aide de log4j dans Eclipse.
Comment vérifier Java installé sur Mac
[Java] Comment sortir et écrire des fichiers!
Comment changer de version de Java sur Mac
Créer un environnement de développement Java sur Mac
Que faire si vous avez installé Java pour OS X sur macOS
Essayez de créer un environnement Java 8 sur Amazon Linux2
Installez java et android-sdk sur Mac en utilisant homebrew
Créer un environnement Java et afficher hello world [Débutant]
Construire Java x Spring x VSCode x Gradle sur Docker (1)
Créer un environnement de développement Java avec VS Code sur Mac
Installez java et maven sur un nouveau mac en utilisant brew
Je souhaite simplifier la sortie du journal sur Android