Comment analyser les statistiques de bases de données PostgreSQL gérées à l’aide d’Elastic Stack sous Ubuntu 18.04

L'auteur a sélectionné lesFree and Open Source Fund pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

La surveillance de base de données est le processus continu de suivi systématique de diverses mesures indiquant le fonctionnement de la base de données. En observant les données de performance, vous pouvez obtenir des informations précieuses et identifier les goulots d'étranglement possibles, ainsi que trouver des moyens supplémentaires d'améliorer les performances de la base de données. De tels systèmes implémentent souvent des alertes, qui avertissent les administrateurs en cas de problème. Les statistiques collectées peuvent être utilisées pour améliorer non seulement la configuration et le flux de travail de la base de données, mais également ceux des applications client.

L'avantage d'utiliser leElastic Stack (pile ELK) pour surveiller votre base de données gérée est son excellent support pour la recherche et la possibilité d'ingérer de nouvelles données très rapidement. Il n’excelle pas dans la mise à jour des données, mais ce compromis est acceptable pour la surveillance et la journalisation, où les données antérieures ne sont presque jamais modifiées. Elasticsearch offre des moyens puissants d'interroger les données, que vous pouvez utiliser viaKibana pour mieux comprendre comment la base de données se comporte à différentes périodes. Cela vous permettra de corréler la charge de la base de données avec des événements réels pour mieux comprendre comment la base de données est utilisée.

Dans ce didacticiel, vous allez importer des métriques de base de données, générées par lesPostgreSQL statistics collector, dans Elasticsearch viaLogstash. Cela implique de configurer Logstash pour extraire les données de la base de données en utilisant lesPostgreSQL JDBC connector pour les envoyer à Elasticsearch pour indexation immédiatement après. Les données importées peuvent ensuite être analysées et visualisées dans Kibana. Ensuite, si votre base de données est toute nouvelle, vous utiliserezpgbench, un outil d'analyse comparative PostgreSQL, pour créer des visualisations plus intéressantes. En fin de compte, vous aurez un système automatisé extrayant les statistiques PostgreSQL pour une analyse ultérieure.

Conditions préalables

[[step-1 -—- setting-up-logstash-and-the-postgresql-jdbc-driver]] == Étape 1 - Configuration de Logstash et du pilote JDBC PostgreSQL

Dans cette section, vous allez installer Logstash et télécharger lesPostgreSQL JDBC driver afin que Logstash puisse se connecter à votre base de données gérée.

Commencez par installer Logstash avec la commande suivante:

sudo apt install logstash -y

Une fois Logstash installé, activez le service pour qu'il démarre automatiquement au démarrage:

sudo systemctl enable logstash

Logstash est écrit en Java. Par conséquent, pour se connecter à PostgreSQL, la bibliothèque PostgreSQL JDBC (Java Database Connectivity) doit être disponible sur le système sur lequel elle s'exécute. En raison d'une limitation interne, Logstash chargera correctement la bibliothèque uniquement si elle se trouve dans le répertoire/usr/share/logstash/logstash-core/lib/jars, où il stocke les bibliothèques tierces qu'il utilise.

Rendez-vous sur lesdownload page de la bibliothèque JDBC et copiez le lien vers la dernière version. Ensuite, téléchargez-le à l'aide decurl en exécutant la commande suivante:

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

Au moment de la rédaction de cet article, la dernière version de la bibliothèque était42.2.6, avec Java 8 comme version d'exécution prise en charge. Assurez-vous de télécharger la dernière version; en l'associant à la version Java appropriée prise en charge par JDBC et Logstash.

Logstash stocke ses fichiers de configuration sous/etc/logstash/conf.d, et est lui-même stocké sous/usr/share/logstash/bin. Avant de créer une configuration qui extraira des statistiques de votre base de données, vous devez activer le plug-in JDBC dans Logstash en exécutant la commande suivante:

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

Vous avez installé Logstash à l'aide deapt et téléchargé la bibliothèque JDBC PostgreSQL afin que Logstash puisse l'utiliser pour se connecter à votre base de données gérée. Dans l'étape suivante, vous allez configurer Logstash pour en extraire des données statistiques.

[[step-2 -—- configuring-logstash-to-pull-statistics]] == Étape 2 - Configuration de Logstash pour extraire les statistiques

