Acest tutorial explică modul de configurare a unui server centralizat de gestionare a fișierelor de log-uri utilizând stackul ELK pe CentOS 7. Pentru cine nu știe deja, ELK este combinația a 3 servicii: ElasticSearch, Logstash și Kibana. Pentru a construi un server complet centralizat de gestionare al log-urilor folosind acest concept, va trebui să avem fiecare dintre aceste pachete, deoarece acestea servesc unor scopuri diferite și totodată sunt legate unele de altele. Practic funcționează împreună, astfel:
– Pentru fiecare client pe care doriți să-l gestionați, acesta va produce propriul jurnal al serviciilor conexe.
– Pentru serverul care va fi folosit pentru a gestiona toate informațiile de logare de la fiecare client, acesta va folosi pachetul LogStash pentru a colecta și transforma datele la o valoare relativă. Prin definiție, este o conductă de procesare a datelor pe o sursă deschisă, care încorporează simultan date dintr-o multitudine de surse, transformându-le
– Odată ce datele sunt colectate și transformate, serverul de management va utiliza ElasticSearch pentru a ajuta și analiza datele la o valoare relevantă. Puteți utiliza limba de interogare generală dacă doriți să generați un raport corespunzător, după cum este necesar
– Dat fiind că datele aferente au fost verificate și analizate, acesta este locul în care pachetul Kibana este prezentat, deoarece vă poate ajuta să vizualizați și să gestionați datele relevante într-o vizualizare adecvată sau să le combinați în tabloul de bord pentru o înțelegere mai ușoară.
Imaginea de mai jos rezumă procesul de lucru:
1. Notă preliminară
Pentru acest tutorial, vom folosi Linux CentOS 7.4 în versiunea pe 64 de biți. În acest tutorial vom folosi 3 servere: Primul va fi folosit ca server de administrare, iar celelalte 2 vor fi folosite ca și clienți. Pentru acest exercițiu, vom folosi serverul de management pentru a monitoriza un serviciu MySQL existent, care a fost deja setat, configurat și rulat de fiecare client. Deoarece MySQL este un serviciu de baze de date care este utilizat în principal pentru scopul OLTP, vom face ca serverul nostru de management să înregistreze două procese de logare, care este verificarea stării de funcționare a serviciului MySQL în sine și tranzacția lentă a interogării. Până la sfârșitul acestui tutorial, vom vedea că orice informație înregistrată din orice serviciu MySQL în interiorul clientului dedicat poate fi văzută, vizualizată și analizată simultan de la serverul de management direct în timp real.
2. Faza de instalare
Pentru faza de instalare, vom începe cu instalarea FileBeat pe serverul MySQL DB care acționează ca și client. Să începem procesul, mai jos avem pașii:
[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!
Odată terminat acest proces, vom afișa modulul implicit care permite activarea pachetului FileBeat și va deschide modulul mysql necesar în cazul nostru. Mai jos sunt pașii:
[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
Acum să edităm configurația necesară pentru modulul mysql pe care l-am activat. În mod implicit, odată ce am activat modulul mysql din pachetul de fișiere, acesta va crea automat un fișier yaml în directorul modules.d. Cu toate acestea, dacă fișierul nu a fost creat, nu ezitați să creați un nou fișier yaml în aceeași locație. Mai jos sunt pașii:
[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*”]
Așa cum am arătat mai sus, am decis să centralizăm 2 procese de logare din serviciul MySQL, care este controlul bazei de date în sine și jurnalul de interogări.
Acum, odată ce totul este gata, haideți să facem o configurație în interiorul fișierului principal de configurare pentru filebeat în fișierul filebeat.yml. Mai jos este setul de configurare:
[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”]
Observați cu privire la cele de mai sus că am setat o adresă IP pentru gazda logstash care este 172.17.0.6 .Acest IP este adresa pentru serverul nostru de management centralizat care se va accesa prin intermediul crawler-elor direct pentru a colecta datele de înregistrare. Am setat hardcoded IP deoarece nu am făcut alte modificări în fișierul / etc / hosts și nu am folosit nici un server DNS pentru acest tutorial. Cu toate acestea, nu ezitați să utilizați numele de gazdă al serverului de management dacă ați făcut modificările alternative.
Deoarece toate au fost configurate, putem să pornim serviciile de filebeat. Mai jos sunt pașii:
[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
Observați că odată ce am pornit serviciul filebeat, există o eroare afișată în jurnal. Acest lucru s-a datorat faptului că serverul de gestionare care a fost atribuit nu a fost încă setat. Pentru faza inițială, puteți ignora jurnalul de erori deoarece acesta va fi recuperat automat odată ce serverul nostru de management a fost configurat și a început să se acceseze prin intermediul crawler-elor.
Pe măsură ce se realizează configurarea bazei de client, puteți continua să replicați pașii pe celălalt server MySQL, care acționează ca și client.
Vom continua cu configurarea serverului de management în sine.
3. Faza de instalare (Managementul centralizat al serverului)
Acum, pe măsură ce am făcut pregătirea pe partea de clienți, să începem configurarea necesară pentru serverul de management în sine. Pe scurt, există 3 pachete de bază care trebuiesc instalate și configurate pentru serverul de management, acestea sunt ElasticSearch, LogStash și Kibana.
Pentru această etapă, vom începe instalarea și configurarea necesară pentru ElasticSearch în primul rând, mai jos sunt pașii:
[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
Pe măsură ce se realizează instalarea pentru ElasticSearch, vom continua partea de configurare. Pentru partea de configurare, vom asocia directorul /data/data pentru a stoca datele care au fost analizate. Directorul în sine, de asemenea, va fi folosit pentru a stoca un index care va fi folosit de către elasticSearch în sine pentru o interogare mai rapidă. Pentru că directorul /data/logs va fi folosit de elasticSearch în sine pentru propriul scop de exploatare. Mai jos sunt pașii:
[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
Pentru ca ElasticSearch să funcționeze, este nevoie de configurarea Java. Mai jos sunt pașii privind instalarea și configurarea Java pe 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)
Acum elasticSearch a fost instalat și configurat în server. Cu toate acestea, datorită unor politici de securitate, elasticSearch este interzis de a fi rulat de către utilizatorul root, prin urmare, vom crea un utilizator suplimentar pentru a fi proprietar pentru a putea rula serviciul elasticSearch. Mai jos sunt pașii pentru crearea unui utilizator dedicat pentru acesta:
[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
După ce ați terminat, conectați-vă cu acest utilizator și puteți rula serviciile elasticSearch.
[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
Excelent, acum elasticSearch este funcțional, veți observa un port suplimentar pe server care este legat de serviciul elasticSearch. Puteți verifica portul rulând comanda de mai jos:
[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
Acum, hai să ne mutăm la setarea și configurarea serviciilor logstash. Mai jos sunt pașii necesari pentru procesul de instalare:
[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!
După ce ați terminat instalarea, aplicați configurația necesară după cum urmează:
[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}”
}
}
Rețineți că din configurația de mai sus am setat că intrarea trebuie luată din serviciul filebeat din partea clientului care utilizează portul 5044. Am stabilit și o adnotare adecvată pentru logstash pentru a alinia datele brute care au fost preluate de la fiecare parte de client. Acest lucru este necesar pentru a fi mai ușor de văzut și de analizat de elasticsearch.
Apoi, trebuie să instalați modulul filebeats pentru logstash astfel încât logstash să capteze și să acceseze cu crawlere datele brute din partea clientului.
[root@elk_master opt]# /usr/share/logstash/bin/logstash-plugin install logstash-input-beats
Validating logstash-input-beats
Installing logstash-input-beats
Installation successful
Deoarece instalarea și configurarea necesare pentru logstash sunt făcute, putem porni serviciile. Mai jos sunt pașii:
[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]
După cum puteți vedea, serviciul logstash a pornit cu succes și începe să colecteze datele din fiecare client. Ca alternativă, puteți utiliza comanda curl pentru a vedea starea și actualizările de la partea logstash. Mai jos sunt exemplele:
[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
Nu în ultimul rând, va trebui să setam și să configurăm serviciile kibana pentru a crea un server complet de management centralizat. Notă, kibana este folosit pentru a ușura procesul de colectare și analiză a datelor prin vizualizare, nu este un pachet important ca elasticSearch sau logstash dacă instalați serverul sub o cutie mai mică. Cu toate acestea, pentru a continua, mai jos sunt pașii privind instalarea și configurarea:
[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”
Rețineti mai sus că am legat kibana cu serviciul nostru ElasticSearch în interiorul configurației și am alocat un port care va fi folosit de serviciul Kibana odată pornit. Acum, deoarece totul este deja stabilit, putem începe serviciile finale. Mai jos sunt pașii:
[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
Excelent, acum totul se execută și funcționează ca mai sus, folosind comanda netstat. Acum, să vedem Tabloul de bord din Kibana și să facem configurația. Trebuie să accesam url-ul http://172.17.0.6:5601/app, veți vedea că tabloul de bord va fi afișat ca mai jos.
În continuare, pe tabloul de bord, dați clic pe fila Management și definiți modelul indexului; in cazul nostru, modelul indexului este definit ca numele de fișier de înregistrare generat. Introduceți informațiile apoi faceți clic pe next.
Apoi, introduceți variabilele care vor fi utilizate ca serii de timp. După ce ați terminat, faceți clic pe Creare model de index. Mai jos este exemplul:
Excelent, acum serverul de administrare este gata de utilizare. Să procedăm prin testarea utilizabilității.
4. Faza de testare
Înainte de a începe testul, să presupunem rezultatul final. Pentru acest test, vom încerca să executăm o interogare a bazei de date, care va trece de timpul lung de interogare alocat de la client, care este serverul MySQL. Odată ce executăm, serverul nostru de management centralizat ar trebui să afișeze automat rezultatul informațiilor din interogare ca si grafic via tabloul de bord Kibana. Acum ca totul este clar, să începem testul, mai jos sunt pasii:
Conectați-vă la oricare dintre serverele client și executați interogarea lentă SQL ca mai jos:
[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
Așa cum am arătat mai sus, am reușit să producem o interogare lentă care a înregistrat automat fiecare jurnal de interogări lent al clientului. Acum, hai să mergem la tabloul de bord și să vedem dacă informațiile despre date au fost accesate cu succes de serverul centralizat și acesta le-a convertit ca grafic de vizualizare.
Excelent, după cum am arătat mai sus, există o listă a informațiilor despre jurnalizare, care au fost accesate cu crawlere și au fost vizualizate prin tabloul de bord kibana. Puteți utiliza partea din stânga pentru a filtra ce tip de coloană doriți să afișați sau să ascundeți, mai jos este exemplul:
Folosind câmpul de text din partea de sus a tabloului de bord, puteți introduce o interogare SQL referitoare la vizualizarea anumitor informații sau a unei părți a datelor necesare.
Excelent, după cum arată mai sus interogarea SQL pe care rulat-o inițial de la 1 din serverele noastre client este afișat automat, asa cum era de asteptat, în tabloul de bord Kibana.
Comentarii