Hi, the PMM 3.0 GA release was published today and I immediately decided to try to install and explore it.
Unfortunately, it didn’t work for me to just change the version of the Docker image from 2 to 3.
Below I will explain step by step what I did and provide the docker-compose files
- WatchTower is required to install PMM Server in Docker. (link)
Several environment variables have been added to the docker configuration for pmm-server, such as:
PMM_WATCHTOWER_HOST
PMM_WATCHTOWER_TOKEN
Anyway, ChatGPT helped me, I just generated a Token and used the watchtower service name as host. (correct me if I’m wrong, but it works)
Token generation command
➜ : openssl rand -base64 32
YdpNf+Oyj8lz3ACRafmcL6ycVWw=
- I provide you now with a docker-compose file that contains a working configuration of c watchtower, pmm-server, pmm-client.
This also includes MySQL, Postgres, MongoDB. You can remove it if you don’t need it.
version: '3.8'
networks:
pmm_default:
services:
watchtower:
image: percona/watchtower
container_name: watchtower
hostname: watchtower
environment:
- WATCHTOWER_HTTP_API_UPDATE=1
- WATCHTOWER_HTTP_API_TOKEN=YdpNf+Oyj8lz3ACRafmcL6ycVWw=
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- pmm_default
pmm-server:
image: percona/pmm-server:3
platform: "linux/amd64"
container_name: pmm-server
restart: always
ports:
- 8080:8080
- "443:8443"
environment:
- PMM_WATCHTOWER_HOST=watchtower
- PMM_WATCHTOWER_TOKEN=YdpNf+Oyj8lz3ACRafmcL6ycVWw=
volumes:
- pmm-data:/srv
networks:
- pmm_default
pmm-client:
image: percona/pmm-client:3
container_name: pmm-client
environment:
PMM_AGENT_SERVER_ADDRESS: pmm-server:8443
PMM_AGENT_SERVER_USERNAME: admin
PMM_AGENT_SERVER_PASSWORD: admin
PMM_AGENT_SERVER_INSECURE_TLS: 1
PMM_AGENT_CONFIG_FILE: config/pmm-agent.yaml
volumes:
- pmm-client-data:/srv
networks:
- pmm_default
postgres:
image: "percona/percona-distribution-postgresql:17-multi"
environment:
POSTGRES_PASSWORD: password
POSTGRES_USER: postgres
LANG: en_US.utf8
PGDATA: /data/db
volumes:
- pg-data:/data/db
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 30s
timeout: 10s
retries: 5
networks:
- pmm_default
mongodb:
image: "percona/percona-server-mongodb:8.0-multi"
volumes:
- mongo-data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: databaseAdmin
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
healthcheck:
test: ["CMD-SHELL", "mongosh --eval 'db.adminCommand(\"ping\")' --quiet"]
interval: 30s
timeout: 10s
retries: 5
networks:
- pmm_default
mysql:
image: "percona/percona-server:8.4.3-3.1-multi"
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot-password"]
interval: 5s
timeout: 5s
retries: 20
ports:
- "3306:3306"
command: >
--performance-schema --innodb_monitor_enable=all
--slow_query_log --slow_query_log_file=/mysql/slowlogs/slow.log --long_query_time=0
networks:
- pmm_default
volumes:
pmm-data:
pmm-client-data:
mongo-data:
pg-data:
mysql-data:
- Unfortunately, pmm-client didn’t start for me on the first try, so I connected to the pmm-client container and ran a few commands sequentially.
- Registered a pmm-client node in pmm-server (doc)
- Added database services using the commands (About connecting services for monitoring - Percona Monitoring and Management)
sh-5.1$ pmm-admin config --server-insecure-tls --server-url=https://admin:admin@pmm-server:8443
Checking local pmm-agent status...
pmm-agent is running.
Registering pmm-agent on PMM Server...
Registered.
Configuration file /usr/local/percona/pmm/config/pmm-agent.yaml updated.
Reloading pmm-agent configuration...
Configuration reloaded.
Checking local pmm-agent status...
pmm-agent is running.
sh-5.1$ pmm-admin add mysql --environment=test --custom-labels='source=slowlog' --username=root --password=password --query-source=slowlog MySQLSlowLog mysql:3306
MySQL Service added.
Service ID : b2ebe5bd-8ee7-4bdd-bc38-8efd857d53ab
Service name: MySQLSlowLog
Table statistics collection enabled (the limit is 1000, the actual table count is 346).
sh-5.1$ pmm-admin add postgresql --username=postgres --password=password --host=postgres --port=5432 --query-source=pgstatmonitor
PostgreSQL Service added.
Service ID : 19d31ab8-6602-4c80-b2ff-ca3afec4b9ee
Service name: d2c5e45462c2-postgresql
Warning: Could not to detect the pg_stat_monitor extension on your system. Falling back to the pg_stat_statements.
sh-5.1$ pmm-admin add mongodb --username=databaseAdmin --password=password --host=mongodb --port=27017 --query-source=profiler
MongoDB Service added.
Service ID : d4f9c4c3-64c2-4993-9dfb-cd83f029d034
Service name: d2c5e45462c2-mongodb
And it’s running
I then ran a load simulation application on MySQL, Postgres, and MongoDB so that the dashboards would not be empty. This simulated the load to fill the graphs.