Logfile Management · 18 min read · Feb 02, 2026

Installieren Sie ELK als zentralen Logfile-Management-Server auf CentOS 7

Dieses Tutorial erklärt, wie man einen zentralen Logfile-Management-Server mit dem ELK-Stack auf CentOS 7 einrichtet. Wie jeder, der es noch nicht weiß, ist ELK die Kombination aus 3 Diensten: ElasticSearch, Logstash und Kibana. Um einen vollständigen zentralen Log-Management-Server mit diesem Konzept zu erstellen, ist es erforderlich, jedes dieser Pakete zu haben, da sie jeweils einen anderen Zweck erfüllen und miteinander verbunden sind. Grundsätzlich funktioniert es so:

  1. Für jeden Client, den Sie verwalten möchten, wird ein eigenes Protokoll der zugehörigen Dienste erstellt.
  2. Für den Server, der verwendet wird, um alle Logging-Informationen von jedem Client zu verwalten, wird das LogStash-Paket verwendet, um die Daten zu sammeln und in einen relativen Wert zu transformieren. Per Definition ist es eine Open-Source-Datenverarbeitungspipeline auf Serverseite, die Daten gleichzeitig aus einer Vielzahl von Quellen aufnimmt und sie transformiert.
  3. Sobald die Daten gesammelt und transformiert sind, verwendet der Management-Server ElasticSearch, um die Daten zu analysieren und in einen relevanten Wert zu überführen. Sie können eine allgemeine Abfragesprache verwenden, wenn Sie einen entsprechenden Bericht erstellen möchten.
  4. Sobald die relevanten Daten überprüft und analysiert wurden, kommt das Kibana-Paket ins Spiel, da es hilft, die relevanten Daten in einer ordentlichen Ansicht zu visualisieren und sie in ein ansprechendes Dashboard zu kombinieren, um das Verständnis zu erleichtern.

Das folgende Bild fasst den Workflow-Prozess zusammen:

1. Vorbemerkung

Für dieses Tutorial verwende ich CentOS Linux 7.4 in der 64-Bit-Version. In diesem Tutorial werden wir 3 Server verwenden: Der erste wird als Management-Server verwendet und die anderen 2 werden als Clients verwendet. Für diese Übung werden wir den Management-Server verwenden, um einen bestehenden MySQL-Dienst zu überwachen, der bereits unter jedem Client eingerichtet, konfiguriert und ausgeführt wird. Da MySQL ein Datenbankdienst ist, der hauptsächlich für OLTP-Zwecke verwendet wird, werden wir unseren Management-Server so konfigurieren, dass er 2 Logging-Prozesse protokolliert, nämlich die Gesundheitsprüfung des MySQL-Dienstes selbst und die langsame Abfrage-Transaktion. Am Ende dieses Tutorials werden wir sehen, dass alle Informationen, die von einem MySQL-Dienst innerhalb eines bestimmten Clients protokolliert werden, gleichzeitig direkt in Echtzeit vom Management-Server aus angezeigt, visualisiert und analysiert werden können.

2. Installationsphase

Für die Installationsphase beginnen wir mit der Installation von FileBeat auf beiden MySQL-DB-Servern, die als Clients fungieren. Lassen Sie uns mit dem Prozess beginnen, hier sind die Schritte:

 [root@mysql_db1 opt]# cd   
[root@mysql_db1 ~]# cd /opt/   
[root@mysql_db1 opt]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-x86_64.rpm   
--2018-06-09 10:50:46-- https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-x86_64.rpm   
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.237.188, 107.21.253.15, 184.73.245.233, ...   
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.237.188|:443... connected.   
HTTP request sent, awaiting response... 200 OK   
Length: 12697093 (12M) [binary/octet-stream]   
Saving to: ‘filebeat-6.2.1-x86_64.rpm’   
  
100%[==============================================================================>] 12,697,093 2.20MB/s in 6.9s   
  
2018-06-09 10:51:00 (1.75 MB/s) - ‘filebeat-6.2.1-x86_64.rpm’ saved [12697093/12697093]   
  
[root@mysql_db1 opt]# yum localinstall -y filebeat-6.2.1-x86_64.rpm   
Loaded plugins: fastestmirror, ovl   
Examining filebeat-6.2.1-x86_64.rpm: filebeat-6.2.1-1.x86_64   
Marking filebeat-6.2.1-x86_64.rpm to be installed   
Resolving Dependencies   
--> Running transaction check   
---> Package filebeat.x86_64 0:6.2.1-1 will be installed   
--> Finished Dependency Resolution   
  
Dependencies Resolved   
  
========================================================================================================================   
Package Arch Version Repository Size   
========================================================================================================================   
Installing:   
filebeat x86_64 6.2.1-1 /filebeat-6.2.1-x86_64 49 M   
  
Transaction Summary   
========================================================================================================================   
Install 1 Package   
  
Total size: 49 M   
Installed size: 49 M   
Downloading packages:   
Running transaction check   
Running transaction test   
Transaction test succeeded   
Running transaction   
Installing : filebeat-6.2.1-1.x86_64 1/1   
Verifying : filebeat-6.2.1-1.x86_64 1/1   
  
