Analysieren verwalteter PostgreSQL-Datenbankstatistiken mithilfe des elastischen Stapels unter Ubuntu 18.04

Der Autor hat dieFree and Open Source Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Die Datenbanküberwachung ist der kontinuierliche Prozess der systematischen Verfolgung verschiedener Metriken, die die Leistung der Datenbank anzeigen. Durch Beobachtung der Leistungsdaten können Sie wertvolle Erkenntnisse gewinnen, mögliche Engpässe identifizieren und zusätzliche Möglichkeiten zur Verbesserung der Datenbankleistung finden. Solche Systeme implementieren häufig Warnungen, die Administratoren benachrichtigen, wenn Probleme auftreten. Gesammelte Statistiken können nicht nur zur Verbesserung der Konfiguration und des Workflows der Datenbank, sondern auch der Clientanwendungen verwendet werden.

Der Vorteil der Verwendung desElastic Stack (ELK-Stacks) zur Überwachung Ihrer verwalteten Datenbank liegt in der hervorragenden Unterstützung der Suche und der Möglichkeit, neue Daten sehr schnell aufzunehmen. Es zeichnet sich nicht durch die Aktualisierung der Daten aus, aber dieser Kompromiss ist für Überwachungs- und Protokollierungszwecke akzeptabel, bei denen frühere Daten so gut wie nie geändert werden. Elasticsearch bietet leistungsstarke Möglichkeiten zum Abfragen der Daten, die Sie überKibana verwenden können, um besser zu verstehen, wie die Datenbank in verschiedenen Zeiträumen funktioniert. Auf diese Weise können Sie die Datenbanklast mit realen Ereignissen korrelieren, um einen Einblick in die Verwendung der Datenbank zu erhalten.

In diesem Lernprogramm importieren Sie Datenbankmetriken, die vonPostgreSQL statistics collector generiert wurden, überLogstash in Elasticsearch. Dazu muss Logstash so konfiguriert werden, dass Daten mitPostgreSQL JDBC connector aus der Datenbank abgerufen werden, um sie unmittelbar danach zur Indizierung an Elasticsearch zu senden. Die importierten Daten können später in Kibana analysiert und visualisiert werden. Wenn Ihre Datenbank brandneu ist, verwenden Siepgbench, ein PostgreSQL-Benchmarking-Tool, um interessantere Visualisierungen zu erstellen. Am Ende haben Sie ein automatisiertes System, das die PostgreSQL-Statistiken für eine spätere Analyse abruft.

Voraussetzungen

[[Schritt 1 - Einrichten von Logstash und dem Postgresql-JDBC-Treiber]] == Schritt 1 - Einrichten von Logstash und des PostgreSQL JDBC-Treibers

In diesem Abschnitt installieren Sie Logstash und laden diePostgreSQL JDBC driver herunter, damit Logstash eine Verbindung zu Ihrer verwalteten Datenbank herstellen kann.

Beginnen Sie mit der Installation von Logstash mit dem folgenden Befehl:

sudo apt install logstash -y

Aktivieren Sie den Dienst nach der Installation von Logstash für den automatischen Start beim Systemstart:

sudo systemctl enable logstash

Logstash ist in Java geschrieben. Damit eine Verbindung zu PostgreSQL hergestellt werden kann, muss die PostgreSQL-JDBC-Bibliothek (Java Database Connectivity) auf dem System verfügbar sein, auf dem es ausgeführt wird. Aufgrund einer internen Einschränkung lädt Logstash die Bibliothek nur dann ordnungsgemäß, wenn sie sich im Verzeichnis/usr/share/logstash/logstash-core/lib/jarsbefindet, in dem die von ihm verwendeten Bibliotheken von Drittanbietern gespeichert werden.

Gehen Sie zudownload page der JDBC-Bibliothek und kopieren Sie den Link in die neueste Version. Laden Sie es dann mitcurl herunter, indem Sie den folgenden Befehl ausführen:

sudo curl https://jdbc.postgresql.org/download/postgresql-42.2.6.jar -o /usr/share/logstash/logstash-core/lib/jars/postgresql-jdbc.jar

