ELK als zentralen Logfile Management Server auf CentOS 7 installieren

Dieses Tutorial erklärt, wie Sie einen zentralen Logfile-Management-Server mit ELK-Stapel auf CentOS 7 einrichten. Wie jeder, der es noch nicht weiß, ist ELK die Kombination aus 3 Dienstleistungen: ElasticSearch, Logstash und Kibana. Um einen vollständig zentralisierten Protokollverwaltungsserver mit diesem Konzept zu erstellen, müsste jedes dieser Pakete vorhanden sein, da es einem anderen Zweck dient und miteinander verbunden ist. Im Grunde genommen funktioniert es so:

  1. Für jeden Kunden, den Sie verwalten möchten, erstellt er ein eigenes Protokoll der zugehörigen Dienste.
  2. Für den Server, der für die Verwaltung aller Protokollinformationen von jedem Client verwendet wird, verwendet er das LogStash-Paket, um die Daten zu sammeln und in einen relativen Wert umzuwandeln. Per Definition ist es eine Open-Source, serverseitige Datenverarbeitungspipeline, die Daten aus einer Vielzahl von Quellen gleichzeitig aufnimmt und umwandelt.
  3. Sobald die Daten gesammelt und transformiert wurden, verwendet der Management-Server ElasticSearch, um die Daten zu einem relevanten Wert zu analysieren. Sie können die allgemeine Abfragesprache verwenden, wenn Sie einen zugehörigen Bericht nach Bedarf erstellen möchten.
  4. Da die zugehörigen Daten verifiziert und analysiert wurden, kommt das Kibana-Paket ins Spiel, da es hilft, die relevanten Daten zu visualisieren und zu verwalten oder sie in einem gewünschten glänzenden Dashboard zum besseren Verständnis zu kombinieren.

Das folgende Bild fasst den Workflow-Prozess zusammen:

Logstash CentOS

1. Vorbemerkung

Für dieses Tutorial verwende ich CentOS Linux 7.4 in der 64bit-Version. In diesem Tutorial werden wir 3 Server verwenden: Der erste wird als Management-Server verwendet und die anderen beiden als Clients. 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 wurde. Da MySQL ein Datenbankdienst ist, der hauptsächlich für OLTP-Zwecke verwendet wird, werden wir unseren Management-Server dazu bringen, 2 Protokollierungsprozesse zu protokollieren, was der Zustandsüberprüfung des MySQL-Dienstes selbst und der langsamen Abfragetransaktion entspricht. Am Ende dieses Tutorials werden wir sehen, dass alle Informationen, die von einem MySQL-Dienst innerhalb des dedicate client aufgezeichnet wurden, gleichzeitig vom Management-Server direkt in Echtzeit gesehen, visualisiert und analysiert werden können.

2. Installationsphase

Für die Installationsphase beginnen wir mit der FileBeat-Installation auf beiden MySQL DB-Servern, die als Client fungieren. Lassen Sie uns den Prozess starten, unten 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 erledigt ist, werden wir das Standardmodul auflisten, das vom FileBeat-Paket aktiviert wird, und das mysql-Modul aktivieren, das für unsere Fälle hier benötigt wird. Nachfolgend finden Sie 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

Erledigt, nun lasst uns die Konfiguration bearbeiten, die für das MySQL-Modul benötigt wird, das wir gerade aktiviert haben. Standardmäßig, sobald wir das mysql-Modul aus dem filebeat-Paket aktiviert haben, wird es automatisch eine yaml-Datei im Verzeichnis modules.d erstellen. Wenn die Datei jedoch nicht erstellt wurde, können Sie gerne eine neue yaml-Datei am selben Ort erstellen. Nachfolgend finden Sie 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 uns entschieden, den Logging-Prozess 2 des MySQL-Dienstes zu protokollieren, der der Healthcheck der Datenbank selbst und der Slow Query Log ist.