Installed:   
filebeat.x86_64 0:6.2.1-1   
  
Complete!   

Sobald dies abgeschlossen ist, listen wir die Standardmodule auf, die vom FileBeat-Paket aktiviert sind, und aktivieren das MySQL-Modul, das für unsere Fälle hier benötigt wird. Hier sind die Schritte:

 [root@mysql_db1 opt]# filebeat modules list   
Enabled:   
  
Disabled:   
apache2   
auditd   
icinga   
kafka   
logstash   
mysql   
nginx   
osquery   
postgresql   
redis   
system   
traefik   
[root@mysql_db1 opt]# filebeat modules enable mysql   
Enabled mysql   

Fertig, jetzt lassen Sie uns die Konfiguration bearbeiten, die für das MySQL-Modul erforderlich ist, das wir gerade aktiviert haben. Standardmäßig wird, sobald wir das MySQL-Modul aus dem Filebeat-Paket aktiviert haben, automatisch eine YAML-Datei im Verzeichnis modules.d erstellt. Sollte die Datei nicht erstellt worden sein, können Sie gerne eine neue YAML-Datei im selben Verzeichnis erstellen. Hier sind die Schritte:

 [root@mysql_db1 opt]# vi /etc/filebeat/modules.d/mysql.yml   
- module: mysql   
error:   
enabled: true   
var.paths: ["/var/lib/mysql/mysql-error.log*"]   
  
slowlog:   
enabled: true   
var.paths: ["/var/lib/mysql/log-slow-queries.log*"]   

Wie oben gezeigt, haben wir beschlossen, 2 Logging-Prozesse vom MySQL-Dienst zu protokollieren, nämlich die Gesundheitsprüfung der Datenbank selbst und das langsame Abfrageprotokoll.

Jetzt, sobald alles erledigt ist, lassen Sie uns einige Konfigurationen in der Hauptkonfigurationsdatei für Filebeat unter der Datei filebeat.yml vornehmen. Hier sind die konfigurierten Einstellungen:

 [root@mysql_db1 opt]# vi /etc/filebeat/filebeat.yml   
#=========================== Filebeat prospectors =============================   
  
filebeat.prospectors:   
  
- type: log   
  
enabled: false   
paths:   
- /var/lib/mysql/mysql-error.log   
- /var/lib/mysql/log-slow-queries.log   
  
#============================= Filebeat modules ===============================   
  