Zum Zeitpunkt des Schreibens war die neueste Version der Bibliothek42.2.6, wobei Java 8 als unterstützte Laufzeitversion verwendet wurde. Stellen Sie sicher, dass Sie die neueste Version herunterladen. Pairing mit der richtigen Java-Version, die sowohl JDBC als auch Logstash unterstützt.

Logstash speichert seine Konfigurationsdateien unter/etc/logstash/conf.d und selbst unter/usr/share/logstash/bin. Bevor Sie eine Konfiguration erstellen, mit der Statistiken aus Ihrer Datenbank abgerufen werden, müssen Sie das JDBC-Plug-In in Logstash aktivieren, indem Sie den folgenden Befehl ausführen:

sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-jdbc

Sie haben Logstash mitapt installiert und die PostgreSQL-JDBC-Bibliothek heruntergeladen, damit Logstash damit eine Verbindung zu Ihrer verwalteten Datenbank herstellen kann. Im nächsten Schritt konfigurieren Sie Logstash so, dass statistische Daten daraus abgerufen werden.

[[Schritt-2 - Konfigurieren von Logstash-to-Pull-Statistiken]] == Schritt 2 - Konfigurieren von Logstash zum Abrufen von Statistiken

In diesem Abschnitt konfigurieren Sie Logstash zum Abrufen von Metriken aus Ihrer verwalteten PostgreSQL-Datenbank.

Sie konfigurieren Logstash so, dass drei Systemdatenbanken in PostgreSQL überwacht werden:

  • pg_stat_database: Stellt Statistiken zu jeder Datenbank bereit, einschließlich Name, Anzahl der Verbindungen, Transaktionen, Rollbacks, Zeilen, die durch Abfragen der Datenbank zurückgegeben wurden, Deadlocks usw. Es hat einstats_reset-Feld, das angibt, wann die Statistik zuletzt zurückgesetzt wurde.

  • pg_stat_user_tables: Stellt Statistiken zu jeder vom Benutzer erstellten Tabelle bereit, z. B. die Anzahl der eingefügten, gelöschten und aktualisierten Zeilen.

  • pg_stat_user_indexes: Sammelt Daten zu allen Indizes in benutzerdefinierten Tabellen, z. B. wie oft ein bestimmter Index gescannt wurde.

Sie speichern die Konfiguration für die Indizierung von PostgreSQL-Statistiken in Elasticsearch in einer Datei mit dem Namenpostgresql.conf im Verzeichnis/etc/logstash/conf.d, in dem Logstash Konfigurationsdateien speichert. Wenn es als Dienst gestartet wird, werden sie automatisch im Hintergrund ausgeführt.

Erstellen Siepostgresql.conf mit Ihrem bevorzugten Editor (z. B. Nano):

sudo nano /etc/logstash/conf.d/postgresql.conf

Fügen Sie die folgenden Zeilen hinzu:

/etc/logstash/conf.d/postgresql.conf

input {
        # pg_stat_database
        jdbc {
                jdbc_driver_library => ""
                jdbc_driver_class => "org.postgresql.Driver"
                jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb"
                jdbc_user => "username"
                jdbc_password => "password"
                statement => "SELECT * FROM pg_stat_database"
                schedule => "* * * * *"
                type => "pg_stat_database"
        }

        # pg_stat_user_tables
        jdbc {
                jdbc_driver_library => ""
                jdbc_driver_class => "org.postgresql.Driver"
                jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb"
                jdbc_user => "username"
                jdbc_password => "password"
                statement => "SELECT * FROM pg_stat_user_tables"
                schedule => "* * * * *"
                type => "pg_stat_user_tables"
        }

        # pg_stat_user_indexes
        jdbc {
                jdbc_driver_library => ""
                jdbc_driver_class => "org.postgresql.Driver"
                jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb"
                jdbc_user => "username"
                jdbc_password => "password"
                statement => "SELECT * FROM pg_stat_user_indexes"
                schedule => "* * * * *"
                type => "pg_stat_user_indexes"
        }
}

output {
        elasticsearch {
                hosts => "http://localhost:9200"
                index => "%{type}"
        }
}

