taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit c3afc6121416c31b23f7b1cd8f913c9ad13a43c7
parent e71b05ea303d8024e2d52f1e5662dbace73abca0
Author: Javier Sepulveda <javier.sepulveda@uv.es>
Date:   Fri,  5 Jul 2024 14:10:59 +0200

Prometheus postgres-exporter tutorial

Diffstat:
Msystem-administration/index.rst | 1+
Msystem-administration/nginx-prometheus-exporter.rst | 2+-
Msystem-administration/prometheus-node-exporter.rst | 2+-
Asystem-administration/prometheus-postgres-exporter.rst | 176+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 179 insertions(+), 2 deletions(-)

diff --git a/system-administration/index.rst b/system-administration/index.rst @@ -28,3 +28,4 @@ System Administration tutorials prometheus nginx-prometheus-exporter prometheus-node-exporter + prometheus-postgres-exporter diff --git a/system-administration/nginx-prometheus-exporter.rst b/system-administration/nginx-prometheus-exporter.rst @@ -143,7 +143,7 @@ Restart everything Create a new dashboard in Grafana ================================= -You can now go to our `grafana.taler.net dasboards <a href="https://grafana.taler.net/dashboards">`_ and easily +You can now go to the `Grafana dashboards <a href="https://grafana.taler.net/dashboards">`_ and easily add the new dashboard for the Nginx Exporter program. Please make sure you choose the right Prometheus data source. * Dashboard Id: 11199 diff --git a/system-administration/prometheus-node-exporter.rst b/system-administration/prometheus-node-exporter.rst @@ -102,7 +102,7 @@ http://ip:9100/ Grafana control panel (GUI) =========================== -You can now to go `our Grafana dashboards <a href="https://grafana.taler.net/dashboards">`_ and easily +You can now go to the `Grafana dashboards <a href="https://grafana.taler.net/dashboards">`_ and easily add a new dashboard for the Node Exporter program. Please make sure you choose the right Prometheus data source. * Dashboard Id: 1860 diff --git a/system-administration/prometheus-postgres-exporter.rst b/system-administration/prometheus-postgres-exporter.rst @@ -0,0 +1,176 @@ +.. + This file is part of GNU TALER. + Copyright (C) 2014-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 2.1, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> + + @author Javier Sepulveda + + +Prometheus postgres-exporter +############################ + +.. contents:: Table of Contents + :depth: 1 + :local: + + +Create a system user +==================== + +.. code-block:: console + + # useradd -s /sbin/nologin --system postgres_exporter + # groupadd --system postgres_exporter + +Download Prometheus node-exporter +================================= + +* Download +* Extract +* Copy to /usr/local/bin +* Set ownership and permissions + +.. code-block:: console + + # cd /tmp + # wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz + # tar -xzvf https://github.com/prometheus-community/postgres_exporter/releases/download/v0.15.0/postgres_exporter-0.15.0.linux-amd64.tar.gz + # cd postgres_exporter-0.12.0.linux-amd64 + # cp postgres_exporter /usr/local/bin + # chown postgres_exporter:postgres_exporter /usr/local/bin/postgres_exporter + +Create environment variable +=========================== + +.. code-block:: console + + # mkdir -p /opt/postgres_exporter + # cd /opt/postgres_exporter + # touch postgres_exporter.env + # Paste next content: + DATA_SOURCE_NAME="postgresql://postgres_exporter:PASSWORD@localhost:5432/?sslmode=disable" + + +Create postgres-exporter.sql file +================================= + +.. code-block:: console + + # cd /opt/postgres_exporter + # touch postgres-exporter.sql + +.. code-block:: + + -- To use IF statements, hence to be able to check if the user exists before + -- attempting creation, we need to switch to procedural SQL (PL/pgSQL) + -- instead of standard SQL. + -- More: https://www.postgresql.org/docs/9.3/plpgsql-overview.html + -- To preserve compatibility with <9.0, DO blocks are not used; instead, + -- a function is created and dropped. + CREATE OR REPLACE FUNCTION __tmp_create_user() returns void as $$ + BEGIN + IF NOT EXISTS ( + SELECT -- SELECT list can stay empty for this + FROM pg_catalog.pg_user + WHERE usename = 'postgres_exporter') THEN + CREATE USER postgres_exporter; + END IF; + END; + $$ language plpgsql; + + SELECT __tmp_create_user(); + DROP FUNCTION __tmp_create_user(); + + ALTER USER postgres_exporter WITH PASSWORD 'password'; + ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog; + + -- If deploying as non-superuser (for example in AWS RDS), uncomment the GRANT + -- line below and replace <MASTER_USER> with your root user. + -- GRANT postgres_exporter TO <MASTER_USER>; + + GRANT CONNECT ON DATABASE postgres TO postgres_exporter; + + +Login in Postgres +================= + +Login into Postgres and execute the previous file, as the postgres user. + +.. code-block:: console + + # su -c "psql" postgres + # \i postgres-exporter.sql + + +Systemd postgres-exporter service file +====================================== + +.. code-block:: systemd + + # Path: /etc/systemd/system/postgres-exporter.service + + [Unit] + Description=Prometheus exporter for Postgresql + Wants=network-online.target + After=network-online.target + + [Service] + User=postgres_exporter + Group=postgres_exporter + WorkingDirectory=/opt/postgres_exporter + EnvironmentFile=/opt/postgres_exporter/postgres_exporter.env + ExecStart=/usr/local/bin/postgres_exporter --web.listen-address=:9187 --web.telemetry-path=/metrics + Restart=always + + [Install] + WantedBy=multi-user.target + + + +Edit Prometheus configuration file +=================================== + +* Add this new job to the /etc/prometheus/prometheus.yml configuration file. + +.. code-block:: yaml + + - job_name: 'postgres_exporter' + static_configs: + - targets: ['localhost:9187'] + + +Refresh systemd +=============== + +.. code-block:: console + + # systemctl daemon-reload + # systemctl enable --now postgres_exporter.service + # systemctl status postgres_exporter.service + # systemctl restart prometheus + +Check if new postgres-exporter service, is up and running properly: http://ip:9187/ + +Grafana control panel (GUI) +=========================== + +You can now go to `Grafana dashboards <a href="https://grafana.taler.net/dashboards">`_ and easily +add a new dashboard for the Postgres Exporter program. Please make sure you choose the right Prometheus data source. + +* Dashboard Id: 9628 +* Dashboard URL: https://grafana.com/grafana/dashboards/9628-postgresql-database/ + + +More information: https://github.com/prometheus-community/postgres_exporter + +