Dans cette section, vous allez configurer Logstash pour extraire des métriques de votre base de données PostgreSQL gérée.

Vous allez configurer Logstash pour surveiller trois bases de données système dans PostgreSQL, à savoir:

  • pg_stat_database: fournit des statistiques sur chaque base de données, y compris son nom, le nombre de connexions, les transactions, les annulations, les lignes renvoyées en interrogeant la base de données, les blocages, etc. Il a un champstats_reset, qui spécifie quand les statistiques ont été réinitialisées pour la dernière fois.

  • pg_stat_user_tables: fournit des statistiques sur chaque table créée par l'utilisateur, telles que le nombre de lignes insérées, supprimées et mises à jour.

  • pg_stat_user_indexes: collecte des données sur tous les index dans les tables créées par l'utilisateur, telles que le nombre de fois qu'un index particulier a été analysé.

Vous stockerez la configuration pour l'indexation des statistiques PostgreSQL dans Elasticsearch dans un fichier nommépostgresql.conf sous le répertoire/etc/logstash/conf.d, où Logstash stocke les fichiers de configuration. Lorsqu'il est démarré en tant que service, il les exécutera automatiquement en arrière-plan.

Créezpostgresql.conf à l'aide de votre éditeur préféré (par exemple, nano):

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

Ajoutez les lignes suivantes:

/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}"
        }
}

N'oubliez pas de remplacerhost par votre adresse d'hôte,port par le port auquel vous pouvez vous connecter à votre base de données,username par le nom d'utilisateur de la base de données etpassword par son mot de passe . Toutes ces valeurs peuvent être trouvées dans le Panneau de configuration de votre base de données gérée.

Dans cette configuration, vous définissez trois entrées JDBC et une sortie Elasticsearch. Les trois entrées extraient les données des bases de donnéespg_stat_database,pg_stat_user_tables etpg_stat_user_indexes, respectivement. Ils définissent tous le paramètrejdbc_driver_library sur une chaîne vide, car la bibliothèque JDBC PostgreSQL se trouve dans un dossier que Logstash charge automatiquement.

Ensuite, ils définissent lesjdbc_driver_class, dont la valeur est spécifique à la bibliothèque JDBC, et fournissent unjdbc_connection_string, qui détaille comment se connecter à la base de données. La partiejdbc: signifie qu'il s'agit d'une connexion JDBC, tandis quepostgres:// indique que la base de données cible est PostgreSQL. Viennent ensuite l'hôte et le port de la base de données, et après la barre oblique, vous indiquez également une base de données à laquelle se connecter; En effet, PostgreSQL exige que vous soyez connecté à une base de données pour pouvoir émettre des requêtes. Ici, il est défini sur la base de données par défaut qui existe toujours et ne peut pas être supprimée, bien nomméedefaultdb.

Ensuite, ils définissent un nom d'utilisateur et un mot de passe de l'utilisateur via lequel la base de données sera accessible. Le paramètrestatement contient une requête SQL qui doit renvoyer les données que vous souhaitez traiter. Dans cette configuration, il sélectionne toutes les lignes de la base de données appropriée.

Le paramètreschedule accepte une chaîne dans la syntaxecron qui définit quand Logstash doit exécuter cette entrée; l'omettre complètement fera que Logstash l'exécutera une seule fois. Spécifier* * * * *, comme vous l'avez fait ici, indiquera à Logstash de l'exécuter toutes les minutes. Vous pouvez spécifier votre propre chaîne cron si vous souhaitez collecter des données à différents intervalles.

Il n'y a qu'une sortie, qui accepte les données de trois entrées. Ils envoient tous des données à Elasticsearch, qui s'exécute localement et est accessible àhttp://localhost:9200. Le paramètreindex définit à quel index Elasticsearch il enverra les données, et sa valeur est transmise depuis le champtype de l'entrée.

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Vous avez configuré Logstash pour collecter les données de diverses tables statistiques PostgreSQL et les envoyer à Elasticsearch pour le stockage et l’indexation. Ensuite, vous exécuterez Logstash pour tester la configuration.

[[step-3 -—- testing-the-logstash-configuration]] == Étape 3 - Test de la configuration de Logstash