Denken Sie daran,host durch Ihre Hostadresse,port durch den Port zu ersetzen, zu dem Sie eine Verbindung zu Ihrer Datenbank herstellen können,username durch den Benutzernamen des Datenbankbenutzers undpassword durch das Kennwort . Alle diese Werte finden Sie in der Systemsteuerung Ihrer verwalteten Datenbank.

In dieser Konfiguration definieren Sie drei JDBC-Eingaben und eine Elasticsearch-Ausgabe. Die drei Eingaben ziehen Daten aus den Datenbankenpg_stat_database,pg_stat_user_tables undpg_stat_user_indexes. Sie alle setzen den Parameterjdbc_driver_libraryauf eine leere Zeichenfolge, da sich die PostgreSQL-JDBC-Bibliothek in einem Ordner befindet, den Logstash automatisch lädt.

Anschließend legen siejdbc_driver_class fest, deren Wert für die JDBC-Bibliothek spezifisch ist, und gebenjdbc_connection_string an, in denen die Verbindung zur Datenbank beschrieben wird. Der Teiljdbc: zeigt an, dass es sich um eine JDBC-Verbindung handelt, währendpostgres:// angibt, dass die Zieldatenbank PostgreSQL ist. Als nächstes kommen der Host und der Port der Datenbank, und nach dem Schrägstrich geben Sie auch eine Datenbank an, zu der eine Verbindung hergestellt werden soll. Dies liegt daran, dass PostgreSQL erfordert, dass Sie mit einer Datenbank verbunden sind, um Abfragen ausführen zu können. Hier wird die Standarddatenbank festgelegt, die immer vorhanden ist und nicht gelöscht werden kann. Sie trägt den treffenden Namendefaultdb.

Als Nächstes legen sie einen Benutzernamen und ein Kennwort des Benutzers fest, über den auf die Datenbank zugegriffen wird. Der Parameterstatement enthält eine SQL-Abfrage, die die Daten zurückgeben soll, die Sie verarbeiten möchten. In dieser Konfiguration werden alle Zeilen aus der entsprechenden Datenbank ausgewählt.

Der Parameterschedule akzeptiert eine Zeichenfolge in der Syntax voncron, die definiert, wann Logstash diese Eingabe ausführen soll. Wenn Sie es vollständig weglassen, wird es von Logstash nur einmal ausgeführt. Wenn Sie* * * * * angeben, wie Sie dies hier getan haben, wird Logstash angewiesen, es jede Minute auszuführen. Sie können Ihre eigene Cron-Zeichenfolge angeben, wenn Sie Daten in unterschiedlichen Intervallen erfassen möchten.

Es gibt nur einen Ausgang, der Daten von drei Eingängen akzeptiert. Sie alle senden Daten an Elasticsearch, das lokal ausgeführt wird und unterhttp://localhost:9200 erreichbar ist. Der Parameterindex definiert, an welchen Elasticsearch-Index die Daten gesendet werden, und sein Wert wird aus dem Feldtype der Eingabe übergeben.

Wenn Sie mit der Bearbeitung fertig sind, speichern und schließen Sie die Datei.

Sie haben Logstash so konfiguriert, dass Daten aus verschiedenen statistischen PostgreSQL-Tabellen erfasst und zur Speicherung und Indizierung an Elasticsearch gesendet werden. Als Nächstes führen Sie Logstash aus, um die Konfiguration zu testen.

[[Schritt-3 - Testen der Logstash-Konfiguration]] == Schritt 3 - Testen der Logstash-Konfiguration

In diesem Abschnitt testen Sie die Konfiguration, indem Sie Logstash ausführen, um sicherzustellen, dass die Daten ordnungsgemäß abgerufen werden. Anschließend führen Sie diese Konfiguration im Hintergrund aus, indem Sie sie als Logstash-Pipeline konfigurieren.

Logstash unterstützt das Ausführen einer bestimmten Konfiguration, indem der Dateipfad an den Parameter-fübergeben wird. Führen Sie den folgenden Befehl aus, um Ihre neue Konfiguration vom letzten Schritt an zu testen:

sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/postgresql.conf