Nun, nachdem alles erledigt ist, lassen Sie uns etwas Konfiguration in der Hauptkonfigurationsdatei für filebeat unter filebeat.yml vornehmen. Nachfolgend finden Sie den Konfigurationssatz:

 [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 eine IP-Adresse für den Logstash-Host festgelegt haben, nämlich 172.17.0.6. Diese IP-Adresse ist die Adresse für unseren zentralisierten Management-Server, der direkt zum Sammeln der Protokolldaten durchsucht. Ich habe die fest programmierte IP gesetzt, da ich keine alternativen Änderungen in der Datei /etc/hosts vorgenommen habe und für dieses Tutorial keinen DNS-Server verwendet habe. Sie können jedoch den Hostnamen des Management-Servers verwenden, wenn Sie die alternativen Änderungen vorgenommen haben.

Da alles wie geplant eingerichtet wurde, starten wir die filebeat-Dienste. Nachfolgend finden Sie 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 Start des filebeat-Dienstes ein Fehler unter dem Protokoll angezeigt wird. Dies lag daran, dass der zugewiesene Management-Server noch nicht eingerichtet war. In der ersten Phase können Sie das Fehlerprotokoll ignorieren, da es automatisch wiederhergestellt wird, sobald unser Management-Server eingerichtet und mit dem Crawlen begonnen hat.

Wenn die Konfiguration für die Kundenbasis abgeschlossen ist, können Sie die Schritte auf dem anderen MySQL-Server, der auch als Client fungiert, fortsetzen.

In Zukunft werden wir die Einrichtung des Management-Servers selbst fortsetzen.

3. Installationsphase (Zentralisierte Verwaltung Serverseite)

Nun, da wir die Einrichtung für die clientseitige Einsatzbereitschaft abgeschlossen haben, lassen Sie uns die Konfiguration starten, die für den Management-Server selbst erforderlich ist. Gemäß dem Brief gibt es 3 Kernpakete, die für den Management Server ElasticSearch, LogStash und Kibana installiert und konfiguriert werden mussten.

Für diese Phase werden wir zunächst mit der Installation und Konfiguration beginnen, die für ElasticSearch erforderlich ist, unten 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 für die elastische Suche abgeschlossen ist, setzen wir den Konfigurationsteil fort. Für die Konfigurationsseite weisen wir das Verzeichnis /data/data zu, um die gesammelten Protokolldaten zu speichern, die analysiert wurden. Das Verzeichnis selbst wird auch zum Speichern des Index verwendet, der von elasticSearch selbst für eine schnellere Suche verwendet wird. Für das Verzeichnis /data/logs wird elasticSearch selbst für seinen eigenen Protokollierungszweck verwendet. Nachfolgend finden Sie 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 

Erledigt, damit ElasticSearch funktioniert, muss Java eingerichtet sein. Im Folgenden werden die Schritte zur Installation und Konfiguration von Java auf dem Server beschrieben.

 [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 wurde elasticSearch auf dem Server installiert und konfiguriert. Aufgrund einiger Sicherheitsrichtlinien ist es jedoch verboten, elasticSearch von der Benutzer root ausführen zu lassen, daher werden wir einen zusätzlichen Benutzer anlegen, der Eigentümer des elasticSearch-Dienstes ist, und ihn ausführen. Nachfolgend finden Sie die Schritte zum Erstellen des entsprechenden Benutzers:

[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

Melden Sie sich anschließend 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] loaded module [tribe] 
[2018-06-09T13:06:27,534][INFO ][o.e.p.PluginsService ] [elk_master] no plugins loaded 

Ausgezeichnet, jetzt sind elasticSearch ohne Probleme lauffähig, Sie werden feststellen, dass zusätzliche Ports innerhalb des Servers eingerichtet werden, die sich auf den elasticSearch-Dienst beziehen. Sie können den unten aufgeführten Port ü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 

Nun kommen wir zur Einrichtung und Konfiguration von Logstash-Diensten. Nachfolgend finden Sie die für den Installationsprozess erforderlichen Schritte:

 [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!

Nachdem die Installation abgeschlossen ist, wenden Sie die erforderliche Konfiguration wie unten beschrieben 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 aus der oben gemachten Konfiguration die Eingabe eingestellt haben, die vom filebeat-Dienst auf der Client-Seite, die den Port 5044 verwendet, übernommen werden soll. Wir haben auch eine eigene Annotation für logstash festgelegt, um die Rohdaten, die von jeder Kundenseite übernommen wurden, anzupassen. Dies ist notwendig, damit es von der elasticSearch-Seite aus leichter eingesehen und analysiert werden kann.

Als nächstes müssen wir das filebeats-Modul für logstash installieren, damit logstash die Rohdaten von der Client-Seite erfassen und durchsuchen 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 ist, können wir die Dienste direkt starten. Nachfolgend finden Sie 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=>"#<Thread:0x70567cf0@/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:246 sleep>"}
[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, ist 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 aus zu sehen. Nachfolgend finden Sie 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 

Last but not least müssen wir die kibana-Dienste einrichten und konfigurieren, um einen vollständig zentralisierten Management-Server zu schaffen. Nur eine 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 unter einer kleineren Box einrichten. Im Folgenden finden Sie noch 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"

Oben erwähnt, dass ich die Kibana mit unserem ElasticSearch-Dienst innerhalb der Konfiguration verlinkt habe und einen Port zuweisen, der nach dem Start des Kibana-Dienstes verwendet wird. Da nun alles vorbereitet ist, können wir die endgültigen Dienstleistungen in Betrieb nehmen. Nachfolgend finden Sie 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:kibana@6.2.1] Status changed from uninitialized to green - Ready
log [13:26:20.073] [info][status][plugin:elasticsearch@6.2.1] Status changed from uninitialized to yellow - Waiting for Elasticsearch
log [13:26:20.193] [info][status][plugin:timelion@6.2.1] Status changed from uninitialized to green - Ready
log [13:26:20.200] [info][status][plugin:console@6.2.1] Status changed from uninitialized to green - Ready
log [13:26:20.212] [info][status][plugin:metrics@6.2.1] 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:elasticsearch@6.2.1] 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

Toll, jetzt läuft alles wie oben gezeigt mit dem Befehl netstat. Nun schauen wir uns das Dashboard von Kibana an und haben die Konfiguration vorgenommen. Sie müssen die URL http://172.17.0.6:5601/app eingeben, Sie werden sehen, dass das Dashboard wie folgt angezeigt wird.

Kibana Dashboard

Klicken Sie anschließend im Dashboard auf die Registerkarte Management und definieren Sie dann das Indexmuster, für unsere Fälle wird das Indexmuster als unser erzeugter Protokolldateiname definiert. Geben Sie die Informationen ein und klicken Sie dann auf Weiter.

Indexmuster hinzufügen

Geben Sie anschließend die Variablen ein, die als Zeitreihe verwendet werden sollen. Klicken Sie anschließend auf Indexmuster erstellen. Nachfolgend finden Sie das Beispiel:

Indexmuster erstellen

Ausgezeichnet, jetzt sind die Management-Server einsatzbereit. Lassen Sie uns fortfahren, indem wir die Benutzerfreundlichkeit testen.

4. Testphase

Bevor wir mit dem Test beginnen, lassen Sie uns die Annahme für die Erwartungen an das Endergebnis machen. Für diesen Test werden wir versuchen, eine Datenbankabfrage auszuführen, die die lange Abfragezeit des Clients, der MySQL-Server ist, vergeht. Sobald wir ausgeführt sind, sollte unser zentralisierter Management-Server automatisch das Ergebnis von langsamen Abfrageinformationen als Grafik über das Kibana Dashboard anzeigen. Nun, da alles klar ist, starten wir den Test, unten ist der Schritt:

Melden Sie sich bei einem beliebigen Client-Server an und führen Sie die Slow Query SQL wie unten beschrieben 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 der langsamen Abfragen zu produzieren, die automatisch in jedes Client-Slow-Abfrageprotokoll eingetragen werden. Nun gehen wir zum Dashboard und sehen, ob die Dateninformationen erfolgreich vom zentralisierten Server gecrawlt wurden und konvertieren sie als Visualisierungsdiagramm.

Protokolldaten wurden indiziert.

Großartig, wie oben gezeigt, gibt es eine Liste von Protokollierungsinformationen, die erfolgreich gecrawlt und durch das Kibana Dashboard betrachtet wurden. Sie können die linke Registerkarte verwenden, um zu filtern, welche Art von Spalte Sie ein- oder ausblenden möchten, unten sehen Sie das Beispiel :-:-

Kibana Dashboard Navigation

Über das Textfeld oben im Dashboard können Sie eine SQL-Abfrage eingeben, die sich auf die Anzeige bestimmter Informationen oder eines Teils der benötigten Daten bezieht.

Suche nach Protokolldaten mit SQL

Ausgezeichnet, wie über der langsamen Abfrage SQL zeigen, die wir zunächst von einem unserer Client-Server produziert haben, der automatisch unter unserem Kibana Dashboard angezeigt wird.

Das könnte Dich auch interessieren …