In the last post we’ve installed the temBoard repository and the UI. As this alone is not so much fun, we’ll be installing the temBoard agent on another SLES 15 machine in this post. We’ll end up with one PostgreSQL instance registered in the temBoard repository and this instance is constantly monitored. With the repository and the UI we had the requirement to use Python 2.7, but this is not anymore required for the temBoard agent. Lets go.
What I’ve already prepared, is the PostgreSQL instance we want the agent to monitor:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (3 rows)
As pip3 is already available we can go straight ahead and install the temBoard agent:
ostgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo sudo pip3 install temboard-agent Collecting temboard-agent Downloading https://files.pythonhosted.org/packages/58/6e/3d5c772587e48b17cc6fa5a1569daab0d879845828c792f16ecec49564ae/temboard_agent-7.6-py2.py3-none-any.whl (115kB) 100% |████████████████████████████████| 122kB 1.5MB/s pygobject 3.34.0 requires pycairo>=1.11.1, which is not installed. Installing collected packages: temboard-agent Successfully installed temboard-agent-7.6 You are using pip version 10.0.1, however version 21.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
First issue, but easy to fix:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo zypper in cairo-devel postgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo pip3 install pycairo Collecting pycairo Using cached pycairo-1.20.0.tar.gz (344 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Building wheels for collected packages: pycairo Building wheel for pycairo (PEP 517) ... done Created wheel for pycairo: filename=pycairo-1.20.0-cp36-cp36m-linux_x86_64.whl size=246164 sha256=e25a94a3a0801e25db8eee9b1080d793b7a6dd313b12b011e56888509e411362 Stored in directory: /root/.cache/pip/wheels/09/91/ec/f970f7c0cd3fba778c7150409181074fdfc2af42148486561d Successfully built pycairo Installing collected packages: pycairo Successfully installed pycairo-1.20.0
Once again:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo sudo pip3 install temboard-agent Requirement already satisfied: temboard-agent in /usr/lib/python3.6/site-packages (7.6) postgres@localhost:/u02/pgdata/13/PG1/ [PG1] which temboard-agent /usr/bin/temboard-agent postgres@localhost:/u02/pgdata/13/PG1/ [PG1] temboard-agent --version Traceback (most recent call last): File "/usr/bin/temboard-agent", line 7, in from temboardagent.scripts.agent import main File "/usr/lib/python3.6/site-packages/temboardagent/scripts/agent.py", line 12, in from ..cli import Application File "/usr/lib/python3.6/site-packages/temboardagent/cli.py", line 5, in from .postgres import Postgres File "/usr/lib/python3.6/site-packages/temboardagent/postgres.py", line 8, in import psycopg2.extensions ModuleNotFoundError: No module named 'psycopg2'
For connecting to PostgreSQL psycopg2 must be there as well:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo pip3 install psycopg2-binary Collecting psycopg2-binary Downloading psycopg2_binary-2.8.6-cp36-cp36m-manylinux1_x86_64.whl (3.0 MB) |████████████████████████████████| 3.0 MB 1.3 MB/s Installing collected packages: psycopg2-binary Successfully installed psycopg2-binary-2.8.6 postgres@localhost:/u02/pgdata/13/PG1/ [PG1] temboard-agent --version INFO: Starting temboard-agent 7.6. 7.6
The agent is ready, lets proceed with the configuration. As with the UI in the last post, there is a configuration script:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] ls -l /usr/share/temboard-agent/ total 24 -rwxr-xr-x 1 root root 7318 Apr 1 11:32 auto_configure.sh -rwxr-xr-x 1 root root 682 Apr 1 11:32 purge.sh drwxr-xr-x 1 root root 276 Apr 1 11:32 quickstart -rwxr-xr-x 1 root root 674 Apr 1 11:32 restart-all.sh -rw-r--r-- 1 root root 2843 Apr 1 11:32 temboard-agent.conf -rw-r--r-- 1 root root 176 Apr 1 11:32 temboard-agent.logrotate
Again, make sure that psql can be executed and all the environment variable match your environment:
postgres@localhost:/u02/pgdata/13/PG1/ [PG1] sudo su - localhost:~ $ export ETCDIR=/u01/app/postgres/local/dmk/etc/ localhost:~ $ export VARDIR=/u01/app/postgres/local/dmk/bin localhost:~ $ export LOGDIR=/u01/app/postgres/local/dmk/log localhost:~ $ export SYSUSER=postgres localhost:~ $ export PGHOST=/tmp localhost:~ $ export PATH=/u01/app/postgres/product/13/db_2/bin:$PATH localhost:~ $ sudo -Eu postgres psql could not change directory to "/root": Permission denied psql (13.2) Type "help" for help. postgres=#
Once you’ve that ready run the configuration:
localhost:~ $ /usr/share/temboard-agent/auto_configure.sh FQDN is not properly configured. Set agent hostname with TEMBOARD_HOSTNAME env var.. Failure. See /var/log/temboard-agent-auto-configure.log for details.
Ok, this error message is clear:
localhost:~ $ export TEMBOARD_HOSTNAME=sles15tbagent.it.dbi-services.com localhost:~ $ /usr/share/temboard-agent/auto_configure.sh Using hostname sles15tbagent.it.dbi-services.com. Configuring for PostgreSQL user postgres. Configuring for cluster on port 5432. Configuring for cluster at /u02/pgdata/13/PG1. Configuring temboard-agent in /u01/app/postgres/local/dmk/etc//13/pg5432/temboard-agent.conf . Saving auto-configuration in /u01/app/postgres/local/dmk/etc//13/pg5432/temboard-agent.conf.d/auto.conf Configuring temboard-agent to run on port 2345. Enabling systemd unit temboard-agent@13-pg5432.service. Success. You can now start temboard-agent using: systemctl start temboard-agent@13-pg5432.service For registration, use secret key deb91ab1322007536e2e8284b26bdb5c . See documentation for detailed instructions.
As we had troubles with the systemd unit file in the last post, lets have a look at it:
localhost:~ $ systemctl status temboard-agent@13-pg5432.service ● temboard-agent@13-pg5432.service - PostgreSQL Remote Control Agent 13/pg5432 Loaded: loaded (/usr/lib/systemd/system/temboard-agent@.service; enabled; vendor preset: disabled) Active: inactive (dead) localhost:~ $ cat /usr/lib/systemd/system/temboard-agent@.service [Unit] Description=PostgreSQL Remote Control Agent %I After=network.target postgresql@%i.service AssertPathExists=/etc/temboard-agent/%I/temboard-agent.conf [Service] Type=simple User=postgres Group=postgres ExecStart=/usr/bin/env SYSTEMD=1 temboard-agent -c /etc/temboard-agent/%I/temboard-agent.conf [Install] WantedBy=multi-user.target
This again points to the wrong configuration file, ours is here:
localhost:~ $ cat /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf # # T E M B O A R D A G E N T C O N F I G U R A T I O N # # This file contains all possible settings of temBoard agent, with defaults for # quickstart. temBoard agent overrides values of this file with .conf files # found in directory named after this filename, with .d suffix. e.g. # temboard-agent.conf.d/auto.conf is likely to override some values of this # file. # [temboard] # Bind port. port = 2345 # Bind address. address = 192.168.22.211 # User & password file. users = users # Plugins in use. plugins = ["monitoring", "dashboard", "pgconf", "administration", "activity", "maintenance", "statements"] # SSL: certificat file path (.pem) ssl_cert_file = /u01/app/postgres/local/dmk/etc/13/pg5432/server.pem # SSL: private key file path (.key) ssl_key_file = /u01/app/postgres/local/dmk/etc/13/pg5432/server.key # Hostname must be an unique and valid FQDN : e.g. db1.mydomain.foo # If you leave this empty, then the system wide hostname will be used # Note : `localhost` is not a correct value hostname = sles15tbagent # Key key = SECRETKEYTOBECHANGED [postgresql] # Unix socket path. host = /tmp # PG port number. port = 5432 # Super-user name. user = postgres # Super-user password. # password = # Default database. dbname = postgres # Instance name. instance = main [logging] # Available methods for logging: stderr, syslog or file method = stderr # Syslog facility. # facility = local0 # Log destination, should be /dev/log for syslog on Linux system. # When using file logging method, this is referencing the log file path. # destination = /var/log/temboard-agent/temboard-agent.log # Log level, can be: DEBUG, INFO, WARNING, ERROR or CRITICAL. level = INFO ### PLUGINS ### [dashboard] # Dashboard plugin part # Interval, in second, between each run of the process collecting # data used to render the dashboard. Default: 2 # scheduler_interval = 2 # Number of record to keep. Default: 150 # history_length = 150 [monitoring] # Monitoring plugin part. # DB name list (comma separator) to supervise. * for all. dbnames = * # List of probes to run, comma separator, * for all. # Available probes: bgwriter,blocks,btree_bloat,cpu,db_size,filesystems_size,heap_bloat,loadavg,locks,memory,process,replication_connection,replication_lag,sessions,tblspc_size,temp_files_size_delta,wal_files,xacts # when monitoring a standby server, 'wal_file' probe shouldn't be loaded. probes = * # Interval, in second, between each run of the process executing # the probes. Default: 60 # scheduler_interval = 60 [administration] # External command used for start/stop PostgreSQL. # This commands actually works on Debian jessie. pg_ctl = '/usr/lib/postgresql/9.4/bin/pg_ctl %s -D /var/lib/postgresql/9.4' [statements] # Statements plugin part. # DB name hosting pg_stat_statements view (the one where the extension has # been created with "CREATE EXTENSION") dbname = postgres
Once more, adjust the the systemd service file (I am creating a static one here):
localhost:~ $ cat /usr/lib/systemd/system/temboard-agent@.service [Unit] Description=PostgreSQL Remote Control Agent %I After=network.target postgresql@%i.service AssertPathExists=/u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf [Service] Type=simple User=postgres Group=postgres ExecStart=/usr/bin/env SYSTEMD=1 temboard-agent -c /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf [Install] WantedBy=multi-user.target localhost:~ $ mv /usr/lib/systemd/system/temboard-agent@.service /usr/lib/systemd/system/temboard-agent.service localhost:~ $ systemctl daemon-reload localhost:~ $ systemctl status temboard-agent.service ● temboard-agent.service - PostgreSQL Remote Control Agent Loaded: loaded (/usr/lib/systemd/system/temboard-agent.service; disabled; vendor preset: disabled) Active: inactive (dead)
Before starting with systemd, lets try to start with the postgres user. Before we do that we need to create a user which will be used for authentication later on:
localhost:~ $ su - postgres postgres@localhost:/home/postgres/ [pg132] temboard-agent-adduser -c /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf INFO: Starting temboard-agent-adduser 7.6. ERROR: Invalid temboard_ssl_key_file from config: /etc/ssl/private/temboard-agent-13-pg5432.key: File not found... CRITI: Failed to load configuration. postgres@localhost:/home/postgres/ [pg132] sudo ls -l /etc/ssl/private/temboard-agent-13-pg5432.key -rw------- 1 root root 1704 Apr 1 11:46 /etc/ssl/private/temboard-agent-13-pg5432.key
Again the issue with the key file, so:
postgres@localhost:/home/postgres/ [pg132] sudo mv /etc/ssl/private/temboard-agent-13-pg5432.key /u01/app/postgres/local/dmk/etc/ postgres@localhost:/home/postgres/ [pg132] sudo chown postgres:postgres /u01/app/postgres/local/dmk/etc/temboard-agent-13-pg5432.key postgres@localhost:/home/postgres/ [pg132] cat /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf | grep key # SSL: private key file path (.key) ssl_key_file = /u01/app/postgres/local/dmk/etc/temboard-agent-13-pg5432.key key = SECRETKEYTOBECHANGED
Once more:
postgres@localhost:/home/postgres/ [pg132] temboard-agent-adduser -c /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf INFO: Starting temboard-agent-adduser 7.6. ERROR: Invalid temboard_ssl_key_file from config: /etc/ssl/private/temboard-agent-13-pg5432.key: File not found... CRITI: Failed to load configuration.
Seems the location of the key file is somehow hard coded, so workaround this like this:
postgres@localhost:/home/postgres/ [pg132] sudo ln -s /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.key /etc/ssl/private/temboard-agent-13-pg5432.key postgres@localhost:/home/postgres/ [pg132] sudo chmod 755 /etc/ssl/private postgres@localhost:/home/postgres/ [pg132] ls /etc/ssl/private/temboard-agent-13-pg5432.key /etc/ssl/private/temboard-agent-13-pg5432.key postgres@localhost:/home/postgres/ [pg132] temboard-agent-adduser -c /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf INFO: Starting temboard-agent-adduser 7.6. Username: admin Password: Retype password: Done.
The user/password combination will be written to the users file:
postgres@localhost:/home/postgres/ [pg132] cat /u01/app/postgres/local/dmk/etc/13/pg5432/users admin:xiet7KLumux50Q2dmV/FBue2zqtexElavkVAKnEYN/rw2YLIn51TQsXb3u8FPm4wiuHUTtEjjvBIrtBPAgRMsA==
That should be all and we should be able to start the agent:
postgres@localhost:/home/postgres/ [pg132] temboard-agent --config /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf INFO: Starting temboard-agent 7.6. INFO: Found plugin monitoring = temboardagent.plugins.monitoring:MonitoringPlugin. INFO: Found plugin dashboard = temboardagent.plugins.dashboard:DashboardPlugin. INFO: Found plugin pgconf = temboardagent.plugins.pgconf:PgConfPlugin. ... INFO: Starting . INFO: Starting . INFO: Starting .
Looks fine, lets try with systemd:
sles15tbagent:/home/postgres $ systemctl start temboard-agent.service sles15tbagent:/home/postgres $ systemctl status temboard-agent.service ● temboard-agent.service - PostgreSQL Remote Control Agent Loaded: loaded (/usr/lib/systemd/system/temboard-agent.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2021-04-03 14:42:21 CEST; 4s ago Main PID: 9299 (temboard-agent) Tasks: 5 CGroup: /system.slice/temboard-agent.service ├─9299 temboard-agent: 13/pg5432: main process ├─9301 temboard-agent: 13/pg5432: worker pool └─9302 temboard-agent: 13/pg5432: scheduler sles15tbagent:/home/postgres $ ps -ef | grep temboard postgres 9299 1 0 14:42 ? 00:00:00 temboard-agent: 13/pg5432: main process postgres 9301 9299 0 14:42 ? 00:00:00 temboard-agent: 13/pg5432: worker pool postgres 9302 9299 0 14:42 ? 00:00:00 temboard-agent: 13/pg5432: scheduler root 9804 9249 0 14:44 pts/1 00:00:00 grep --color=auto temboard
The final step is to register the agent to the WebUI:
postgres@sles15tbagent:/home/postgres/ [PG1] temboard-agent-register -c /u01/app/postgres/local/dmk/etc/13/pg5432/temboard-agent.conf --host $(hostname --fqdn) --port 2345 --groups default https://192.168.22.210:8888 INFO: Starting temboard-agent-register 7.6. INFO: Getting system & PostgreSQL informations from the agent (https://sles15tbagent:2345/discover) ... Login at https://192.168.22.210:8888 ... Username: admin Password: Registering instance/agent to https://192.168.22.210:8888 ... Done.
Heading over to the WebUI confirms, that the agent is registered and the PostgreSQL instance is monitored:
So, even if there are no pre-build packages for your distribution, it should be quite easy to get temBoard up and running.
Cet article temBoard on SLES15 – 2 – The agent est apparu en premier sur Blog dbi services.