Es kann einige Zeit dauern, bis eine Ausgabe angezeigt wird, die ungefähr so ​​aussieht:

OutputThread.exclusive is deprecated, use Thread::Mutex
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
[WARN ] 2019-08-02 18:29:15.123 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified
[INFO ] 2019-08-02 18:29:15.154 [LogStash::Runner] runner - Starting Logstash {"logstash.version"=>"7.3.0"}
[INFO ] 2019-08-02 18:29:18.209 [Converge PipelineAction::Create
] Reflections - Reflections took 77 ms to scan 1 urls, producing 19 keys and 39 values [INFO ] 2019-08-02 18:29:20.195 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:20.667 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.221 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.230 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.274 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.337 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:21.369 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.386 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.386 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.409 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.430 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:21.444 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.465 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.466 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.468 [Ruby-0-Thread-7: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.538 [Ruby-0-Thread-5: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.545 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.589 [Ruby-0-Thread-9: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.696 [Ruby-0-Thread-5: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [INFO ] 2019-08-02 18:29:21.769 [Ruby-0-Thread-7: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [INFO ] 2019-08-02 18:29:21.771 [Ruby-0-Thread-9: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [WARN ] 2019-08-02 18:29:21.871 [[main]-pipeline-manager] LazyDelegatingGauge - A gauge metric of an unknown type (org.jruby.specialized.RubyArrayOneObject) has been create for key: cluster_uuids. This may result in invalid serialization. It is recommended to log an issue to the responsible developer/development team. [INFO ] 2019-08-02 18:29:21.878 [[main]-pipeline-manager] javapipeline - Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>125, :thread=>"#"} [INFO ] 2019-08-02 18:29:22.351 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"} [INFO ] 2019-08-02 18:29:22.721 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} [INFO ] 2019-08-02 18:29:23.798 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600} /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated [INFO ] 2019-08-02 18:30:02.333 [Ruby-0-Thread-22: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:284] jdbc - (0.042932s) SELECT * FROM pg_stat_user_indexes [INFO ] 2019-08-02 18:30:02.340 [Ruby-0-Thread-23: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:331] jdbc - (0.043178s) SELECT * FROM pg_stat_user_tables [INFO ] 2019-08-02 18:30:02.340 [Ruby-0-Thread-24: :1] jdbc - (0.036469s) SELECT * FROM pg_stat_database ...

Wenn Logstash keine Fehler anzeigt und protokolliert, dass es erfolgreich Zeilen aus den drei Datenbanken ausgewählt hat, werden Ihre Datenbankmetriken an Elasticsearch gesendet. Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie alle Werte in der Konfigurationsdatei, um sicherzustellen, dass der Computer, auf dem Sie Logstash ausführen, eine Verbindung zur verwalteten Datenbank herstellen kann.

Logstash setzt den Import der Daten zu festgelegten Zeiten fort. Sie können es sicher stoppen, indem SieCTRL+C drücken.

Wie bereits erwähnt, führt Logstash beim Start als Dienst automatisch alle Konfigurationsdateien aus, die unter/etc/logstash/conf.d im Hintergrund gefunden werden. Führen Sie den folgenden Befehl aus, um es als Dienst zu starten:

sudo systemctl start logstash

In diesem Schritt haben Sie Logstash ausgeführt, um zu überprüfen, ob eine Verbindung zu Ihrer Datenbank hergestellt und Daten erfasst werden können. Als Nächstes visualisieren und untersuchen Sie einige der statistischen Daten in Kibana.

[[Schritt 4 - Erkundung importierter Daten in Kibana]] == Schritt 4 - Erkundung importierter Daten in Kibana

In diesem Abschnitt erfahren Sie, wie Sie die statistischen Daten untersuchen können, die die Leistung Ihrer Datenbank in Kibana beschreiben.

Navigieren Sie in Ihrem Browser zu der Kibana-Installation, die Sie als Voraussetzung eingerichtet haben. Sie sehen die Standard-Begrüßungsseite.

Kibana - Default Welcome Page

Um mit Elasticsearch-Indizes in Kibana zu interagieren, müssen Sie ein Indexmuster erstellen. Index patterns geben an, für welche Indizes Kibana arbeiten soll. Um eine zu erstellen, drücken Sie auf das letzte Symbol (Schraubenschlüssel) in der linken vertikalen Seitenleiste, um die SeiteManagementzu öffnen. Drücken Sie dann im linken Menü aufIndex Patterns unterKibana. Es wird ein Dialogfeld zum Erstellen eines Indexmusters angezeigt.

Kibana - Add Index Pattern

Aufgeführt sind die drei Indizes, in denen Logstash Statistiken gesendet hat. Geben Siepg_stat_database in das EingabefeldIndex Pattern ein und drücken Sie dannNext step. Sie werden aufgefordert, ein Feld auszuwählen, in dem die Zeit gespeichert wird, damit Sie Ihre Daten später nach Zeitbereichen eingrenzen können. Wählen Sie in der Dropdown-Liste@timestamp aus.

Kibana - Index Pattern Timestamp Field

Drücken Sie aufCreate index pattern, um die Erstellung des Indexmusters abzuschließen. Sie können es jetzt mit Kibana erkunden. Um eine Visualisierung zu erstellen, drücken Sie auf das zweite Symbol in der Seitenleiste und dann aufCreate new visualization. Wählen Sie die Visualisierung vonLineaus, wenn das Formular angezeigt wird, und wählen Sie dann das gerade erstellte Indexmuster aus (pg_stat_database). Sie sehen eine leere Visualisierung.

Kibana - Empty Visualisation

In der Mitte des Bildschirms befindet sich das resultierende Diagramm. Im linken Bereich wird die Generierung festgelegt, aus der Sie die Daten für die X- und Y-Achse festlegen können. Oben rechts auf dem Bildschirm befindet sich die Datumsauswahl. Sofern Sie bei der Konfiguration der Daten nicht ausdrücklich einen anderen Bereich auswählen, wird dieser Bereich im Diagramm angezeigt.

Sie visualisieren nun die durchschnittliche Anzahl der DatentupelINSERT+`ed on minutes in the given interval. Press on *Y-Axis* under *Metrics* in the panel on the left to unfold it. Select _Average_ as the *Aggregation* and select `+tup_inserted alsField. Dies füllt die Y-Achse des Diagramms mit den Durchschnittswerten.

Drücken Sie anschließendX-Axis unterBuckets. Wählen Sie fürAggregationDate Histogram. @timestamp sollte automatisch alsField ausgewählt werden. Drücken Sie dann auf die blaue Wiedergabetaste oben im Bedienfeld, um Ihr Diagramm zu erstellen. Wenn Ihre Datenbank brandneu und nicht verwendet ist, sehen Sie noch nichts. In allen Fällen wird jedoch eine genaue Darstellung der Datenbanknutzung angezeigt.

Kibana unterstützt viele andere Visualisierungsformulare. Sie können andere Formulare inKibana documentation untersuchen. Sie können auch die beiden verbleibenden Indizes, die in Schritt 2 erwähnt wurden, zu Kibana hinzufügen, um sie auch zu visualisieren.

In diesem Schritt haben Sie gelernt, wie Sie einige der statistischen PostgreSQL-Daten mithilfe von Kibana visualisieren.

[[Schritt 5 - optionales Benchmarking mit pgbench]] == Schritt 5 - (optionales) Benchmarking mit pgbench

Wenn Sie außerhalb dieses Lernprogramms noch nicht in Ihrer Datenbank gearbeitet haben, können Sie diesen Schritt ausführen, um interessantere Visualisierungen zu erstellen, indem Sie pgbench zum Benchmarking Ihrer Datenbank verwenden. pgbench führt immer wieder dieselben SQL-Befehle aus und simuliert so die reale Datenbanknutzung durch einen tatsächlichen Client.

Sie müssen pgbench zuerst installieren, indem Sie den folgenden Befehl ausführen:

sudo apt install postgresql-contrib -y

Da pgbench Testdaten einfügt und aktualisiert, müssen Sie eine separate Datenbank dafür erstellen. Gehen Sie dazu in der Systemsteuerung Ihrer verwalteten Datenbank zur RegisterkarteUsers & Databases und scrollen Sie zum AbschnittDatabases. Geben Siepgbench als Namen der neuen Datenbank ein und drücken Sie dannSave. Sie übergeben diesen Namen sowie die Host-, Port- und Benutzernameninformationen an pgbench.

Accessing Databases section in DO control panel

Bevor Siepgbench ausführen können, müssen Sie es mit dem Flag-iausführen, um die Datenbank zu initialisieren:

pgbench -h host -p port -U username -i pgbench

Sie müssenhost durch Ihre Hostadresse,port durch den Port ersetzen, zu dem Sie eine Verbindung zu Ihrer Datenbank herstellen können, undusername durch den Benutzernamen des Datenbankbenutzers. Sie finden all diese Werte in der Systemsteuerung Ihrer verwalteten Datenbank.

Beachten Sie, dasspgbench kein Kennwortargument hat. Stattdessen werden Sie jedes Mal danach gefragt, wenn Sie es ausführen.

Die Ausgabe sieht folgendermaßen aus:

OutputNOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.16 s, remaining 0.00 s)
vacuum...
set primary keys...
done.

pgbench hat vier Tabellen erstellt, die für das Benchmarking verwendet werden, und sie mit einigen Beispielzeilen gefüllt. Sie können jetzt Benchmarks ausführen.

Die beiden wichtigsten Argumente, die die Laufzeit des Benchmarks begrenzen, sind-t, das die Anzahl der auszuführenden Transaktionen angibt, und-T, die festlegen, wie viele Sekunden der Benchmark ausgeführt werden soll. Diese beiden Optionen schließen sich gegenseitig aus. Am Ende jeder Benchmark erhalten Sie Statistiken, z. B. die Anzahl der Transaktionen pro Sekunde (tps).

Starten Sie nun einen Benchmark, der 30 Sekunden lang gültig ist, indem Sie den folgenden Befehl ausführen:

pgbench -h host -p port -U username pgbench -T 30

Die Ausgabe sieht folgendermaßen aus:

Outputstarting vacuum...end.
transaction type: 
scaling factor: 1
query mode: simple
number of clients: 1
number of threads: 1
duration: 30 s
number of transactions actually processed: 7602
latency average = 3.947 ms
tps = 253.382298 (including connections establishing)
tps = 253.535257 (excluding connections establishing)

In dieser Ausgabe sehen Sie allgemeine Informationen zum Benchmark, z. B. die Gesamtzahl der ausgeführten Transaktionen. Der Effekt dieser Benchmarks ist, dass die Statistik, die Logstash an Elasticsearch sendet, diese Zahl widerspiegelt, was die Visualisierung in Kibana interessanter und realistischer macht. Sie können den vorhergehenden Befehl noch einige Male ausführen und möglicherweise die Dauer ändern.

Wenn Sie fertig sind, gehen Sie zu Kibana und drücken SieRefresh in der oberen rechten Ecke. Sie sehen jetzt eine andere Zeile als zuvor, in der die Anzahl der "EINFÜGEN" angezeigt wird. Sie können den Zeitbereich der angezeigten Daten ändern, indem Sie die Werte in der Auswahl über der Schaltfläche "Aktualisieren" ändern. So kann das Diagramm nach mehreren Benchmarks unterschiedlicher Dauer aussehen:

Kibana - Visualization After Benchmarks

Sie haben pgbench zum Benchmarking Ihrer Datenbank verwendet und die resultierenden Diagramme in Kibana ausgewertet.

Fazit

Sie haben jetzt den Elastic-Stack auf Ihrem Server installiert und so konfiguriert, dass regelmäßig Statistikdaten aus Ihrer verwalteten PostgreSQL-Datenbank abgerufen werden. Sie können die Daten mit Kibana oder einer anderen geeigneten Software analysieren und visualisieren, um wertvolle Erkenntnisse und reale Zusammenhänge über die Leistung Ihrer Datenbank zu gewinnen.

Weitere Informationen darüber, was Sie mit Ihrer verwalteten PostgreSQL-Datenbank tun können, finden Sie unterproduct docs.