Dans cette section, vous testerez la configuration en exécutant Logstash pour vérifier que les données seront correctement extraites. Ensuite, vous allez exécuter cette configuration en arrière-plan en la configurant en tant que pipeline Logstash.

Logstash prend en charge l'exécution d'une configuration spécifique en transmettant son chemin de fichier au paramètre-f. Exécutez la commande suivante pour tester votre nouvelle configuration à partir de la dernière étape:

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

Cela peut prendre un certain temps avant d'afficher une sortie, ce qui ressemblera à ceci:

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 ...

Si Logstash n'affiche aucune erreur et signale qu'il a réussi à sélectionner les lignes des trois bases de données, les métriques de votre base de données seront expédiées à Elasticsearch. En cas d'erreur, revérifiez toutes les valeurs du fichier de configuration pour vous assurer que la machine sur laquelle vous exécutez Logstash peut se connecter à la base de données gérée.

Logstash continuera d'importer les données à des moments précis. Vous pouvez l'arrêter en toute sécurité en appuyant surCTRL+C.

Comme mentionné précédemment, lorsqu'il est démarré en tant que service, Logstash exécute automatiquement tous les fichiers de configuration qu'il trouve sous/etc/logstash/conf.d en arrière-plan. Exécutez la commande suivante pour le démarrer en tant que service:

sudo systemctl start logstash

Au cours de cette étape, vous avez exécuté Logstash pour vérifier s’il pouvait se connecter à votre base de données et collecter des données. Ensuite, vous visualiserez et explorerez certaines des données statistiques de Kibana.

[[step-4 -—- Explore-Imported-Data-in-Kibana]] == Étape 4 - Explorer les données importées dans Kibana

Dans cette section, vous verrez comment explorer les données statistiques décrivant les performances de votre base de données dans Kibana.

Dans votre navigateur, accédez à l'installation Kibana que vous avez configurée comme condition préalable. Vous verrez la page d'accueil par défaut.

Kibana - Default Welcome Page

Pour interagir avec les index Elasticsearch dans Kibana, vous devez créer un modèle d’index. Index patterns spécifie sur quels index Kibana doit fonctionner. Pour en créer un, appuyez sur la dernière icône (clé) de la barre latérale verticale de gauche pour ouvrir la pageManagement. Puis, dans le menu de gauche, appuyez surIndex Patterns sousKibana. Vous verrez une boîte de dialogue pour créer un motif d’index.

Kibana - Add Index Pattern

La liste répertorie les trois index pour lesquels Logstash envoie des statistiques. Tapezpg_stat_database dans la zone de saisieIndex Pattern, puis appuyez surNext step. On vous demandera de sélectionner un champ qui stocke l'heure, afin que vous puissiez ensuite affiner vos données selon une plage de temps. Dans la liste déroulante, sélectionnez@timestamp.

Kibana - Index Pattern Timestamp Field

Appuyez surCreate index pattern pour terminer la création du motif d'index. Vous pourrez maintenant l'explorer avec Kibana. Pour créer une visualisation, appuyez sur la deuxième icône de la barre latérale, puis surCreate new visualization. Sélectionnez la visualisation deLine lorsque le formulaire apparaît, puis choisissez le modèle d'index que vous venez de créer (pg_stat_database). Vous verrez une visualisation vide.

Kibana - Empty Visualisation

Sur la partie centrale de l'écran se trouve le tracé résultant - le panneau de gauche régit sa génération à partir de laquelle vous pouvez définir les données pour les axes X et Y. En haut à droite de l'écran se trouve le sélecteur de plage de dates. Sauf si vous choisissez spécifiquement une autre plage lors de la configuration des données, cette plage sera affichée sur le tracé.