filebeat.config.modules:   
path: ${path.config}/modules.d/*.yml   
reload.enabled: false   
  
#==================== Elasticsearch template setting ==========================   
  
setup.template.settings:   
index.number_of_shards: 3   
  
#================================ General =====================================   
  
setup.kibana:   
  
#----------------------------- Logstash output --------------------------------   
output.logstash:   
hosts: ["172.17.0.6:5044"]   

Beachten Sie, dass wir oben eine IP-Adresse für den Logstash-Host festgelegt haben, die 172.17.0.6 ist. Diese IP ist die Adresse für unseren zentralen Management-Server, der direkt crawlen wird, um die Logging-Daten zu sammeln. Ich habe die fest codierte IP festgelegt, da ich keine alternativen Änderungen in der Datei /etc/hosts vorgenommen habe und keinen DNS-Server für dieses Tutorial verwendet habe. Sie können jedoch gerne den Hostnamen des Management-Servers verwenden, wenn Sie alternative Änderungen vorgenommen haben.

Da alles gemäß Plan eingerichtet wurde, lassen Sie uns die Filebeat-Dienste starten. Hier sind die Schritte:

 [root@mysql_db1 opt]# filebeat setup -e   
2018-06-09T11:04:37.277Z INFO instance/beat.go:468 Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]   
2018-06-09T11:04:37.277Z INFO instance/beat.go:475 Beat UUID: 98503460-035e-4476-8e4d-10470433dba5   
2018-06-09T11:04:37.277Z INFO instance/beat.go:213 Setup Beat: filebeat; Version: 6.2.1   
2018-06-09T11:04:37.277Z INFO pipeline/module.go:76 Beat name: lara   
2018-06-09T11:04:37.278Z ERROR instance/beat.go:667 Exiting: Template loading requested but the Elasticsearch output is not configured/enabled   
Exiting: Template loading requested but the Elasticsearch output is not configured/enabled   
  
  
[root@mysql_db1 opt]# filebeat -e &   
[1] 22010   
[root@mysql_db1 opt]# 2018-06-09T12:45:18.812Z INFO instance/beat.go:468 Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]   
2018-06-09T12:45:18.813Z INFO instance/beat.go:475 Beat UUID: 98503460-035e-4476-8e4d-10470433dba5   
2018-06-09T12:45:18.813Z INFO instance/beat.go:213 Setup Beat: filebeat; Version: 6.2.1   
2018-06-09T12:45:18.813Z INFO pipeline/module.go:76 Beat name: lara   
2018-06-09T12:45:18.813Z INFO [monitoring] log/log.go:97 Starting metrics logging every 30s   
2018-06-09T12:45:18.813Z INFO instance/beat.go:301 filebeat start running.   
2018-06-09T12:45:18.814Z INFO registrar/registrar.go:71 No registry file found under: /var/lib/filebeat/registry. Creating a new registry file.   
2018-06-09T12:45:18.819Z INFO registrar/registrar.go:108 Loading registrar data from /var/lib/filebeat/registry   
2018-06-09T12:45:18.819Z INFO registrar/registrar.go:119 States Loaded from registrar: 0   
2018-06-09T12:45:18.819Z WARN beater/filebeat.go:261 Filebeat is unable to load the Ingest Node pipelines for the configured modules because the Elasticsearch output is not configured/enabled. If you have already loaded the Ingest Node pipelines or are using Logstash pipelines, you can ignore this warning.   
2018-06-09T12:45:18.820Z INFO crawler/crawler.go:48 Loading Prospectors: 1   
2018-06-09T12:45:18.821Z INFO log/prospector.go:111 Configured paths: [/var/lib/mysql/log-slow-queries.log*]   
2018-06-09T12:45:18.822Z INFO log/prospector.go:111 Configured paths: [/var/lib/mysql/mysql-error.log*]   
2018-06-09T12:45:18.822Z INFO crawler/crawler.go:82 Loading and starting Prospectors completed. Enabled prospectors: 0   
2018-06-09T12:45:18.822Z INFO cfgfile/reload.go:127 Config reloader started   
2018-06-09T12:45:18.840Z INFO log/prospector.go:111 Configured paths: [/var/lib/mysql/log-slow-queries.log*]   
2018-06-09T12:45:18.840Z INFO log/prospector.go:111 Configured paths: [/var/lib/mysql/mysql-error.log*]   
2018-06-09T12:45:18.840Z INFO cfgfile/reload.go:258 Starting 1 runners ...   
2018-06-09T12:45:18.840Z INFO cfgfile/reload.go:219 Loading of config files completed.   
2018-06-09T12:45:18.841Z INFO log/harvester.go:216 Harvester started for file: /var/lib/mysql/mysql-error.log   
2018-06-09T12:45:18.841Z INFO log/harvester.go:216 Harvester started for file: /var/lib/mysql/log-slow-queries.log   
2018-06-09T12:45:20.841Z ERROR pipeline/output.go:74 Failed to connect: dial tcp 172.17.0.6:5044: getsockopt: connection refused   
2018-06-09T12:45:22.842Z ERROR pipeline/output.go:74 Failed to connect: dial tcp 172.17.0.6:5044: getsockopt: connection refused   
2018-06-09T12:45:26.842Z ERROR pipeline/output.go:74 Failed to connect: dial tcp 172.17.0.6:5044: getsockopt: connection refused   
  
  
[root@mysql_db1 ~]# tail -f /var/log/filebeat/filebeat   
2018-06-09T10:53:28.853Z INFO instance/beat.go:468 Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]   
2018-06-09T10:53:28.853Z INFO instance/beat.go:475 Beat UUID: 98503460-035e-4476-8e4d-10470433dba5   

Beachten Sie, dass beim Starten des Filebeat-Dienstes ein Fehler im Protokoll angezeigt wird. Dies liegt daran, dass der zugewiesene Management-Server noch nicht eingerichtet wurde. In der Anfangsphase können Sie das Fehlerprotokoll ignorieren, da es automatisch behoben wird, sobald unser Management-Server eingerichtet ist und mit dem Crawlen beginnt.

Da die Konfiguration für die Client-Seite abgeschlossen ist, können Sie die Schritte auf dem anderen MySQL-Server, der ebenfalls als Client fungiert, wiederholen.

Im Folgenden werden wir mit der Einrichtung des Management-Servers selbst fortfahren.

3. Installationsphase (Seite des zentralen Management-Servers)

Jetzt, da wir die Einrichtung für die Client-Seite abgeschlossen haben, lassen Sie uns mit der Konfiguration für den Management-Server selbst beginnen. Kurz gesagt, es gibt 3 Kernpakete, die installiert und konfiguriert werden müssen für den Management-Server, nämlich ElasticSearch, LogStash und Kibana.

Für diese Phase beginnen wir mit der Installation und Konfiguration von ElasticSearch. Hier sind die Schritte:

 [root@elk_master ~]# cd /opt/   
[root@elk_master opt]# ls   
[root@elk_master opt]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.1.tar.gz   
--2018-06-09 12:47:59-- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.1.tar.gz   
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.237.188, 54.235.82.130, 107.21.253.15, ...   
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.237.188|:443... connected.   
HTTP request sent, awaiting response... 200 OK   
Length: 29049089 (28M) [binary/octet-stream]   
Saving to: ‘elasticsearch-6.2.1.tar.gz’   
  
100%[==============================================================================>] 29,049,089 2.47MB/s in 16s   
  
2018-06-09 12:48:21 (1.76 MB/s) - ‘elasticsearch-6.2.1.tar.gz’ saved [29049089/29049089]   
  
[root@elk_master opt]#   
[root@elk_master opt]#   
[root@elk_master opt]# tar -zxvf elasticsearch-6.2.1.tar.gz   
  
[root@elk_master opt]# ln -s /opt/elasticsearch-6.2.1 /opt/elasticsearch   
[root@elk_master opt]# ll   
total 28372   
lrwxrwxrwx 1 root root 24 Jun 9 12:49 elasticsearch -> /opt/elasticsearch-6.2.1   
drwxr-xr-x 8 root root 143 Feb 7 19:36 elasticsearch-6.2.1   
-rw-r--r-- 1 root root 29049089 May 15 04:56 elasticsearch-6.2.1.tar.gz   

Nachdem die Installation von ElasticSearch abgeschlossen ist, lassen Sie uns mit dem Konfigurationsteil fortfahren. Für die Konfiguration werden wir das Verzeichnis /data/data zuweisen, um die gesammelten Logging-Daten zu speichern, die analysiert werden. Das Verzeichnis selbst wird auch verwendet, um Indizes zu speichern, die von ElasticSearch für schnellere Abfragen verwendet werden. Das Verzeichnis /data/logs wird von ElasticSearch selbst für seine eigenen Logging-Zwecke verwendet. Hier sind die Schritte:

 [root@elk_master opt]# mkdir -p /data/data   
[root@elk_master opt]# mkdir -p /data/logs   
[root@elk_master opt]#   
[root@elk_master opt]# cd elasticsearch   
[root@elk_master elasticsearch]# ls   
bin config lib LICENSE.txt logs modules NOTICE.txt plugins README.textile   
[root@elk_master elasticsearch]# cd config/   
[root@elk_master config]# vi elasticsearch.yml   
# ---------------------------------- Cluster -----------------------------------   
cluster.name: log_cluster   
#   
# ------------------------------------ Node ------------------------------------   
#   
node.name: elk_master   
#   
# ----------------------------------- Paths ------------------------------------   
#   
path.data: /data/data   
path.logs: /data/logs   
#   
network.host: 172.17.0.6   

Fertig, damit ElasticSearch funktioniert, muss Java eingerichtet werden. Hier sind die Schritte zur Installation und Konfiguration von Java auf dem Server.

 [root@elk_master config]# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"   
--2018-06-09 12:57:05-- http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm   
Resolving download.oracle.com (download.oracle.com)... 23.49.16.62   
Connecting to download.oracle.com (download.oracle.com)|23.49.16.62|:80... connected.   
HTTP request sent, awaiting response... 302 Moved Temporarily   
Location: https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm [following]   
--2018-06-09 12:57:10-- https://edelivery.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm   
Resolving edelivery.oracle.com (edelivery.oracle.com)... 104.103.48.174, 2600:1417:58:181::2d3e, 2600:1417:58:188::2d3e   
Connecting to edelivery.oracle.com (edelivery.oracle.com)|104.103.48.174|:443... connected.   
HTTP request sent, awaiting response... 302 Moved Temporarily   
Location: http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1528549151_b1fd01d854bc0423600a83c36240028e [following]   
--2018-06-09 12:57:11-- http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm?AuthParam=1528549151_b1fd01d854bc0423600a83c36240028e   
Connecting to download.oracle.com (download.oracle.com)|23.49.16.62|:80... connected.   
HTTP request sent, awaiting response... 200 OK   
Length: 169983496 (162M) [application/x-redhat-package-manager]   
Saving to: ‘jdk-8u131-linux-x64.rpm’   
  
100%[==============================================================================>] 169,983,496 2.56MB/s in 64s   
  
2018-06-09 12:58:15 (2.54 MB/s) - ‘jdk-8u131-linux-x64.rpm’ saved [169983496/169983496]   
  
[root@elk_master config]# yum localinstall -y jdk-8u131-linux-x64.rpm   
  
  
[root@elk_master config]# vi /root/.bash_profile   
export JAVA_HOME=/usr/java/jdk1.8.0_131   
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin   
export PATH   
  
[root@elk_master config]# . /root/.bash_profile   
[root@elk_master config]# java -version   
java version "1.8.0_131"   
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)   
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)   

Fertig, jetzt ist ElasticSearch installiert und konfiguriert auf dem Server. Aufgrund einiger Sicherheitsrichtlinien darf ElasticSearch jedoch nicht vom Benutzer root ausgeführt werden, daher werden wir einen zusätzlichen Benutzer erstellen, der Eigentümer des ElasticSearch-Dienstes ist und ihn ausführt. Hier sind die Schritte zur Erstellung des dedizierten Benutzers dafür:

 [root@elk_master config]# useradd -s /bin/bash shahril   
[root@elk_master config]# passwd shahril   
Changing password for user shahril.   
New password:   
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic   
Retype new password:   
passwd: all authentication tokens updated successfully.   
  
[root@elk_master config]# chown -R shahril:shahril /data/   
[root@elk_master config]# sysctl -w vm.max_map_count=262144   
vm.max_map_count = 262144   

Sobald dies erledigt ist, melden Sie sich als Benutzer an und Sie können die ElasticSearch-Dienste starten.

 [root@elk_master config]# su - shahril   
Last login: Sat Jun 9 13:03:07 UTC 2018 on pts/1   
[shahril@elk_master ~]$   
[shahril@elk_master ~]$   
[shahril@elk_master ~]$   
[shahril@elk_master ~]$ /opt/elasticsearch/bin/elasticsearch &   
[1] 7295   
[shahril@elk_master ~]$ [2018-06-09T13:06:26,667][INFO ][o.e.n.Node ] [elk_master] initializing ...   
[2018-06-09T13:06:26,721][INFO ][o.e.e.NodeEnvironment ] [elk_master] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [394.3gb], net total_space [468.2gb], types [rootfs]   
[2018-06-09T13:06:26,722][INFO ][o.e.e.NodeEnvironment ] [elk_master] heap size [990.7mb], compressed ordinary object pointers [true]   
[2018-06-09T13:06:26,723][INFO ][o.e.n.Node ] [elk_master] node name [elk_master], node ID [xjNoA9mMSGiXYmFPRNlXBg]   
[2018-06-09T13:06:26,723][INFO ][o.e.n.Node ] [elk_master] version[6.2.1], pid[7295], build[7299dc3/2018-02-07T19:34:26.990113Z], OS[Linux/3.10.0-693.17.1.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_131/25.131-b11]   
[2018-06-09T13:06:26,723][INFO ][o.e.n.Node ] [elk_master] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/tmp/elasticsearch.U6ilAwt9, -XX:+HeapDumpOnOutOfMemoryError, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -Xloggc:logs/gc.log, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=32, -XX:GCLogFileSize=64m, -Des.path.home=/opt/elasticsearch, -Des.path.conf=/opt/elasticsearch/config]   
[2018-06-09T13:06:27,529][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [aggs-matrix-stats]   
[2018-06-09T13:06:27,529][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [analysis-common]   
[2018-06-09T13:06:27,529][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [ingest-common]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [lang-expression]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [lang-mustache]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [lang-painless]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [mapper-extras]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [parent-join]   
[2018-06-09T13:06:27,530][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [percolator]   
[2018-06-09T13:06:27,531][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [rank-eval]   
[2018-06-09T13:06:27,532][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [reindex]   
[2018-06-09T13:06:27,532][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [repository-url]   
[2018-06-09T13:06:27,533][INFO ][o.e.p.PluginsService ] [elk_master] loaded module [transport-netty4]   
[2018-06-09T13:06:27,533][INFO ][o.e.p.PluginsService ] [elk_master] no plugins loaded   

Ausgezeichnet, jetzt läuft ElasticSearch ohne Probleme. Sie werden feststellen, dass zusätzliche Ports auf dem Server eingerichtet sind, die mit dem ElasticSearch-Dienst verbunden sind. Sie können die Ports wie folgt überprüfen:

 [root@elk_master config]# netstat -apn|grep -i :9   
tcp 0 0 172.17.0.6:9200 0.0.0.0:* LISTEN 7295/java   
tcp 0 0 172.17.0.6:9300 0.0.0.0:* LISTEN 7295/java   

Jetzt lassen Sie uns mit der Einrichtung und Konfiguration der Logstash-Dienste fortfahren. Hier sind die Schritte, die für den Installationsprozess erforderlich sind:

 [root@elk_master opt]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.1.rpm   
--2018-06-09 13:07:51-- https://artifacts.elastic.co/downloads/logstash/logstash-6.2.1.rpm   
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.253.15, 23.21.67.46, 107.21.237.188, ...   
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.253.15|:443... connected.   
HTTP request sent, awaiting response... 200 OK   
Length: 140430729 (134M) [binary/octet-stream]   
Saving to: ‘logstash-6.2.1.rpm’   
  
100%[==============================================================================>] 140,430,729 2.19MB/s in 60s   
  
2018-06-09 13:08:57 (2.24 MB/s) - ‘logstash-6.2.1.rpm’ saved [140430729/140430729]   
  
[root@elk_master opt]# yum localinstall -y logstash-6.2.1.rpm   
Loaded plugins: fastestmirror, ovl   
Examining logstash-6.2.1.rpm: 1:logstash-6.2.1-1.noarch   
Marking logstash-6.2.1.rpm to be installed   
Resolving Dependencies   
--> Running transaction check   
---> Package logstash.noarch 1:6.2.1-1 will be installed   
--> Finished Dependency Resolution   
  
Dependencies Resolved   
  
========================================================================================================================   
Package Arch Version Repository Size   
========================================================================================================================   
Installing:   
logstash noarch 1:6.2.1-1 /logstash-6.2.1 224 M   
  
Transaction Summary   
========================================================================================================================   
Install 1 Package   
  
Total size: 224 M   
Installed size: 224 M   
Downloading packages:   
Running transaction check   
Running transaction test   
Transaction test succeeded   
Running transaction   
Installing : 1:logstash-6.2.1-1.noarch 1/1   
Using provided startup.options file: /etc/logstash/startup.options   
Successfully created system startup script for Logstash   
Verifying : 1:logstash-6.2.1-1.noarch 1/1   
  
Installed:   
logstash.noarch 1:6.2.1-1   
  
Complete!   

Sobald die Installation abgeschlossen ist, wenden Sie die erforderliche Konfiguration wie folgt an:

 [root@elk_master opt]# vi /etc/logstash/conf.d/02-mysql-log.conf   
  
input {   
beats {   
port => 5044   
host => "0.0.0.0"   
}   
}   
  
filter {   
if [fileset][module] == "mysql" {   
if [fileset][name] == "error" {   
grok {   
match => { "message" => ["%{LOCALDATETIME:[mysql][error][timestamp]} (\[%{DATA:[mysql][error][level]}\] )?%{GREEDYDATA:[mysql][error][message]}",   
"%{TIMESTAMP_ISO8601:[mysql][error][timestamp]} %{NUMBER:[mysql][error][thread_id]} \[%{DATA:[mysql][error][level]}\] %{GREEDYDATA:[mysql][error][message1]}",   
"%{GREEDYDATA:[mysql][error][message2]}"] }   
pattern_definitions => {   
"LOCALDATETIME" => "[0-9]+ %{TIME}"   
}   
remove_field => "message"   
}   
mutate {   
rename => { "[mysql][error][message1]" => "[mysql][error][message]" }   
}   
mutate {   
rename => { "[mysql][error][message2]" => "[mysql][error][message]" }   
}   
date {   
match => [ "[mysql][error][timestamp]", "ISO8601", "YYMMdd H:m:s" ]   
remove_field => "[mysql][error][time]"   
}   
}   
else if [fileset][name] == "slowlog" {   
grok {   
match => { "message" => ["^# User@Host: %{USER:[mysql][slowlog][user]}(\[[^\]]+\])? @ %{HOSTNAME:[mysql][slowlog][host]} \[(IP:[mysql][slowlog][ip])?\](\s*Id:\s* %{NUMBER:[mysql][slowlog][id]})?\n# Query_time: %{NUMBER:[mysql][slowlog][query_time][sec]}\s* Lock_time: %{NUMBER:[mysql][slowlog][lock_time][sec]}\s* Rows_sent: %{NUMBER:[mysql][slowlog][rows_sent]}\s* Rows_examined: %{NUMBER:[mysql][slowlog][rows_examined]}\n(SET timestamp=%{NUMBER:[mysql][slowlog][timestamp]};\n)?%{GREEDYMULTILINE:[mysql][slowlog][query]}"] }   
pattern_definitions => {   
"GREEDYMULTILINE" => "(.|\n)*"   
}   
remove_field => "message"   
}   
date {   
match => [ "[mysql][slowlog][timestamp]", "UNIX" ]   
}   
mutate {   
gsub => ["[mysql][slowlog][query]", "\n# Time: [0-9]+ [0-9][0-9]:[0-9][0-9]:[0-9][0-9](\\.[0-9]+)?$", ""]   
}   
}   
}   
}   
  
output {   
elasticsearch {   
hosts => "172.17.0.6"   
manage_template => false   
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"   
}   
}   

Beachten Sie, dass wir in der oben vorgenommenen Konfiguration den Input so festgelegt haben, dass er vom Filebeat-Dienst auf der Client-Seite über den Port 5044 entnommen wird. Wir haben auch eine ordnungsgemäße Annotation für Logstash festgelegt, um die Rohdaten, die von jeder Client-Seite entnommen werden, auszurichten. Dies ist erforderlich, damit sie von der ElasticSearch-Seite leichter angezeigt und analysiert werden können.

Als Nächstes müssen wir das Filebeats-Modul für Logstash installieren, damit Logstash die Rohdaten von der Client-Seite erfassen und crawlen kann.

 [root@elk_master opt]# /usr/share/logstash/bin/logstash-plugin install logstash-input-beats   
Validating logstash-input-beats   
Installing logstash-input-beats   
Installation successful   

Da die Installation und Konfiguration für Logstash abgeschlossen sind, können wir die Dienste direkt starten. Hier sind die Schritte:

 [root@elk_master opt]# service logstash restart   
Redirecting to /bin/systemctl restart logstash.service   
  
[root@elk_master opt]# service logstash status   
Redirecting to /bin/systemctl status logstash.service   
? logstash.service - logstash   
Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: disabled)   
Active: active (running) since Sat 2018-06-09 13:17:40 UTC; 5s ago   
Main PID: 8106 (java)   
CGroup: /docker/2daaf895e0efa67ef70dbabd87b56d53815e94ff70432f692385f527e2dc488b/system.slice/logstash.service   
??8106 /bin/java -Xms256m -Xmx1g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFracti...   
  
Jun 09 13:17:40 elk_master systemd[1]: Started logstash.   
Jun 09 13:17:40 elk_master systemd[1]: Starting logstash...   
[root@elk_master opt]#   
  
[root@elk_master opt]# tail -f /var/log/logstash/logstash-plain.log   
[2018-06-09T13:17:59,496][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://172.17.0.6:9200/]}}   
[2018-06-09T13:17:59,498][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://172.17.0.6:9200/, :path=>"/"}   
[2018-06-09T13:17:59,976][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://172.17.0.6:9200/"}   
[2018-06-09T13:18:00,083][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=>nil}   
[2018-06-09T13:18:00,083][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>6}   
[2018-06-09T13:18:00,095][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//172.17.0.6"]}   
[2018-06-09T13:18:00,599][INFO ][logstash.inputs.beats ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"}   
[2018-06-09T13:18:00,652][INFO ][logstash.pipeline ] Pipeline started succesfully {:pipeline_id=>"main", :thread=>"#"}   
[2018-06-09T13:18:00,663][INFO ][org.logstash.beats.Server] Starting server on port: 5044   
[2018-06-09T13:18:00,660][INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>["main"]}   
[2018-06-09T13:18:24,060][INFO ][o.e.c.m.MetaDataCreateIndexService] [elk_master] [filebeat-6.2.1-2018.06.04] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []   
[2018-06-09T13:18:24,189][INFO ][o.e.c.m.MetaDataCreateIndexService] [elk_master] [filebeat-6.2.1-2018.06.09] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []   
[2018-06-09T13:18:24,288][INFO ][o.e.c.m.MetaDataCreateIndexService] [elk_master] [filebeat-6.2.1-2018.06.08] creating index, cause [auto(bulk api)], templates [], shards [5]/[1], mappings []   
[2018-06-09T13:18:24,591][INFO ][o.e.c.m.MetaDataMappingService] [elk_master] [filebeat-6.2.1-2018.06.04/yPD91Ww0SD2ei4YI-FgLgQ] create_mapping [doc]   
[2018-06-09T13:18:24,781][INFO ][o.e.c.m.MetaDataMappingService] [elk_master] [filebeat-6.2.1-2018.06.08/Qnv0gplFTgW0z1C6haZESg] create_mapping [doc]   
[2018-06-09T13:18:24,882][INFO ][o.e.c.m.MetaDataMappingService] [elk_master] [filebeat-6.2.1-2018.06.09/dihjTJw3SjGncXYln2MXbA] create_mapping [doc]   
[2018-06-09T13:18:24,996][INFO ][o.e.c.m.MetaDataMappingService] [elk_master] [filebeat-6.2.1-2018.06.09/dihjTJw3SjGncXYln2MXbA] update_mapping [doc]   

Wie Sie sehen können, hat der Logstash-Dienst jetzt erfolgreich gestartet und beginnt, die Daten von jeder Client-Seite zu sammeln. Alternativ können Sie den curl-Befehl verwenden, um den Status und die Updates von der Logstash-Seite zu sehen. Hier sind die Beispiele:

 [root@elk_master opt]# curl -kL http://172.17.0.6:9200/_cat/indices?v   
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size   
yellow open filebeat-6.2.1-2018.06.09 dihjTJw3SjGncXYln2MXbA 5 1 6 0 35.2kb 35.2kb   
yellow open filebeat-6.2.1-2018.06.04 yPD91Ww0SD2ei4YI-FgLgQ 5 1 350 0 186.4kb 186.4kb   
yellow open filebeat-6.2.1-2018.06.08 Qnv0gplFTgW0z1C6haZESg 5 1 97 0 89.4kb 89.4kb   

Zu guter Letzt müssen wir die Kibana-Dienste einrichten und konfigurieren, um einen vollständigen zentralen Management-Server zu erstellen. Nur als Fußnote: Da Kibana verwendet wird, um den Prozess der Sammlung und Analyse der Daten durch Visualisierung zu erleichtern, ist es kein wichtiges Paket wie ElasticSearch oder Logstash, wenn Sie den Server auf einem kleineren System einrichten. Um fortzufahren, hier sind die Schritte zur Installation und Konfiguration:

 [root@elk_master opt]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.1-linux-x86_64.tar.gz   
--2018-06-09 13:21:41-- https://artifacts.elastic.co/downloads/kibana/kibana-6.2.1-linux-x86_64.tar.gz   
Resolving artifacts.elastic.co (artifacts.elastic.co)... 107.21.237.188, 107.21.237.95, 107.21.253.15, ...   
Connecting to artifacts.elastic.co (artifacts.elastic.co)|107.21.237.188|:443... connected.   
HTTP request sent, awaiting response... 200 OK   
Length: 83465500 (80M) [binary/octet-stream]   
Saving to: ‘kibana-6.2.1-linux-x86_64.tar.gz’   
  
100%[==============================================================================>] 83,465,500 2.76MB/s in 41s   
  
2018-06-09 13:22:28 (1.94 MB/s) - ‘kibana-6.2.1-linux-x86_64.tar.gz’ saved [83465500/83465500]   
  
[root@elk_master opt]# tar -zxvf kibana-6.2.1-linux-x86_64.tar.gz   
[root@elk_master opt]# ln -s /opt/kibana-6.2.1-linux-x86_64 /opt/kibana   
  
[root@elk_master opt]# vi kibana/config/kibana.yml   
  
server.host: "172.17.0.6"   
server.port: 5601   
elasticsearch.url: "http://172.17.0.6:9200"   

Beachten Sie, dass ich oben Kibana mit unserem ElasticSearch-Dienst in der Konfiguration verlinkt habe und einen Port zugewiesen habe, der von der Kibana-Dienst verwendet wird, sobald er gestartet wird. Jetzt, da alles an seinem Platz ist, können wir die letzten Dienste starten. Hier sind die Schritte:

 [root@elk_master opt]# /opt/kibana/bin/kibana --version   
6.2.1   
  
[root@elk_master opt]# /opt/kibana/bin/kibana &   
[1] 8640   
[root@elk_master opt]# log [13:26:20.034] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready   
log [13:26:20.073] [info][status][plugin:[email protected]] Status changed from uninitialized to yellow - Waiting for Elasticsearch   
log [13:26:20.193] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready   
log [13:26:20.200] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready   
log [13:26:20.212] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready   
log [13:26:20.233] [info][listening] Server running at http://172.17.0.6:5601   
log [13:26:20.276] [info][status][plugin:[email protected]] Status changed from yellow to green - Ready   
  
[root@elk_master opt]# netstat -apn|grep -i :5601   
tcp 0 0 172.17.0.6:5601 0.0.0.0:* LISTEN 8640/node   

Großartig, jetzt läuft alles wie oben gezeigt mit dem netstat-Befehl. Lassen Sie uns das Dashboard von Kibana anzeigen und die Konfiguration vornehmen. Gehen Sie zu URL http://172.17.0.6:5601/app, Sie werden sehen, dass das Dashboard wie folgt angezeigt wird.

Kibana Dashboard

Als Nächstes klicken Sie im Dashboard auf die Registerkarte Verwaltung und definieren das Indexmuster. In unserem Fall wird das Indexmuster als unser generierter Logging-Dateiname definiert. Geben Sie die Informationen ein und klicken Sie auf Weiter.

Add Index Pattern

Danach geben Sie die Variablen ein, die als Zeitreihe verwendet werden sollen. Sobald dies erledigt ist, klicken Sie auf Indexmuster erstellen. Hier ist ein Beispiel:

Create Index Pattern

Ausgezeichnet, jetzt ist der Management-Server bereit zur Nutzung. Lassen Sie uns mit dem Test der Benutzerfreundlichkeit fortfahren.

4. Testphase

Bevor wir mit dem Test beginnen, lassen Sie uns die Annahme für die endgültigen Ergebnis-Erwartungen treffen. Für diesen Test werden wir versuchen, eine Datenbankabfrage auszuführen, die die lange Abfragezeit überschreitet, die vom Client, dem MySQL-Server, zugewiesen wurde. Sobald wir ausführen, sollte unser zentraler Management-Server automatisch das Ergebnis der langsamen Abfrageinformationen als Grafik über das Kibana-Dashboard anzeigen. Jetzt, da alles klar ist, lassen Sie uns mit dem Test beginnen, hier sind die Schritte:

Melden Sie sich bei einem der Client-Server an und führen Sie die langsame SQL-Abfrage wie folgt aus:

 [root@mysql_db1 ~]# mysql --login-path=root -P 3306 --prompt='TEST>'   
Welcome to the MySQL monitor. Commands end with ; or \g.   
Your MySQL connection id is 193   
Server version: 5.7.21-log MySQL Community Server (GPL)   
  
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.   
  
Oracle is a registered trademark of Oracle Corporation and/or its   
affiliates. Other names may be trademarks of their respective   
owners.   
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.   
  
TEST>select sleep(5);   
+----------+   
| sleep(5) |   
+----------+   
| 0 |   
+----------+   
1 row in set (5.01 sec)   
  
TEST>select sleep(6);   
+----------+   
| sleep(6) |   
+----------+   
| 0 |   
+----------+   
1 row in set (6.00 sec)   
  
TEST>select sleep(10) 'run for 10 seconds';   
+--------------------+   
| run for 10 seconds |   
+--------------------+   
| 0 |   
+--------------------+   
1 row in set (10.00 sec)   
  
TEST>select sleep(3) 'test again';   
+------------+   
| test again |   
+------------+   
| 0 |   
+------------+   
1 row in set (3.00 sec)   
  
TEST>exit   
Bye   

Wie oben gezeigt, haben wir es geschafft, einige langsame Abfragen zu erzeugen, die automatisch in jedem Client-Protokoll für langsame Abfragen protokolliert wurden. Lassen Sie uns jetzt zum Dashboard gehen und sehen, ob die Dateninformationen erfolgreich vom zentralen Server gecrawlt und in eine Visualisierungsgrafik umgewandelt wurden.

Log Data has been indexed

Großartig, wie oben gezeigt, gibt es eine Liste von Logging-Informationen, die erfolgreich gecrawlt und über das Kibana-Dashboard angezeigt wurden. Sie können die linke Registerkarte verwenden, um anzugeben, welche Art von Spalte Sie anzeigen oder ausblenden möchten, hier sind die Beispiele :-

Kibana Dashboard navigation

Mit dem Textfeld oben im Dashboard können Sie SQL-Abfragen eingeben, um bestimmte Informationen oder Teile der benötigten Daten anzuzeigen.

Search for log data with SQL

Ausgezeichnet, wie oben gezeigt, werden die langsamen SQL-Abfragen, die wir ursprünglich von einem unserer Client-Server erzeugt haben, automatisch unter unserem Kibana-Dashboard wie erwartet angezeigt.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.