Vous allez maintenant visualiser le nombre moyen de tuples de donnéesINSERT+`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 en tant queField. Cela peuplera l'axe Y du graphique avec les valeurs moyennes.

Ensuite, appuyez surX-Axis sousBuckets. Pour lesAggregation, choisissezDate Histogram. Les@timestamp doivent être automatiquement sélectionnés comme lesField. Ensuite, appuyez sur le bouton de lecture bleu en haut du panneau pour générer votre graphique. Si votre base de données est neuve et n’est pas utilisée, vous ne verrez rien pour le moment. Dans tous les cas, toutefois, vous verrez une description précise de l'utilisation de la base de données.

Kibana prend en charge de nombreuses autres formes de visualisation - vous pouvez explorer d'autres formes dans lesKibana documentation. Vous pouvez également ajouter les deux index restants, mentionnés à l'étape 2, dans Kibana pour pouvoir les visualiser également.

Dans cette étape, vous avez appris à visualiser certaines données statistiques de PostgreSQL avec Kibana.

[[step-5 -—- optional-benchmarking-using-pgbench]] == Étape 5 - (Facultatif) Benchmarking using pgbench

Si vous n’avez pas encore travaillé dans votre base de données en dehors de ce tutoriel, vous pouvez compléter cette étape pour créer des visualisations plus intéressantes en utilisant pgbench pour évaluer votre base de données. pgbench exécutera les mêmes commandes SQL à plusieurs reprises, simulant l'utilisation de la base de données dans le monde réel par un client réel.

Vous devez d’abord installer pgbench en lançant la commande suivante:

sudo apt install postgresql-contrib -y

Pgbench insérant et mettant à jour les données de test, vous devez créer une base de données distincte. Pour ce faire, rendez-vous sur l'ongletUsers & Databases dans le Panneau de configuration de votre base de données gérée et faites défiler jusqu'à la sectionDatabases. Tapezpgbench comme nom de la nouvelle base de données, puis appuyez surSave. Vous transmettez ce nom, ainsi que les informations sur l'hôte, le port et le nom d'utilisateur à pgbench.

Accessing Databases section in DO control panel

Avant d'exécuter réellementpgbench, vous devrez l'exécuter avec l'indicateur-i pour initialiser sa base de données:

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

Vous devrez remplacerhost par votre adresse d’hôte,port par le port auquel vous pouvez vous connecter à votre base de données etusername par le nom d’utilisateur de la base de données. Vous pouvez trouver toutes ces valeurs dans le Panneau de configuration de votre base de données gérée.

Notez quepgbench n'a pas d'argument de mot de passe; au lieu de cela, il vous sera demandé chaque fois que vous l'exécuterez.

La sortie ressemblera à ceci:

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 a créé quatre tables, qu'il utilisera pour l'analyse comparative, et les a remplies avec des exemples de lignes. Vous pourrez maintenant exécuter des tests de performance.

Les deux arguments les plus importants qui limitent la durée d'exécution du benchmark sont-t, qui spécifie le nombre de transactions à effectuer, et-T, qui définit pendant combien de secondes le benchmark doit s'exécuter. Ces deux options s’excluent mutuellement. À la fin de chaque benchmark, vous recevrez des statistiques, telles que le nombre de transactions par seconde (tps).

Maintenant, démarrez un test d'évaluation qui durera 30 secondes en exécutant la commande suivante:

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

La sortie ressemblera à:

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)

Dans cette sortie, vous voyez les informations générales sur l'indice de référence, telles que le nombre total de transactions exécutées. Ces repères ont pour effet que les statistiques fournies par Logstash à Elasticsearch refléteront ce nombre, ce qui rendra les visualisations dans Kibana plus intéressantes et plus proches des graphiques du monde réel. Vous pouvez exécuter la commande précédente plusieurs fois et éventuellement modifier la durée.

Lorsque vous avez terminé, dirigez-vous vers Kibana et appuyez surRefresh dans le coin supérieur droit. Vous verrez maintenant une ligne différente de celle d’avant, qui indique le nombre de «INSERT». N'hésitez pas à modifier la plage de temps des données affichées en modifiant les valeurs dans le sélecteur positionné au-dessus du bouton d'actualisation. Voici comment le graphique peut apparaître après plusieurs points de repère de durée variable:

Kibana - Visualization After Benchmarks

Vous avez utilisé pgbench pour analyser votre base de données et évaluer les graphiques résultants dans Kibana.

Conclusion

La pile Elastic est maintenant installée sur votre serveur et configurée pour extraire régulièrement des données statistiques de votre base de données PostgreSQL gérée. Vous pouvez analyser et visualiser les données à l'aide de Kibana, ou de tout autre logiciel approprié, qui vous aidera à recueillir des informations précieuses et des corrélations réelles sur les performances de votre base de données.

Pour plus d'informations sur ce que vous pouvez faire avec votre base de données gérée PostgreSQL, visitez le siteproduct docs.

Related