[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-grid5k] branch master updated (37fcfca -> a623f12)
From: |
gnunet |
Subject: |
[taler-grid5k] branch master updated (37fcfca -> a623f12) |
Date: |
Thu, 28 Apr 2022 10:46:10 +0200 |
This is an automated email from the git hooks/post-receive script.
marco-boss pushed a change to branch master
in repository grid5k.
from 37fcfca -y for upgrade
new 9e6e3ad add sharding/partitioning
new d7ccc0c fixes
new 3e3ee65 fix table naming
new b558395 if not exists
new dec8a98 fix shard naming
new 91e0856 update tables
new 1b1de43 fix sharding permissions
new 092cb0b add missing user
new b998331 add missing user directory
new e0a8081 fix
new bcdc571 update permissions for db
new bd07134 don't shard wire_out
new 823392e fix comments
new a7bd122 aggregation tracking cant be sharded
new f605b98 fix wallet startup
new 7d17d57 re-enable sharding of aggregation tracking tables
new 791f493 still not working with aggregator
new f997e53 fix typo
new 8109d46 update shard sql
new daa6ce8 fix typos
new 5712ba0 generic wire-fee year, fix empty shards when partitioned only
new 608cd8b add automatic backup script
new 49131cd update persistance script
new 83f3b7c fix missing with tar
new 3342905 io load reduced, synchronous_commit seems to be the load issue
new 8255f22 try to fix sharding issues
new e34f0d3 include shards in monitoring
new b8b9075 fixes
new 7aa1669 fix
new 012b661 log nested statements to hopefully get function debug output
new 579f28f try with explicit analyze as nested does not work
new 621cd58 undo explain
new 877eb8b try adding index
new 27aaf34 typo
new 51291ae add index on known_coins to try to fix recoup_by_reserve
new 8023cd7 updated deployed image
new 6064159 update test sql
new c31c8d1 test
new 4943512 test do not partition wire_targets
new be27548 include partition logic of taler
new e08c774 lower slow query duration
new e69cabf hopefully better logging of slow queries with
pg_stat_statements
new 8505973 again without analyze
new 89b5039 no create table in slow queries
new 9970334 ramdom 0-20 deposit, dont log uri params in nginx, disable
seqscan
new 32afad7 add request size to nginx
new d31f7ac add monitor to dahu because of link speed
new a6d2f3c fix
new d07a3f9 keepalive in nginx
new 7a80cce add offloaded processes
new 18338ee fix exchange service
new f04b5e0 update merchant conf
new ca9ee77 fix
new e3f1c42 coin lookahead sign 2 weeks only, -O2
new 458f854 add certificates for nginx
new 9c8d022 try to fix wallet build
new 41ee4b6 update
new e657d61 try --unsafe-perm
new 8a296aa configure proxy caching
new b22fd57 change cache dir
new 267a358 fix
new a91668a fix lookahead sign
new ad3cf80 make cipher and key size configurable
new d1fd403 fix
new 43b5a87 update persistance script
new 5478e01 move database to /tmp as it is mounted on the primary disk in
grid5000 environments
new 082caf1 set lookahead sign to two days as we get much better client
performance
new 60757c0 add possibility to run multiple exchange-httpd hosts -
services must be run as root, since the nfs does allow to change permissions
new 87f106d add secondary initialization
new 1d3a7ad fix
new 59c1a49 further improve performance of log analysis
new 6820aa1 cleaner regex
new 7ac597c better endpoint pipeline definition
new a1546cd reduce amount of logging wallets
new 7893662 also separate wallet from the main syslog receiver
new 0a09a64 add status label for hopefully better speed
new e43015a test custom metrics
new f7bdc10 fix
new b6b72c8 add histograms
new 960e1d5 change denominations
new 6bd7836 change denominations 1,4,8
new b441d08 include secondary exchanges in prometheus
new e5d7c57 finished configuration for secondary exchanges
new 077c5be cleaner exchange setup
new 1f6322f fixes
new 2c181f2 -fixes -build libmicrohttpd from source
new 2b2ce37 cflags via variables
new ad39860 fix build
new 18778ab fix
new f517563 add doc
new c72b8f1 split up proxy monitoring
new edb715b configure merchant instance
new ca86c8a possibility to create multiple instances
new fd716fb merchant behind nginx
new e3ed1c1 fix
new 23f0170 fixes, add lookahead sign as param
new ea9dfec fix
new 7312f95 fix
new 37c60b1 add explain analyzer
new db708d8 correct time calculation
new a956245 fix
new 4d59b87 fix
new 9af5e28 add upstream response time
new 9dbb426 fix
new aa3db16 work towards parsing logs
new 014c5c2 viualizer can parse log lines / formatted output
new 0a4fdd5 fix most time consuming
new 7a10fb3 update explain.py - multiline params not working yet - needs
some style improvements
new 2a89d86 update promtail message size
new 685c4a8 install linux-perf
new 0d055ac explain analyze now working with correct postgres config
new cce5ea5 add missing parameter hint to explain.py
new d396602 some doc about explain.py
new 4fb7a84 test with sharding
new e5293ac fix sharding setup, finish explain script summary
new dc30686 fix verbose output
new b1d5342 some db config
new eab9f0b add sharding logic
new 90956e2 add docker-compose to explain-visualizer
new b233fb5 update postgres exporter to work when there is no merchant,
update grafana dashboards
new fe2f24e fix gitignore
new 82a4f77 support for multiple merchant nodes
new e3f3967 update url's to match node names
new 9c92f12 enable admin api for prometheus in order to test snapshots
new a139784 periodic prometheus backup which can be viewed locally with
additional/recover/run.sh
new 333fbf8 try further with promtail metrics
new f2c4675 adjust database logs
new e541378 fix yaml
new 7671e63 slow query time
new 6daa726 fix slow query amount
new 91049f2 fix backup script
new 575349e fix regex
new b6a7ff7 cleaner regex
new 7b77984 try source
new a050166 add loki to recover setup
new e23550c update dashboards
new 9f5db12 fix some issues in recover
new ef1d591 possibility to start more wirewatchers
new 394683e fix taler-perf script
new 9ca1304 move loki data to nfs directly as lost in copy
new 538bf1b update recovery script
new d4299a4 update persistance, possible to remove previous data
new 6aa0b1c fixes, changes
new 22d35f6 possible to provide the complete tar archive for recovery
new 9498bc4 add some doc
new fbe6991 update recovery
new 1df7a7f add proxy for fakebank
new 897ecb8 add version to docker-compose
new db2c367 update proxy configuration for merchant and bank
new e602a26 various imrovements / fixes
new a2aecca add progress for archiving
new dcb7aeb deduplicate promtail
new 73a75f6 show that process is running in persist.sh for long during
processes
new 4154d46 more dynamic rsyslog ports, add some info in setup.sh
new db45c9e experiment with two postgresql instances
new 0c73c69 fix
new ec096cd fix persist script, delete manually
new 24e1089 additional scripts improved
new aa59701 'cluster' (db) scripts added
new 92bb304 update image, disable mitigations
new 9277752 add centos image
new c2c8bbf add centos image
new deb771d update centos
new b5d249c update
new 8e5c02e remove --no-install-recommends
new be3ceb3 use centos for db only
new df97b9f add g5k commit sha again
new f3e0b8c change grub - disable mitigations
new 1d90d4e centos add node-exporter
new e830b99 add node-exporter service files as not present in centos
new 3a47d92 fix pg repo in centos
new 5449552 fix bind package in centos
new 282fa92 createusers not required for db only
new 17967ce add mitigations=off in grid5000 base.yaml as it gets overriden
new aa47dda postgresql not loaded per default
new 228fe36 fix node-exporter
new 2251644 add wget
new 982cae4 kernel_params used to disable mitigations
new c8bc78b fix tar path of centos
new c1da556 add centos db initialization script
new a915900 centos database working
new 1ba6293 add centos note in readme
new b9d216b fix promtail
new 9ee4f87 add documentation
new cf28bd2 update taler-perf
new 8a52139 rebuild on all nodes
new c7c161a rename to be clearer
new 4718cb7 add more output to explain.py
new a623f12 Commented and Documented
The 189 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.gitignore | 1 +
README.md | 11 +-
additional/.gitignore | 3 +-
additional/README.md | 52 +-
additional/explain-visualizer/.gitignore | 4 +
additional/explain-visualizer/docker-compose.yaml | 15 +
additional/explain-visualizer/explain.py | 554 +
additional/grafana/database.json | 1133 +-
.../{request-statistics.json => exchange.json} | 1476 +-
additional/grafana/load-statistics.json | 425 +-
additional/grafana/nodes.json | 13820 +++++++++++++++++++
additional/grafana/proxy.json | 640 +
additional/grafana/request-statistics.json | 786 +-
additional/grafana/transactions.json | 555 +-
additional/persist.sh | 126 +
additional/plots/config.yaml | 9 +-
additional/recover/.gitignore | 4 +
.../provisioning/dashboards/taler-perf.yaml | 9 +
.../provisioning/datasources/prometheus.yaml | 12 +
.../recover/assets/prometheus/prometheus.yaml | 0
additional/recover/docker-compose.yaml | 66 +
additional/recover/run.sh | 80 +
.../rspecs/taler.any.rspec | 53 +-
additional/rspecs/taler.minial.rspec | 45 +
.../taler.sharded.minimal-with-wallets.rspec | 117 +-
additional/rspecs/taler.sharded.minimal.rspec | 73 +
configs/etc/default/prometheus | 2 +-
configs/etc/default/prometheus-nginx-exporter | 2 +-
configs/etc/default/prometheus-node-exporter | 217 +
configs/etc/default/prometheus-postgres-exporter | 3 +-
configs/etc/monitor/exchange-exporters.yaml.tpl | 6 -
configs/etc/monitor/loki.yaml | 10 +-
configs/etc/monitor/node-exporters.yaml.tpl | 34 +-
configs/etc/monitor/postgres-exporter.yaml | 230 +-
configs/etc/monitor/prometheus.yaml | 19 +-
configs/etc/monitor/promtail.yaml | 133 +
configs/etc/nginx/sites-available/exchange | 66 +
configs/etc/nginx/sites-available/fakebank | 29 +
configs/etc/nginx/sites-available/merchant | 29 +
configs/etc/nginx/sites-enabled/proxy | 40 -
configs/etc/rsyslog.d/taler.conf | 4 +-
configs/etc/taler/conf.d/exchange-business.conf | 22 +-
configs/etc/taler/conf.d/exchange-coins.conf | 150 +-
configs/etc/taler/conf.d/exchange-secmod.conf | 17 +
configs/etc/taler/conf.d/exchange-system.conf | 5 -
configs/etc/taler/conf.d/fake-bank.conf | 2 +-
configs/etc/taler/conf.d/merchant.conf | 8 +-
.../system/prometheus-node-exporter.service | 15 +
....service => taler-exchange-aggregator@.service} | 3 +-
...oser.service => taler-exchange-closer@.service} | 3 +-
.../systemd/system/taler-exchange-httpd.service | 25 -
.../lib/systemd/system/taler-exchange-httpd.socket | 14 -
.../systemd/system/taler-exchange-httpd@.service | 8 +-
.../system/taler-exchange-secmod-cs.service | 18 +
.../system/taler-exchange-secmod-eddsa.service | 3 +-
.../system/taler-exchange-secmod-rsa.service | 3 +-
...er.service => taler-exchange-transfer@.service} | 3 +-
.../system/taler-exchange-wirewatch.service | 16 -
.../usr/lib/systemd/system/taler-exchange.target | 12 -
.../systemd/system/taler-prometheus-backup.service | 10 +
.../systemd/system/taler-prometheus-backup.timer | 10 +
docker/Dockerfile | 8 +-
docker/README.md | 35 +-
docker/entrypoint.sh | 58 +-
experiment/README.md | 140 +-
experiment/env | 80 +-
experiment/experiment-specification.yml | 11 +
experiment/scripts/bank.sh | 7 +-
experiment/scripts/benchmark.sh | 32 +-
experiment/scripts/createusers.sh | 14 +-
experiment/scripts/database-centos.sh | 340 +
experiment/scripts/database.sh | 257 +-
experiment/scripts/dns.sh | 22 +
experiment/scripts/exchange-aggregator.sh | 40 +
experiment/scripts/exchange-closer.sh | 40 +
experiment/scripts/exchange-proxy.sh | 116 +
experiment/scripts/exchange-transfer.sh | 40 +
experiment/scripts/exchange-wirewatch.sh | 55 +
experiment/scripts/exchange.sh | 142 +-
experiment/scripts/helpers.sh | 126 +-
experiment/scripts/install.sh | 75 +-
experiment/scripts/merchant.sh | 38 +-
experiment/scripts/monitor.sh | 198 +-
experiment/scripts/ping.sh | 7 +-
experiment/scripts/postgres-cluster/README.md | 24 +
experiment/scripts/postgres-cluster/db-cluster.sh | 67 +
.../scripts/postgres-cluster/exch-cluster.sh | 67 +
.../scripts/postgres-cluster/proxy-cluster.sh | 18 +
experiment/scripts/prometheus-backup.sh | 42 +
experiment/scripts/proxy.sh | 112 -
experiment/scripts/run.sh | 113 +-
experiment/scripts/setup.sh | 98 +-
experiment/scripts/{database.sh => shard.sh} | 138 +-
experiment/scripts/taler-perf.sh | 155 +-
experiment/scripts/wallet.sh | 3 +-
experiment/ssh/id_rsa | 38 +
experiment/ssh/id_rsa.pub | 1 +
experiment/taler.many.rspec | 453 +
experiment/taler.rspec | 65 +-
experiment/taler.sharded.rspec | 481 +
image/README.md | 45 +-
.../grid5000/centos8-x64-min.yaml} | 32 +-
.../{ => centos8}/grid5000/from_scratch/base.yaml | 0
.../grid5000/from_scratch/centos-8.yaml} | 13 +-
.../centos8/grid5000/from_scratch/centos-base.yaml | 55 +
.../grid5000/steps/aliases/defaults.yaml | 0
.../bootstrap/centos/prepare_autoinstall.yaml | 7 +
.../steps/bootstrap/download_installer.yaml | 0
.../steps/bootstrap/prepare_appliance.yaml | 0
.../grid5000/steps/bootstrap/prepare_disk.yaml | 0
.../bootstrap/prepare_ssh_to_out_context.yaml | 0
.../steps/bootstrap/start_http_server.yaml | 0
.../grid5000/steps/bootstrap/start_qemu.yaml | 4 +-
.../grid5000/steps/checkpoints/simple.yaml | 0
.../steps/data/helpers/export_appliance.py | 0
.../steps/data/helpers/netinstall_iso_finder.py | 36 +-
.../steps/data/helpers/simple_http_server.py | 0
.../grid5000/steps/data/kickstart/centos8-ks.cfg | 46 +
.../grid5000/steps/data/qemu-sendkeys.rb | 0
.../steps/data/qemu-sendkeys/netinst-centos | 1 +
.../grid5000/steps/disable_checkpoint.yaml | 0
.../grid5000/steps/enable_checkpoint.yaml | 0
image/{ => centos8}/grid5000/steps/env/bashrc | 0
.../{ => centos8}/grid5000/steps/env/functions.sh | 0
.../steps/export/centos}/clean_dhcp_leases.yaml | 2 +-
.../steps/export/do_qcow2_finish_works.yaml | 0
.../grid5000/steps/export/export_g5k.yaml | 15 +-
.../grid5000/steps/export/save_appliance_VM.yaml | 0
.../setup/centos/8/create_kernel_symlinks.yaml | 25 +
.../grid5000/steps/setup/centos/clean_system.yaml | 26 +
.../steps/setup/centos/configure_system.yaml | 61 +
.../grid5000/steps/setup/centos/disable_kdump.yaml | 7 +
.../steps/setup/centos/install_packages.yaml | 13 +
.../steps/setup/centos/minimal_install.yaml | 12 +
.../grid5000/steps/setup/centos/set_g5k_motd.yaml | 19 +
.../grid5000/steps/setup/set_g5k_release.yaml | 14 +
image/centos8/taler-centos8.yaml | 92 +
.../grid5000/debian11-x64-common.yaml | 0
.../{ => debian11}/grid5000/debian11-x64-nfs.yaml | 0
.../{ => debian11}/grid5000/from_scratch/base.yaml | 0
.../grid5000/from_scratch/debian-base.yaml | 0
.../grid5000/from_scratch/debian-bullseye.yaml | 0
.../grid5000/steps/aliases/defaults.yaml | 0
.../bootstrap/debian/prepare_autoinstall.yaml | 0
.../steps/bootstrap/download_installer.yaml | 0
.../steps/bootstrap/prepare_appliance.yaml | 0
.../grid5000/steps/bootstrap/prepare_disk.yaml | 0
.../bootstrap/prepare_ssh_to_out_context.yaml | 0
.../steps/bootstrap/start_http_server.yaml | 0
.../grid5000/steps/bootstrap/start_qemu.yaml | 0
.../grid5000/steps/checkpoints/simple.yaml | 0
.../steps/data/helpers/export_appliance.py | 0
.../steps/data/helpers/netinstall_iso_finder.py | 0
.../steps/data/helpers/simple_http_server.py | 0
.../steps/data/preseed/debian-bullseye-preseed.cfg | 0
.../grid5000/steps/data/qemu-sendkeys.rb | 0
.../steps/data/qemu-sendkeys/netinst-iso-debian | 0
.../grid5000/steps/data/setup/hiera/hiera.yaml | 0
.../steps/data/setup/hiera/hieradata/defaults.yaml | 0
.../steps/data/setup/puppet/manifests/base.pp | 0
.../steps/data/setup/puppet/manifests/big.pp | 0
.../steps/data/setup/puppet/manifests/min.pp | 0
.../steps/data/setup/puppet/manifests/nfs.pp | 0
.../steps/data/setup/puppet/manifests/std.pp | 0
.../steps/data/setup/puppet/manifests/xen.pp | 0
.../modules/env/files/base/cpufreq/cpufrequtils | 0
.../modules/env/files/base/ganglia/gmond.conf | 0
.../modules/env/files/base/infiniband/90-ib.rules | 0
.../modules/env/files/base/infiniband/openib.conf | 0
.../modules/env/files/base/infiniband/openibd | 0
.../env/files/base/infiniband/openibd.service | 0
.../puppet/modules/env/files/base/kexec/kexec | 0
.../puppet/modules/env/files/base/mx/ip_over_mx | 0
.../modules/env/files/base/ndctl/ndctl.preset | 0
.../modules/env/files/base/sshfs/40-fuse.rules | 0
.../env/files/base/tuning/limits-grid5000.conf | 0
.../env/files/base/tuning/sysctl-00-grid5000.conf | 0
.../env/files/base/userns/sysctl-00-userns.conf | 0
.../modules/env/files/big/amd_gpu/70-amdgpu.rules | 0
.../modules/env/files/big/kvm/60-qemu-system.rules | 0
.../puppet/modules/env/files/big/kvm/create_tap | 0
.../puppet/modules/env/files/big/kvm/random_mac | 0
.../setup/puppet/modules/env/files/big/kvm/sudoers | 0
.../puppet/modules/env/files/big/mic/85-mic.rules | 0
.../setup/puppet/modules/env/files/big/mic/fstab | 0
.../puppet/modules/env/files/big/mic/mic0.filelist | 0
.../setup/puppet/modules/env/files/big/mic/mpss | 0
.../puppet/modules/env/files/big/nvidia/cuda.conf | 0
.../env/files/big/nvidia/dcgm-exporter.service | 0
.../env/files/big/nvidia/ganglia-monitor.service | 0
.../env/files/big/nvidia/modpython-nvidia.conf | 0
.../files/big/nvidia/nvidia-persistenced.service | 0
.../env/files/big/nvidia/nvidia-smi.service | 0
.../env/files/min/apt/grid5000-archive-key.asc | 0
.../env/files/min/cpu_microcode/amd64-microcode | 0
.../env/files/min/cpu_microcode/intel-microcode | 0
.../modules/env/files/min/image_versioning/git_tag | 0
.../env/files/min/image_versioning/postinst | 0
.../puppet/modules/env/files/min/locales/locale | 0
.../modules/env/files/min/locales/locale.gen | 0
.../env/files/min/network/g5k-update-host-name | 0
.../puppet/modules/env/files/min/network/hosts | 0
.../env/files/nfs/ldap/ca2019.grid5000.fr.cert | 0
.../puppet/modules/env/files/nfs/ldap/common-auth | 0
.../modules/env/files/nfs/ldap/common-password | 0
.../puppet/modules/env/files/nfs/ldap/ldap.conf | 0
.../modules/env/files/nfs/ldap/libnss-ldap.conf | 0
.../puppet/modules/env/files/nfs/ldap/nscd.conf | 0
.../puppet/modules/env/files/nfs/ldap/nslcd.conf | 0
.../modules/env/files/nfs/ldap/nsswitch.conf | 0
.../env/files/nfs/openiscsi/55-openiscsi.rules | 0
.../modules/env/files/nfs/openiscsi/iscsidev.sh | 0
.../files/std/g5k-manager/g5k-disk-manager-backend | 0
.../g5k-manager/g5k-disk-manager-backend.service | 0
.../env/files/std/g5k-manager/g5k-pmem-manager | 0
.../files/std/g5k-manager/g5k-pmem-manager.service | 0
.../env/files/std/g5k-manager/lib/g5k-manager.rb | 0
.../env/files/std/g5k_generator/g5k_generator | 0
.../env/files/std/g5kchecks/g5k-checks.conf | 0
.../puppet/modules/env/files/std/lvm/lvm.conf | 0
.../modules/env/files/std/net_access/iptables | 0
.../env/files/std/net_access/iptables.stretch | 0
.../modules/env/files/std/net_access/rsyslog.conf | 0
.../env/files/std/net_access/syslog_iptables.conf | 0
.../files/std/nvidia_configure/nvidia-reset-mig | 0
.../std/nvidia_configure/nvidia-reset-mig.service | 0
.../modules/env/files/std/oar/batch_job_bashrc | 0
.../env/files/std/oar/etc/security/access.conf | 0
.../modules/env/files/std/oar/oar-node-service | 0
.../env/files/std/oar/oar-node.service.override | 0
.../modules/env/files/std/oar/oar_sshclient_config | 0
.../env/files/std/oar/var/lib/oar/access.conf | 0
.../modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k | 0
.../env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub | 0
.../data/setup/puppet/modules/env/files/version | 0
.../setup/puppet/modules/env/files/xen/xen/id_rsa | 0
.../puppet/modules/env/files/xen/xen/id_rsa.pub | 0
.../puppet/modules/env/files/xen/xen/random_mac | 0
.../setup/puppet/modules/env/files/xen/xen/xen-g5k | 0
.../modules/env/files/xen/xen/xen-g5k.service | 0
.../modules/env/files/xen/xen/xend-config.sxp | 0
.../env/lib/facter/installed_kernelreleases.rb | 0
.../setup/puppet/modules/env/manifests/base.pp | 0
.../modules/env/manifests/base/add_ca_grid5000.pp | 0
.../env/manifests/base/configure_dhclient.pp | 0
.../manifests/base/configure_ip_over_infiniband.pp | 0
.../modules/env/manifests/base/configure_kexec.pp | 0
.../env/manifests/base/configure_omnipath.pp | 0
.../env/manifests/base/disable_ndctl_monitor.pp | 0
.../env/manifests/base/disable_nvme_multipath.pp | 0
.../modules/env/manifests/base/do_not_clean_tmp.pp | 0
.../enable_cpufreq_with_performance_governor.pp | 0
.../modules/env/manifests/base/enable_userns.pp | 0
.../env/manifests/base/increase_ssh_maxstartups.pp | 0
.../manifests/base/install_and_disable_ganglia.pp | 0
.../env/manifests/base/tcp_tuning_for_10gbe.pp | 0
.../base/unlimited_memlock_for_infiniband.pp | 0
.../data/setup/puppet/modules/env/manifests/big.pp | 0
.../modules/env/manifests/big/configure_amd_gpu.pp | 0
.../env/manifests/big/configure_initramfs.pp | 0
.../modules/env/manifests/big/configure_kvm.pp | 0
.../env/manifests/big/configure_nvidia_gpu.pp | 0
.../env/manifests/big/configure_nvidia_gpu/cuda.pp | 0
.../manifests/big/configure_nvidia_gpu/drivers.pp | 0
.../manifests/big/configure_nvidia_gpu/ganglia.pp | 0
.../manifests/big/configure_nvidia_gpu/modules.pp | 0
.../big/configure_nvidia_gpu/prometheus.pp | 0
.../manifests/big/configure_nvidia_gpu/services.pp | 0
.../modules/env/manifests/big/configure_postfix.pp | 0
.../modules/env/manifests/big/configure_sshfs.pp | 0
.../modules/env/manifests/big/install_beegfs.pp | 0
.../env/manifests/big/install_g5k_jupyterlab.pp | 0
.../modules/env/manifests/big/install_openmpi.pp | 0
.../manifests/big/install_prometheus_exporters.pp | 0
.../modules/env/manifests/big/install_smartd.pp | 0
.../env/manifests/big/install_snmp_tools.pp | 0
.../manifests/big/prepare_kernel_module_build.pp | 0
.../modules/env/manifests/common/apt_pinning.pp | 0
.../modules/env/manifests/common/g5kpackages.pp | 0
.../env/manifests/common/software_versions.pp | 0
.../puppet/modules/env/manifests/commonpackages.pp | 0
.../setup/puppet/modules/env/manifests/init.pp | 0
.../data/setup/puppet/modules/env/manifests/min.pp | 0
.../env/manifests/min/add_image_version_in_etc.pp | 0
.../configure_kernel_and_blacklist_some_modules.pp | 0
.../min/configure_network_and_install_drivers.pp | 0
.../modules/env/manifests/min/generate_etc_motd.pp | 0
.../manifests/min/install_and_configure_locales.pp | 0
.../env/manifests/min/install_and_configure_ssh.pp | 0
.../env/manifests/min/install_cpu_microcode.pp | 0
.../env/manifests/min/install_metapackage.pp | 0
.../modules/env/manifests/min/install_tgz_g5k.pp | 0
.../modules/env/manifests/min/kernel/initramfs.pp | 0
.../modules/env/manifests/min/kernel/modules.pp | 0
.../modules/env/manifests/min/kernel/remove_old.pp | 0
.../env/manifests/min/kernel/setup_links.pp | 0
.../modules/env/manifests/min/set_root_password.pp | 0
.../manifests/min/set_timezone_to_europe_paris.pp | 0
.../data/setup/puppet/modules/env/manifests/nfs.pp | 0
.../modules/env/manifests/nfs/configure_iscsi.pp | 0
.../modules/env/manifests/nfs/configure_ldap.pp | 0
.../env/manifests/nfs/configure_module_path.pp | 0
.../modules/env/manifests/nfs/configure_ntp.pp | 0
.../env/manifests/nfs/install_nfs_requirements.pp | 0
.../manifests/nfs/install_osirim_requirements.pp | 0
.../nfs/install_storage5k_requirements.pp | 0
.../data/setup/puppet/modules/env/manifests/std.pp | 0
.../env/manifests/std/add_g5kcode_to_path.pp | 0
.../std/configure_g5kdiskmanagerbackend.pp | 0
.../env/manifests/std/configure_g5kmanager.pp | 0
.../env/manifests/std/configure_g5kpmemmanager.pp | 0
.../env/manifests/std/configure_oar_client.pp | 0
.../env/manifests/std/configure_rsyslog_remote.pp | 0
.../setup/puppet/modules/env/manifests/std/dell.pp | 0
.../modules/env/manifests/std/dell/params.pp | 0
.../env/manifests/std/disable_lvm_pvscan.pp | 0
.../modules/env/manifests/std/g5k_generator.pp | 0
.../modules/env/manifests/std/install_g5kchecks.pp | 0
.../env/manifests/std/install_g5ksubnets.pp | 0
.../env/manifests/std/install_hwraid_apt_source.pp | 0
.../modules/env/manifests/std/install_kameleon.pp | 0
.../manifests/std/install_libguestfs_backport.pp | 0
.../modules/env/manifests/std/install_megacli.pp | 0
.../modules/env/manifests/std/install_sudog5k.pp | 0
.../puppet/modules/env/manifests/std/ipmitool.pp | 0
.../modules/env/manifests/std/nvidia_reset_mig.pp | 0
.../data/setup/puppet/modules/env/manifests/xen.pp | 0
.../modules/env/manifests/xen/configure_xen.pp | 0
.../modules/env/manifests/xen/install_grub.pp | 0
.../env/templates/base/omnipath/scibian.key.erb | 0
.../modules/env/templates/common/apt_pinning.erb | 0
.../puppet/modules/env/templates/min/motd.erb | 0
.../env/templates/nfs/ldap/common-account.erb | 0
.../modules/env/templates/nfs/ntp/ntp.conf.erb | 0
.../env/templates/std/dell/linux.dell.com.key.erb | 0
.../std/hwraid/hwraid.le-vert.net.key.erb | 0
.../grid5000/steps/disable_checkpoint.yaml | 0
.../grid5000/steps/enable_checkpoint.yaml | 0
image/{ => debian11}/grid5000/steps/env/bashrc | 0
.../{ => debian11}/grid5000/steps/env/functions.sh | 0
.../steps/export/debian/clean_dhcp_leases.yaml | 0
.../steps/export/do_qcow2_finish_works.yaml | 0
.../grid5000/steps/export/export_g5k.yaml | 0
.../grid5000/steps/export/save_appliance_VM.yaml | 0
.../grid5000/steps/setup/debian/clean_system.yaml | 0
.../steps/setup/debian/configure_apt_sources.yaml | 0
.../steps/setup/debian/configure_system.yaml | 0
.../steps/setup/debian/install_packages.yaml | 0
.../steps/setup/debian/minimal_install.yaml | 0
.../steps/setup/debian/run_orchestrator.yaml | 0
.../steps/setup/debian/setup_orchestrator.yaml | 0
image/{ => debian11}/taler-debian11.yaml | 49 +-
notes.txt | 0
353 files changed, 22444 insertions(+), 3126 deletions(-)
create mode 100644 additional/explain-visualizer/.gitignore
create mode 100644 additional/explain-visualizer/docker-compose.yaml
create mode 100755 additional/explain-visualizer/explain.py
copy additional/grafana/{request-statistics.json => exchange.json} (54%)
create mode 100644 additional/grafana/nodes.json
create mode 100644 additional/grafana/proxy.json
create mode 100755 additional/persist.sh
create mode 100644 additional/recover/.gitignore
create mode 100644
additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
create mode 100644
additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
rename experiment/TODO => additional/recover/assets/prometheus/prometheus.yaml
(100%)
create mode 100644 additional/recover/docker-compose.yaml
create mode 100755 additional/recover/run.sh
copy experiment/taler.rspec => additional/rspecs/taler.any.rspec (83%)
create mode 100644 additional/rspecs/taler.minial.rspec
copy experiment/taler.rspec =>
additional/rspecs/taler.sharded.minimal-with-wallets.rspec (72%)
create mode 100644 additional/rspecs/taler.sharded.minimal.rspec
create mode 100644 configs/etc/default/prometheus-node-exporter
delete mode 100644 configs/etc/monitor/exchange-exporters.yaml.tpl
create mode 100644 configs/etc/nginx/sites-available/exchange
create mode 100644 configs/etc/nginx/sites-available/fakebank
create mode 100644 configs/etc/nginx/sites-available/merchant
delete mode 100644 configs/etc/nginx/sites-enabled/proxy
create mode 100644 configs/etc/taler/conf.d/exchange-secmod.conf
create mode 100644
configs/usr/lib/systemd/system/prometheus-node-exporter.service
rename configs/usr/lib/systemd/system/{taler-exchange-aggregator.service =>
taler-exchange-aggregator@.service} (92%)
rename configs/usr/lib/systemd/system/{taler-exchange-closer.service =>
taler-exchange-closer@.service} (76%)
delete mode 100644 configs/usr/lib/systemd/system/taler-exchange-httpd.service
delete mode 100644 configs/usr/lib/systemd/system/taler-exchange-httpd.socket
create mode 100644
configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
rename configs/usr/lib/systemd/system/{taler-exchange-transfer.service =>
taler-exchange-transfer@.service} (81%)
delete mode 100644
configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
delete mode 100644 configs/usr/lib/systemd/system/taler-exchange.target
create mode 100644
configs/usr/lib/systemd/system/taler-prometheus-backup.service
create mode 100644 configs/usr/lib/systemd/system/taler-prometheus-backup.timer
create mode 100755 experiment/scripts/database-centos.sh
create mode 100755 experiment/scripts/dns.sh
create mode 100755 experiment/scripts/exchange-aggregator.sh
create mode 100755 experiment/scripts/exchange-closer.sh
create mode 100755 experiment/scripts/exchange-proxy.sh
create mode 100755 experiment/scripts/exchange-transfer.sh
create mode 100755 experiment/scripts/exchange-wirewatch.sh
create mode 100644 experiment/scripts/postgres-cluster/README.md
create mode 100755 experiment/scripts/postgres-cluster/db-cluster.sh
create mode 100755 experiment/scripts/postgres-cluster/exch-cluster.sh
create mode 100755 experiment/scripts/postgres-cluster/proxy-cluster.sh
create mode 100755 experiment/scripts/prometheus-backup.sh
delete mode 100755 experiment/scripts/proxy.sh
copy experiment/scripts/{database.sh => shard.sh} (54%)
create mode 100644 experiment/ssh/id_rsa
create mode 100644 experiment/ssh/id_rsa.pub
create mode 100644 experiment/taler.many.rspec
create mode 100644 experiment/taler.sharded.rspec
copy image/{grid5000/debian11-x64-common.yaml =>
centos8/grid5000/centos8-x64-min.yaml} (62%)
copy image/{ => centos8}/grid5000/from_scratch/base.yaml (100%)
copy image/{grid5000/from_scratch/debian-bullseye.yaml =>
centos8/grid5000/from_scratch/centos-8.yaml} (62%)
create mode 100644 image/centos8/grid5000/from_scratch/centos-base.yaml
copy image/{ => centos8}/grid5000/steps/aliases/defaults.yaml (100%)
create mode 100644
image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
copy image/{ => centos8}/grid5000/steps/bootstrap/download_installer.yaml
(100%)
copy image/{ => centos8}/grid5000/steps/bootstrap/prepare_appliance.yaml (100%)
copy image/{ => centos8}/grid5000/steps/bootstrap/prepare_disk.yaml (100%)
copy image/{ =>
centos8}/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml (100%)
copy image/{ => centos8}/grid5000/steps/bootstrap/start_http_server.yaml (100%)
copy image/{ => centos8}/grid5000/steps/bootstrap/start_qemu.yaml (98%)
copy image/{ => centos8}/grid5000/steps/checkpoints/simple.yaml (100%)
copy image/{ => centos8}/grid5000/steps/data/helpers/export_appliance.py (100%)
copy image/{ => centos8}/grid5000/steps/data/helpers/netinstall_iso_finder.py
(76%)
copy image/{ => centos8}/grid5000/steps/data/helpers/simple_http_server.py
(100%)
create mode 100644 image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
copy image/{ => centos8}/grid5000/steps/data/qemu-sendkeys.rb (100%)
mode change 100644 => 100755
create mode 100644
image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
copy image/{ => centos8}/grid5000/steps/disable_checkpoint.yaml (100%)
copy image/{ => centos8}/grid5000/steps/enable_checkpoint.yaml (100%)
copy image/{ => centos8}/grid5000/steps/env/bashrc (100%)
copy image/{ => centos8}/grid5000/steps/env/functions.sh (100%)
copy image/{grid5000/steps/export/debian =>
centos8/grid5000/steps/export/centos}/clean_dhcp_leases.yaml (62%)
copy image/{ => centos8}/grid5000/steps/export/do_qcow2_finish_works.yaml
(100%)
copy image/{ => centos8}/grid5000/steps/export/export_g5k.yaml (84%)
copy image/{ => centos8}/grid5000/steps/export/save_appliance_VM.yaml (100%)
create mode 100644
image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
create mode 100644 image/centos8/grid5000/steps/setup/centos/clean_system.yaml
create mode 100644
image/centos8/grid5000/steps/setup/centos/configure_system.yaml
create mode 100644 image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
create mode 100644
image/centos8/grid5000/steps/setup/centos/install_packages.yaml
create mode 100644
image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
create mode 100644 image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
create mode 100644 image/centos8/grid5000/steps/setup/set_g5k_release.yaml
create mode 100644 image/centos8/taler-centos8.yaml
rename image/{ => debian11}/grid5000/debian11-x64-common.yaml (100%)
rename image/{ => debian11}/grid5000/debian11-x64-nfs.yaml (100%)
rename image/{ => debian11}/grid5000/from_scratch/base.yaml (100%)
rename image/{ => debian11}/grid5000/from_scratch/debian-base.yaml (100%)
rename image/{ => debian11}/grid5000/from_scratch/debian-bullseye.yaml (100%)
rename image/{ => debian11}/grid5000/steps/aliases/defaults.yaml (100%)
rename image/{ =>
debian11}/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml (100%)
rename image/{ => debian11}/grid5000/steps/bootstrap/download_installer.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/bootstrap/prepare_appliance.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/bootstrap/prepare_disk.yaml (100%)
rename image/{ =>
debian11}/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml (100%)
rename image/{ => debian11}/grid5000/steps/bootstrap/start_http_server.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/bootstrap/start_qemu.yaml (100%)
rename image/{ => debian11}/grid5000/steps/checkpoints/simple.yaml (100%)
rename image/{ => debian11}/grid5000/steps/data/helpers/export_appliance.py
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/helpers/netinstall_iso_finder.py (100%)
rename image/{ => debian11}/grid5000/steps/data/helpers/simple_http_server.py
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg (100%)
rename image/{ => debian11}/grid5000/steps/data/qemu-sendkeys.rb (100%)
rename image/{ =>
debian11}/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian (100%)
rename image/{ => debian11}/grid5000/steps/data/setup/hiera/hiera.yaml (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml (100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/base.pp
(100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/big.pp
(100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/min.pp
(100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/nfs.pp
(100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/std.pp
(100%)
rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/xen.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/version (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp (100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
(100%)
rename image/{ =>
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
(100%)
rename image/{ => debian11}/grid5000/steps/disable_checkpoint.yaml (100%)
rename image/{ => debian11}/grid5000/steps/enable_checkpoint.yaml (100%)
rename image/{ => debian11}/grid5000/steps/env/bashrc (100%)
rename image/{ => debian11}/grid5000/steps/env/functions.sh (100%)
rename image/{ =>
debian11}/grid5000/steps/export/debian/clean_dhcp_leases.yaml (100%)
rename image/{ => debian11}/grid5000/steps/export/do_qcow2_finish_works.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/export/export_g5k.yaml (100%)
rename image/{ => debian11}/grid5000/steps/export/save_appliance_VM.yaml (100%)
rename image/{ => debian11}/grid5000/steps/setup/debian/clean_system.yaml
(100%)
rename image/{ =>
debian11}/grid5000/steps/setup/debian/configure_apt_sources.yaml (100%)
rename image/{ => debian11}/grid5000/steps/setup/debian/configure_system.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/setup/debian/install_packages.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/setup/debian/minimal_install.yaml
(100%)
rename image/{ => debian11}/grid5000/steps/setup/debian/run_orchestrator.yaml
(100%)
rename image/{ =>
debian11}/grid5000/steps/setup/debian/setup_orchestrator.yaml (100%)
rename image/{ => debian11}/taler-debian11.yaml (80%)
delete mode 100644 notes.txt
diff --git a/.gitignore b/.gitignore
index 4c49bd7..19ace02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
.env
+.swp
diff --git a/README.md b/README.md
index 3f170a0..6846a17 100644
--- a/README.md
+++ b/README.md
@@ -32,16 +32,19 @@ data of experiments.
### Configs
Contains the configurations for the applications in the environment.
-They will be adjusted copied to '/' (some make sure to add the correct
directory strucutre)
-once an experiment is started.
+They will be adjusted copied to '/' once an experiment is started
+(make sure that they match the images directory structure).
+
+**NOTE**: Postgres configuration is located in
`experiment/script/database[-centos].sh`
+ and not in `configs`
## Quick Start
-To run an experiment, you must
+To run an experiment, you need to
* (optionally) have a grafana instance
* Make sure the environment exists in the public direcory which is configured
in
`experiment/taler.rspec`. If its not in the grid, use `image/README.md` or
`docker/README.md`
to see how to build such an environment.
-* Read `experiment/README.md` for instructions on how to run an experiment
inside the grid
+* Read `experiment/README.md` for instructions on how to run an experiment on
Grid'5000.
diff --git a/additional/.gitignore b/additional/.gitignore
index 2af3b6f..675830d 100644
--- a/additional/.gitignore
+++ b/additional/.gitignore
@@ -1,2 +1,3 @@
plotter
-*.tar.gz
+*.tar*
+*.log
diff --git a/additional/README.md b/additional/README.md
index 25919f3..7739f9e 100644
--- a/additional/README.md
+++ b/additional/README.md
@@ -1,5 +1,22 @@
# Additional Resources for Experiments
+## persist.sh
+
+Backup Grid'5000 shares which were created by an experiment.
+Contains all logs and the node configuration.
+
+Simply use with:
+
+```bash
+./persist.sh -b <BACKUP_NAME> <OPTIONAL_PLOT_ARCHIVE_TO_INCLUDE>`.
+```
+
+Once the backup succeeded it is a good idea to delete the remaining data on
the NFS:
+
+```bash
+./persist.sh -d
+```
+
## plots
### plot.sh
@@ -26,11 +43,33 @@ Basically the steps are the following (inside plots
directory):
in the archive which is created once the plots are finished.
Default is `TO`.
+## explain-visualizer
+
+A python script which is able to execute and and summarize an SQL query against
+an exchange database. It is able to execute statements provided as argument
but also
+directly from postgres logs. In order for the logs be recognizable the
following must
+be configured in `postgresql.conf`:
+
+* `log_statement=all`
+* `log_error_verbosity=default`
+* `syslog_split_messages=off`
+
+Make sure that syslog is capable to receive bigger messages (e.g.
`$MaxMessageSize` in rsyslog).
+
+There is also a `docker-compose` which can be used to easily spawn a database
automatically applying
+the dump from the experiment database. To do so run the following steps (in
its directory):
+
+* `export DUMP_FILE=<absolute-or-relative-path-to-dump>`
+* `docker-compose up -d`
+* `./explain.py logs -U taler -d taler -H localhost <log-file>`
+
## grafana
+Dashboard json files to upload to grafana - also needed for experiment
recovery.
+
### Custom
-Contains all *custom* dashboards for the experiments.
+Contains all *custom* (and downloaded library) dashboards for the experiments.
Import them vie `Create->Import->Upload JSON` (plus sign)
The database dashboard is a combination of the following two (plus some custom
custom panels):
@@ -40,10 +79,19 @@ The database dashboard is a combination of the following
two (plus some custom c
### Library
-Additional ones needed can be imported from the library.
+Additional ones needed can be imported from the library (or as described
above).
In your Grafana instance head to `Create->Import->Import via grafana.com`
and copy those ID one after another:
* [Node Exporter Full](https://grafana.com/grafana/dashboards/1860): 1860
* [Nginx Exporter](https://grafana.com/grafana/dashboards/12708): 12708
+## rspecs
+
+Contains various kinds of rpsec files which can be used with jFed. The main
files
+can be found in `../experiment`.
+
+## recover
+
+Docker setup to recreate the Grafana dashboards of a past experiment. Please
refer
+to `recover/README.md` for usage information.
diff --git a/additional/explain-visualizer/.gitignore
b/additional/explain-visualizer/.gitignore
new file mode 100644
index 0000000..8963ec6
--- /dev/null
+++ b/additional/explain-visualizer/.gitignore
@@ -0,0 +1,4 @@
+!*.py
+!*.gitignore
+!*.yaml
+*
diff --git a/additional/explain-visualizer/docker-compose.yaml
b/additional/explain-visualizer/docker-compose.yaml
new file mode 100644
index 0000000..7c74fef
--- /dev/null
+++ b/additional/explain-visualizer/docker-compose.yaml
@@ -0,0 +1,15 @@
+version: "3.5"
+
+services:
+
+ taler-exchange:
+ image: postgres:13-alpine
+ ports:
+ - 5432:5432
+ environment:
+ POSTGRES_DB: taler
+ POSTGRES_USER: taler
+ POSTGRES_PASSWORD: taler
+ POSTGRES_HOST_AUTH_METHOD: trust
+ volumes:
+ - ${DUMP_FILE}:/docker-entrypoint-initdb.d/00-dump.sql:ro
diff --git a/additional/explain-visualizer/explain.py
b/additional/explain-visualizer/explain.py
new file mode 100755
index 0000000..e201c50
--- /dev/null
+++ b/additional/explain-visualizer/explain.py
@@ -0,0 +1,554 @@
+#!/usr/bin/env python3
+# Script to analyze the queries executed against the taler-exchange db
+
+from json import loads
+from re import compile, sub, escape
+from subprocess import check_output, CalledProcessError, STDOUT
+from enum import Enum
+from textwrap import fill
+import argparse
+from datetime import datetime
+from os import mkdir, path
+import sys
+
+try:
+ import sqlparse
+ have_sqlparse = True
+except ImportError:
+ have_sqlparse = False
+ print("NOTE: install sqlparse to get prettier sql statements")
+
+
+class Type(Enum):
+ RELATION = 0
+ MODIFY = 1
+ OTHER = 2
+
+
+class Plan:
+ def __init__(self, name: str, _type: Type, indent: int):
+ self.name = name
+ self.partitions_hit = 0
+ self.would_have_hit_partitions = 0
+ self.rows_estimated = 0
+ self.rows_returned = 0
+ self.time_spent = 0
+ self.scan_type = ""
+ self.used_index = ""
+ self.condition = ""
+ self.type = _type
+ self.operation = ""
+ self.tuples_inserted = 0
+ self.tuples_conflicting = 0
+ self.indent = " " * indent
+
+ def print(self):
+ if self.type == Type.RELATION:
+ self._print_relation()
+ elif self.type == Type.MODIFY:
+ self._print_modify()
+ elif self.type == Type.OTHER:
+ self._print_other()
+
+ def _print_relation(self):
+ print(self.indent + self.name + ":\n")
+ if self.partitions_hit == 0:
+ print(self.indent + f" Not touched")
+ print(self.indent + f" Partitions would be Hit:
{self.would_have_hit_partitions}")
+ else:
+ print(self.indent + f" Partitions Hit: {self.partitions_hit}")
+ print(self.indent + f" Time Spent: {self.time_spent} ms")
+ print(self.indent + f" Rows Estimated: {self.rows_estimated}")
+ print(self.indent + f" Rows Returned: {self.rows_returned}")
+ print(self.indent + f" Scan Method: {self.scan_type}")
+ if self.scan_type == 'Index Scan':
+ print(self.indent + f" Index Used: {self.used_index}")
+ print("")
+
+ def _print_other(self):
+ print(self.indent + f"{self.name}:")
+ print("")
+
+ def _print_modify(self):
+ print(self.indent + f"{self.name}:\n")
+ print(self.indent + f" Operation: {self.operation}")
+ print(self.indent + f" Tuples Inserted: {self.tuples_inserted}")
+ if self.tuples_conflicting != 0:
+ print(self.indent + f" Tuples Conflicting:
{self.tuples_conflicting}")
+ print("")
+
+
+# All plans from a single analyze will be stored here
+plans = {}
+
+# The plan which was the most time consuming
+most_time_consuming = Plan("default", Type.RELATION, 0)
+
+# Regex which strips the partition number from a partition
+# Must be either of the suffixes: _<N> or _default
+partitioned_re = compile('.*_([0-9]+|default)')
+
+# Regexes which will be compiled at start when the identifier of the
+# log lines is set via cli arguments
+log_statement_re = None
+log_execute_re = None
+log_get_params_re = None
+
+# Command line arguments
+args = None
+
+# In which directories to store the current analyzation
+output_dir = None
+
+# Number of queries analyzed
+queries = 0
+
+def print_query(sql):
+ """
+ Print an sql query to stdout
+ """
+ print("\n" + "=" * 80 + "\n")
+ if have_sqlparse:
+ print(sqlparse.format(sql,
+ reindent=True,
+ keyword_case='upper',
+ wrap_after=80))
+ else:
+ print(fill(text=sql, width=80))
+ print("\n" + "=" * 80 + "\n")
+
+
+def get_explain(sql) -> dict:
+ """
+ Execute EXPLAIN ANALYZE against the database, returns the plan as JSON
dictonary
+ """
+ sql = sql.replace("\n", " ").replace('"', "")
+ sql = "EXPLAIN (ANALYZE, VERBOSE, BUFFERS, FORMAT JSON) " + sql + ";"
+ try:
+ analyze_json = check_output(
+ args=['psql',
+ '-U', args.db_user,
+ '-h', args.db_host,
+ '-d', args.db_name,
+ '-p', args.db_port,
+ '-P', 'pager=off',
+ '-qtAXc', sql],
+ env={'PGPASSWD': args.db_pw},
+ timeout=10,
+ stderr=STDOUT
+ )
+ return loads(analyze_json)[0]
+ except CalledProcessError as e:
+ if not args.ignore:
+ print(e.output.decode('utf-8'), file=sys.stderr)
+ print("\nQuery returned an error, aborting\n", file=sys.stderr)
+ exit(1)
+
+
+def setup_log_regex():
+ """
+ Compile the regular expressions used to identify statements in the logs
+ Must be called only then log_id is configured in args
+ """
+ global log_statement_re, log_execute_re, log_get_params_re
+ log_statement_re = compile(f'.*{args.log_id} LOG: statement:
((?!COMMIT)(?!BEGIN)(?!SET)(?!START).*);')
+ log_execute_re = compile(f'.*{args.log_id} LOG: execute ([a-zA-Z0-9_]+):
((?!COMMIT)(?!BEGIN)(?!SET)(?!START)[^#]+)(?:#.*DETAIL: parameters: (.*))?')
+ log_get_params_re = compile('(\$\d+)+ = ([^, ]+)')
+
+
+def ensure_relation_added(relation, indent):
+ """
+ Ensure that a relation is added in the plans dictionary
+ """
+ if relation not in plans:
+ plans[relation] = Plan(relation, Type.RELATION, indent)
+
+def ensure_plan_added(plan, indent):
+ """
+ Ensure an uncategorized plan is added in the plans dictionary
+ """
+ idx = plan + str(indent)
+ plans[idx] = Plan(plan, Type.OTHER, indent)
+
+
+def ensure_modify_added(plan, indent):
+ """
+ Ensure a plan with type 'ModifyTable' is in the plans dictionary
+ """
+ idx = plan['Relation Name']
+ p = Plan(plan['Relation Name'], Type.MODIFY, indent)
+ p.operation = plan['Operation']
+ p.time_spent = plan['Actual Total Time']
+ if 'Tuples Inserted' in plan:
+ p.tuples_inserted = plan['Tuples Inserted']
+ p.tuples_conflicting = plan['Conflicting Tuples']
+ plans[idx] = p
+
+
+def check_most_expensive_time(plan: Plan):
+ """
+ Check and update the most expensive relation scan
+ """
+ global most_time_consuming
+ if most_time_consuming.time_spent < plan.time_spent:
+ most_time_consuming = plan
+
+
+def parse_scan(plan, indent):
+ """
+ Parse a JSON plan which scans a relation (not CTE Scans)
+ """
+ relation = plan['Relation Name']
+
+ # Remove partition suffix as we do not want each partition,
+ # but only the relation shown
+ if partitioned_re.match(relation):
+ relation = relation.split('_')[0:-1]
+ relation = "_".join(relation)
+
+ ensure_relation_added(relation, indent)
+ _plan = plans[relation]
+
+ if plan['Actual Loops'] > 0:
+ _plan.partitions_hit += 1
+ _plan.time_spent += (plan['Actual Total Time'] * plan['Actual Loops'])
+ _plan.rows_estimated += plan['Plan Rows']
+ _plan.rows_returned += plan['Actual Rows']
+ check_most_expensive_time(_plan)
+ else:
+ _plan.would_have_hit_partitions += 1
+
+ if _plan.scan_type == "":
+ _plan.scan_type = plan['Node Type']
+ if _plan.scan_type == 'Index Scan':
+ _plan.used_index = plan['Index Name']
+
+
+def iterate_plans():
+ """
+ Iterate the plans dict and return each plan
+ """
+ for plan in plans:
+ yield plans[plan]
+
+
+def parse_plan(plan, indent=2):
+ """
+ Parse the JSON plan returned from EXPLAIN (ANALYZE, BUFFERS, VERBOSE
FORMAT JSON)
+ """
+ if plan['Node Type'] == 'Function Scan':
+ ensure_plan_added(plan['Node Type'], indent)
+ elif 'Scan' in plan['Node Type'] and 'CTE' not in plan['Node Type']:
+ parse_scan(plan, indent + 2)
+ elif plan['Node Type'] == 'ModifyTable':
+ if plan['Operation'] == 'Insert':
+ ensure_modify_added(plan, indent)
+ elif plan['Operation'] == 'Update':
+ for _plan in plan['Plans']:
+ parse_plan(_plan, indent+2)
+ elif 'Plans' in plan:
+ ensure_plan_added(plan['Node Type'], indent)
+ for _plan in plan['Plans']:
+ parse_plan(_plan, indent + 2)
+
+
+def print_summary_and_get_total(attr_name) -> int:
+ """
+ Print a summary of the attribute with attr_name of the Plan class and
return the total
+ """
+ total = 0
+ for plan in iterate_plans():
+ if plan.type == Type.RELATION:
+ attr = getattr(plan, attr_name)
+ total += attr
+ print(" {:<25} {:>10}".format(plan.name + ":", attr))
+ print(f"\n (Total: {total})")
+ return total
+
+
+def print_and_get_non_indexed() -> int:
+ """
+ Print all non indexed scans and return the total amount
+ """
+ total = 0
+ for plan in iterate_plans():
+ if plan.scan_type == 'Seq Scan':
+ print(f" {plan.name}")
+ total += 1
+ print(f"\n (Total: {total})")
+ return total
+
+
+def parse_visualize_and_get_summary(analyze_json) -> str:
+ """
+ Parse and visualize a json plan returned from EXPLAIN (ANALYZE, BUFFERS,
VERBOSE, FORMAT JSON)
+ Returns a string with the summary (time, actual rows, sub partition rows,
partitions hit, non indexed scans)
+ """
+ if analyze_json is None:
+ return
+
+ plan = analyze_json['Plan']
+ if 'JIT' in analyze_json:
+ time = analyze_json['JIT']['Timing']['Total']
+ else:
+ time = analyze_json['Execution Time']
+
+ print("GENERAL:\n")
+ print(" {:<25} {:>10}".format("Estimated Rows:", plan['Plan Rows']))
+ print(" {:<25} {:>10}".format("Actual Rows Returned:", plan['Actual
Rows']))
+ print(" {:<25} {:>10} ms".format("Actual Execution Time:", time))
+
+ parse_plan(plan)
+
+ print("\n\nSUMMARY: \n")
+ print(f"Rows Returned by Sub-queries:")
+ print("-----------------------------\n")
+ total_sub_rows = print_summary_and_get_total('rows_returned')
+ print("\nPartitions Hit:")
+ print("---------------\n")
+ total_partitions_hit = print_summary_and_get_total('partitions_hit')
+ print("\nPartitions Hit on full Execution (will be hit if filters match):")
+ print("---------------\n")
+ total_possible_hits =
print_summary_and_get_total('would_have_hit_partitions')
+ print("\nNon Indexed Scans on:")
+ print("---------------------\n")
+ total_non_indexed_scans = print_and_get_non_indexed()
+ print("\nMost Time Consuming:")
+ print("--------------------\n")
+ print(" {:<25} {:>10} ms".format(
+ most_time_consuming.name + ":",
+ most_time_consuming.time_spent)
+ )
+ print("")
+
+ if args.verbose:
+ print("\nDETAIL:\n")
+ for p in iterate_plans():
+ p.print()
+ print("")
+
+ return "{:<10} {:<10} {:<10} {:<10} {:<10}".format(
+ time,
+ plan['Actual Rows'],
+ total_sub_rows,
+ str(total_partitions_hit)+" ("+str(total_possible_hits)+")",
+ total_non_indexed_scans
+ )
+
+
+def handle_query():
+ """
+ Handle and explain analyze a query passed as argument
+ """
+ explain = get_explain(args.sql)
+ print_query(args.sql)
+ parse_visualize_and_get_summary(explain)
+
+
+def analyze_log_query(name, sql):
+ """
+ Analyze a statement extracted from the logs
+ """
+ # reset global plans
+ global plans, most_time_consuming, queries
+
+ summary = None
+ plans = {}
+ most_time_consuming = Plan("default", Type.RELATION, 0)
+
+ name = str(queries) + "_" + name
+
+ # save the original stdout that it can be reassigned later
+ orig_stdout = sys.stdout
+
+ if explain := get_explain(sql):
+ with open(path.join(output_dir, name + ".txt"), "w+") as of:
+ # Override default stdout so we can simply print in the functions
+ sys.stdout = of
+ print_query(sql)
+ summary = parse_visualize_and_get_summary(explain)
+
+ sys.stdout = orig_stdout
+
+ if summary is None:
+ summary = "error, ignored"
+
+ # Still print, even if failed so we got the same amount each time
+ print("{:<40} {}".format(name, summary))
+ queries = queries + 1
+
+
+def handle_log_statement(match):
+ """
+ Handle a log line which begins with statement:
+ """
+ statement = match.group(1)
+ analyze_log_query("direct", statement)
+
+
+def handle_log_execute(match):
+ """
+ Handle a log line which begins with execute:
+ This method will replace all parameters in the statement which are found
in `parameters:'
+ """
+ params = None
+ name = match.group(1)
+ statement = match.group(2)
+
+ if '$' in statement:
+ _parameters = match.group(3)
+
+ if not _parameters:
+ print_query(statement)
+ err = "ERROR: Could not find query parameters\n" \
+ "Make sure to set the following in postgres.conf before
collecting logs:\n\n" \
+ " 'log_statement=all'\n" \
+ " 'syslog_split_messages=off'\n" \
+ " 'log_error_verbosity=default'\n"
+ print(err, file=sys.stderr)
+ exit(1)
+
+ params = log_get_params_re.findall(_parameters)
+
+ for param in params:
+ statement = sub(escape(param[0]) + r'\b',
+ escape(param[1]),
+ statement)
+
+ analyze_log_query(name, statement)
+
+
+def create_output_dir(basename):
+ """
+ Create the directory in which all current analyzes will be written to
+ """
+ global output_dir
+ dirname = basename + "-" + str(round(datetime.now().timestamp()))
+ output_dir = dirname
+ try:
+ mkdir(dirname)
+ except OSError as e:
+ print("ERROR: could not create directory: " + e, file=sys.stderr)
+ exit(1)
+
+
+def handle_logs():
+ """
+ Parse a log file and explain analyze all statements found matching the
log_id.
+ The script expects all parameters and the whole statement in one log line.
+ Thus the following parameters must be set in postgres.conf:
+ log_statement=all
+ syslog_split_messages=off
+ log_error_verbosity=default
+ (Syslog must be able to handle large messages)
+ """
+ logs = None
+
+ create_output_dir(path.splitext(path.basename(args.file))[0])
+
+ # Needs to be called here since log_id is not set previously
+ setup_log_regex()
+
+ try:
+ logs = open(args.file, 'r')
+ except IOError as e:
+ print(f"Error: cannot open file {args.file}")
+ print(e.strerror)
+ exit(1)
+
+ print("{:40} {:<10} {:<10} {:<10} {:<10} {:<10}".format(
+ "name",
+ "t (ms)",
+ "act-rws",
+ "sub-q-rws",
+ "prts",
+ "n-idx"
+ ))
+
+ for line in logs.readlines():
+
+ if match := log_statement_re.match(line):
+ handle_log_statement(match)
+
+ elif match := log_execute_re.match(line):
+ handle_log_execute(match)
+
+ logs.close()
+ print(f"\nINFO: detailed ouptut written to
{output_dir}/N_statement_name.txt")
+
+
+def main():
+ parser = argparse.ArgumentParser(description='Summarize Explain Analyze of
GNU Taler Database')
+
+ global_args = argparse.ArgumentParser(add_help=False)
+ global_args.add_argument('-U', '--user',
+ dest='db_user',
+ type=str,
+ default="",
+ help='Database user, default current user')
+ global_args.add_argument('-P', '--password',
+ dest='db_pw',
+ type=str,
+ default="",
+ help='Database password, default ""')
+ global_args.add_argument('-H', '--host',
+ dest='db_host',
+ type=str,
+ default="",
+ help='Database host, default unix socket')
+ global_args.add_argument('-d', '--database',
+ dest='db_name',
+ type=str,
+ default="",
+ help='Database name, default current user')
+ global_args.add_argument('-p', '--port',
+ dest='db_port',
+ type=str,
+ default="",
+ help='Database port, default 5432')
+ global_args.add_argument('-v', '--verbose',
+ dest='verbose',
+ action='store_true',
+ help='Print detailed query plan')
+ global_args.add_argument('-i', '--ignore-errors',
+ dest='ignore',
+ action='store_true',
+ help='Continue when an SQL error occurs')
+
+ s_p = parser.add_subparsers()
+
+ log_p = s_p.add_parser('logs',
+ parents=[global_args],
+ help='Execute queries from a log file (postgres
must have set log_statement=all).')
+ log_p.add_argument('-l', '--log-identifier',
+ dest='log_id',
+ type=str,
+ default="taler@taler-exchange",
+ help='Identifier (user@db_name) to filter which
statements from the logs to analyze (taler@taler-exchange)')
+ log_p.add_argument(metavar='FILE',
+ dest='file',
+ type=str,
+ help='Log file to parse and execute queries')
+ log_p.set_defaults(func=handle_logs)
+
+ sql_p = s_p.add_parser('query',
+ parents=[global_args],
+ help='Execute a specified query')
+ sql_p.add_argument(metavar='SQL',
+ dest='sql',
+ type=str,
+ help='The query to run and analyze')
+ sql_p.set_defaults(func=handle_query)
+
+ global args
+ args = parser.parse_args()
+
+ try:
+ args.func()
+ except:
+ parser.print_help()
+ parser.exit()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/additional/grafana/database.json b/additional/grafana/database.json
index aea6845..1d3140a 100644
--- a/additional/grafana/database.json
+++ b/additional/grafana/database.json
@@ -7,29 +7,15 @@
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
- },
- {
- "name": "DS_LOKI",
- "label": "Loki",
- "description": "",
- "type": "datasource",
- "pluginId": "loki",
- "pluginName": "Loki"
}
],
"__elements": [],
"__requires": [
- {
- "type": "panel",
- "id": "bargauge",
- "name": "Bar gauge",
- "version": ""
- },
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "8.3.2"
+ "version": "8.4.3"
},
{
"type": "panel",
@@ -37,12 +23,6 @@
"name": "Graph (old)",
"version": ""
},
- {
- "type": "datasource",
- "id": "loki",
- "name": "Loki",
- "version": "1.0.0"
- },
{
"type": "datasource",
"id": "prometheus",
@@ -55,12 +35,6 @@
"name": "Stat",
"version": ""
},
- {
- "type": "panel",
- "id": "table",
- "name": "Table",
- "version": ""
- },
{
"type": "panel",
"id": "timeseries",
@@ -93,7 +67,7 @@
"gnetId": 6742,
"graphTooltip": 1,
"id": null,
- "iteration": 1639595639929,
+ "iteration": 1649441739195,
"links": [],
"liveNow": false,
"panels": [
@@ -169,7 +143,7 @@
"text": {},
"textMode": "name"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -247,7 +221,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -325,7 +299,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -403,7 +377,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -481,7 +455,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -559,7 +533,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -638,7 +612,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -717,7 +691,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -795,7 +769,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -873,7 +847,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -951,7 +925,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -1007,567 +981,18 @@
},
"gridPos": {
"h": 3,
- "w": 3,
- "x": 9,
- "y": 4
- },
- "id": 68,
- "links": [],
- "maxDataPoints": 100,
- "options": {
- "colorMode": "none",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "horizontal",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr": "pg_settings_max_parallel_workers{instance=\"$instance\",
server=\"$server\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "title": "Max Parallel Workers",
- "type": "stat"
- },
- {
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "min": 13,
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "none"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 3,
- "w": 3,
- "x": 12,
- "y": 4
- },
- "id": 83,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr":
"pg_settings_max_locks_per_transaction{instance=\"$instance\",
server=\"$server\"}",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "title": "Max Locks per Transaction",
- "type": "stat"
- },
- {
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "s"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 3,
- "w": 3,
- "x": 15,
- "y": 4
- },
- "id": 82,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr":
"pg_settings_log_min_duration_statement_seconds{instance=\"$instance\",
server=\"$server\"}",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "title": "Log Min Duration Statement",
- "type": "stat"
- },
- {
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "s"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 3,
- "w": 3,
- "x": 18,
- "y": 4
- },
- "id": 90,
- "options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr":
"pg_settings_auto_explain_log_min_duration_seconds{instance=\"$instance\",
server=\"$server\"}",
- "instant": true,
- "interval": "",
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "title": "Auto Explain Log Min Duration",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "decimals": 1,
- "mappings": [
- {
- "options": {
- "match": "null",
- "result": {
- "index": 0,
- "text": "N/A"
- }
- },
- "type": "special"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "s"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 3,
- "w": 3,
- "x": 21,
- "y": 4
- },
- "id": 87,
- "links": [],
- "maxDataPoints": 100,
- "options": {
- "colorMode": "none",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "horizontal",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr":
"pg_settings_idle_in_transaction_session_timeout_seconds{instance=\"$instance\",
server=\"$server\"}",
- "format": "time_series",
- "instant": true,
- "interval": "",
- "intervalFactor": 1,
- "legendFormat": "",
- "refId": "A"
- }
- ],
- "title": "Idle in Transaction Timeout",
- "type": "stat"
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 7
- },
- "id": 85,
- "panels": [],
- "title": "Failure Statistics",
- "type": "row"
- },
- {
- "description": "Serialization Errors per Second and Request-Type",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisLabel": "Serialization Errors / Second",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "none"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 0,
- "y": 8
- },
- "id": 92,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom"
- },
- "tooltip": {
- "mode": "single"
- }
- },
- "pluginVersion": "8.2.5",
- "targets": [
- {
- "exemplar": true,
- "expr": "sum by (type)
(rate(taler_exchange_serialization_failures{}[1m]))",
- "instant": false,
- "interval": "",
- "legendFormat": "{{type}}",
- "refId": "A"
- }
- ],
- "title": "Serialization Errors",
- "transformations": [],
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "custom": {
- "axisLabel": "Slow Queries / Second",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 19,
- "gradientMode": "hue",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineInterpolation": "smooth",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "#EAB839",
- "value": 5
- },
- {
- "color": "red",
- "value": 10
- }
- ]
- },
- "unit": "SQ/s"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 9,
- "w": 12,
- "x": 12,
- "y": 8
- },
- "id": 97,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "hidden",
- "placement": "bottom"
- },
- "tooltip": {
- "mode": "single"
- }
- },
- "targets": [
- {
- "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
- "refId": "A"
- }
- ],
- "title": "Slow Queries",
- "type": "timeseries"
- },
- {
- "description": "Number of serialization errors by request endpoint
(type) since the last exchange restarts",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "text",
- "value": null
- },
- {
- "color": "red",
- "value": 100
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 9,
- "w": 10,
- "x": 0,
- "y": 17
- },
- "id": 94,
- "options": {
- "displayMode": "basic",
- "orientation": "horizontal",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showUnfilled": true,
- "text": {}
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "exemplar": true,
- "expr": "sort_desc (sum by(type)
(taler_exchange_serialization_failures{}))",
- "instant": true,
- "interval": "",
- "legendFormat": "{{type}}",
- "refId": "A"
- }
- ],
- "title": "Serialization Errors by Request Type",
- "transformations": [],
- "type": "bargauge"
- },
- {
- "fieldConfig": {
- "defaults": {
- "color": {
- "fixedColor": "text",
- "mode": "fixed"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- }
- },
- "overrides": []
- },
- "gridPos": {
- "h": 3,
- "w": 4,
- "x": 10,
- "y": 17
+ "w": 3,
+ "x": 9,
+ "y": 4
},
- "id": 76,
+ "id": 68,
+ "links": [],
+ "maxDataPoints": 100,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
"justifyMode": "auto",
- "orientation": "auto",
+ "orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
@@ -1578,66 +1003,57 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
- "expr": "sum(pg_stat_database_xact_commit{instance=~\"$instance\",
server=\"$server\", datname=\"$db\"})",
+ "expr": "pg_settings_max_parallel_workers{instance=\"$instance\",
server=\"$server\"}",
+ "format": "time_series",
"instant": true,
"interval": "",
+ "intervalFactor": 1,
"legendFormat": "",
"refId": "A"
}
],
- "title": "Count of Commited Transactions",
+ "title": "Max Parallel Workers",
"type": "stat"
},
{
- "description": "Number of serialization errors per request since the
last exchange restarts",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
+ "fixedColor": "text",
+ "mode": "fixed"
},
- "mappings": [
- {
- "options": {
- "match": "nan",
- "result": {
- "index": 0,
- "text": "-"
- }
- },
- "type": "special"
- }
- ],
+ "mappings": [],
+ "min": 13,
"thresholds": {
"mode": "absolute",
"steps": [
{
- "color": "text",
+ "color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 2
}
]
},
- "unit": "percentunit"
+ "unit": "none"
},
"overrides": []
},
"gridPos": {
- "h": 9,
- "w": 10,
- "x": 14,
- "y": 17
+ "h": 3,
+ "w": 3,
+ "x": 12,
+ "y": 4
},
- "id": 95,
+ "id": 83,
"options": {
- "displayMode": "basic",
- "orientation": "horizontal",
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
"reduceOptions": {
"calcs": [
"lastNotNull"
@@ -1645,25 +1061,25 @@
"fields": "",
"values": false
},
- "showUnfilled": true,
- "text": {}
+ "text": {},
+ "textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
- "expr": "sort_desc(sum by(type)
(rate(taler_exchange_serialization_failures{}[10m]))\n/\nsum by(type)
(rate(taler_exchange_received_requests{}[10m])))",
+ "expr":
"pg_settings_max_locks_per_transaction{instance=\"$instance\",
server=\"$server\"}",
"instant": true,
"interval": "",
- "legendFormat": "{{type}}",
+ "legendFormat": "",
"refId": "A"
}
],
- "title": "Serialization Errors / Request",
- "type": "bargauge"
+ "title": "Max Locks per Transaction",
+ "type": "stat"
},
{
- "description": "Total number of serialization errors that happened since
last exchange restarts",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
@@ -1671,7 +1087,6 @@
"mode": "fixed"
},
"mappings": [],
- "noValue": "0",
"thresholds": {
"mode": "absolute",
"steps": [
@@ -1680,17 +1095,18 @@
"value": null
}
]
- }
+ },
+ "unit": "s"
},
"overrides": []
},
"gridPos": {
"h": 3,
- "w": 4,
- "x": 10,
- "y": 20
+ "w": 3,
+ "x": 15,
+ "y": 4
},
- "id": 74,
+ "id": 82,
"options": {
"colorMode": "value",
"graphMode": "none",
@@ -1706,25 +1122,22 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
- "expr": "sum(taler_exchange_serialization_failures{})",
+ "expr":
"pg_settings_log_min_duration_statement_seconds{instance=\"$instance\",
server=\"$server\"}",
+ "instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "Total Serialization Errors",
+ "title": "Log Min Duration Statement",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Number of queries which took longer than the configured
duration",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
@@ -1732,7 +1145,6 @@
"mode": "fixed"
},
"mappings": [],
- "noValue": "0",
"thresholds": {
"mode": "absolute",
"steps": [
@@ -1741,17 +1153,18 @@
"value": null
}
]
- }
+ },
+ "unit": "s"
},
"overrides": []
},
"gridPos": {
"h": 3,
- "w": 4,
- "x": 10,
- "y": 23
+ "w": 3,
+ "x": 18,
+ "y": 4
},
- "id": 72,
+ "id": 90,
"options": {
"colorMode": "value",
"graphMode": "none",
@@ -1767,35 +1180,43 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum(count_over_time({app=\"taler-database\"} |~ \"duration:
(.*) plan:\" [$__range]))",
+ "exemplar": true,
+ "expr":
"pg_settings_auto_explain_log_min_duration_seconds{instance=\"$instance\",
server=\"$server\"}",
"instant": true,
- "range": false,
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
- "title": "Total Slow Queries",
+ "title": "Auto Explain Log Min Duration",
"type": "stat"
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
},
- "description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "custom": {
- "align": "auto",
- "displayMode": "json-view",
- "filterable": false
- },
- "mappings": [],
+ "decimals": 1,
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "index": 0,
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
@@ -1804,103 +1225,50 @@
"value": null
}
]
- }
+ },
+ "unit": "s"
},
- "overrides": [
- {
- "matcher": {
- "id": "byName",
- "options": "Count"
- },
- "properties": [
- {
- "id": "custom.width",
- "value": 100
- }
- ]
- }
- ]
+ "overrides": []
},
"gridPos": {
- "h": 7,
- "w": 24,
- "x": 0,
- "y": 26
+ "h": 3,
+ "w": 3,
+ "x": 21,
+ "y": 4
},
- "id": 89,
+ "id": 87,
+ "links": [],
+ "maxDataPoints": 100,
"options": {
- "footer": {
- "fields": "",
- "reducer": [
- "sum"
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
],
- "show": false
+ "fields": "",
+ "values": false
},
- "frameIndex": 1,
- "showHeader": true,
- "sortBy": []
+ "text": {},
+ "textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (query) (count_over_time({app=\"taler-database\"} |~
\"011Query Text:\" | regexp \".*011Query Text: (?P<query>.*)\" [$__range]))",
+ "exemplar": true,
+ "expr":
"pg_settings_idle_in_transaction_session_timeout_seconds{instance=\"$instance\",
server=\"$server\"}",
+ "format": "time_series",
"instant": true,
- "range": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "",
"refId": "A"
}
],
- "title": "Slow Query Occurences",
- "transformations": [
- {
- "id": "groupBy",
- "options": {
- "fields": {
- "Query": {
- "aggregations": [
- "count"
- ],
- "operation": "groupby"
- },
- "Value": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "Value #A": {
- "aggregations": [
- "lastNotNull"
- ],
- "operation": "aggregate"
- },
- "app": {
- "aggregations": [
- "count"
- ],
- "operation": "aggregate"
- },
- "query": {
- "aggregations": [],
- "operation": "groupby"
- }
- }
- }
- },
- {
- "id": "organize",
- "options": {
- "excludeByName": {},
- "indexByName": {},
- "renameByName": {
- "Value #A (lastNotNull)": "Count",
- "Value (lastNotNull)": "Count",
- "app (count)": "Count",
- "query": "Query"
- }
- }
- }
- ],
- "type": "table"
+ "title": "Idle in Transaction Timeout",
+ "type": "stat"
},
{
"collapsed": false,
@@ -1908,7 +1276,7 @@
"h": 1,
"w": 24,
"x": 0,
- "y": 33
+ "y": 7
},
"id": 36,
"panels": [],
@@ -1916,10 +1284,6 @@
"type": "row"
},
{
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fieldConfig": {
"defaults": {
"color": {
@@ -1975,7 +1339,7 @@
"h": 10,
"w": 12,
"x": 0,
- "y": 34
+ "y": 8
},
"id": 6,
"links": [],
@@ -1991,14 +1355,19 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"pluginVersion": "8.2.1",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "pg_stat_activity_count{instance=\"$instance\",
datname=\"$db\", server=\"$server\"}",
+ "expr": "pg_stat_activity_count{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2014,17 +1383,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 10,
"w": 12,
"x": 12,
- "y": 34
+ "y": 8
},
"hiddenSeries": false,
"id": 8,
@@ -2046,7 +1411,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2056,8 +1421,12 @@
"steppedLine": false,
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\",
datname=\"$db\", server=\"$server\"}[5m])",
+ "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2065,8 +1434,12 @@
"refId": "A"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr":
"irate(pg_stat_database_xact_rollback{instance=\"$instance\", datname=\"$db\",
server=\"$server\"}[5m])",
+ "expr":
"irate(pg_stat_database_xact_rollback{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2111,17 +1484,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
- "y": 44
+ "y": 18
},
"hiddenSeries": false,
"id": 18,
@@ -2143,7 +1512,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2153,15 +1522,27 @@
"steppedLine": false,
"targets": [
{
- "expr": "irate(pg_stat_database_tup_fetched{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_tup_fetched{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "SELECT (index scan)",
"refId": "A"
},
{
- "expr": "irate(pg_stat_database_tup_returned{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_tup_returned{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "SELECT (table scan)",
"refId": "B"
@@ -2203,17 +1584,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
- "y": 44
+ "y": 18
},
"hiddenSeries": false,
"id": 20,
@@ -2235,7 +1612,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2245,22 +1622,40 @@
"steppedLine": false,
"targets": [
{
- "expr": "irate(pg_stat_database_tup_inserted{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_tup_inserted{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "INSERT",
"refId": "A"
},
{
- "expr": "irate(pg_stat_database_tup_updated{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_tup_updated{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "UPDATE",
"refId": "B"
},
{
- "expr": "irate(pg_stat_database_tup_deleted{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_tup_deleted{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "DELETE",
"refId": "C"
@@ -2302,17 +1697,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
- "y": 52
+ "y": 26
},
"hiddenSeries": false,
"id": 42,
@@ -2336,7 +1727,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2346,8 +1737,14 @@
"steppedLine": false,
"targets": [
{
- "expr": "pg_stat_activity_max_tx_duration{instance=\"$instance\",
datname=\"$db\"}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "pg_stat_activity_max_tx_duration{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "max_tx_duration [{{state}}]",
"refId": "A"
@@ -2388,17 +1785,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
- "y": 52
+ "y": 26
},
"hiddenSeries": false,
"id": 44,
@@ -2419,7 +1812,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2429,8 +1822,12 @@
"steppedLine": false,
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "pg_stat_database_blks_hit{instance=\"$instance\",
datname=\"$db\", server=\"$server\"} /
(pg_stat_database_blks_read{instance=\"$instance\", datname=\"$db\",
server=\"$server\"} + pg_stat_database_blks_hit{instance=\"$instance\",
datname=\"$db\", server=\"$server\"})",
+ "expr": "pg_stat_database_blks_hit{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"} /
(pg_stat_database_blks_read{instance=\"$instance\", datname=~\"taler(.*)\",
server=\"$server\"} + pg_stat_database_blks_hit{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"})",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2478,7 +1875,7 @@
"h": 1,
"w": 24,
"x": 0,
- "y": 60
+ "y": 34
},
"id": 50,
"panels": [],
@@ -2500,7 +1897,7 @@
"h": 6,
"w": 17,
"x": 0,
- "y": 61
+ "y": 35
},
"hiddenSeries": false,
"id": 46,
@@ -2523,7 +1920,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2615,17 +2012,13 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 6,
"w": 7,
"x": 17,
- "y": 61
+ "y": 35
},
"hiddenSeries": false,
"id": 28,
@@ -2646,7 +2039,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2656,8 +2049,12 @@
"steppedLine": false,
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\",
datname=\"$db\", server=\"$server\"}[5m])",
+ "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2665,8 +2062,12 @@
"refId": "B"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\",
datname=\"$db\", server=\"$server\"}[5m])",
+ "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2711,10 +2112,6 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"decimals": 0,
"fill": 1,
"fillGradient": 0,
@@ -2722,7 +2119,7 @@
"h": 7,
"w": 17,
"x": 0,
- "y": 67
+ "y": 41
},
"hiddenSeries": false,
"id": 30,
@@ -2745,7 +2142,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2755,8 +2152,12 @@
"steppedLine": false,
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "pg_locks_count{instance=\"$instance\", datname=\"$db\",
server=\"$server\"}",
+ "expr": "pg_locks_count{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}",
"format": "time_series",
"interval": "",
"intervalFactor": 1,
@@ -2802,10 +2203,6 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"description": "Total amount of data written to temporary files by
queries in this database. All temporary files are counted, regardless of why
the temporary file was created, and regardless of the log_temp_files setting.",
"fill": 1,
"fillGradient": 0,
@@ -2813,7 +2210,7 @@
"h": 7,
"w": 7,
"x": 17,
- "y": 67
+ "y": 41
},
"hiddenSeries": false,
"id": 40,
@@ -2834,7 +2231,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2844,8 +2241,14 @@
"steppedLine": false,
"targets": [
{
- "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\",
datname=\"$db\"}[5m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\",
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
"format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "Temp Bytes",
"refId": "A"
@@ -2896,7 +2299,7 @@
"h": 9,
"w": 24,
"x": 0,
- "y": 74
+ "y": 48
},
"hiddenSeries": false,
"id": 38,
@@ -2918,7 +2321,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -2983,10 +2386,6 @@
"bars": false,
"dashLength": 10,
"dashes": false,
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"editable": true,
"error": false,
"fill": 1,
@@ -2996,7 +2395,7 @@
"h": 7,
"w": 20,
"x": 0,
- "y": 83
+ "y": 57
},
"hiddenSeries": false,
"id": 80,
@@ -3020,7 +2419,7 @@
"alertThreshold": true
},
"percentage": false,
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"pointradius": 5,
"points": false,
"renderer": "flot",
@@ -3031,9 +2430,13 @@
"targets": [
{
"alias": "fetched",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_tup_fetched{datname=~\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_tup_fetched{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3087,9 +2490,13 @@
},
{
"alias": "fetched",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_tup_returned{datname=~\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_tup_returned{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3143,9 +2550,13 @@
},
{
"alias": "fetched",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_tup_inserted{datname=~\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_tup_inserted{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3199,9 +2610,13 @@
},
{
"alias": "fetched",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_tup_updated{datname=~\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_tup_updated{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3255,9 +2670,13 @@
},
{
"alias": "fetched",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_tup_deleted{datname=~\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_tup_deleted{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3344,10 +2763,6 @@
}
},
{
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
"fieldConfig": {
"defaults": {
"color": {
@@ -3387,7 +2802,7 @@
"h": 7,
"w": 4,
"x": 20,
- "y": 83
+ "y": 57
},
"id": 78,
"links": [],
@@ -3407,12 +2822,16 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"dsType": "prometheus",
"exemplar": true,
- "expr":
"sum(irate(pg_stat_database_xact_commit{datname=\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m])) +
sum(irate(pg_stat_database_xact_rollback{datname=\"$db\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
+ "expr":
"sum(irate(pg_stat_database_xact_commit{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m])) +
sum(irate(pg_stat_database_xact_rollback{datname=~\"taler(.*)\",instance=~\"$instance\",
server=\"$server\"}[5m]))",
"format": "time_series",
"groupBy": [
{
@@ -3470,7 +2889,7 @@
}
],
"refresh": "1m",
- "schemaVersion": 33,
+ "schemaVersion": 35,
"style": "dark",
"tags": [
"performance",
@@ -3504,32 +2923,6 @@
"type": "query",
"useTags": false
},
- {
- "current": {},
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "",
- "hide": 0,
- "includeAll": false,
- "label": "Database",
- "multi": false,
- "name": "db",
- "options": [],
- "query": {
- "query":
"label_values(pg_stat_database_tup_fetched{datname!~\"template.*|postgres\"},datname)",
- "refId": "Prometheus-db-Variable-Query"
- },
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 1,
- "tagValuesQuery": "",
- "tagsQuery": "",
- "type": "query",
- "useTags": false
- },
{
"current": {},
"datasource": {
@@ -3587,6 +2980,6 @@
"timezone": "",
"title": "Database",
"uid": "2FTtdeOnk",
- "version": 81,
+ "version": 99,
"weekStart": ""
}
\ No newline at end of file
diff --git a/additional/grafana/request-statistics.json
b/additional/grafana/exchange.json
similarity index 54%
copy from additional/grafana/request-statistics.json
copy to additional/grafana/exchange.json
index 4eb95cc..e60c581 100644
--- a/additional/grafana/request-statistics.json
+++ b/additional/grafana/exchange.json
@@ -1,5 +1,13 @@
{
"__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ },
{
"name": "DS_LOKI",
"label": "Loki",
@@ -11,11 +19,17 @@
],
"__elements": [],
"__requires": [
+ {
+ "type": "panel",
+ "id": "bargauge",
+ "name": "Bar gauge",
+ "version": ""
+ },
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "8.3.2"
+ "version": "8.4.3"
},
{
"type": "datasource",
@@ -23,12 +37,24 @@
"name": "Loki",
"version": "1.0.0"
},
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
{
"type": "panel",
"id": "stat",
"name": "Stat",
"version": ""
},
+ {
+ "type": "panel",
+ "id": "table",
+ "name": "Table",
+ "version": ""
+ },
{
"type": "panel",
"id": "timeseries",
@@ -55,12 +81,10 @@
}
]
},
- "description": "",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
- "iteration": 1639471729428,
"links": [],
"liveNow": false,
"panels": [
@@ -72,84 +96,45 @@
"x": 0,
"y": 0
},
- "id": 12,
+ "id": 18,
"panels": [],
- "title": "Network",
+ "title": "Cryptographic Operations",
"type": "row"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "round-trip-time wallet to proxy",
+ "description": "Number of signatures created with the configured cipher
of the exchange (rsa or cs).",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 80
- }
- ]
+ "mode": "palette-classic"
},
- "unit": "s"
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 3,
- "x": 7,
- "y": 1
- },
- "id": 162,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "text": {},
- "textMode": "auto"
- },
- "pluginVersion": "8.3.2",
- "targets": [
- {
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"wallet\" | unwrap duration(time) [$__range])",
- "instant": true,
- "range": false,
- "refId": "A"
- }
- ],
- "title": "RTT Wallet-Proxy",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "round-trip-time proxy to exchange",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
+ "custom": {
+ "axisLabel": "Signatures per Second",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
},
"mappings": [],
"thresholds": {
@@ -158,61 +143,81 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "none"
},
"overrides": []
},
"gridPos": {
- "h": 4,
- "w": 3,
- "x": 10,
+ "h": 8,
+ "w": 12,
+ "x": 0,
"y": 1
},
- "id": 176,
+ "id": 22,
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
},
- "text": {},
- "textMode": "auto"
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
},
- "pluginVersion": "8.3.2",
"targets": [
{
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"proxy\" | unwrap duration(time) [$__range])",
- "instant": true,
- "range": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum by(type) (rate(taler_exchange_num_signatures{}[1m]))",
+ "interval": "",
+ "legendFormat": "{{ type }}",
"refId": "A"
}
],
- "title": "RTT Proxy-Exchange",
- "type": "stat"
+ "title": "Signatures",
+ "type": "timeseries"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "round-trip-time exchange to database",
+ "description": "Number of signature verifications with the configured
cipher of the exchange (rsa or cs).",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "Verifications per Second",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
},
"mappings": [],
"thresholds": {
@@ -221,73 +226,56 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "none"
},
"overrides": []
},
"gridPos": {
- "h": 4,
- "w": 3,
- "x": 13,
+ "h": 8,
+ "w": 12,
+ "x": 12,
"y": 1
},
- "id": 178,
+ "id": 20,
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
},
- "text": {},
- "textMode": "auto"
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
},
- "pluginVersion": "8.3.2",
"targets": [
{
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"exchange\" | unwrap duration(time) [$__range])",
- "instant": true,
- "range": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum by (type)
(rate(taler_exchange_num_signature_verifications{}[1m]))",
+ "interval": "",
+ "legendFormat": "{{ type }}",
"refId": "A"
}
],
- "title": "RTT Exchange-Database",
- "type": "stat"
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 230,
- "panels": [],
- "title": "Related Panels",
- "type": "row"
+ "title": "Signature Verifications",
+ "type": "timeseries"
},
{
- "description": "Serialization Errors per Second and Request-Type",
+ "description": "Number of key exchanges",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
- "axisLabel": "Serialization Errors / Second",
+ "axisLabel": "Signatures per Second",
"axisPlacement": "auto",
"barAlignment": 0,
"drawStyle": "line",
@@ -329,12 +317,12 @@
"overrides": []
},
"gridPos": {
- "h": 7,
+ "h": 8,
"w": 12,
"x": 0,
- "y": 6
+ "y": 9
},
- "id": 280,
+ "id": 23,
"options": {
"legend": {
"calcs": [],
@@ -342,28 +330,43 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
- "pluginVersion": "8.2.5",
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "sum by (type)
(rate(taler_exchange_serialization_failures{}[1m]))",
- "instant": false,
+ "expr": "sum by (type) (rate(taler_exchange_num_keyexchanges{}
[2m]))",
"interval": "",
- "legendFormat": "{{type}}",
+ "legendFormat": "{{ type }}",
"refId": "A"
}
],
- "title": "Serialization Errors",
- "transformations": [],
+ "title": "Key Exchanges",
"type": "timeseries"
},
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 17
+ },
+ "id": 16,
+ "panels": [],
+ "title": "Database",
+ "type": "row"
+ },
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "",
"fieldConfig": {
@@ -383,7 +386,7 @@
"tooltip": false,
"viz": false
},
- "lineInterpolation": "smooth",
+ "lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
@@ -422,12 +425,12 @@
"overrides": []
},
"gridPos": {
- "h": 7,
+ "h": 9,
"w": 12,
- "x": 12,
- "y": 6
+ "x": 0,
+ "y": 18
},
- "id": 228,
+ "id": 4,
"options": {
"legend": {
"calcs": [],
@@ -435,12 +438,18 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+ "hide": false,
"refId": "A"
}
],
@@ -448,29 +457,39 @@
"type": "timeseries"
},
{
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 13
- },
- "id": 20,
- "panels": [],
- "repeat": "endpoint",
- "title": "Request Times ($endpoint)",
- "type": "row"
- },
- {
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Minimal response time for successful (200) requests to
$endpoint",
+ "description": "Serialization Errors per Second and Request-Type",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "Serialization Errors / Second",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
},
"mappings": [],
"thresholds": {
@@ -479,100 +498,84 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "none"
},
"overrides": []
},
"gridPos": {
- "h": 6,
- "w": 3,
- "x": 0,
- "y": 14
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 18
},
- "id": 25,
+ "id": 2,
"options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "center",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
},
- "text": {},
- "textMode": "auto"
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.2.5",
"targets": [
{
- "expr": "min_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "instant": true,
- "legendFormat": "",
- "range": false,
- "refId": "A",
- "resolution": 2
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum by (type)
(rate(taler_exchange_serialization_failures{}[1m]))",
+ "instant": false,
+ "interval": "",
+ "legendFormat": "{{type}}",
+ "refId": "A"
}
],
- "title": "Minimal [$interval]",
- "type": "stat"
+ "title": "Serialization Errors",
+ "transformations": [],
+ "type": "timeseries"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Average request time of successful (200) requests to
$endpoint",
+ "description": "Number of serialization errors by request endpoint
(type) since the last exchange restarts",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "continuous-GrYlRd"
+ "mode": "thresholds"
},
"mappings": [],
- "max": 5,
- "min": 0,
"thresholds": {
- "mode": "percentage",
+ "mode": "absolute",
"steps": [
{
- "color": "green",
+ "color": "text",
"value": null
},
- {
- "color": "#EAB839",
- "value": 60
- },
{
"color": "red",
- "value": 80
+ "value": 100
}
]
- },
- "unit": "s"
+ }
},
"overrides": []
},
"gridPos": {
- "h": 6,
- "w": 3,
- "x": 3,
- "y": 14
+ "h": 8,
+ "w": 10,
+ "x": 0,
+ "y": 27
},
- "id": 18,
+ "id": 6,
"options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
+ "displayMode": "basic",
+ "orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
@@ -580,63 +583,70 @@
"fields": "",
"values": false
},
- "text": {},
- "textMode": "auto"
+ "showUnfilled": true,
+ "text": {}
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
+ "exemplar": true,
+ "expr": "sort_desc (sum by(type)
(taler_exchange_serialization_failures{}))",
"instant": true,
- "range": false,
- "refId": "A",
- "resolution": 2
+ "interval": "",
+ "legendFormat": "{{type}}",
+ "refId": "A"
}
],
- "title": "Average [$interval]",
- "type": "stat"
+ "title": "Serialization Errors by Request Type",
+ "transformations": [],
+ "type": "bargauge"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Maximal response time for successful (200) requests to
$endpoint",
+ "description": "Number of serialization errors per request since the
last exchange restarts",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "mappings": [],
+ "mappings": [
+ {
+ "options": {
+ "match": "nan",
+ "result": {
+ "index": 0,
+ "text": "-"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
{
- "color": "green",
+ "color": "text",
"value": null
},
{
"color": "red",
- "value": 80
+ "value": 2
}
]
},
- "unit": "s"
+ "unit": "percentunit"
},
"overrides": []
},
"gridPos": {
- "h": 6,
- "w": 3,
- "x": 6,
- "y": 14
+ "h": 8,
+ "w": 10,
+ "x": 10,
+ "y": 27
},
- "id": 37,
+ "id": 12,
"options": {
- "colorMode": "value",
- "graphMode": "none",
- "justifyMode": "center",
- "orientation": "auto",
+ "displayMode": "basic",
+ "orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
@@ -644,35 +654,30 @@
"fields": "",
"values": false
},
- "text": {},
- "textMode": "auto"
+ "showUnfilled": true,
+ "text": {}
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "max_over_time({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt [$interval]) by (app)",
- "hide": false,
+ "exemplar": true,
+ "expr": "sort_desc(sum by(type)
(rate(taler_exchange_serialization_failures{}[10m]))\n/\nsum by(type)
(rate(taler_exchange_received_requests{}[10m])))",
"instant": true,
- "legendFormat": "",
- "range": false,
- "refId": "B",
- "resolution": 2
+ "interval": "",
+ "legendFormat": "{{type}}",
+ "refId": "A"
}
],
- "title": "Maximal [$interval]",
- "type": "stat"
+ "title": "Serialization Errors / Request",
+ "type": "bargauge"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Number of successful requests (=200) to $endpoint",
+ "description": "Total number of serialization errors that happened since
last exchange restarts",
"fieldConfig": {
"defaults": {
"color": {
- "fixedColor": "semi-dark-orange",
- "mode": "thresholds"
+ "fixedColor": "text",
+ "mode": "fixed"
},
"mappings": [],
"noValue": "0",
@@ -689,16 +694,16 @@
"overrides": []
},
"gridPos": {
- "h": 3,
- "w": 3,
- "x": 9,
- "y": 14
+ "h": 4,
+ "w": 4,
+ "x": 20,
+ "y": 27
},
- "id": 148,
+ "id": 8,
"options": {
"colorMode": "value",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -710,54 +715,38 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} |~
\"s=200\" |~ \"${endpoint:dublequote} \"[$interval]))",
+ "exemplar": true,
+ "expr": "sum(taler_exchange_serialization_failures{})",
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
- "title": "Successful Requests [$interval]",
+ "title": "Total Serialization Errors",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 35
},
- "description": "Average response time for requests to $endpoint",
+ "id": 32,
+ "panels": [],
+ "title": "Slow Queries",
+ "type": "row"
+ },
+ {
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 86,
- "gradientMode": "opacity",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineInterpolation": "smooth",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
+ "mode": "thresholds"
},
"mappings": [],
"thresholds": {
@@ -772,82 +761,103 @@
"value": 80
}
]
- },
- "unit": "s"
+ }
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 8,
"w": 12,
- "x": 12,
- "y": 14
+ "x": 0,
+ "y": 36
},
- "id": 14,
+ "id": 30,
"options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom"
+ "displayMode": "gradient",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
},
- "tooltip": {
- "mode": "single"
- }
+ "showUnfilled": true
},
- "pluginVersion": "8.2.1",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt | s=200 |~
\"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "instant": false,
- "legendFormat": "200",
- "range": true,
- "refId": "A",
- "resolution": 10
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "taler_database_slow_query_duration_hist_bucket{}",
+ "format": "heatmap",
+ "interval": "",
+ "legendFormat": "{{ le }}",
+ "refId": "A"
}
],
- "title": "Request Time AVG [$interval]",
- "type": "timeseries"
+ "title": "Slow Query Distribution",
+ "transformations": [
+ {
+ "id": "renameByRegex",
+ "options": {
+ "regex": "(.*)",
+ "renamePattern": "$1 ms"
+ }
+ }
+ ],
+ "type": "bargauge"
},
{
"datasource": {
"type": "loki",
"uid": "${DS_LOKI}"
},
- "description": "Number of failed requests (!=200) to $endpoint",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "mappings": [],
- "noValue": "0",
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
- },
- {
- "color": "orange",
- "value": 1
}
]
- }
+ },
+ "unit": "ms"
},
"overrides": []
},
"gridPos": {
- "h": 3,
+ "h": 4,
"w": 3,
- "x": 9,
- "y": 17
+ "x": 12,
+ "y": 36
},
- "id": 31,
+ "id": 33,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -856,59 +866,66 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} !~
\"s=200\" |~ \"${endpoint:dublequote} \" [$interval]))",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "min_over_time(({app=\"taler-database\"} |~ \"duration:\" |
regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+ "queryType": "instant",
"refId": "A"
}
],
- "title": "Failed Requests [$interval]",
+ "title": "Min [5m]",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Median response time for successful (200) requests to
$endpoint",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "mappings": [],
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "ms"
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 4,
"w": 3,
- "x": 0,
- "y": 20
+ "x": 15,
+ "y": 36
},
- "id": 41,
+ "id": 25,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -917,22 +934,24 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.50, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "rate(taler_database_slow_query_duration_hist_sum{}[5m]) /
rate(taler_database_slow_query_duration_hist_count{} [5m])",
"instant": true,
+ "interval": "",
"legendFormat": "",
- "range": false,
- "refId": "F",
- "resolution": 2
+ "refId": "A"
}
],
- "title": "Median [$interval]",
+ "title": "Average [5m]",
"type": "stat"
},
{
@@ -940,41 +959,48 @@
"type": "loki",
"uid": "${DS_LOKI}"
},
- "description": "90% of requests to $endpoint complete successfully (200)
below this time",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "mappings": [],
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "ms"
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 4,
"w": 3,
- "x": 3,
- "y": 20
+ "x": 18,
+ "y": 36
},
- "id": 40,
+ "id": 34,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -983,64 +1009,130 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.90, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
- "instant": true,
- "legendFormat": "90% Quantile ",
- "range": false,
- "refId": "E",
- "resolution": 2
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "max_over_time(({app=\"taler-database\"} |~ \"duration:\" |
regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+ "queryType": "instant",
+ "refId": "A"
}
],
- "title": "90th Percentile [$interval]",
+ "title": "Max [5m]",
"type": "stat"
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "description": "99% of requests to $endpoint complete successfully (200)
below this time",
+ "description": "Number of queries which took longer than the configured
duration in the last 5 minutes",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
+ "fixedColor": "text",
+ "mode": "fixed"
},
"mappings": [],
+ "noValue": "0",
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 36
+ },
+ "id": 10,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "sum(count_over_time({app=\"taler-database\",
type=\"slow-query\"} [5m]))",
+ "instant": true,
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Total Slow Queries [5m]",
+ "type": "stat"
+ },
+ {
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
},
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
{
- "color": "red",
- "value": 80
+ "color": "green",
+ "value": null
}
]
},
- "unit": "s"
+ "unit": "ms"
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 4,
"w": 3,
- "x": 6,
- "y": 20
+ "x": 12,
+ "y": 40
},
- "id": 39,
+ "id": 26,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -1049,22 +1141,24 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.99, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "histogram_quantile(0.5,
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
"instant": true,
+ "interval": "",
"legendFormat": "",
- "range": false,
- "refId": "D",
- "resolution": 2
+ "refId": "A"
}
],
- "title": "99th Percentile [$interval]",
+ "title": "Median [5m]",
"type": "stat"
},
{
@@ -1072,41 +1166,116 @@
"type": "loki",
"uid": "${DS_LOKI}"
},
- "description": "Standard deviation of response times for successful
(200) requests to $endpoint",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
- "mappings": [],
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 15,
+ "y": 40
+ },
+ "id": 35,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "stddev_over_time(({app=\"taler-database\"} |~ \"duration:\"
| regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+ "queryType": "instant",
+ "refId": "A"
+ }
+ ],
+ "title": "Stddev [5m]",
+ "type": "stat"
+ },
+ {
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
},
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
{
- "color": "red",
- "value": 80
+ "color": "green",
+ "value": null
}
]
},
- "unit": "s"
+ "unit": "ms"
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 4,
"w": 3,
- "x": 9,
- "y": 20
+ "x": 18,
+ "y": 40
},
- "id": 38,
+ "id": 27,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -1115,22 +1284,95 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "stddev_over_time(({app=\"taler_proxy\"} |~ \"s=200\" |
logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "hide": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "histogram_quantile(0.9,
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
"instant": true,
+ "interval": "",
"legendFormat": "",
- "range": false,
- "refId": "C",
- "resolution": 2
+ "refId": "A"
+ }
+ ],
+ "title": "90th Percentile [5m]",
+ "type": "stat"
+ },
+ {
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null+nan",
+ "result": {
+ "index": 0,
+ "text": "0"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "ms"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 40
+ },
+ "id": 28,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "histogram_quantile(0.99,
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
}
],
- "title": "Standard Deviation [$interval]",
+ "title": "99th Percentile [5m]",
"type": "stat"
},
{
@@ -1142,35 +1384,12 @@
"fieldConfig": {
"defaults": {
"color": {
- "mode": "palette-classic"
+ "mode": "thresholds"
},
"custom": {
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 0,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 5,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "never",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
+ "align": "auto",
+ "displayMode": "json-view",
+ "filterable": false
},
"mappings": [],
"thresholds": {
@@ -1179,208 +1398,141 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
}
},
- "overrides": []
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Count"
+ },
+ "properties": [
+ {
+ "id": "custom.width",
+ "value": 100
+ }
+ ]
+ }
+ ]
},
"gridPos": {
- "h": 6,
- "w": 12,
- "x": 12,
- "y": 20
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 44
},
- "id": 107,
+ "id": 14,
"options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom"
+ "footer": {
+ "fields": "",
+ "reducer": [
+ "sum"
+ ],
+ "show": false
},
- "tooltip": {
- "mode": "single"
- }
+ "frameIndex": 1,
+ "showHeader": true,
+ "sortBy": []
},
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (s) (count_over_time(({app=\"taler_proxy\"} | logfmt
|~ \"${endpoint:dublequote} \") [$interval]))",
- "legendFormat": "{{s}}",
- "refId": "A",
- "resolution": 10
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "sum by (query) (count_over_time({app=\"taler-database\",
type=\"slow-query\"} | regexp \"(?P<query>.*)\" [$__range]))",
+ "instant": true,
+ "range": false,
+ "refId": "A"
}
],
- "title": "Number of Requests [$interval]",
- "type": "timeseries"
+ "title": "Slow Query Occurences",
+ "transformations": [
+ {
+ "id": "groupBy",
+ "options": {
+ "fields": {
+ "Query": {
+ "aggregations": [
+ "count"
+ ],
+ "operation": "groupby"
+ },
+ "Value": {
+ "aggregations": [
+ "lastNotNull"
+ ],
+ "operation": "aggregate"
+ },
+ "Value #A": {
+ "aggregations": [
+ "lastNotNull"
+ ],
+ "operation": "aggregate"
+ },
+ "app": {
+ "aggregations": [
+ "count"
+ ],
+ "operation": "aggregate"
+ },
+ "query": {
+ "aggregations": [],
+ "operation": "groupby"
+ }
+ }
+ }
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {},
+ "indexByName": {},
+ "renameByName": {
+ "Value #A (lastNotNull)": "Count",
+ "Value (lastNotNull)": "Count",
+ "app (count)": "Count",
+ "query": "Query"
+ }
+ }
+ },
+ {
+ "id": "sortBy",
+ "options": {
+ "fields": {},
+ "sort": [
+ {
+ "desc": true,
+ "field": "Count"
+ }
+ ]
+ }
+ }
+ ],
+ "type": "table"
}
],
- "refresh": "1m",
- "schemaVersion": 33,
+ "refresh": "10s",
+ "schemaVersion": 35,
"style": "dark",
"tags": [
"performance",
"taler"
],
"templating": {
- "list": [
- {
- "auto": false,
- "auto_count": 30,
- "auto_min": "10s",
- "current": {
- "selected": true,
- "text": "1m",
- "value": "1m"
- },
- "hide": 0,
- "label": "interval",
- "name": "interval",
- "options": [
- {
- "selected": false,
- "text": "30s",
- "value": "30s"
- },
- {
- "selected": true,
- "text": "1m",
- "value": "1m"
- },
- {
- "selected": false,
- "text": "2m",
- "value": "2m"
- },
- {
- "selected": false,
- "text": "3m",
- "value": "3m"
- },
- {
- "selected": false,
- "text": "5m",
- "value": "5m"
- },
- {
- "selected": false,
- "text": "10m",
- "value": "10m"
- },
- {
- "selected": false,
- "text": "15m",
- "value": "15m"
- },
- {
- "selected": false,
- "text": "20m",
- "value": "20m"
- },
- {
- "selected": false,
- "text": "30m",
- "value": "30m"
- },
- {
- "selected": false,
- "text": "1h",
- "value": "1h"
- }
- ],
- "query": "30s,1m,2m,3m,5m,10m,15m,20m,30m,1h",
- "queryValue": "",
- "refresh": 2,
- "skipUrlSync": false,
- "type": "interval"
- },
- {
- "current": {
- "selected": false,
- "text": "All",
- "value": "$__all"
- },
- "hide": 0,
- "includeAll": true,
- "label": "endpoint",
- "multi": false,
- "name": "endpoint",
- "options": [
- {
- "selected": true,
- "text": "All",
- "value": "$__all"
- },
- {
- "selected": false,
- "text": "/withdraw",
- "value": "/withdraw"
- },
- {
- "selected": false,
- "text": "/reveal",
- "value": "/reveal"
- },
- {
- "selected": false,
- "text": "/melt",
- "value": "/melt"
- },
- {
- "selected": false,
- "text": "/deposit",
- "value": "/deposit"
- },
- {
- "selected": false,
- "text": "/reserves/[A-Z0-9]+",
- "value": "/reserves/[A-Z0-9]+"
- }
- ],
- "query": "/withdraw,/reveal,/melt,/deposit,/reserves/[A-Z0-9]+",
- "queryValue": "",
- "skipUrlSync": false,
- "type": "custom"
- }
- ]
+ "list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
- "timepicker": {
- "hidden": false,
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ],
- "type": "timepicker"
- },
- "timezone": "browser",
- "title": "Request Statistics",
- "uid": "WcfSXqDnk",
- "version": 131,
+ "timepicker": {},
+ "timezone": "",
+ "title": "Exchange",
+ "uid": "NYO0EIE7k",
+ "version": 38,
"weekStart": ""
}
\ No newline at end of file
diff --git a/additional/grafana/load-statistics.json
b/additional/grafana/load-statistics.json
index c335d36..6fef09f 100644
--- a/additional/grafana/load-statistics.json
+++ b/additional/grafana/load-statistics.json
@@ -23,7 +23,7 @@
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "8.3.2"
+ "version": "8.4.6"
},
{
"type": "datasource",
@@ -132,7 +132,7 @@
{
"matcher": {
"id": "byRegexp",
- "options": "CPU Busy .*"
+ "options": "CPU Busy"
},
"properties": [
{
@@ -174,11 +174,16 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
"expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
"instant": false,
@@ -188,16 +193,20 @@
"refId": "A"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "avg by (mode) (sum by (mode, instance)
(rate(node_cpu_seconds_total{mode=~\"system|user\",
component=\"exchange\"}[$__rate_interval])))",
+ "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\",
component=\"exchange\"}[$__rate_interval]))*100)",
"hide": false,
"interval": "",
"intervalFactor": 1,
- "legendFormat": "CPU Busy {{mode}}",
+ "legendFormat": "CPU Busy",
"refId": "B"
}
],
- "title": " [Exchange] Requests vs CPU",
+ "title": " [Exchange] Requests vs Average CPU",
"type": "timeseries"
},
{
@@ -292,7 +301,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -379,7 +389,7 @@
{
"matcher": {
"id": "byRegexp",
- "options": "CPU Busy .*"
+ "options": "CPU Busy"
},
"properties": [
{
@@ -421,11 +431,16 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
"expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
"interval": "",
@@ -433,11 +448,15 @@
"refId": "A"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "avg by (mode) (sum by (mode,
instance)(rate(node_cpu_seconds_total{mode=~\"system|user|iowait\",
component=\"database\"}[$__rate_interval])) )",
+ "expr": "100 - (avg by (instance)
(rate(node_cpu_seconds_total{mode=\"idle\",
component=\"database\"}[$__rate_interval]))*100)",
"hide": false,
"interval": "",
- "legendFormat": "CPU Busy {{mode}}",
+ "legendFormat": "CPU Busy",
"refId": "B"
}
],
@@ -536,7 +555,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -653,19 +673,28 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr": "nginx_http_requests_total{}",
+ "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
"interval": "",
"intervalFactor": 1,
"legendFormat": "Requests",
"refId": "A"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
"expr": "sum(pg_database_size_bytes{instance=\"127.0.0.1:9187\"})",
"hide": false,
@@ -674,7 +703,7 @@
"refId": "C"
}
],
- "title": "Total Requests vs Disk Space used",
+ "title": "[Database] Total Requests vs Disk Space used",
"type": "timeseries"
},
{
@@ -727,28 +756,28 @@
{
"matcher": {
"id": "byName",
- "options": "I/O Utilization"
+ "options": "Requests"
},
"properties": [
{
- "id": "custom.axisPlacement",
- "value": "right"
- },
- {
- "id": "unit",
- "value": "percentunit"
+ "id": "custom.axisLabel",
+ "value": "Requests / Second"
}
]
},
{
"matcher": {
- "id": "byName",
- "options": "Requests"
+ "id": "byRegexp",
+ "options": "I/O Utilization(.*)"
},
"properties": [
{
- "id": "custom.axisLabel",
- "value": "Requests / Second"
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "percentunit"
}
]
}
@@ -769,11 +798,16 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
"expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
"interval": "",
@@ -782,15 +816,19 @@
"refId": "A"
},
{
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
"exemplar": true,
- "expr":
"sum(rate(node_disk_io_time_seconds_total{component=\"database\"}
[$__rate_interval]))",
+ "expr": "sum by (device)
(rate(node_disk_io_time_seconds_total{component=\"database\"}
[$__rate_interval]))",
"hide": false,
"interval": "",
- "legendFormat": "I/O Utilization",
+ "legendFormat": "I/O Utilization ({{device}})",
"refId": "C"
}
],
- "title": "Requests vs I/O Utilization",
+ "title": "[Database] Requests vs I/O Utilization",
"type": "timeseries"
},
{
@@ -885,7 +923,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -906,7 +945,7 @@
"refId": "C"
}
],
- "title": "Requests vs Cache Hit Rate",
+ "title": "[Database] Requests vs Cache Hit Rate",
"type": "timeseries"
},
{
@@ -1019,7 +1058,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -1040,13 +1080,13 @@
"type": "loki",
"uid": "${DS_LOKI}"
},
- "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+ "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
"hide": false,
"legendFormat": "Slow Queries",
"refId": "C"
}
],
- "title": "Requests vs Slow Queries",
+ "title": "[Database] Requests vs Slow Queries",
"type": "timeseries"
},
{
@@ -1133,7 +1173,7 @@
"gridPos": {
"h": 9,
"w": 12,
- "x": 0,
+ "x": 6,
"y": 38
},
"id": 18,
@@ -1144,7 +1184,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"pluginVersion": "8.2.5",
@@ -1166,14 +1207,281 @@
"refId": "A"
}
],
- "title": "Requests vs Serialization Errors",
+ "title": "[Database] Requests vs Serialization Errors",
"transformations": [],
"type": "timeseries"
},
+ {
+ "collapsed": false,
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 47
+ },
+ "id": 21,
+ "panels": [],
+ "title": "Others",
+ "type": "row"
+ },
+ {
+ "description": "Number of requests versus average wallet node CPU usage",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 2,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "CPU Busy"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "percent"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Requests"
+ },
+ "properties": [
+ {
+ "id": "custom.axisLabel",
+ "value": "Requests / Second"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 48
+ },
+ "id": 19,
+ "maxDataPoints": 500,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
+ "instant": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "Requests",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\",
component=\"wallet\"}[$__rate_interval]))*100)",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "CPU Busy",
+ "refId": "B"
+ }
+ ],
+ "title": " [Wallet] Requests vs Average CPU",
+ "type": "timeseries"
+ },
+ {
+ "description": "Number of requests versus average exchange proxy node
CPU usage",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 2,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byRegexp",
+ "options": "CPU Busy"
+ },
+ "properties": [
+ {
+ "id": "custom.axisPlacement",
+ "value": "right"
+ },
+ {
+ "id": "unit",
+ "value": "percent"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Requests"
+ },
+ "properties": [
+ {
+ "id": "custom.axisLabel",
+ "value": "Requests / Second"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 48
+ },
+ "id": 22,
+ "maxDataPoints": 500,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
+ "instant": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "Requests",
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\",
component=\"proxy\"}[$__rate_interval]))*100)",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "CPU Busy",
+ "refId": "B"
+ }
+ ],
+ "title": " [Exch Proxy] Requests vs Average CPU",
+ "type": "timeseries"
+ },
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "",
"fieldConfig": {
@@ -1258,8 +1566,8 @@
"gridPos": {
"h": 9,
"w": 12,
- "x": 12,
- "y": 38
+ "x": 6,
+ "y": 57
},
"id": 16,
"options": {
@@ -1269,30 +1577,41 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt |
__error__!=\"LogfmtParserErr\" | unwrap rt ) [1m]) by (app)",
- "legendFormat": "Average Response time ",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+ "hide": false,
+ "legendFormat": "Slow Queries",
"refId": "A",
- "resolution": 5
+ "resolution": 1
},
{
- "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "avg
((rate(taler_requests_response_time_hist_sum{endpoint!~\"keys|terms\",
status=\"200\"} [2m]) ) /
(rate(taler_requests_response_time_hist_count{endpoint!~\"keys|terms\",
status=\"200\"} [2m])))",
"hide": false,
- "legendFormat": "Slow Queries",
- "refId": "C",
- "resolution": 1
+ "interval": "",
+ "legendFormat": "Average Response Time",
+ "refId": "B"
}
],
"title": "Proxy Response Time vs Slow Queries",
"type": "timeseries"
}
],
- "refresh": "1m",
- "schemaVersion": 33,
+ "refresh": "10s",
+ "schemaVersion": 35,
"style": "dark",
"tags": [
"taler",
@@ -1309,6 +1628,6 @@
"timezone": "",
"title": "Load Statistics",
"uid": "rkyhDAt7z",
- "version": 48,
+ "version": 72,
"weekStart": ""
}
\ No newline at end of file
diff --git a/additional/grafana/nodes.json b/additional/grafana/nodes.json
new file mode 100644
index 0000000..b911c03
--- /dev/null
+++ b/additional/grafana/nodes.json
@@ -0,0 +1,13820 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__elements": [],
+ "__requires": [
+ {
+ "type": "panel",
+ "id": "gauge",
+ "name": "Gauge",
+ "version": ""
+ },
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "8.4.3"
+ },
+ {
+ "type": "panel",
+ "id": "graph",
+ "name": "Graph (old)",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "stat",
+ "name": "Stat",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "$$hashKey": "object:1058",
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "gnetId": 1860,
+ "graphTooltip": 0,
+ "id": null,
+ "iteration": 1649441854879,
+ "links": [
+ {
+ "icon": "external link",
+ "tags": [],
+ "title": "Github",
+ "type": "link",
+ "url": "https://github.com/rfrail3/grafana-dashboards"
+ },
+ {
+ "icon": "external link",
+ "tags": [],
+ "title": "Grafana",
+ "type": "link",
+ "url": "https://grafana.com/grafana/dashboards/1860"
+ }
+ ],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 261,
+ "panels": [],
+ "title": "Quick CPU / Mem / Disk",
+ "type": "row"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Busy state of all CPU cores together",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 85
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 95
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 1
+ },
+ "id": 20,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"(((count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by
(cpu))) - avg(sum by
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))))
* 100) / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"})
by (cpu))",
+ "hide": false,
+ "intervalFactor": 1,
+ "legendFormat": "",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "CPU Busy",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Busy state of all CPU cores together (5 min average)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 85
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 95
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 1
+ },
+ "id": 155,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr": "avg(node_load5{instance=\"$node\",job=\"$job\"}) /
count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))
* 100",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "Sys Load (5m avg)",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Busy state of all CPU cores together (15 min average)",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 85
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 95
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 6,
+ "y": 1
+ },
+ "id": 19,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr": "avg(node_load15{instance=\"$node\",job=\"$job\"}) /
count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))
* 100",
+ "hide": false,
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "Sys Load (15m avg)",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Non available RAM memory",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 0,
+ "mappings": [],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 80
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 90
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 9,
+ "y": 1
+ },
+ "hideTimeOverride": false,
+ "id": 16,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"((node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}) /
(node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "100 -
((node_memory_MemAvailable_bytes{instance=\"$node\",job=\"$job\"} * 100) /
node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"})",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 1,
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "title": "RAM Used",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Used Swap",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 10
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 25
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 12,
+ "y": 1
+ },
+ "id": 21,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) /
(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100",
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "SWAP Used",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Used Root FS",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "max": 100,
+ "min": 0,
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 80
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 90
+ }
+ ]
+ },
+ "unit": "percent"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 15,
+ "y": 1
+ },
+ "id": 154,
+ "links": [],
+ "options": {
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr": "100 -
((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}
* 100) /
node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "Root FS Used",
+ "type": "gauge"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Total number of CPU cores",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "short"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 18,
+ "y": 1
+ },
+ "id": 14,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by
(cpu))",
+ "interval": "",
+ "intervalFactor": 1,
+ "legendFormat": "",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "CPU Cores",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "System uptime",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 1,
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 4,
+ "x": 20,
+ "y": 1
+ },
+ "hideTimeOverride": true,
+ "id": 15,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr": "node_time_seconds{instance=\"$node\",job=\"$job\"} -
node_boot_time_seconds{instance=\"$node\",job=\"$job\"}",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "Uptime",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Total RootFS",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 0,
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "rgba(50, 172, 45, 0.97)",
+ "value": null
+ },
+ {
+ "color": "rgba(237, 129, 40, 0.89)",
+ "value": 70
+ },
+ {
+ "color": "rgba(245, 54, 54, 0.9)",
+ "value": 90
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 18,
+ "y": 3
+ },
+ "id": 23,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "RootFS Total",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Total RAM",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 0,
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 20,
+ "y": 3
+ },
+ "id": 75,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}",
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "RAM Total",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Total SWAP",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "decimals": 0,
+ "mappings": [
+ {
+ "options": {
+ "match": "null",
+ "result": {
+ "text": "N/A"
+ }
+ },
+ "type": "special"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "bytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 22,
+ "y": 3
+ },
+ "id": 18,
+ "links": [],
+ "maxDataPoints": 100,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "horizontal",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "expr":
"node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}",
+ "intervalFactor": 1,
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "title": "SWAP Total",
+ "type": "stat"
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 5
+ },
+ "id": 263,
+ "panels": [],
+ "title": "Basic CPU / Mem / Net / Disk",
+ "type": "row"
+ },
+ {
+ "aliasColors": {
+ "Busy": "#EAB839",
+ "Busy Iowait": "#890F02",
+ "Busy other": "#1F78C1",
+ "Idle": "#052B51",
+ "Idle - Waiting for something to happen": "#052B51",
+ "guest": "#9AC48A",
+ "idle": "#052B51",
+ "iowait": "#EAB839",
+ "irq": "#BF1B00",
+ "nice": "#C15C17",
+ "softirq": "#E24D42",
+ "steal": "#FCE2DE",
+ "system": "#508642",
+ "user": "#5195CE"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "description": "Basic CPU info",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 6
+ },
+ "hiddenSeries": false,
+ "id": 77,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 250,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": true,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "Busy Iowait",
+ "color": "#890F02"
+ },
+ {
+ "alias": "Idle",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "Busy System",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "Busy User",
+ "color": "#0A437C"
+ },
+ {
+ "alias": "Busy Other",
+ "color": "#6D1F62"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum by
(instance)(rate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Busy System",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(instance)(rate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Busy User",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(instance)(rate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Busy Iowait",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(instance)(rate(node_cpu_seconds_total{mode=~\".*irq\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Busy IRQs",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr": "sum
(rate(node_cpu_seconds_total{mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Busy Other",
+ "refId": "E",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Idle",
+ "refId": "F",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "CPU Basic",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:123",
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "max": "100",
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:124",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "SWAP Used": "#BF1B00",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap Used": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "description": "Basic memory usage",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 6
+ },
+ "hiddenSeries": false,
+ "id": 78,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "RAM Total",
+ "color": "#E0F9D7",
+ "fill": 0,
+ "stack": false
+ },
+ {
+ "alias": "RAM Cache + Buffer",
+ "color": "#052B51"
+ },
+ {
+ "alias": "RAM Free",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "Avaliable",
+ "color": "#DEDAF7",
+ "fill": 0,
+ "stack": false
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "RAM Total",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}
- node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} -
(node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} +
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"})",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "RAM Used",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} +
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "RAM Cache + Buffer",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "RAM Free",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr":
"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "SWAP Used",
+ "refId": "E",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Basic",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Recv_bytes_eth2": "#7EB26D",
+ "Recv_bytes_lo": "#0A50A1",
+ "Recv_drop_eth2": "#6ED0E0",
+ "Recv_drop_lo": "#E0F9D7",
+ "Recv_errs_eth2": "#BF1B00",
+ "Recv_errs_lo": "#CCA300",
+ "Trans_bytes_eth2": "#7EB26D",
+ "Trans_bytes_lo": "#0A50A1",
+ "Trans_drop_eth2": "#6ED0E0",
+ "Trans_drop_lo": "#E0F9D7",
+ "Trans_errs_eth2": "#BF1B00",
+ "Trans_errs_lo": "#CCA300",
+ "recv_bytes_lo": "#0A50A1",
+ "recv_drop_eth0": "#99440A",
+ "recv_drop_lo": "#967302",
+ "recv_errs_eth0": "#BF1B00",
+ "recv_errs_lo": "#890F02",
+ "trans_bytes_eth0": "#7EB26D",
+ "trans_bytes_lo": "#0A50A1",
+ "trans_drop_eth0": "#99440A",
+ "trans_drop_lo": "#967302",
+ "trans_errs_eth0": "#BF1B00",
+ "trans_errs_lo": "#890F02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Basic network info per interface",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 13
+ },
+ "hiddenSeries": false,
+ "id": 74,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "recv {{device}}",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "trans {{device}} ",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Basic",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bps",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "pps",
+ "label": "",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 3,
+ "description": "Disk space used of all filesystems mounted",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 13
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 152,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "100 -
((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}
* 100) /
node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk Space Used Basic",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percent",
+ "logBase": 1,
+ "max": "100",
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 20
+ },
+ "id": 265,
+ "panels": [],
+ "title": "CPU / Memory / Net / Disk",
+ "type": "row"
+ },
+ {
+ "aliasColors": {
+ "Idle - Waiting for something to happen": "#052B51",
+ "guest": "#9AC48A",
+ "idle": "#052B51",
+ "iowait": "#EAB839",
+ "irq": "#BF1B00",
+ "nice": "#C15C17",
+ "softirq": "#E24D42",
+ "steal": "#FCE2DE",
+ "system": "#508642",
+ "user": "#5195CE"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 0,
+ "y": 21
+ },
+ "hiddenSeries": false,
+ "id": 3,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 250,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": true,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "interval": "10s",
+ "intervalFactor": 2,
+ "legendFormat": "System - Processes executing in kernel mode",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "User - Normal processes executing in user mode",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='nice',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Nice - Niced processes executing in user mode",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Idle - Waiting for something to happen",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Iowait - Waiting for I/O to complete",
+ "refId": "E",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='irq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Irq - Servicing interrupts",
+ "refId": "F",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='softirq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Softirq - Servicing softirqs",
+ "refId": "G",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='steal',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Steal - Time spent in other operating systems when
running in a virtualized environment",
+ "refId": "H",
+ "step": 240
+ },
+ {
+ "expr": "sum by
(mode)(rate(node_cpu_seconds_total{mode='guest',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
* 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Guest - Time spent running a virtual CPU for a
guest operating system",
+ "refId": "I",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "CPU",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "percentage",
+ "logBase": 1,
+ "max": "100",
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap - Swap memory usage": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839",
+ "Unused - Free memory unassigned": "#052B51"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 12,
+ "y": 21
+ },
+ "hiddenSeries": false,
+ "id": 24,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Hardware Corrupted - *./",
+ "stack": false
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}
- node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Apps - Memory used by user-space applications",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "PageTables - Memory used to map between virtual and
physical memory addresses",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "SwapCache - Memory that keeps track of pages that
have been fetched from swap but not yet been modified",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Slab - Memory used by the kernel to cache data
structures for its own use (caches like inode, dentry, etc)",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Cache - Parked file data (file content) cache",
+ "refId": "E",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Buffers - Block device (e.g. harddisk) cache",
+ "refId": "F",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Unused - Free memory unassigned",
+ "refId": "G",
+ "step": 240
+ },
+ {
+ "expr":
"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} -
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Swap - Swap space used",
+ "refId": "H",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Hardware Corrupted - Amount of RAM that the kernel
identified as corrupted / not working",
+ "refId": "I",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Stack",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "receive_packets_eth0": "#7EB26D",
+ "receive_packets_lo": "#E24D42",
+ "transmit_packets_eth0": "#7EB26D",
+ "transmit_packets_lo": "#E24D42"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 0,
+ "y": 33
+ },
+ "hiddenSeries": false,
+ "id": 84,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:5871",
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:5884",
+ "format": "bps",
+ "label": "bits out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:5885",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 3,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 12,
+ "y": 33
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 156,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": false,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} -
node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk Space Used",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 0,
+ "y": 45
+ },
+ "hiddenSeries": false,
+ "id": 229,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Read.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - Reads completed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Writes completed",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk IOps",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "iops",
+ "label": "IO read (-) / write (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "io time": "#890F02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 3,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 12,
+ "y": 45
+ },
+ "hiddenSeries": false,
+ "id": 42,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*read*./",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*sda.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde.*/",
+ "color": "#E24D42"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Successfully read bytes",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Successfully written bytes",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "I/O Usage Read / Write",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:965",
+ "format": "Bps",
+ "label": "bytes read (-) / write (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:966",
+ "format": "ms",
+ "label": "",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "io time": "#890F02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 3,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 4,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 12,
+ "w": 12,
+ "x": 0,
+ "y": 57
+ },
+ "hiddenSeries": false,
+ "id": 127,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}
[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "I/O Utilization",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1041",
+ "format": "percentunit",
+ "label": "%util",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1042",
+ "format": "s",
+ "label": "",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 69
+ },
+ "id": 266,
+ "panels": [],
+ "title": "Memory Meminfo",
+ "type": "row"
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 70
+ },
+ "hiddenSeries": false,
+ "id": 136,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 2,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Inactive - Memory which has been less recently
used. It is more eligible to be reclaimed for other purposes",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Active - Memory that has been used more recently
and usually not reclaimed unless absolutely necessary",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Active / Inactive",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 70
+ },
+ "hiddenSeries": false,
+ "id": 135,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Committed_AS - *./"
+ },
+ {
+ "alias": "/.*CommitLimit - *./",
+ "color": "#BF1B00",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Committed_AS - Amount of memory presently allocated
on the system",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "CommitLimit - Amount of memory currently available
to be allocated on the system",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Commited",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 80
+ },
+ "hiddenSeries": false,
+ "id": 191,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Inactive_file - File-backed memory on inactive LRU
list",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Inactive_anon - Anonymous and swap cache on
inactive LRU list, including tmpfs (shmem)",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Active_file - File-backed memory on active LRU
list",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Active_anon - Anonymous and swap cache on active
least-recently-used (LRU) list, including tmpfs",
+ "refId": "D",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Active / Inactive Detail",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "bytes",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "Total Swap": "#614D93",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 80
+ },
+ "hiddenSeries": false,
+ "id": 130,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 2,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Writeback - Memory which is actively being written
back to disk",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "WritebackTmp - Memory used by FUSE for temporary
writeback buffers",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Dirty - Memory which is waiting to get written back
to the disk",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Writeback and Dirty",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 90
+ },
+ "hiddenSeries": false,
+ "id": 138,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:4131",
+ "alias": "ShmemHugePages - Memory used by shared memory (shmem) and
tmpfs allocated with huge pages",
+ "fill": 0
+ },
+ {
+ "$$hashKey": "object:4138",
+ "alias": "ShmemHugePages - Memory used by shared memory (shmem) and
tmpfs allocated with huge pages",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Mapped - Used memory in mapped pages files which
have been mmaped, such as libraries",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Shmem - Used shared memory (shared between several
processes, thus including RAM disks)",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "ShmemHugePages - Memory used by shared memory
(shmem) and tmpfs allocated with huge pages",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "ShmemPmdMapped - Ammount of shared (shmem/tmpfs)
memory backed by huge pages",
+ "refId": "D",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Shared and Mapped",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:4106",
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:4107",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "Total Swap": "#614D93",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 90
+ },
+ "hiddenSeries": false,
+ "id": 131,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 2,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed
on memory pressure",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "SReclaimable - Part of Slab, that might be
reclaimed, such as caches",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Slab",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 100
+ },
+ "hiddenSeries": false,
+ "id": 70,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "VmallocChunk - Largest contigious block of vmalloc
area which is free",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "VmallocTotal - Total size of vmalloc memory area",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "VmallocUsed - Amount of vmalloc area which is used",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Vmalloc",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 100
+ },
+ "hiddenSeries": false,
+ "id": 159,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Bounce - Memory used for block device bounce
buffers",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Bounce",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 110
+ },
+ "hiddenSeries": false,
+ "id": 129,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Inactive *./",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "AnonHugePages - Memory in anonymous huge pages",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "AnonPages - Memory in user pages not backed by
files",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Anonymous",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 110
+ },
+ "hiddenSeries": false,
+ "id": 160,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 2,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "KernelStack - Kernel memory stack. This is not
reclaimable",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "PerCPU - Per CPU memory allocated dynamically by
loadable modules",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Kernel / CPU",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#806EB7",
+ "Total RAM + Swap": "#806EB7",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 120
+ },
+ "hiddenSeries": false,
+ "id": 140,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "HugePages_Free - Huge pages in the pool that are
not yet allocated",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment
to allocate from the pool has been made, but no allocation has yet been made",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "HugePages_Surp - Huge pages in the pool above the
value in /proc/sys/vm/nr_hugepages",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory HugePages Counter",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "pages",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#806EB7",
+ "Total RAM + Swap": "#806EB7",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 120
+ },
+ "hiddenSeries": false,
+ "id": 71,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 2,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "HugePages - Total size of the pool of huge pages",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Hugepagesize - Huge Page size",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory HugePages Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 130
+ },
+ "hiddenSeries": false,
+ "id": 128,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "DirectMap1G - Amount of pages mapped as this size",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "DirectMap2M - Amount of pages mapped as this size",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "DirectMap4K - Amount of pages mapped as this size",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory DirectMap",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 130
+ },
+ "hiddenSeries": false,
+ "id": 137,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Unevictable - Amount of unevictable memory that
can't be swapped out for a variety of reasons",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "MLocked - Size of pages locked to memory using the
mlock() system call",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Unevictable and MLocked",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "Total Swap": "#614D93",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 140
+ },
+ "hiddenSeries": false,
+ "id": 132,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "NFS Unstable - Memory in NFS pages sent to the
server, but not yet commited to the storage",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory NFS",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 150
+ },
+ "id": 267,
+ "panels": [],
+ "title": "Memory Vmstat",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 151
+ },
+ "hiddenSeries": false,
+ "id": 176,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*out/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pagesin - Page in operations",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pagesout - Page out operations",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Pages In / Out",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "pages out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 151
+ },
+ "hiddenSeries": false,
+ "id": 22,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*out/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pswpin - Pages swapped in",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pswpout - Pages swapped out",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Pages Swap In / Out",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "pages out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Apps": "#629E51",
+ "Buffers": "#614D93",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Free": "#0A437C",
+ "Hardware Corrupted - Amount of RAM that the kernel identified as
corrupted / not working": "#CFFAFF",
+ "Inactive": "#584477",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "RAM_Free": "#E0F9D7",
+ "Slab": "#806EB7",
+ "Slab_Cache": "#E0752D",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Swap_Free": "#2F575E",
+ "Unused": "#EAB839"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 161
+ },
+ "hiddenSeries": false,
+ "id": 175,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 350,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:6118",
+ "alias": "Pgfault - Page major and minor fault operations",
+ "fill": 0,
+ "stack": false
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pgfault - Page major and minor fault operations",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pgmajfault - Major page fault operations",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])
-
rate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Pgminfault - Minor page fault operations",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Memory Page Faults",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6133",
+ "format": "short",
+ "label": "faults",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6134",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "Active": "#99440A",
+ "Buffers": "#58140C",
+ "Cache": "#6D1F62",
+ "Cached": "#511749",
+ "Committed": "#508642",
+ "Dirty": "#6ED0E0",
+ "Free": "#B7DBAB",
+ "Inactive": "#EA6460",
+ "Mapped": "#052B51",
+ "PageTables": "#0A50A1",
+ "Page_Tables": "#0A50A1",
+ "Slab_Cache": "#EAB839",
+ "Swap": "#BF1B00",
+ "Swap_Cache": "#C15C17",
+ "Total": "#511749",
+ "Total RAM": "#052B51",
+ "Total RAM + Swap": "#052B51",
+ "Total Swap": "#614D93",
+ "VmallocUsed": "#EA6460"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 2,
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 161
+ },
+ "hiddenSeries": false,
+ "id": 307,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "oom killer invocations ",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "OOM Killer",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:5373",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:5374",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 171
+ },
+ "id": 293,
+ "panels": [],
+ "title": "System Timesync",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 172
+ },
+ "hiddenSeries": false,
+ "id": 260,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Variation*./",
+ "color": "#890F02"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Estimated error in seconds",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Time offset in between local system and reference
clock",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Maximum error in seconds",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Time Syncronized Drift",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "s",
+ "label": "seconds",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 172
+ },
+ "hiddenSeries": false,
+ "id": 291,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Phase-locked loop time adjust",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Time PLL Adjust",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 182
+ },
+ "hiddenSeries": false,
+ "id": 168,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Variation*./",
+ "color": "#890F02"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_timex_sync_status{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Is clock synchronized to a reliable server (1 =
yes, 0 = no)",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Local clock frequency adjustment",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Time Syncronized Status",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 182
+ },
+ "hiddenSeries": false,
+ "id": 294,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Seconds between clock ticks",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "International Atomic Time (TAI) offset",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Time Misc",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "s",
+ "label": "seconds",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 192
+ },
+ "id": 312,
+ "panels": [],
+ "title": "System Processes",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 193
+ },
+ "hiddenSeries": false,
+ "id": 62,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_procs_blocked{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Processes blocked waiting for I/O to complete",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_procs_running{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Processes in runnable state",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Processes Status",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6500",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6501",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 193
+ },
+ "hiddenSeries": false,
+ "id": 315,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_processes_state{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ state }}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Processes State",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6500",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6501",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 203
+ },
+ "hiddenSeries": false,
+ "id": 148,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_forks_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Processes forks second",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Processes Forks",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6640",
+ "format": "short",
+ "label": "forks / sec",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6641",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 203
+ },
+ "hiddenSeries": false,
+ "id": 149,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Max.*/",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Processes virtual memory size in bytes",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Maximum amount of virtual memory available in
bytes",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"rate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Processes virtual memory size in bytes",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"rate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Maximum amount of virtual memory available in
bytes",
+ "refId": "D",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Processes Memory",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decbytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 213
+ },
+ "hiddenSeries": false,
+ "id": 313,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:709",
+ "alias": "PIDs limit",
+ "color": "#F2495C",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_processes_pids{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Number of PIDs",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_processes_max_processes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "PIDs limit",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "PIDs Number and Limit",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6500",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6501",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 213
+ },
+ "hiddenSeries": false,
+ "id": 305,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:4963",
+ "alias": "/.*waiting.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{ cpu }} - seconds spent running a process",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{ cpu }} - seconds spent by processing waiting
for this CPU",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Process schedule stats Running / Waiting",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:4860",
+ "format": "s",
+ "label": "seconds",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:4861",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 223
+ },
+ "hiddenSeries": false,
+ "id": 314,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:709",
+ "alias": "Threads limit",
+ "color": "#F2495C",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_processes_threads{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Allocated threads",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_processes_max_threads{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Threads limit",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Threads Number and Limit",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6500",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6501",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 233
+ },
+ "id": 269,
+ "panels": [],
+ "title": "System Misc",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 234
+ },
+ "hiddenSeries": false,
+ "id": 8,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Context switches",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_intr_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Interrupts",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Context Switches / Interrupts",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 234
+ },
+ "hiddenSeries": false,
+ "id": 7,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_load1{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 4,
+ "legendFormat": "Load 1m",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_load5{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 4,
+ "legendFormat": "Load 5m",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_load15{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 4,
+ "legendFormat": "Load 15m",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "System Load",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6261",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6262",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 244
+ },
+ "hiddenSeries": false,
+ "id": 259,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Critical*./",
+ "color": "#E24D42",
+ "fill": 0
+ },
+ {
+ "alias": "/.*Max*./",
+ "color": "#EF843C",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ type }} - {{ info }}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Interrupts Detail",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 244
+ },
+ "hiddenSeries": false,
+ "id": 306,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{ cpu }}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Schedule timeslices executed by each cpu",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:4860",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:4861",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 254
+ },
+ "hiddenSeries": false,
+ "id": 151,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_entropy_available_bits{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Entropy available to random number generators",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Entropy",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6568",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6569",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 254
+ },
+ "hiddenSeries": false,
+ "id": 308,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Time spent",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "CPU time spent in user and system contexts",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:4860",
+ "format": "s",
+ "label": "seconds",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:4861",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 264
+ },
+ "hiddenSeries": false,
+ "id": 64,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:6323",
+ "alias": "/.*Max*./",
+ "color": "#890F02",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "process_max_fds{instance=\"$node\",job=\"$job\"}",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Maximum open file descriptors",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "process_open_fds{instance=\"$node\",job=\"$job\"}",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Open file descriptors",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "File Descriptors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6338",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6339",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 274
+ },
+ "id": 304,
+ "panels": [],
+ "title": "Hardware Misc",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 275
+ },
+ "hiddenSeries": false,
+ "id": 158,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:6726",
+ "alias": "/.*Critical*./",
+ "color": "#E24D42",
+ "fill": 0
+ },
+ {
+ "$$hashKey": "object:6727",
+ "alias": "/.*Max*./",
+ "color": "#EF843C",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ chip }} {{ sensor }} temp",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ chip }} {{ sensor }} Critical",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ chip }} {{ sensor }} Critical Historical",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr":
"node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ chip }} {{ sensor }} Max",
+ "refId": "E",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Hardware temperature monitor",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:6750",
+ "format": "celsius",
+ "label": "temperature",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:6751",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 275
+ },
+ "hiddenSeries": false,
+ "id": 300,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:1655",
+ "alias": "/.*Max*./",
+ "color": "#EF843C",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Current {{ name }} in {{ type }}",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Max {{ name }} in {{ type }}",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Throttle cooling device",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1678",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1679",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 285
+ },
+ "hiddenSeries": false,
+ "id": 302,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_power_supply_online{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ power_supply }} online",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Power supply",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1678",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1679",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 295
+ },
+ "id": 296,
+ "panels": [],
+ "title": "Systemd",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 296
+ },
+ "hiddenSeries": false,
+ "id": 297,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{ name }} Connections",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Systemd Sockets",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 296
+ },
+ "hiddenSeries": false,
+ "id": 298,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "Failed",
+ "color": "#F2495C"
+ },
+ {
+ "alias": "Inactive",
+ "color": "#FF9830"
+ },
+ {
+ "alias": "Active",
+ "color": "#73BF69"
+ },
+ {
+ "alias": "Deactivating",
+ "color": "#FFCB7D"
+ },
+ {
+ "alias": "Activating",
+ "color": "#C8F2C2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Activating",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Active",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Deactivating",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Failed",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr":
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Inactive",
+ "refId": "E",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Systemd Units State",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 306
+ },
+ "id": 270,
+ "panels": [],
+ "title": "Storage Disk",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The number (after merges) of I/O requests completed per
second for the device",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 307
+ },
+ "hiddenSeries": false,
+ "id": 9,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:2033",
+ "alias": "/.*Read.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "$$hashKey": "object:2034",
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "$$hashKey": "object:2035",
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "$$hashKey": "object:2036",
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "$$hashKey": "object:2037",
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "$$hashKey": "object:2038",
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "$$hashKey": "object:2039",
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "$$hashKey": "object:2040",
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "$$hashKey": "object:2041",
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "$$hashKey": "object:2042",
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "$$hashKey": "object:2043",
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "$$hashKey": "object:2044",
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "$$hashKey": "object:2045",
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "$$hashKey": "object:2046",
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "$$hashKey": "object:2047",
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "$$hashKey": "object:2048",
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "$$hashKey": "object:2049",
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "$$hashKey": "object:2050",
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "$$hashKey": "object:2051",
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "$$hashKey": "object:2052",
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "$$hashKey": "object:2053",
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - Reads completed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Writes completed",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk IOps Completed",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:2186",
+ "format": "iops",
+ "label": "IO read (-) / write (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:2187",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The number of bytes read from or written to the device
per second",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 307
+ },
+ "hiddenSeries": false,
+ "id": 33,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Read.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - Read bytes",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Written bytes",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk R/W Data",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:369",
+ "format": "Bps",
+ "label": "bytes read (-) / write (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:370",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The average time for requests issued to the device to be
served. This includes the time spent by the requests in queue and the time
spent servicing them.",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 3,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 317
+ },
+ "hiddenSeries": false,
+ "id": 37,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Read.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])
/
rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - r_await",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])
/
rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - w_await",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk Average Wait Time",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:441",
+ "format": "s",
+ "label": "time. read (-) / write (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:442",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The average queue length of the requests that were
issued to the device",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 317
+ },
+ "hiddenSeries": false,
+ "id": 35,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}}",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Average Queue Size",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:513",
+ "format": "none",
+ "label": "aqu-sz",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:514",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The number of read and write requests merged per second
that were queued to the device",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 327
+ },
+ "hiddenSeries": false,
+ "id": 133,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Read.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Read merged",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Write merged",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk R/W Merged",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:585",
+ "format": "iops",
+ "label": "I/Os",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:586",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "Percentage of elapsed time during which I/O requests
were issued to the device (bandwidth utilization for the device). Device
saturation occurs when this value is close to 100% for devices serving requests
serially. But for devices serving requests in parallel, such as RAID arrays
and modern SSDs, this number does not reflect their performance limits.",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 3,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 327
+ },
+ "hiddenSeries": false,
+ "id": 36,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - IO",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - discard",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Time Spent Doing I/Os",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:657",
+ "format": "percentunit",
+ "label": "%util",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:658",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "The number of outstanding requests at the instant the
sample was taken. Incremented as requests are given to appropriate struct
request_queue and decremented as they finish.",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 337
+ },
+ "hiddenSeries": false,
+ "id": 34,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_io_now{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - IO now",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Instantaneous Queue Size",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:729",
+ "format": "iops",
+ "label": "I/Os",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:730",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 337
+ },
+ "hiddenSeries": false,
+ "id": 301,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null as zero",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:2034",
+ "alias": "/.*sda_.*/",
+ "color": "#7EB26D"
+ },
+ {
+ "$$hashKey": "object:2035",
+ "alias": "/.*sdb_.*/",
+ "color": "#EAB839"
+ },
+ {
+ "$$hashKey": "object:2036",
+ "alias": "/.*sdc_.*/",
+ "color": "#6ED0E0"
+ },
+ {
+ "$$hashKey": "object:2037",
+ "alias": "/.*sdd_.*/",
+ "color": "#EF843C"
+ },
+ {
+ "$$hashKey": "object:2038",
+ "alias": "/.*sde_.*/",
+ "color": "#E24D42"
+ },
+ {
+ "$$hashKey": "object:2039",
+ "alias": "/.*sda1.*/",
+ "color": "#584477"
+ },
+ {
+ "$$hashKey": "object:2040",
+ "alias": "/.*sda2_.*/",
+ "color": "#BA43A9"
+ },
+ {
+ "$$hashKey": "object:2041",
+ "alias": "/.*sda3_.*/",
+ "color": "#F4D598"
+ },
+ {
+ "$$hashKey": "object:2042",
+ "alias": "/.*sdb1.*/",
+ "color": "#0A50A1"
+ },
+ {
+ "$$hashKey": "object:2043",
+ "alias": "/.*sdb2.*/",
+ "color": "#BF1B00"
+ },
+ {
+ "$$hashKey": "object:2044",
+ "alias": "/.*sdb3.*/",
+ "color": "#E0752D"
+ },
+ {
+ "$$hashKey": "object:2045",
+ "alias": "/.*sdc1.*/",
+ "color": "#962D82"
+ },
+ {
+ "$$hashKey": "object:2046",
+ "alias": "/.*sdc2.*/",
+ "color": "#614D93"
+ },
+ {
+ "$$hashKey": "object:2047",
+ "alias": "/.*sdc3.*/",
+ "color": "#9AC48A"
+ },
+ {
+ "$$hashKey": "object:2048",
+ "alias": "/.*sdd1.*/",
+ "color": "#65C5DB"
+ },
+ {
+ "$$hashKey": "object:2049",
+ "alias": "/.*sdd2.*/",
+ "color": "#F9934E"
+ },
+ {
+ "$$hashKey": "object:2050",
+ "alias": "/.*sdd3.*/",
+ "color": "#EA6460"
+ },
+ {
+ "$$hashKey": "object:2051",
+ "alias": "/.*sde1.*/",
+ "color": "#E0F9D7"
+ },
+ {
+ "$$hashKey": "object:2052",
+ "alias": "/.*sdd2.*/",
+ "color": "#FCEACA"
+ },
+ {
+ "$$hashKey": "object:2053",
+ "alias": "/.*sde3.*/",
+ "color": "#F9E2D2"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "intervalFactor": 4,
+ "legendFormat": "{{device}} - Discards completed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Discards merged",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Disk IOps Discards completed / merged",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:2186",
+ "format": "iops",
+ "label": "IOs",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:2187",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 347
+ },
+ "id": 271,
+ "panels": [],
+ "title": "Storage Filesystem",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 3,
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 348
+ },
+ "hiddenSeries": false,
+ "id": 43,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - Available",
+ "metric": "",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - Free",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - Size",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Filesystem space available",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:3826",
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:3827",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 348
+ },
+ "hiddenSeries": false,
+ "id": 41,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - Free file nodes",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "File Nodes Free",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:3894",
+ "format": "short",
+ "label": "file nodes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:3895",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 358
+ },
+ "hiddenSeries": false,
+ "id": 28,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_filefd_maximum{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 4,
+ "legendFormat": "Max open files",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_filefd_allocated{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Open files",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "File Descriptor",
+ "tooltip": {
+ "shared": false,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "files",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 358
+ },
+ "hiddenSeries": false,
+ "id": 219,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - File nodes total",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "File Nodes Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "file Nodes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {
+ "/ ReadOnly": "#890F02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 368
+ },
+ "hiddenSeries": false,
+ "id": 44,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": true,
+ "hideZero": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 6,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - ReadOnly",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs',fstype!~'tmpfs'}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{mountpoint}} - Device error",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Filesystem in ReadOnly / Error",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:3670",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "max": "1",
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:3671",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 378
+ },
+ "id": 272,
+ "panels": [],
+ "title": "Network Traffic",
+ "type": "row"
+ },
+ {
+ "aliasColors": {
+ "receive_packets_eth0": "#7EB26D",
+ "receive_packets_lo": "#E24D42",
+ "transmit_packets_eth0": "#7EB26D",
+ "transmit_packets_lo": "#E24D42"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 379
+ },
+ "hiddenSeries": false,
+ "id": 60,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic by Packets",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 379
+ },
+ "hiddenSeries": false,
+ "id": 142,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive errors",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Rransmit errors",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 389
+ },
+ "hiddenSeries": false,
+ "id": 143,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive drop",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit drop",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Drop",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 389
+ },
+ "hiddenSeries": false,
+ "id": 141,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive compressed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit compressed",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Compressed",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 399
+ },
+ "hiddenSeries": false,
+ "id": 146,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive multicast",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Multicast",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 399
+ },
+ "hiddenSeries": false,
+ "id": 144,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive fifo",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit fifo",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Fifo",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 409
+ },
+ "hiddenSeries": false,
+ "id": 145,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:576",
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Receive frame",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Frame",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:589",
+ "format": "pps",
+ "label": "packets out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:590",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 409
+ },
+ "hiddenSeries": false,
+ "id": 231,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Statistic transmit_carrier",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Carrier",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 419
+ },
+ "hiddenSeries": false,
+ "id": 232,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Trans.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{device}} - Transmit colls",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Traffic Colls",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 419
+ },
+ "hiddenSeries": false,
+ "id": 61,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:663",
+ "alias": "NF conntrack limit",
+ "color": "#890F02",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "NF conntrack entries",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "NF conntrack limit",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "NF Contrack",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:678",
+ "format": "short",
+ "label": "entries",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:679",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 429
+ },
+ "hiddenSeries": false,
+ "id": 230,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_arp_entries{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{ device }} - ARP entries",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "ARP Entries",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "Entries",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 429
+ },
+ "hiddenSeries": false,
+ "id": 288,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 1,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{ device }} - Bytes",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "MTU",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 0,
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 439
+ },
+ "hiddenSeries": false,
+ "id": 280,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 1,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_network_speed_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{ device }} - Speed",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Speed",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 0,
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 439
+ },
+ "hiddenSeries": false,
+ "id": 289,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 1,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{ device }} - Interface transmit queue length",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Queue Length",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 0,
+ "format": "none",
+ "label": "packets",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 449
+ },
+ "hiddenSeries": false,
+ "id": 290,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:232",
+ "alias": "/.*Dropped.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{cpu}} - Processed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{cpu}} - Dropped",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Softnet Packets",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:207",
+ "format": "short",
+ "label": "packetes drop (-) / process (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:208",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 449
+ },
+ "hiddenSeries": false,
+ "id": 310,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CPU {{cpu}} - Squeezed",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Softnet Out of Quota",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:207",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:208",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 459
+ },
+ "hiddenSeries": false,
+ "id": 309,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{interface}} - Operational state UP",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_network_carrier{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "instant": false,
+ "legendFormat": "{{device}} - Physical link state",
+ "refId": "B"
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Network Operational Status",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 469
+ },
+ "id": 273,
+ "panels": [],
+ "title": "Network Sockstat",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 470
+ },
+ "hiddenSeries": false,
+ "id": 63,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCP_alloc - Allocated sockets",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCP_inuse - Tcp sockets currently in use",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCP_mem - Used memory for tcp",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCP_orphan - Orphan sockets",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCP_tw - Sockets wating close",
+ "refId": "E",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Sockstat TCP",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 470
+ },
+ "hiddenSeries": false,
+ "id": 124,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "UDP_inuse - Udp sockets currently in use",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "UDP_mem - Used memory for udp",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Sockstat UDP",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 480
+ },
+ "hiddenSeries": false,
+ "id": 126,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Sockets_used - Sockets currently in use",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Sockstat Used",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "sockets",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 480
+ },
+ "hiddenSeries": false,
+ "id": 220,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "mem_bytes - TCP sockets in that state",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "mem_bytes - UDP sockets in that state",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Sockstat Memory Size",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "bytes",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 490
+ },
+ "hiddenSeries": false,
+ "id": 125,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "FRAG_inuse - Frag sockets currently in use",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "FRAG_memory - Used memory for frag",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "RAW_inuse - Raw sockets currently in use",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Sockstat FRAG / RAW",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1572",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1573",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 500
+ },
+ "id": 274,
+ "panels": [],
+ "title": "Network Netstat",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 501
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 221,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:1876",
+ "alias": "/.*Out.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InOctets - Received octets",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "OutOctets - Sent octets",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Netstat IP In / Out Octets",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1889",
+ "format": "short",
+ "label": "octects out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1890",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 501
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 81,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sideWidth": 300,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "Forwarding - IP forwarding",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Netstat IP Forwarding",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1957",
+ "format": "short",
+ "label": "datagrams",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1958",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 511
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 115,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Out.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InMsgs - Messages which the entity received. Note
that this counter includes all those counted by icmpInErrors",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "OutMsgs - Messages which this entity attempted to
send. Note that this counter includes all those counted by icmpOutErrors",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "ICMP In / Out",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "messages out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 511
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 50,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Out.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InErrors - Messages which the entity received but
determined as having ICMP-specific errors (bad ICMP checksums, bad length,
etc.)",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "ICMP Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "messages out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 521
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 55,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Out.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*Snd.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InDatagrams - Datagrams received",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "OutDatagrams - Datagrams sent",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "UDP In / Out",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "datagrams out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 521
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 109,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InErrors - UDP Datagrams that could not be
delivered to an application",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "NoPorts - UDP Datagrams received on a port with no
listener",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "legendFormat": "InErrors Lite - UDPLite Datagrams that could not be
delivered to an application",
+ "refId": "C"
+ },
+ {
+ "expr":
"rate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "RcvbufErrors - UDP buffer errors received",
+ "refId": "D",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "SndbufErrors - UDP buffer errors send",
+ "refId": "E",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "UDP Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:4232",
+ "format": "short",
+ "label": "datagrams",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:4233",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 531
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 299,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Out.*/",
+ "transform": "negative-Y"
+ },
+ {
+ "alias": "/.*Snd.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "instant": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "InSegs - Segments received, including those
received in error. This count includes segments received on currently
established connections",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "OutSegs - Segments sent, including those on current
connections but excluding those containing only retransmitted octets",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "TCP In / Out",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "datagrams out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 531
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 104,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "ListenOverflows - Times the listen queue of a
socket overflowed",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break
down retransmissions in SYN, fast/timeout retransmits",
+ "refId": "C",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "legendFormat": "RetransSegs - Segments retransmitted - that is, the
number of TCP segments transmitted containing one or more previously
transmitted octets",
+ "refId": "D"
+ },
+ {
+ "expr":
"rate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "interval": "",
+ "legendFormat": "InErrs - Segments received in error (e.g., bad TCP
checksums)",
+ "refId": "E"
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "TCP Errors",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 541
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 85,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:454",
+ "alias": "/.*MaxConn *./",
+ "color": "#890F02",
+ "fill": 0
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "CurrEstab - TCP connections for which the current
state is either ESTABLISHED or CLOSE- WAIT",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "MaxConn - Limit on the total number of TCP
connections the entity can support (Dinamic is \"-1\")",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "TCP Connections",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:469",
+ "format": "short",
+ "label": "connections",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "$$hashKey": "object:470",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 541
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 91,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "/.*Sent.*/",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "SyncookiesFailed - Invalid SYN cookies received",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "SyncookiesRecv - SYN cookies received",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "SyncookiesSent - SYN cookies sent",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "TCP SynCookie",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "counter out (-) / in (+)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 551
+ },
+ "height": "",
+ "hiddenSeries": false,
+ "id": 82,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "maxPerRow": 12,
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"rate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "ActiveOpens - TCP connections that have made a
direct transition to the SYN-SENT state from the CLOSED state",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"rate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+ "format": "time_series",
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "PassiveOpens - TCP connections that have made a
direct transition to the SYN-RCVD state from the LISTEN state",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "TCP Direct Transition",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": "connections",
+ "logBase": 1,
+ "min": "0",
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "collapsed": true,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 561
+ },
+ "id": 279,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 292
+ },
+ "hiddenSeries": false,
+ "id": 40,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "sort": "current",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.2.1",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{collector}} - Scrape duration",
+ "refId": "A",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Node Exporter Scrape Time",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "s",
+ "label": "seconds",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "links": []
+ },
+ "overrides": []
+ },
+ "fill": 2,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 292
+ },
+ "hiddenSeries": false,
+ "id": 157,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.2.1",
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "$$hashKey": "object:1969",
+ "alias": "/.*error.*/",
+ "color": "#F2495C",
+ "transform": "negative-Y"
+ }
+ ],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"node_scrape_collector_success{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{collector}} - Scrape success",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr":
"node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{collector}} - Scrape textfile error (1 =
true)",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Node Exporter Scrape",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "$$hashKey": "object:1484",
+ "format": "short",
+ "label": "counter",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "$$hashKey": "object:1485",
+ "format": "short",
+ "logBase": 1,
+ "show": false
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ }
+ ],
+ "title": "Node Exporter",
+ "type": "row"
+ }
+ ],
+ "refresh": "1m",
+ "schemaVersion": 35,
+ "style": "dark",
+ "tags": [
+ "linux",
+ "performance"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "default",
+ "value": "default"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "datasource",
+ "multi": false,
+ "name": "DS_PROMETHEUS",
+ "options": [],
+ "query": "prometheus",
+ "queryValue": "",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "definition": "",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Job",
+ "multi": false,
+ "name": "job",
+ "options": [],
+ "query": {
+ "query": "label_values(node_uname_info, job)",
+ "refId": "Prometheus-job-Variable-Query"
+ },
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "definition": "label_values(node_uname_info{job=\"$job\"}, instance)",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Host:",
+ "multi": false,
+ "name": "node",
+ "options": [],
+ "query": {
+ "query": "label_values(node_uname_info{job=\"$job\"}, instance)",
+ "refId": "Prometheus-node-Variable-Query"
+ },
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 1,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "[a-z]+|nvme[0-9]+n[0-9]+",
+ "value": "[a-z]+|nvme[0-9]+n[0-9]+"
+ },
+ "hide": 2,
+ "includeAll": false,
+ "multi": false,
+ "name": "diskdevices",
+ "options": [
+ {
+ "selected": true,
+ "text": "[a-z]+|nvme[0-9]+n[0-9]+",
+ "value": "[a-z]+|nvme[0-9]+n[0-9]+"
+ }
+ ],
+ "query": "[a-z]+|nvme[0-9]+n[0-9]+",
+ "skipUrlSync": false,
+ "type": "custom"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "browser",
+ "title": "Nodes",
+ "uid": "rYdddlPWk",
+ "version": 8,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/additional/grafana/proxy.json b/additional/grafana/proxy.json
new file mode 100644
index 0000000..ee2949a
--- /dev/null
+++ b/additional/grafana/proxy.json
@@ -0,0 +1,640 @@
+{
+ "__inputs": [
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
+ }
+ ],
+ "__elements": [],
+ "__requires": [
+ {
+ "type": "grafana",
+ "id": "grafana",
+ "name": "Grafana",
+ "version": "8.4.3"
+ },
+ {
+ "type": "panel",
+ "id": "graph",
+ "name": "Graph (old)",
+ "version": ""
+ },
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
+ {
+ "type": "panel",
+ "id": "timeseries",
+ "name": "Time series",
+ "version": ""
+ }
+ ],
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "target": {
+ "limit": 100,
+ "matchAny": false,
+ "tags": [],
+ "type": "dashboard"
+ },
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "Official dashboard for NGINX Prometheus exporter for
https://github.com/nginxinc/nginx-prometheus-exporter",
+ "editable": true,
+ "fiscalYearStartMonth": 0,
+ "gnetId": 12708,
+ "graphTooltip": 0,
+ "id": null,
+ "iteration": 1649441826256,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "collapsed": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "gridPos": {
+ "h": 1,
+ "w": 24,
+ "x": 0,
+ "y": 0
+ },
+ "id": 6,
+ "panels": [],
+ "title": "Metrics",
+ "type": "row"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "description": "",
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 0,
+ "y": 1
+ },
+ "hiddenSeries": false,
+ "id": 10,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "hideEmpty": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} accepted",
+ "refId": "A"
+ },
+ {
+ "expr":
"irate(nginx_connections_handled{instance=~\"$instance\"}[5m])",
+ "format": "time_series",
+ "instant": false,
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} handled",
+ "refId": "B"
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Processed connections",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 1,
+ "format": "short",
+ "label": "Connections (rate)",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "decimals": 0,
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 10,
+ "w": 12,
+ "x": 12,
+ "y": 1
+ },
+ "hiddenSeries": false,
+ "id": 12,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "nginx_connections_active{instance=~\"$instance\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} active",
+ "refId": "A"
+ },
+ {
+ "expr": "nginx_connections_reading{instance=~\"$instance\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} reading",
+ "refId": "B"
+ },
+ {
+ "expr": "nginx_connections_waiting{instance=~\"$instance\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} waiting",
+ "refId": "C"
+ },
+ {
+ "expr": "nginx_connections_writing{instance=~\"$instance\"}",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} writing",
+ "refId": "D"
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Active Connections",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "decimals": 0,
+ "format": "short",
+ "label": "Connections",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "fill": 1,
+ "fillGradient": 0,
+ "gridPos": {
+ "h": 8,
+ "w": 24,
+ "x": 0,
+ "y": 11
+ },
+ "hiddenSeries": false,
+ "id": 15,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "options": {
+ "alertThreshold": true
+ },
+ "percentage": false,
+ "pluginVersion": "8.4.3",
+ "pointradius": 2,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr":
"irate(nginx_http_requests_total{instance=~\"$instance\"}[5m])",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "{{instance}} total requests",
+ "refId": "A"
+ }
+ ],
+ "thresholds": [],
+ "timeRegions": [],
+ "title": "Total requests",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "mode": "time",
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": true
+ },
+ {
+ "format": "short",
+ "logBase": 1,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false
+ }
+ },
+ {
+ "description": "Average time taken for Nginx to respond to client
requests. This includes upstream connect / response times.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 0,
+ "y": 19
+ },
+ "id": 17,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "avg
((rate(taler_requests_response_time_hist_sum{endpoint!~\"keys|terms\",
status=\"200\"} [2m]) ) /
(rate(taler_requests_response_time_hist_count{endpoint!~\"keys|terms\",
status=\"200\"} [2m])))",
+ "interval": "",
+ "legendFormat": "Response Time",
+ "refId": "A"
+ }
+ ],
+ "title": "Average Response Time",
+ "type": "timeseries"
+ },
+ {
+ "description": "Average time taken for the exchange to answer a request
to the Nginx proxy",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 8,
+ "w": 12,
+ "x": 12,
+ "y": 19
+ },
+ "id": 18,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "bottom"
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "avg
((rate(taler_requests_upstream_response_time_hist_sum{endpoint!~\"keys|terms\",
status=\"200\"} [2m]) ) /
(rate(taler_requests_upstream_response_time_hist_count{endpoint!~\"keys|terms\",
status=\"200\"} [2m])))",
+ "interval": "",
+ "legendFormat": "Upstream Response Time",
+ "refId": "A"
+ }
+ ],
+ "title": "Average Upstream Response Time",
+ "type": "timeseries"
+ }
+ ],
+ "refresh": "10s",
+ "schemaVersion": 35,
+ "style": "dark",
+ "tags": [
+ "nginx",
+ "performance"
+ ],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "default",
+ "value": "default"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "datasource",
+ "multi": false,
+ "name": "DS_PROMETHEUS",
+ "options": [],
+ "query": "prometheus",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "definition": "label_values(nginx_up, instance)",
+ "hide": 0,
+ "includeAll": true,
+ "label": "",
+ "multi": false,
+ "name": "instance",
+ "options": [],
+ "query": {
+ "query": "label_values(nginx_up, instance)",
+ "refId": "Prometheus-instance-Variable-Query"
+ },
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "tagValuesQuery": "",
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ }
+ ]
+ },
+ "time": {
+ "from": "now-1h",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "",
+ "title": "Proxy",
+ "uid": "MsjffzSZz",
+ "version": 16,
+ "weekStart": ""
+}
\ No newline at end of file
diff --git a/additional/grafana/request-statistics.json
b/additional/grafana/request-statistics.json
index 4eb95cc..41cbe40 100644
--- a/additional/grafana/request-statistics.json
+++ b/additional/grafana/request-statistics.json
@@ -7,6 +7,14 @@
"type": "datasource",
"pluginId": "loki",
"pluginName": "Loki"
+ },
+ {
+ "name": "DS_PROMETHEUS",
+ "label": "Prometheus",
+ "description": "",
+ "type": "datasource",
+ "pluginId": "prometheus",
+ "pluginName": "Prometheus"
}
],
"__elements": [],
@@ -15,7 +23,7 @@
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "8.3.2"
+ "version": "8.4.3"
},
{
"type": "datasource",
@@ -23,6 +31,12 @@
"name": "Loki",
"version": "1.0.0"
},
+ {
+ "type": "datasource",
+ "id": "prometheus",
+ "name": "Prometheus",
+ "version": "1.0.0"
+ },
{
"type": "panel",
"id": "stat",
@@ -60,7 +74,7 @@
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
- "iteration": 1639471729428,
+ "iteration": 1649441773439,
"links": [],
"liveNow": false,
"panels": [
@@ -109,7 +123,7 @@
"gridPos": {
"h": 4,
"w": 3,
- "x": 7,
+ "x": 5,
"y": 1
},
"id": 162,
@@ -128,10 +142,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"wallet\" | unwrap duration(time) [$__range])",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=~\"wallet(.*)\" | unwrap duration(time) [$__range])",
"instant": true,
"range": false,
"refId": "A"
@@ -172,7 +190,7 @@
"gridPos": {
"h": 4,
"w": 3,
- "x": 10,
+ "x": 8,
"y": 1
},
"id": 176,
@@ -191,10 +209,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"proxy\" | unwrap duration(time) [$__range])",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=~\"eproxy(.*)\" | unwrap duration(time) [$__range])",
"instant": true,
"range": false,
"refId": "A"
@@ -235,7 +257,7 @@
"gridPos": {
"h": 4,
"w": 3,
- "x": 13,
+ "x": 11,
"y": 1
},
"id": 178,
@@ -254,10 +276,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"exchange\" | unwrap duration(time) [$__range])",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\", job=\"taler\"} |
logfmt | src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
"instant": true,
"range": false,
"refId": "A"
@@ -266,6 +292,274 @@
"title": "RTT Exchange-Database",
"type": "stat"
},
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "description": "round-trip-time exchange-aggregator to database",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 3,
+ "x": 14,
+ "y": 1
+ },
+ "id": 414,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"aggregator\" | unwrap duration(time) [$__range]) or
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt |
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+ "instant": true,
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "RTT Aggregator-Database",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "description": "round-trip-time exchange-closer to database",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 3,
+ "x": 17,
+ "y": 1
+ },
+ "id": 415,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"closer\" | unwrap duration(time) [$__range]) or
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt |
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+ "instant": true,
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "RTT Closer-Database",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "description": "round-trip-time exchange-transfer to database",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 3,
+ "x": 14,
+ "y": 3
+ },
+ "id": 416,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"transfer\" | unwrap duration(time) [$__range]) or
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt |
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+ "instant": true,
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "RTT Transfer-Database",
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "description": "round-trip-time exchange-wirewatch to database",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 3,
+ "x": 17,
+ "y": 3
+ },
+ "id": 417,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-network\"} | logfmt |
src=\"wirewatch\" | unwrap duration(time) [$__range]) or
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt |
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+ "instant": true,
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "RTT Wirewatch-Database",
+ "type": "stat"
+ },
{
"collapsed": false,
"gridPos": {
@@ -342,7 +636,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"pluginVersion": "8.2.5",
@@ -362,8 +657,8 @@
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "",
"fieldConfig": {
@@ -435,12 +730,18 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+ "hide": false,
"refId": "A"
}
],
@@ -463,8 +764,8 @@
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "Minimal response time for successful (200) requests to
$endpoint",
"fieldConfig": {
@@ -512,25 +813,23 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "min_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "instant": true,
- "legendFormat": "",
- "range": false,
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "min_over_time(({job=\"proxy\", endpoint=\"$endpoint\",
status=\"200\"} | logfmt | unwrap rt) [$interval]) by (app)",
+ "queryType": "instant",
"refId": "A",
- "resolution": 2
+ "resolution": 10
}
],
"title": "Minimal [$interval]",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "Average request time of successful (200) requests to
$endpoint",
"fieldConfig": {
"defaults": {
@@ -570,7 +869,7 @@
"id": 18,
"options": {
"colorMode": "value",
- "graphMode": "area",
+ "graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
@@ -583,14 +882,19 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "avg_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"sum(rate(taler_requests_response_time_hist_sum{endpoint=\"$endpoint\",
status=\"200\"}[$interval])) /
sum(rate(taler_requests_response_time_hist_count{endpoint=\"$endpoint\",
status=\"200\"}[$interval]))",
"instant": true,
- "range": false,
- "refId": "A",
- "resolution": 2
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
}
],
"title": "Average [$interval]",
@@ -598,8 +902,8 @@
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "Maximal response time for successful (200) requests to
$endpoint",
"fieldConfig": {
@@ -647,26 +951,23 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "max_over_time({app=\"taler_proxy\"} |~ \"s=200\" | logfmt
|~ \"${endpoint:dublequote} \" | unwrap rt [$interval]) by (app)",
- "hide": false,
- "instant": true,
- "legendFormat": "",
- "range": false,
- "refId": "B",
- "resolution": 2
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "max_over_time({job=\"proxy\", endpoint=\"$endpoint\",
status=\"200\"} | logfmt | unwrap rt [$interval]) by (app)",
+ "queryType": "instant",
+ "refId": "A",
+ "resolution": 10
}
],
"title": "Maximal [$interval]",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "Number of successful requests (=200) to $endpoint",
"fieldConfig": {
"defaults": {
@@ -674,6 +975,7 @@
"fixedColor": "semi-dark-orange",
"mode": "thresholds"
},
+ "decimals": 0,
"mappings": [],
"noValue": "0",
"thresholds": {
@@ -710,10 +1012,18 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} |~
\"s=200\" |~ \"${endpoint:dublequote} \"[$interval]))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"increase(taler_requests_total_requests{endpoint=\"$endpoint\",
status=\"200\"}[$interval])",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -721,10 +1031,6 @@
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "Average response time for requests to $endpoint",
"fieldConfig": {
"defaults": {
@@ -784,6 +1090,7 @@
"y": 14
},
"id": 14,
+ "maxDataPoints": 400,
"options": {
"legend": {
"calcs": [],
@@ -791,34 +1098,36 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"pluginVersion": "8.2.1",
"targets": [
{
- "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt | s=200 |~
\"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "instant": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr":
"rate(taler_requests_response_time_hist_sum{endpoint=\"$endpoint\",
status=\"200\"}[$interval]) /
rate(taler_requests_response_time_hist_count{endpoint=\"$endpoint\",
status=\"200\"}[$interval])",
+ "interval": "",
+ "intervalFactor": 3,
"legendFormat": "200",
- "range": true,
- "refId": "A",
- "resolution": 10
+ "refId": "A"
}
],
"title": "Request Time AVG [$interval]",
"type": "timeseries"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "Number of failed requests (!=200) to $endpoint",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
+ "decimals": 0,
"mappings": [],
"noValue": "0",
"thresholds": {
@@ -859,10 +1168,19 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} !~
\"s=200\" |~ \"${endpoint:dublequote} \" [$interval]))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"sum(increase(taler_requests_total_requests{endpoint=\"$endpoint\",
status!=\"200\"}[$interval]))",
+ "instant": true,
+ "interval": "",
+ "intervalFactor": 10,
+ "legendFormat": "",
"refId": "A"
}
],
@@ -871,8 +1189,8 @@
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
"description": "Median response time for successful (200) requests to
$endpoint",
"fieldConfig": {
@@ -920,16 +1238,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.50, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
- "instant": true,
- "legendFormat": "",
- "range": false,
- "refId": "F",
- "resolution": 2
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "quantile_over_time(0.50, ({job=\"proxy\",
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by
(app)",
+ "queryType": "instant",
+ "refId": "A",
+ "resolution": 10
}
],
"title": "Median [$interval]",
@@ -937,10 +1256,10 @@
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "description": "90% of requests to $endpoint complete successfully (200)
below this time",
+ "description": "Standard deviation of response times for successful
(200) requests to $endpoint",
"fieldConfig": {
"defaults": {
"color": {
@@ -970,7 +1289,7 @@
"x": 3,
"y": 20
},
- "id": 40,
+ "id": 38,
"options": {
"colorMode": "value",
"graphMode": "none",
@@ -986,27 +1305,28 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.90, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
- "instant": true,
- "legendFormat": "90% Quantile ",
- "range": false,
- "refId": "E",
- "resolution": 2
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "stddev_over_time(({job=\"proxy\", endpoint=\"$endpoint\",
status=\"200\"} | logfmt | s=\"200\" | unwrap rt) [$interval]) by (app)",
+ "queryType": "instant",
+ "refId": "A",
+ "resolution": 10
}
],
- "title": "90th Percentile [$interval]",
+ "title": "Standard Deviation [$interval]",
"type": "stat"
},
{
"datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
+ "type": "datasource",
+ "uid": "-- Mixed --"
},
- "description": "99% of requests to $endpoint complete successfully (200)
below this time",
+ "description": "90% of requests to $endpoint complete successfully (200)
below this time",
"fieldConfig": {
"defaults": {
"color": {
@@ -1031,12 +1351,12 @@
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 3,
"w": 3,
"x": 6,
"y": 20
},
- "id": 39,
+ "id": 40,
"options": {
"colorMode": "value",
"graphMode": "none",
@@ -1052,31 +1372,29 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "quantile_over_time(0.99, ({app=\"taler_proxy\"} |~
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by
(app)",
- "hide": false,
- "instant": true,
- "legendFormat": "",
- "range": false,
- "refId": "D",
- "resolution": 2
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "quantile_over_time(0.90, ({job=\"proxy\",
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by
(app)",
+ "queryType": "instant",
+ "refId": "A",
+ "resolution": 10
}
],
- "title": "99th Percentile [$interval]",
+ "title": "90th Percentile [$interval]",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Standard deviation of response times for successful
(200) requests to $endpoint",
+ "description": "Average request size extracted from the request_length
parameter of the ngnix access log.",
"fieldConfig": {
"defaults": {
"color": {
- "mode": "thresholds"
+ "fixedColor": "text",
+ "mode": "fixed"
},
"mappings": [],
"thresholds": {
@@ -1085,28 +1403,24 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
- "unit": "s"
+ "unit": "decbytes"
},
"overrides": []
},
"gridPos": {
- "h": 6,
+ "h": 3,
"w": 3,
"x": 9,
"y": 20
},
- "id": 38,
+ "id": 342,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
- "justifyMode": "center",
+ "justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -1115,29 +1429,28 @@
"fields": "",
"values": false
},
- "text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "stddev_over_time(({app=\"taler_proxy\"} |~ \"s=200\" |
logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
- "hide": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"rate(taler_requests_request_length_hist_sum{endpoint=\"$endpoint\",
status=\"200\"}[2m]) /
rate(taler_requests_request_length_hist_count{endpoint=\"$endpoint\",
status=\"200\"}[2m])",
"instant": true,
+ "interval": "",
+ "intervalFactor": 10,
"legendFormat": "",
- "range": false,
- "refId": "C",
- "resolution": 2
+ "refId": "A"
}
],
- "title": "Standard Deviation [$interval]",
+ "title": "Request Size",
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "",
"fieldConfig": {
"defaults": {
@@ -1196,6 +1509,7 @@
"y": 20
},
"id": 107,
+ "maxDataPoints": 400,
"options": {
"legend": {
"calcs": [],
@@ -1203,23 +1517,158 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "sum by (s) (count_over_time(({app=\"taler_proxy\"} | logfmt
|~ \"${endpoint:dublequote} \") [$interval]))",
- "legendFormat": "{{s}}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum by (status)
(rate(taler_requests_total_requests{endpoint=\"$endpoint\"} [$interval]))",
+ "interval": "",
+ "legendFormat": "{{status}}",
+ "refId": "A"
+ }
+ ],
+ "title": "Requests per Second",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "datasource",
+ "uid": "-- Mixed --"
+ },
+ "description": "99% of requests to $endpoint complete successfully (200)
below this time",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "s"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 6,
+ "y": 23
+ },
+ "id": 39,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "quantile_over_time(0.99, ({job=\"proxy\",
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by
(app)",
+ "queryType": "instant",
"refId": "A",
"resolution": 10
}
],
- "title": "Number of Requests [$interval]",
- "type": "timeseries"
+ "title": "99th Percentile [$interval]",
+ "type": "stat"
+ },
+ {
+ "description": "Average response size extracted from the bytes_sent
parameter of the ngnix access log.",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "text",
+ "mode": "fixed"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ },
+ "unit": "decbytes"
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 3,
+ "w": 3,
+ "x": 9,
+ "y": 23
+ },
+ "id": 343,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"rate(taler_requests_bytes_sent_hist_sum{endpoint=\"$endpoint\",
status=\"200\"}[2m]) /
rate(taler_requests_bytes_sent_hist_count{endpoint=\"$endpoint\",
status=\"200\"}[2m])",
+ "instant": true,
+ "interval": "",
+ "intervalFactor": 10,
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "Response Size",
+ "type": "stat"
}
],
"refresh": "1m",
- "schemaVersion": 33,
+ "schemaVersion": 35,
"style": "dark",
"tags": [
"performance",
@@ -1232,9 +1681,9 @@
"auto_count": 30,
"auto_min": "10s",
"current": {
- "selected": true,
- "text": "1m",
- "value": "1m"
+ "selected": false,
+ "text": "3m",
+ "value": "3m"
},
"hide": 0,
"label": "interval",
@@ -1246,7 +1695,7 @@
"value": "30s"
},
{
- "selected": true,
+ "selected": false,
"text": "1m",
"value": "1m"
},
@@ -1256,7 +1705,7 @@
"value": "2m"
},
{
- "selected": false,
+ "selected": true,
"text": "3m",
"value": "3m"
},
@@ -1298,52 +1747,27 @@
"type": "interval"
},
{
- "current": {
- "selected": false,
- "text": "All",
- "value": "$__all"
+ "current": {},
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
},
+ "definition": "label_values(taler_requests_total_requests{},
endpoint)",
"hide": 0,
"includeAll": true,
"label": "endpoint",
"multi": false,
"name": "endpoint",
- "options": [
- {
- "selected": true,
- "text": "All",
- "value": "$__all"
- },
- {
- "selected": false,
- "text": "/withdraw",
- "value": "/withdraw"
- },
- {
- "selected": false,
- "text": "/reveal",
- "value": "/reveal"
- },
- {
- "selected": false,
- "text": "/melt",
- "value": "/melt"
- },
- {
- "selected": false,
- "text": "/deposit",
- "value": "/deposit"
- },
- {
- "selected": false,
- "text": "/reserves/[A-Z0-9]+",
- "value": "/reserves/[A-Z0-9]+"
- }
- ],
- "query": "/withdraw,/reveal,/melt,/deposit,/reserves/[A-Z0-9]+",
- "queryValue": "",
+ "options": [],
+ "query": {
+ "query": "label_values(taler_requests_total_requests{}, endpoint)",
+ "refId": "Promethes-EndpointVariableQuery"
+ },
+ "refresh": 1,
+ "regex": "[a-z\\-0-9A-Z]*",
"skipUrlSync": false,
- "type": "custom"
+ "sort": 1,
+ "type": "query"
}
]
},
@@ -1381,6 +1805,6 @@
"timezone": "browser",
"title": "Request Statistics",
"uid": "WcfSXqDnk",
- "version": 131,
+ "version": 194,
"weekStart": ""
}
\ No newline at end of file
diff --git a/additional/grafana/transactions.json
b/additional/grafana/transactions.json
index 7fdaeea..eaea241 100644
--- a/additional/grafana/transactions.json
+++ b/additional/grafana/transactions.json
@@ -29,7 +29,7 @@
"type": "grafana",
"id": "grafana",
"name": "Grafana",
- "version": "8.3.2"
+ "version": "8.4.3"
},
{
"type": "datasource",
@@ -129,7 +129,7 @@
},
"id": 10,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
@@ -143,10 +143,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
"expr":
"sum(node_systemd_unit_state{name=~\"taler-wallet@(.*).service\",
state=\"active\"})",
"instant": true,
"interval": "",
@@ -158,12 +162,15 @@
"type": "stat"
},
{
+ "description": "The load of all wallet hosts together",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
+ "max": 100,
+ "min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
@@ -176,7 +183,8 @@
"value": 80
}
]
- }
+ },
+ "unit": "percent"
},
"overrides": []
},
@@ -186,6 +194,66 @@
"x": 3,
"y": 1
},
+ "id": 57,
+ "options": {
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "showThresholdLabels": false,
+ "showThresholdMarkers": true,
+ "text": {}
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "((count(go_info{instance=~\"wallet(.*)\"}) * 100) -
sum((avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\",
instance=~\"wallet(.*)\"}[5m])) * 100))) /
count(go_info{instance=~\"wallet(.*)\"})",
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "Wallet Load [Experimental]",
+ "type": "gauge"
+ },
+ {
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 7,
+ "y": 1
+ },
"id": 59,
"options": {
"colorMode": "none",
@@ -201,7 +269,7 @@
},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"datasource": {
@@ -220,15 +288,12 @@
"type": "stat"
},
{
- "description": "The load of all wallet hosts together",
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"mappings": [],
- "max": 100,
- "min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
@@ -241,19 +306,21 @@
"value": 80
}
]
- },
- "unit": "percent"
+ }
},
"overrides": []
},
"gridPos": {
- "h": 4,
- "w": 3,
- "x": 6,
+ "h": 2,
+ "w": 2,
+ "x": 9,
"y": 1
},
- "id": 57,
+ "id": 63,
"options": {
+ "colorMode": "none",
+ "graphMode": "area",
+ "justifyMode": "center",
"orientation": "auto",
"reduceOptions": {
"calcs": [
@@ -262,11 +329,9 @@
"fields": "",
"values": false
},
- "showThresholdLabels": false,
- "showThresholdMarkers": true,
- "text": {}
+ "textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"datasource": {
@@ -274,14 +339,15 @@
"uid": "${DS_PROMETHEUS}"
},
"exemplar": false,
- "expr": "((count(go_info{instance=~\"wallet(.*)\"}) * 100) -
sum((avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\",
instance=~\"wallet(.*)\"}[5m])) * 100))) /
count(go_info{instance=~\"wallet(.*)\"})",
+ "expr": "count(go_info{instance=~\"exchange(.*)\"})",
+ "instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "Wallet Load [Experimental]",
- "type": "gauge"
+ "title": "# Exchange Nodes",
+ "type": "stat"
},
{
"description": "Number of exchange processes running",
@@ -306,7 +372,7 @@
"gridPos": {
"h": 4,
"w": 3,
- "x": 12,
+ "x": 11,
"y": 1
},
"id": 8,
@@ -325,10 +391,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
"expr":
"sum(node_systemd_unit_state{name=~\"taler-exchange-http(.*).service\",
state=\"active\"})",
"instant": true,
"interval": "",
@@ -350,13 +420,8 @@
"options": {
"0": {
"color": "red",
- "index": 1,
- "text": "DOWN"
- },
- "1": {
- "color": "green",
"index": 0,
- "text": "OK"
+ "text": "DOWN"
}
},
"type": "value"
@@ -377,7 +442,7 @@
"gridPos": {
"h": 2,
"w": 2,
- "x": 16,
+ "x": 14,
"y": 1
},
"id": 46,
@@ -396,11 +461,15 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
- "expr":
"node_systemd_unit_state{name=\"taler-exchange-aggregator.service\",
state=\"active\"}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"sum(node_systemd_unit_state{name=~\"taler-exchange-aggregator(.*).service\",
state=\"active\"})",
"instant": true,
"interval": "",
"legendFormat": "",
@@ -410,6 +479,78 @@
"title": "# Aggregator",
"type": "stat"
},
+ {
+ "description": "",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "fixedColor": "text",
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "0": {
+ "color": "red",
+ "index": 0,
+ "text": "DOWN"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 16,
+ "y": 1
+ },
+ "id": 49,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "text": {},
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"sum(node_systemd_unit_state{name=~\"taler-exchange-closer(.*).service\",
state=\"active\"})",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "# Closer",
+ "type": "stat"
+ },
{
"fieldConfig": {
"defaults": {
@@ -451,7 +592,7 @@
"x": 18,
"y": 1
},
- "id": 50,
+ "id": 51,
"options": {
"colorMode": "value",
"graphMode": "area",
@@ -467,18 +608,22 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
- "expr":
"node_systemd_unit_state{name=\"taler-exchange-transfer.service\",
state=\"active\"}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"node_systemd_unit_state{name=\"taler-exchange-secmod-eddsa.service\",
state=\"active\"}",
"instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "Transfer",
+ "title": "EdDSA",
"type": "stat"
},
{
@@ -523,7 +668,7 @@
"x": 20,
"y": 1
},
- "id": 49,
+ "id": 60,
"options": {
"colorMode": "value",
"graphMode": "area",
@@ -539,18 +684,22 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
- "expr":
"node_systemd_unit_state{name=\"taler-exchange-closer.service\",
state=\"active\"}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"node_systemd_unit_state{name=\"taler-exchange-secmod-cs.service\",
state=\"active\"}",
"instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "Closer",
+ "title": "CS",
"type": "stat"
},
{
@@ -611,7 +760,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -626,7 +775,7 @@
"type": "stat"
},
{
- "description": "Number of wirewatch processes running",
+ "description": "",
"fieldConfig": {
"defaults": {
"color": {
@@ -639,6 +788,10 @@
{
"color": "green",
"value": null
+ },
+ {
+ "color": "red",
+ "value": 80
}
]
}
@@ -648,7 +801,77 @@
"gridPos": {
"h": 2,
"w": 2,
- "x": 16,
+ "x": 9,
+ "y": 3
+ },
+ "id": 64,
+ "options": {
+ "colorMode": "none",
+ "graphMode": "area",
+ "justifyMode": "center",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": [
+ "lastNotNull"
+ ],
+ "fields": "",
+ "values": false
+ },
+ "textMode": "auto"
+ },
+ "pluginVersion": "8.4.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "count(go_info{instance=~\"(.*).proxy.*\"})",
+ "instant": true,
+ "interval": "",
+ "legendFormat": "",
+ "refId": "A"
+ }
+ ],
+ "title": "# Proxy Nodes",
+ "type": "stat"
+ },
+ {
+ "description": "Number of wirewatch processes running",
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "0": {
+ "color": "red",
+ "index": 0,
+ "text": "DOWN"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ }
+ ]
+ }
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 2,
+ "w": 2,
+ "x": 14,
"y": 3
},
"id": 41,
@@ -667,10 +890,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
"expr":
"sum(node_systemd_unit_state{name=~\"taler-exchange-wirewatch(.*).service\",
state=\"active\"})",
"instant": true,
"interval": "",
@@ -692,13 +919,8 @@
"options": {
"0": {
"color": "red",
- "index": 1,
- "text": "DOWN"
- },
- "1": {
- "color": "green",
"index": 0,
- "text": "OK"
+ "text": "DOWN"
}
},
"type": "value"
@@ -719,10 +941,10 @@
"gridPos": {
"h": 2,
"w": 2,
- "x": 18,
+ "x": 16,
"y": 3
},
- "id": 52,
+ "id": 50,
"options": {
"colorMode": "value",
"graphMode": "area",
@@ -738,18 +960,22 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "exemplar": true,
- "expr":
"node_systemd_unit_state{name=\"taler-exchange-secmod-rsa.service\",
state=\"active\"}",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"sum(node_systemd_unit_state{name=~\"taler-exchange-transfer(.*).service\",
state=\"active\"})",
"instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "RSA",
+ "title": "# Transfer",
"type": "stat"
},
{
@@ -790,10 +1016,10 @@
"gridPos": {
"h": 2,
"w": 2,
- "x": 20,
+ "x": 18,
"y": 3
},
- "id": 51,
+ "id": 52,
"options": {
"colorMode": "value",
"graphMode": "area",
@@ -809,18 +1035,18 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
- "expr":
"node_systemd_unit_state{name=\"taler-exchange-secmod-eddsa.service\",
state=\"active\"}",
+ "expr":
"node_systemd_unit_state{name=\"taler-exchange-secmod-rsa.service\",
state=\"active\"}",
"instant": true,
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
- "title": "EdDSA",
+ "title": "RSA",
"type": "stat"
},
{
@@ -881,7 +1107,7 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
"exemplar": true,
@@ -909,11 +1135,7 @@
"type": "row"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Total successful (200) requests to /deposit and
/withdraw per second, measured at the nginx proxy and over the whole displayed
time range.",
+ "description": "Total successful (200) requests to /deposit and
/withdraw per second, measured at the nginx proxy in a 2 minute interval.",
"fieldConfig": {
"defaults": {
"color": {
@@ -955,12 +1177,17 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~
\"(/deposit|/withdraw)\" |~ \"s=200\" [2m] ))",
- "instant": true,
- "range": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum
(rate(taler_requests_total_requests{endpoint=~\"reserves-withdraw|coins-deposit\",
status=\"200\"} [2m]))",
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -969,11 +1196,7 @@
"type": "gauge"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Total successful (200) requests per second to /withdraw
per second, measured at the nginx proxy and over the whole displayed time
range.",
+ "description": "Total successful (200) requests per second to /withdraw
per second, measured at the nginx proxy in a 5 minute interval.",
"fieldConfig": {
"defaults": {
"color": {
@@ -1002,7 +1225,7 @@
},
"id": 4,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
"justifyMode": "center",
"orientation": "auto",
@@ -1016,12 +1239,18 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ \"/withdraw\"
|~ \"s=200\" [1h] ))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "sum
(rate(taler_requests_total_requests{endpoint=\"reserves-withdraw\",
status=\"200\"} [5m] ))",
"instant": true,
- "range": false,
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -1030,11 +1259,7 @@
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Total number of successful requests to /deposit and
/withdraw per second, measured at the nginx proxy and over a 5 minute
interval.",
+ "description": "Total number of successful requests to /deposit and
/withdraw per second, measured at the nginx proxy and over a 2 minute
interval.",
"fieldConfig": {
"defaults": {
"color": {
@@ -1099,26 +1324,29 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} |~
\"s=200\" |~ \"(/withdraw|/deposit)\" | logfmt [2m])) / (2*60)",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr":
"sum(rate(taler_requests_total_requests{endpoint=~\"reserves-withdraw|coins-deposit\",
status=\"200\"}[2m]))",
+ "interval": "",
+ "intervalFactor": 2,
"legendFormat": "TPS",
- "refId": "A",
- "resolution": 10
+ "refId": "A"
}
],
"title": "TPS History",
"type": "timeseries"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
- "description": "Total successful (200) requests to /deposit per second,
measured at the nginx proxy and over the whole displayed time range.",
+ "description": "Total successful (200) requests to /deposit per second,
measured at the nginx proxy in a 5 minute interval.",
"fieldConfig": {
"defaults": {
"color": {
@@ -1147,7 +1375,7 @@
},
"id": 30,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
"justifyMode": "center",
"orientation": "auto",
@@ -1161,12 +1389,18 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ \"/deposit\" |~
\"s=200\" [1h] ))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr": "sum
(rate(taler_requests_total_requests{endpoint=\"coins-deposit\", status=\"200\"}
[5m] ))",
"instant": true,
- "range": false,
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -1175,10 +1409,6 @@
"type": "stat"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "",
"fieldConfig": {
"defaults": {
@@ -1210,8 +1440,8 @@
},
"id": 54,
"options": {
- "colorMode": "value",
- "graphMode": "area",
+ "colorMode": "none",
+ "graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
@@ -1224,12 +1454,18 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "(sum(count_over_time({app=\"taler_proxy\"} |~ \"/deposit\"
|~ \"s=200\" [1h]))) / (sum (count_over_time({app=\"taler_proxy\"} |~
\"/withdraw\" |~ \"s=200\" [1h])))",
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": false,
+ "expr":
"(sum(rate(taler_requests_total_requests{endpoint=\"coins-deposit\",
status=\"200\"} [5m]))) / (sum
(rate(taler_requests_total_requests{endpoint=\"reserves-withdraw\",
status=\"200\"} [5m])))",
"instant": true,
- "range": false,
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -1292,10 +1528,14 @@
"showThresholdMarkers": true,
"text": {}
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "count without(uri) (sum by(uri)
(count_over_time({app=\"taler_proxy\"} |~ \"s=200\" |~ \"(/withdraw|/deposit)\"
| logfmt [2m]))) / 120",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "count without(uri) (sum by(uri)
(count_over_time({job=\"proxy\", endpoint=~\"coins-deposit|reserves-withdraw\",
status=\"200\"} | logfmt [2m]))) / 120",
"instant": true,
"range": false,
"refId": "A"
@@ -1309,7 +1549,7 @@
"type": "loki",
"uid": "${DS_LOKI}"
},
- "description": "Total successful requests to withdraw all coins of a
reserve per second, measured at the nginx proxy and over the whole displayed
time range. (Requests to /withdraw are grouped into reserves they belong to
before they get counted.)",
+ "description": "Total successful requests to withdraw all coins of a
reserve per second, measured at the nginx proxy in a 10 minute interval.
(Requests to /withdraw are grouped into reserves they belong to before they get
counted.)",
"fieldConfig": {
"defaults": {
"color": {
@@ -1337,7 +1577,7 @@
},
"id": 16,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
"justifyMode": "center",
"orientation": "auto",
@@ -1351,10 +1591,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "(count without(uri) (sum by(uri)
(count_over_time({app=\"taler_proxy\"} |~ \"/withdraw\" |~ \"s=200\" | logfmt
[1h])))) / 3600",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "(count without(uri) (sum by(uri)
(count_over_time({job=\"proxy\", endpoint=\"reserves-withdraw\",
status=\"200\"} | logfmt [10m])))) / 600",
"instant": true,
"range": false,
"refId": "A"
@@ -1433,12 +1677,17 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "count without(uri) (sum by(uri)
(count_over_time({app=\"taler_proxy\"} |~ \"s=200\" |~
\"(/withdraw|/deposit)\" | logfmt [2m]))) / (2*60)",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "count without(uri) (sum by(uri)
(count_over_time({job=\"proxy\", endpoint=~\"reserves-withdraw|coins-deposit\",
status=\"200\"} | logfmt [2m]))) / (2*60)",
"legendFormat": "TPS",
"refId": "A",
"resolution": 10
@@ -1448,10 +1697,6 @@
"type": "timeseries"
},
{
- "datasource": {
- "type": "loki",
- "uid": "${DS_LOKI}"
- },
"description": "",
"fieldConfig": {
"defaults": {
@@ -1480,7 +1725,7 @@
},
"id": 6,
"options": {
- "colorMode": "value",
+ "colorMode": "none",
"graphMode": "none",
"justifyMode": "center",
"orientation": "auto",
@@ -1494,12 +1739,17 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~
\"/deposit\" |~ \"s=200\" [1h] ))",
- "instant": true,
- "range": false,
+ "datasource": {
+ "type": "prometheus",
+ "uid": "${DS_PROMETHEUS}"
+ },
+ "exemplar": true,
+ "expr": "sum
(rate(taler_requests_total_requests{endpoint=\"coins-deposit\", status=\"200\"}
[5m] ))",
+ "interval": "",
+ "legendFormat": "",
"refId": "A"
}
],
@@ -1542,8 +1792,8 @@
},
"id": 12,
"options": {
- "colorMode": "value",
- "graphMode": "area",
+ "colorMode": "none",
+ "graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"reduceOptions": {
@@ -1556,10 +1806,14 @@
"text": {},
"textMode": "auto"
},
- "pluginVersion": "8.3.2",
+ "pluginVersion": "8.4.3",
"targets": [
{
- "expr": "(sum(count_over_time({app=\"taler_proxy\"} |~
\"/deposit\" |~ \"s=200\" [1h]))) / (count without(uri) (sum by(uri)
(count_over_time({app=\"taler_proxy\"} |~ \"/withdraw\" |~ \"s=200\" | logfmt
[1h]))))",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "(sum(count_over_time({job=\"proxy\",
endpoint=\"coins-deposit\", status=\"200\"} [10m]))) / (count without(uri) (sum
by(uri) (count_over_time({job=\"proxy\", endpoint=\"reserves-withdraw\",
status=\"200\"} | logfmt [10m]))))",
"instant": true,
"range": false,
"refId": "A"
@@ -1657,12 +1911,17 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "avg_over_time({app=\"taler-wallet-cli\"} |~ \"time=\" |~
\"withdraw\" | logfmt | unwrap time [10m]) by (app)",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-wallet-cli\", job=\"wallet\",
script=\"benchmark\"} |~ \"withdraw\" | logfmt | unwrap time [2m]) by (app)",
"instant": false,
"legendFormat": "withdraw",
"range": true,
@@ -1739,7 +1998,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -1826,13 +2086,19 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
{
- "expr": "avg_over_time({app=\"taler-wallet-cli\"} |~ \"time=\" |~
\"deposit\" | logfmt | unwrap time [10m]) by (app)",
+ "datasource": {
+ "type": "loki",
+ "uid": "${DS_LOKI}"
+ },
+ "expr": "avg_over_time({app=\"taler-wallet-cli\", job=\"wallet\",
script=\"benchmark\"} |~ \"deposit \" | logfmt | unwrap time [2m]) by (app)",
"legendFormat": "deposit",
+ "queryType": "range",
"refId": "A",
"resolution": 5
}
@@ -1906,7 +2172,8 @@
"placement": "bottom"
},
"tooltip": {
- "mode": "single"
+ "mode": "single",
+ "sort": "none"
}
},
"targets": [
@@ -1922,8 +2189,8 @@
"type": "timeseries"
}
],
- "refresh": "1m",
- "schemaVersion": 33,
+ "refresh": "10s",
+ "schemaVersion": 35,
"style": "dark",
"tags": [
"performance",
@@ -1933,13 +2200,13 @@
"list": []
},
"time": {
- "from": "now-90m",
+ "from": "now-1h",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Transactions",
"uid": "83vvgKKnk",
- "version": 87,
+ "version": 134,
"weekStart": ""
}
\ No newline at end of file
diff --git a/additional/persist.sh b/additional/persist.sh
new file mode 100755
index 0000000..83448b9
--- /dev/null
+++ b/additional/persist.sh
@@ -0,0 +1,126 @@
+#!/bin/bash
+
+# Script to automatically fetch and clean data on the Grid'5000 shares
+# Params:
+# 1: Name for the experiment
+# 2: Additional plot tar to include (see ./plots)
+
+set -e
+
+function work_in_progress() {
+ echo -ne '\r\033[K'
+ sleep 1
+ echo -ne '.\r'
+ sleep 1
+ echo -ne '..\r'
+ sleep 1
+ echo -ne '...\r'
+ sleep 1
+}
+
+function backup() {
+ if [ -z ${1} ]; then
+ echo "Missing experiment name"
+ exit 1
+ fi
+ if [ -z ${2} ]; then
+ echo "No plots will be included"
+ else
+ echo "The file '${2}' will be deleted when this script finishes, do you
want to contiue? [y/n]"
+ while true; do
+ read -n 1 -s yn
+ case $yn in
+ [Yy]*) break 2;;
+ [Nn]*) exit ;;
+ *) echo "Please enter 'y' or 'n'" ;;
+ esac
+ done
+ fi
+
+ # Slugify the name
+ NAME=$(\
+ echo "$1" | \
+ sed -r s/[~\^]+//g | \
+ sed -r s/[^a-zA-Z0-9]+/-/g | \
+ sed -r s/^-+\|-+$//g | \
+ tr A-Z a-z \
+ )
+ BACKUP_NAME="${NAME}-$(date +%d-%m-%y).tar"
+ BACKUP_DIR="archives"
+
+ G5K_BACKUP="g5k-$(date +%s).tar.gz"
+
+ echo "Creating archive, this can take some time"
+ ssh g5k 'rm -rf grenoble/g5k.tar* && find . -type l -maxdepth 1 -exec tar
--ignore-failed-read -rf grenoble/g5k.tar -C {} exp-logs exp-data espec-times
2>&1 \; | grep -vi "no such file"' &
+
+ PID=$!
+ while kill -0 $PID > /dev/null 2>&1; do
+ work_in_progress
+ done
+
+ echo "Compressing archive, this may take some time"
+ ssh g5k 'gzip grenoble/g5k.tar' &
+
+ PID=$!
+ while kill -0 $PID > /dev/null 2>&1; do
+ work_in_progress
+ done
+
+ echo "Copying archive to local machine"
+ scp g5k:~/grenoble/g5k.tar.gz ${G5K_BACKUP}
+
+ test -d ${BACKUP_DIR} || mkdir ${BACKUP_DIR}
+
+ echo "Creating Backup Tar ${BACKUP_DIR}/${BACKUP_NAME}"
+ tar -cvf ${BACKUP_DIR}/${BACKUP_NAME} ${G5K_BACKUP} ${2} &
+
+ PID=$!
+ while kill -0 $PID > /dev/null 2>&1; do
+ work_in_progress
+ done
+
+ rm ${G5K_BACKUP} ${2}
+}
+
+function delete() {
+ echo "Cleaning up g5k storage"
+ ssh g5k 'rm grenoble/g5k.tar.gz || true && $(find . -type l -exec rm -rf
{}/exp-logs/ {}/exp-data {}/espec-times \;)' &
+
+ PID=$!
+ while kill -0 $PID > /dev/null 2>&1; do
+ work_in_progress
+ done
+}
+
+echo "
+Make sure that:
+
+- Your ssh key to access the grid is added to the ssh-agent with 'ssh-add
<KEY>'
+- The config to access the grid is setup as described in:
+
https://www.grid5000.fr/w/SSH#Using_SSH_ProxyCommand_feature_to_ease_the_access_to_hosts_inside_Grid.275000
+"
+
+if [[ $(ssh-add -L) =~ "The agent has no" ]]; then
+ echo "No ssh key added, aborting"
+ exit 1
+fi
+
+
+case $1 in
+ -b|--backup)
+ backup $2 $3
+ ;;
+ -d|--delete)
+ delete
+ ;;
+ *)
+ echo "Usage: ./persist.sh <OPTIONS>"
+ echo ""
+ echo "OPTIONS:"
+ echo " -b | --backup <experiment-name> <addtitional-plot-archive>"
+ echo " backup exp-data, exp-logs and espec-times from g5k NFS"
+ echo " -d | --delete"
+ echo " delete exp-data, exp-logs and espec-times from g5k NFS"
+ ;;
+esac
+
diff --git a/additional/plots/config.yaml b/additional/plots/config.yaml
index ca3094b..3740e67 100644
--- a/additional/plots/config.yaml
+++ b/additional/plots/config.yaml
@@ -33,15 +33,18 @@ dashboards:
height: 400
- uid: rYdddlPWk # Nodes
variables: ['node']
- ignore: 'wallet*|monitor*|bank*|merch*|ns*|proxy*'
+ ignore:
'monitor*|bank*|merch*|ns*|wallet*|*aggregator|*closer|*wirewatch|*closer'
graph:
width: 1200
- height: 800
+ height: 600
- uid: rkyhDAt7z # Load Statistics
graph:
width: 1200
height: 400
+ - uid: NYO0EIE7k # Exchange
+ graph:
+ width: 1200
+ heigth: 400
prometheus:
node_exporter_job_name: nodes
-
diff --git a/additional/recover/.gitignore b/additional/recover/.gitignore
new file mode 100644
index 0000000..22a7683
--- /dev/null
+++ b/additional/recover/.gitignore
@@ -0,0 +1,4 @@
+!assets
+!*.yaml
+!.gitignore
+*
diff --git
a/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
b/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
new file mode 100644
index 0000000..63f8ab0
--- /dev/null
+++ b/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
@@ -0,0 +1,9 @@
+apiVersion: 1
+
+providers:
+ - name: Taler
+ orgId: 1
+ type: file
+ options:
+ path: /etc/taler/dashboards
+ foldersFromFilesStructure: false
diff --git
a/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
b/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
new file mode 100644
index 0000000..0900450
--- /dev/null
+++ b/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
@@ -0,0 +1,12 @@
+apiVersion: 1
+
+datasources:
+ - name: Prometheus
+ type: prometheus
+ access: proxy
+ orgId: 1
+ uid: default-prometheus
+ url: http://prometheus:9090
+ isDefault: true
+ editable: false
+ version: 1
diff --git a/experiment/TODO
b/additional/recover/assets/prometheus/prometheus.yaml
similarity index 100%
rename from experiment/TODO
rename to additional/recover/assets/prometheus/prometheus.yaml
diff --git a/additional/recover/docker-compose.yaml
b/additional/recover/docker-compose.yaml
new file mode 100644
index 0000000..5375828
--- /dev/null
+++ b/additional/recover/docker-compose.yaml
@@ -0,0 +1,66 @@
+version: "3.7"
+
+services:
+
+ prometheus:
+ hostname: prometheus
+ image: prom/prometheus:v2.35.0
+ restart: 'no'
+ container_name: prometheus
+ user: "${U_ID}:${G_ID}"
+ ports:
+ - "9090:9090"
+ command:
+ - '--storage.tsdb.retention.size=1TB'
+ volumes:
+ - ${PWD}/assets/prometheus/prometheus.yaml:/prometheus/prometheus.yml
+ - ${PROMETHEUS_DATA}:/prometheus/data
+
+ grafana:
+ hostname: grafana
+ image: grafana/grafana-oss:8.4.6
+ restart: 'no'
+ container_name: grafana
+ user: "${U_ID}:${G_ID}"
+ environment:
+ GF_SECURITY_ADMIN_USER: taler
+ GF_SECURITY_ADMIN_PASSWORD: taler
+ GF_AUTH_ANONYMOUS_ENABLED: 'true'
+ GF_AUTH_ANONYMOUS_ORG_ROLE: Admin
+ GF_SESSION_COOKIE_SECURE: 'false'
+ GF_AUTH_BASIC_ENABLED: 'false'
+ GF_SERVER_DOMAIN: 'localhost'
+ GF_ANALYTICS_REPORTING_ENABLED: 'false'
+ GF_ALERTING_ENABLED: 'false'
+ GF_SECRET_KEY: super-safe-secret-key
+ GF_USERS_ALLOW_SIGNUPS: 'false'
+ GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH:
/etc/taler/dashboards/taler-performance.json
+ GF_RENDERING_SERVER_URL: 'http://grafana-renderer:8081/render'
+ GF_RENDERING_CALLBACK_URL: 'http://grafana:3000/'
+ GF_LIVE_ALLOWED_ORIGINS: 'http://grafana:3000'
+ ports:
+ - "8080:3000"
+ volumes:
+ - ${PWD}/assets/grafana/provisioning:/etc/grafana/provisioning
+ - ${DASHBOARDS_DIR}:/etc/taler/dashboards
+
+ renderer:
+ image: grafana/grafana-image-renderer:3.4.2
+ restart: 'no'
+ hostname: grafana-renderer
+ container_name: grafana-renderer
+
+ loki:
+ hostname: loki
+ image: grafana/loki:2.5.0
+ restart: 'no'
+ container_name: loki
+ user: "${U_ID}:${G_ID}"
+ ports:
+ - "3100:3100"
+ command:
+ - '-config.file=/etc/loki/loki.yml'
+ volumes:
+ - ${PWD}/assets/loki/loki.yaml:/etc/loki/loki.yml
+ - ${LOKI_DATA}:/tmp/loki
+
diff --git a/additional/recover/run.sh b/additional/recover/run.sh
new file mode 100755
index 0000000..2af439f
--- /dev/null
+++ b/additional/recover/run.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+# Script to run a local instance of grafana, loki and prometheus
+# with a data (prometheus and loki) snapshot of an experiment
+
+if [[ -z ${1} ]]; then
+ echo "Usage: run.sh EXPERIMENT_ARCHIVE || EXPERIMENT_DATA_FOLDER"
+ exit 1
+fi
+
+TMP_BASEDIR=/tmp/taler-perf
+rm -rf ${TMP_BASEDIR} || true
+
+export LOKI_DATA="${TMP_BASEDIR}/loki"
+export PROMETHEUS_DATA="${TMP_BASEDIR}/prometheus"
+export DASHBOARDS_DIR="${TMP_BASEDIR}/dashboards"
+
+EXP_DATA=${1}
+
+if file ${EXP_DATA} | grep -q 'tar archive'; then
+ # Extract the exp-data dir from the persist archive
+ G5K_ARCHIVE=$(tar -t -f ${EXP_DATA} | grep 'g5k')
+ tar -xvf ${EXP_DATA} -C /tmp ${G5K_ARCHIVE}
+ tar -xvf /tmp/${G5K_ARCHIVE} -C /tmp exp-data
+ rm -rf /tmp/${G5K_ARCHIVE}
+ EXP_DATA=/tmp/exp-data
+ mv ${EXP_DATA} ${TMP_BASEDIR}
+else
+ cp -r ${EXP_DATA} ${TMP_BASEDIR}
+fi
+
+mkdir ${DASHBOARDS_DIR} || true
+
+# load the times to adjust the grafana dashboards
+source "${TMP_BASEDIR}/times.env"
+
+START=$(date --date=@${EXPERIMENT_START} +"%F %T")
+END=$(date --date=@${SNAPSHOT_TIME} +"%F %T")
+
+# to get the right permissions on the Prometheus data
+export U_ID=$(id -u)
+export G_ID=$(id -g)
+
+function startup() {
+
+ # prepare the dashboards for grafana
+ # need to replace the DS_PROMETHEUS/DS_LOKI placeholders which are created
when
+ # exporting and set the timestamps that it works out of the box without
+ # having to search for the experiment time in the browser
+ for FILE in $(find ../grafana -iname "*json")
+ do
+ OUTPUT="${DASHBOARDS_DIR}/$(basename $FILE)"
+ sed -e 's/${DS_PROMETHEUS}/default-prometheus/g' \
+ -e 's/${DS_LOKI}/default-loki/g' $FILE | \
+ jq --arg f "${START}" --arg t "${END}" '.time.from=$f | .time.to=$t' >
$OUTPUT
+ done
+
+ docker-compose down
+ docker-compose up &
+}
+
+function cleanup() {
+ docker-compose down -v
+ rm -rf ${TMP_BASEDIR}
+}
+
+function ctrl_c() {
+ echo "Shutting down"
+ cleanup
+}
+
+trap ctrl_c INT
+
+startup
+while ! wget -q http://localhost:8080; do
+ sleep 2
+done
+echo "Instances running, please head to http://localhost:8080"
+xdg-open http://localhost:8080 || true
+wait
diff --git a/experiment/taler.rspec b/additional/rspecs/taler.any.rspec
similarity index 83%
copy from experiment/taler.rspec
copy to additional/rspecs/taler.any.rspec
index 462f39a..c4c855e 100644
--- a/experiment/taler.rspec
+++ b/additional/rspecs/taler.any.rspec
@@ -1,51 +1,46 @@
<?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-02T11:15:20.062+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
<node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="156.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="163.0"
y="140.5"/>
</node>
- <node client_id="Exchange" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="283.0"
y="127.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="275.0"
y="195.5"/>
</node>
<node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="422.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="409.0"
y="138.5"/>
</node>
- <node client_id="Proxy" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="284.5"
y="184.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="278.5"
y="242.5"/>
</node>
<node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="732.5"
y="156.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="566.5"
y="138.5"/>
</node>
- <node client_id="Merchant" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Merchant-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="554.5"
y="156.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="574.5"
y="183.5"/>
</node>
<node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="638.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="558.0"
y="94.5"/>
</node>
<node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
@@ -167,4 +162,28 @@
</sliver_type>
<location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="420.0"/>
</node>
-</rspec>
\ No newline at end of file
+ <node client_id="Shard-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="86.5"
y="59.5"/>
+ </node>
+ <node client_id="Shard-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="246.5"
y="59.5"/>
+ </node>
+ <node client_id="Shard-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="88.5"
y="98.5"/>
+ </node>
+ <node client_id="Shard-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="248.5"
y="100.5"/>
+ </node>
+</rspec>
diff --git a/additional/rspecs/taler.minial.rspec
b/additional/rspecs/taler.minial.rspec
new file mode 100644
index 0000000..f18357b
--- /dev/null
+++ b/additional/rspecs/taler.minial.rspec
@@ -0,0 +1,45 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-02T11:14:04.525+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+ <node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="166.0"
y="102.5"/>
+ </node>
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="220.0"
y="159.5"/>
+ </node>
+ <node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="280.0"
y="102.5"/>
+ </node>
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="218.5"
y="217.5"/>
+ </node>
+ <node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="467.5"
y="155.5"/>
+ </node>
+ <node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="458.0"
y="109.5"/>
+ </node>
+</rspec>
diff --git a/experiment/taler.rspec
b/additional/rspecs/taler.sharded.minimal-with-wallets.rspec
similarity index 72%
copy from experiment/taler.rspec
copy to additional/rspecs/taler.sharded.minimal-with-wallets.rspec
index 462f39a..e9292f9 100644
--- a/experiment/taler.rspec
+++ b/additional/rspecs/taler.sharded.minimal-with-wallets.rspec
@@ -1,170 +1,153 @@
<?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-07T08:29:19.023+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
<node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="156.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="129.96073503955864" y="91.04814004376368"/>
</node>
- <node client_id="Exchange" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="283.0"
y="127.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="203.55041363274475" y="126.77796370189213"/>
</node>
<node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="422.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="413.801756818745" y="79.01011581202081"/>
</node>
- <node client_id="Proxy" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="284.5"
y="184.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="218.97646326867414" y="162.8475631289378"/>
</node>
<node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="732.5"
y="156.5"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="873.7265700381206" y="77.06040773488321"/>
</node>
- <node client_id="Merchant" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Merchant-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="554.5"
y="156.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="594.9150062479899" y="77.06040773488321"/>
</node>
<node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="638.0"
y="70.0"/>
- </node>
- <node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
- <sliver_type name="raw-pc">
- <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
- </sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="140.0"
y="300.0"/>
- </node>
- <node client_id="Wallet-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
- <sliver_type name="raw-pc">
- <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
- </sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="280.0"
y="300.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="738.320134344963" y="77.06040773488321"/>
</node>
- <node client_id="Wallet-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
- <sliver_type name="raw-pc">
- <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
- </sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="420.0"
y="300.0"/>
- </node>
- <node client_id="Wallet-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
- <sliver_type name="raw-pc">
- <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
- </sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="560.0"
y="300.0"/>
- </node>
- <node client_id="Wallet-5" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Exchange-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="300.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="372.6656244562667" y="125.80310966332334"/>
</node>
- <node client_id="Wallet-6" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Shard-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="140.0"
y="340.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="25.393143690736686"/>
</node>
- <node client_id="Wallet-7" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Shard-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="280.0"
y="340.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="187.06837379160004" y="25.0"/>
</node>
- <node client_id="Wallet-8" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Shard-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="420.0"
y="340.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="80.58194965245518" y="53.30634573304157"/>
</node>
- <node client_id="Wallet-9" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Shard-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="560.0"
y="340.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="188.78589676158623" y="54.09263311451495"/>
</node>
- <node client_id="Wallet-10" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="340.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="91.56871997933155" y="214.32690197775239"/>
</node>
- <node client_id="Wallet-11" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="140.0"
y="380.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="288.4789299949497" y="214.32690197775239"/>
</node>
- <node client_id="Wallet-12" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="280.0"
y="380.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="485.3891400105678" y="214.32690197775239"/>
</node>
- <node client_id="Wallet-13" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="420.0"
y="380.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="672.4350024517428" y="211.5902650573779"/>
</node>
- <node client_id="Wallet-14" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-5" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="560.0"
y="380.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="879.2095600418041" y="214.32690197775239"/>
</node>
- <node client_id="Wallet-15" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-6" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="380.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="91.56871997933155" y="244.89615915450665"/>
</node>
- <node client_id="Wallet-16" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-7" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="140.0"
y="420.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="288.4789299949497" y="244.89615915450665"/>
</node>
- <node client_id="Wallet-17" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-8" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="280.0"
y="420.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="485.3891400105678" y="244.89615915450665"/>
</node>
- <node client_id="Wallet-18" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-9" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="420.0"
y="420.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="682.2993500261857" y="244.89615915450665"/>
</node>
- <node client_id="Wallet-19" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Wallet-10" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="560.0"
y="420.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="879.2095600418041" y="244.89615915450665"/>
</node>
- <node client_id="Wallet-20" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="EProxy-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="420.0"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="350.95488793162536" y="162.8475631289378"/>
</node>
</rspec>
\ No newline at end of file
diff --git a/additional/rspecs/taler.sharded.minimal.rspec
b/additional/rspecs/taler.sharded.minimal.rspec
new file mode 100644
index 0000000..564fe55
--- /dev/null
+++ b/additional/rspecs/taler.sharded.minimal.rspec
@@ -0,0 +1,73 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-02T11:13:13.451+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+ <node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="184.0"
y="122.5"/>
+ </node>
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="248.0"
y="177.5"/>
+ </node>
+ <node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="328.0"
y="121.5"/>
+ </node>
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="249.5"
y="231.5"/>
+ </node>
+ <node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="474.5"
y="123.5"/>
+ </node>
+ <node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="466.0"
y="77.5"/>
+ </node>
+ <node client_id="Shard-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="77.5"
y="29.5"/>
+ </node>
+ <node client_id="Shard-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="224.5"
y="27.5"/>
+ </node>
+ <node client_id="Shard-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.5"
y="71.5"/>
+ </node>
+ <node client_id="Shard-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="226.5"
y="72.5"/>
+ </node>
+</rspec>
diff --git a/configs/etc/default/prometheus b/configs/etc/default/prometheus
index b9b82ca..e4d6362 100644
--- a/configs/etc/default/prometheus
+++ b/configs/etc/default/prometheus
@@ -1,4 +1,4 @@
-ARGS="--config.file=/etc/monitor/prometheus.yaml
--web.listen-address=0.0.0.0:8080"
+ARGS="--config.file=/etc/monitor/prometheus.yaml
--web.listen-address=0.0.0.0:8080 --web.enable-admin-api"
# Prometheus supports the following options:
# --config.file="/etc/prometheus/prometheus.yml"
diff --git a/configs/etc/default/prometheus-nginx-exporter
b/configs/etc/default/prometheus-nginx-exporter
index 57da070..7cf9221 100644
--- a/configs/etc/default/prometheus-nginx-exporter
+++ b/configs/etc/default/prometheus-nginx-exporter
@@ -1,4 +1,4 @@
-ARGS="-nginx.scrape-uri <PROXY_URL_HERE>"
+ARGS="-nginx.scrape-uri http://localhost:80/stub_status"
# Prometheus-nginx-exporter supports the following options:
# -nginx.plus
diff --git a/configs/etc/default/prometheus-node-exporter
b/configs/etc/default/prometheus-node-exporter
new file mode 100644
index 0000000..a0d0520
--- /dev/null
+++ b/configs/etc/default/prometheus-node-exporter
@@ -0,0 +1,217 @@
+# Set the command-line arguments to pass to the server.
+# Due to shell scaping, to pass backslashes for regexes, you need to double
+# them (\\d for \d). If running under systemd, you need to double them again
+# (\\\\d to mean \d), and escape newlines too.
+ARGS=""
+
+# prometheus-node-exporter supports the following options:
+#
+# --collector.arp
+# Enable the arp collector (default: enabled).
+# --collector.bcache
+# Enable the bcache collector (default: enabled).
+# --collector.bcache.priorityStats
+# Expose expensive priority stats.
+# --collector.bonding
+# Enable the bonding collector (default: enabled).
+# --collector.btrfs
+# Enable the btrfs collector (default: enabled).
+# --collector.buddyinfo
+# Enable the buddyinfo collector (default: disabled).
+# --collector.conntrack
+# Enable the conntrack collector (default: enabled).
+# --collector.cpu
+# Enable the cpu collector (default: enabled).
+# --collector.cpu.info
+# Enables metric cpu_info.
+# --collector.cpu.info.bugs-include=COLLECTOR.CPU.INFO.BUGS-INCLUDE
+# Filter the `bugs` field in cpuInfo with a value that must be a regular
+# expression.
+# --collector.cpu.info.flags-include=COLLECTOR.CPU.INFO.FLAGS-INCLUDE
+# Filter the `flags` field in cpuInfo with a value that must be a regular
+# expression.
+# --collector.cpufreq
+# Enable the cpufreq collector (default: enabled).
+# --collector.disable-defaults
+# Set all collectors to disabled by default.
+# --collector.diskstats
+# Enable the diskstats collector (default: enabled).
+#
--collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$"
+# Regexp of devices to ignore for diskstats.
+# --collector.drbd
+# Enable the drbd collector (default: disabled).
+# --collector.edac
+# Enable the edac collector (default: enabled).
+# --collector.entropy
+# Enable the entropy collector (default: enabled).
+# --collector.fibrechannel
+# Enable the fibrechannel collector (default: enabled).
+# --collector.filefd
+# Enable the filefd collector (default: enabled).
+# --collector.filesystem
+# Enable the filesystem collector (default: enabled).
+#
--collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$"
+# Regexp of filesystem types to ignore for filesystem collector.
+#
--collector.filesystem.ignored-mount-points="^/(dev|proc|run|sys|mnt|media|var/lib/docker/.+)($|/)"
+# Regexp of mount points to ignore for filesystem collector.
+# --collector.hwmon
+# Enable the hwmon collector (default: enabled).
+# --collector.infiniband
+# Enable the infiniband collector (default: enabled).
+# --collector.interrupts
+# Enable the interrupts collector (default: disabled).
+# --collector.ipvs
+# Enable the ipvs collector (default: enabled).
+#
--collector.ipvs.backend-labels="local_address,local_port,remote_address,remote_port,proto,local_mark"
+# Comma separated list for IPVS backend stats labels.
+# --collector.ksmd
+# Enable the ksmd collector (default: disabled).
+# --collector.loadavg
+# Enable the loadavg collector (default: enabled).
+# --collector.logind
+# Enable the logind collector (default: disabled).
+# --collector.mdadm
+# Enable the mdadm collector (default: enabled).
+# --collector.meminfo
+# Enable the meminfo collector (default: enabled).
+# --collector.meminfo_numa
+# Enable the meminfo_numa collector (default: disabled).
+# --collector.mountstats
+# Enable the mountstats collector (default: disabled).
+# --collector.netclass
+# Enable the netclass collector (default: enabled).
+# --collector.netclass.ignored-devices="^$"
+# Regexp of net devices to ignore for netclass collector.
+# --collector.netdev
+# Enable the netdev collector (default: enabled).
+# --collector.netdev.device-exclude="^lo$"
+# Regexp of net devices to exclude (mutually exclusive to device-include).
+# --collector.netdev.device-include=COLLECTOR.NETDEV.DEVICE-INCLUDE
+# Regexp of net devices to include (mutually exclusive to device-exclude).
+# --collector.netstat
+# Enable the netstat collector (default: enabled).
+#
--collector.netstat.fields="^(.*_(InErrors|InErrs)|Ip_Forwarding|Ip(6|Ext)_(InOctets|OutOctets)|Icmp6?_(InMsgs|OutMsgs)|TcpExt_(Listen.*|Syncookies.*|TCPSynRetrans)|Tcp_(ActiveOpens|InSegs|OutSegs|OutRsts|PassiveOpens|RetransSegs|CurrEstab)|Udp6?_(InDatagrams|OutDatagrams|NoPorts|RcvbufErrors|SndbufErrors))$"
+# Regexp of fields to return for netstat collector.
+# --collector.network_route
+# Enable the network_route collector (default: disabled).
+# --collector.nfs
+# Enable the nfs collector (default: enabled).
+# --collector.nfsd
+# Enable the nfsd collector (default: enabled).
+# --collector.ntp
+# Enable the ntp collector (default: disabled).
+# --collector.ntp.ip-ttl=1
+# IP TTL to use while sending NTP query.
+# --collector.ntp.local-offset-tolerance=1ms
+# Offset between local clock and local ntpd time to tolerate.
+# --collector.ntp.max-distance=3.46608s
+# Max accumulated distance to the root.
+# --collector.ntp.protocol-version=4
+# NTP protocol version.
+# --collector.ntp.server-is-local
+# Certify that collector.ntp.server address is not a public ntp server.
+# --collector.ntp.server="127.0.0.1"
+# NTP server to use for ntp collector.
+# --collector.perf
+# Enable the perf collector (default: disabled).
+# --collector.perf.cpus=""
+# List of CPUs from which perf metrics should be collected.
+# --collector.perf.tracepoint=COLLECTOR.PERF.TRACEPOINT...
+# Perf tracepoint that should be collected.
+# --collector.powersupply.ignored-supplies="^$"
+# Regexp of power supplies to ignore for powersupplyclass collector.
+# --collector.powersupplyclass
+# Enable the powersupplyclass collector (default: enabled).
+# --collector.pressure
+# Enable the pressure collector (default: enabled).
+# --collector.processes
+# Enable the processes collector (default: disabled).
+# --collector.qdisc
+# Enable the qdisc collector (default: disabled).
+# --collector.qdisc.fixtures=""
+# Test fixtures to use for qdisc collector end-to-end testing.
+# --collector.rapl
+# Enable the rapl collector (default: enabled).
+# --collector.runit
+# Enable the runit collector (default: disabled).
+# --collector.runit.servicedir="/etc/service"
+# Path to runit service directory.
+# --collector.schedstat
+# Enable the schedstat collector (default: enabled).
+# --collector.sockstat
+# Enable the sockstat collector (default: enabled).
+# --collector.softnet
+# Enable the softnet collector (default: enabled).
+# --collector.stat
+# Enable the stat collector (default: enabled).
+# --collector.supervisord
+# Enable the supervisord collector (default: disabled).
+# --collector.supervisord.url="http://localhost:9001/RPC2"
+# XML RPC endpoint.
+# --collector.systemd
+# Enable the systemd collector (default: enabled).
+# --collector.systemd.enable-restarts-metrics
+# Enables service unit metric service_restart_total.
+# --collector.systemd.enable-start-time-metrics
+# Enables service unit metric unit_start_time_seconds.
+# --collector.systemd.enable-task-metrics
+# Enables service unit tasks metrics unit_tasks_current and unit_tasks_max.
+#
--collector.systemd.unit-exclude=".+\\.(automount|device|mount|scope|slice|target)"
+# Regexp of systemd units to exclude. Units must both match include and not
+# match exclude to be included.
+# --collector.systemd.unit-include=".+"
+# Regexp of systemd units to include. Units must both match include and not
+# match exclude to be included.
+# --collector.tcpstat
+# Enable the tcpstat collector (default: disabled).
+# --collector.textfile
+# Enable the textfile collector (default: enabled).
+# --collector.textfile.directory="/var/lib/prometheus/node-exporter"
+# Directory to read text files with metrics from.
+# --collector.thermal_zone
+# Enable the thermal_zone collector (default: enabled).
+# --collector.time
+# Enable the time collector (default: enabled).
+# --collector.timex
+# Enable the timex collector (default: enabled).
+# --collector.udp_queues
+# Enable the udp_queues collector (default: enabled).
+# --collector.uname
+# Enable the uname collector (default: enabled).
+# --collector.vmstat
+# Enable the vmstat collector (default: enabled).
+# --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*"
+# Regexp of fields to return for vmstat collector.
+# --collector.wifi
+# Enable the wifi collector (default: disabled).
+# --collector.wifi.fixtures=""
+# Test fixtures to use for wifi collector metrics.
+# --collector.xfs
+# Enable the xfs collector (default: enabled).
+# --collector.zfs
+# Enable the zfs collector (default: enabled).
+# --collector.zoneinfo
+# Enable the zoneinfo collector (default: disabled).
+# --log.format=logfmt
+# Output format of log messages. One of: [logfmt, json].
+# --log.level=info
+# Only log messages with the given severity or above. One of: [debug, info,
+# warn, error].
+# --path.procfs="/proc"
+# Procfs mountpoint.
+# --path.rootfs="/"
+# Rootfs mountpoint.
+# --path.sysfs="/sys"
+# Sysfs mountpoint.
+# --web.config=""
+# [EXPERIMENTAL] Path to config yaml file that can enable TLS or
+# authentication.
+# --web.disable-exporter-metrics
+# Exclude metrics about the exporter itself (promhttp_*, process_*, go_*).
+# --web.listen-address=":9100"
+# Address on which to expose metrics and web interface.
+# --web.max-requests=40
+# Maximum number of parallel scrape requests. Use 0 to disable.
+# --web.telemetry-path="/metrics"
+# Path under which to expose metrics.
+
diff --git a/configs/etc/default/prometheus-postgres-exporter
b/configs/etc/default/prometheus-postgres-exporter
index fe82513..39d2d18 100644
--- a/configs/etc/default/prometheus-postgres-exporter
+++ b/configs/etc/default/prometheus-postgres-exporter
@@ -4,7 +4,8 @@
# DATA_SOURCE_NAME='postgresql://login:password@hostname:port/'
# DATA_SOURCE_NAME='user=prometheus host=/run/postgresql dbname=postgres'
-DATA_SOURCE_NAME='<EXCHANGE_DB_URL_HERE>,<MERCHANT_DB_URL_HERE>'
+# IMPORTANT - place no comma between placeholders, it will be handled by the
scripts
+DATA_SOURCE_NAME='<EXCHANGE_DB_URL_HERE><MERCHANT_DB_URL_HERE><SHARD_DB_URLS_HERE>'
# Set the command-line arguments to pass to the server.
ARGS='--extend.query-path=/etc/monitor/postgres-exporter.yaml'
diff --git a/configs/etc/monitor/exchange-exporters.yaml.tpl
b/configs/etc/monitor/exchange-exporters.yaml.tpl
deleted file mode 100644
index 74a4992..0000000
--- a/configs/etc/monitor/exchange-exporters.yaml.tpl
+++ /dev/null
@@ -1,6 +0,0 @@
- - job_name: 'taler'
- static_configs:
- - labels:
- component: 'exchange'
- targets:
- # <EXCHANGES_HERE>
diff --git a/configs/etc/monitor/loki.yaml b/configs/etc/monitor/loki.yaml
index e00581b..fe8e0db 100644
--- a/configs/etc/monitor/loki.yaml
+++ b/configs/etc/monitor/loki.yaml
@@ -10,7 +10,7 @@ querier:
ingester:
wal:
enabled: true
- dir: /tmp/wal
+ dir: <EXPERIMENT_DATA_PATH_HERE>/loki/wal
lifecycler:
address: 127.0.0.1
ring:
@@ -36,15 +36,15 @@ schema_config:
storage_config:
boltdb_shipper:
- active_index_directory: /tmp/loki/boltdb-shipper-active
- cache_location: /tmp/loki/boltdb-shipper-cache
+ active_index_directory:
<EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-active
+ cache_location: <EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-cache
cache_ttl: 24h
shared_store: filesystem
filesystem:
- directory: /tmp/loki/chunks
+ directory: <EXPERIMENT_DATA_PATH_HERE>/loki/chunks
compactor:
- working_directory: /tmp/loki/boltdb-shipper-compactor
+ working_directory: <EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-compactor
shared_store: filesystem
limits_config:
diff --git a/configs/etc/monitor/node-exporters.yaml.tpl
b/configs/etc/monitor/node-exporters.yaml.tpl
index d8b69ac..4a0815d 100644
--- a/configs/etc/monitor/node-exporters.yaml.tpl
+++ b/configs/etc/monitor/node-exporters.yaml.tpl
@@ -7,28 +7,48 @@
- labels:
component: 'database'
targets:
- - '${DATABASE_DOMAIN}:9100'
+ - 'db.${DNS_ZONE}:9100'
- labels:
component: 'bank'
targets:
- - '${BANK_DOMAIN}:9100'
+ - 'bank.${DNS_ZONE}:9100'
- labels:
component: 'exchange'
targets:
- - '${EXCHANGE_DOMAIN}:9100'
+ # <EXCHANGE_NODES_HERE>
+ - labels:
+ component: 'exchange-aggregator'
+ targets:
+ - 'aggregator.${DNS_ZONE}:9100'
+ - labels:
+ component: 'exchange-closer'
+ targets:
+ - 'closer.${DNS_ZONE}:9100'
+ - labels:
+ component: 'exchange-transfer'
+ targets:
+ - 'transfer.${DNS_ZONE}:9100'
+ - labels:
+ component: 'exchange-wirewatch'
+ targets:
+ - 'wirewatch.${DNS_ZONE}:9100'
- labels:
component: 'proxy'
targets:
- - '${PROXY_DOMAIN}:9100'
+ # <PROXY_NODES_HERE>
- labels:
component: 'wallet'
targets:
- # <WALLETS_HERE>
+ # <WALLET_NODES_HERE>
- labels:
component: 'monitor'
targets:
- - '${MONITOR_DOMAIN}:9100'
+ - 'monitor.${DNS_ZONE}:9100'
- labels:
component: 'merchant'
targets:
- - '${MERCHANT_DOMAIN}:9100'
+ # <MERCHANT_NODES_HERE>
+ - labels:
+ component: 'shard'
+ targets:
+ # <SHARD_NODES_HERE>
diff --git a/configs/etc/monitor/postgres-exporter.yaml
b/configs/etc/monitor/postgres-exporter.yaml
index e473b6a..1f4eb37 100644
--- a/configs/etc/monitor/postgres-exporter.yaml
+++ b/configs/etc/monitor/postgres-exporter.yaml
@@ -158,118 +158,118 @@ pg_database:
usage: "GAUGE"
description: "Disk space used by the database"
-pg_stat_statements:
- query: "SELECT t2.rolname, t3.datname, queryid, calls, total_exec_time /
1000 as total_time_seconds, min_exec_time / 1000 as min_time_seconds,
max_exec_time / 1000 as max_time_seconds, mean_exec_time / 1000 as
mean_time_seconds, stddev_exec_time / 1000 as stddev_time_seconds, rows,
shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written,
local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written,
temp_blks_read, temp_blks_written, blk_read_time / 1000 a [...]
- master: true
- metrics:
- - rolname:
- usage: "LABEL"
- description: "Name of user"
- - datname:
- usage: "LABEL"
- description: "Name of database"
- - queryid:
- usage: "LABEL"
- description: "Query ID"
- - calls:
- usage: "COUNTER"
- description: "Number of times executed"
- - total_time_seconds:
- usage: "COUNTER"
- description: "Total time spent in the statement, in milliseconds"
- - min_time_seconds:
- usage: "GAUGE"
- description: "Minimum time spent in the statement, in milliseconds"
- - max_time_seconds:
- usage: "GAUGE"
- description: "Maximum time spent in the statement, in milliseconds"
- - mean_time_seconds:
- usage: "GAUGE"
- description: "Mean time spent in the statement, in milliseconds"
- - stddev_time_seconds:
- usage: "GAUGE"
- description: "Population standard deviation of time spent in the
statement, in milliseconds"
- - rows:
- usage: "COUNTER"
- description: "Total number of rows retrieved or affected by the
statement"
- - shared_blks_hit:
- usage: "COUNTER"
- description: "Total number of shared block cache hits by the statement"
- - shared_blks_read:
- usage: "COUNTER"
- description: "Total number of shared blocks read by the statement"
- - shared_blks_dirtied:
- usage: "COUNTER"
- description: "Total number of shared blocks dirtied by the statement"
- - shared_blks_written:
- usage: "COUNTER"
- description: "Total number of shared blocks written by the statement"
- - local_blks_hit:
- usage: "COUNTER"
- description: "Total number of local block cache hits by the statement"
- - local_blks_read:
- usage: "COUNTER"
- description: "Total number of local blocks read by the statement"
- - local_blks_dirtied:
- usage: "COUNTER"
- description: "Total number of local blocks dirtied by the statement"
- - local_blks_written:
- usage: "COUNTER"
- description: "Total number of local blocks written by the statement"
- - temp_blks_read:
- usage: "COUNTER"
- description: "Total number of temp blocks read by the statement"
- - temp_blks_written:
- usage: "COUNTER"
- description: "Total number of temp blocks written by the statement"
- - blk_read_time_seconds:
- usage: "COUNTER"
- description: "Total time the statement spent reading blocks, in
milliseconds (if track_io_timing is enabled, otherwise zero)"
- - blk_write_time_seconds:
- usage: "COUNTER"
- description: "Total time the statement spent writing blocks, in
milliseconds (if track_io_timing is enabled, otherwise zero)"
-
-pg_process_idle:
- query: |
- WITH
- metrics AS (
- SELECT
- application_name,
- SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP -
state_change))::bigint)::float AS process_idle_seconds_sum,
- COUNT(*) AS process_idle_seconds_count
- FROM pg_stat_activity
- WHERE state = 'idle'
- GROUP BY application_name
- ),
- buckets AS (
- SELECT
- application_name,
- le,
- SUM(
- CASE WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change))
<= le
- THEN 1
- ELSE 0
- END
- )::bigint AS bucket
- FROM
- pg_stat_activity,
- UNNEST(ARRAY[1, 2, 5, 15, 30, 60, 90, 120, 300]) AS le
- GROUP BY application_name, le
- ORDER BY application_name, le
- )
- SELECT
- application_name,
- process_idle_seconds_sum as seconds_sum,
- process_idle_seconds_count as seconds_count,
- ARRAY_AGG(le) AS seconds,
- ARRAY_AGG(bucket) AS seconds_bucket
- FROM metrics JOIN buckets USING (application_name)
- GROUP BY 1, 2, 3
- metrics:
- - application_name:
- usage: "LABEL"
- description: "Application Name"
- - seconds:
- usage: "HISTOGRAM"
- description: "Idle time of server processes"
-
+#pg_stat_statements:
+# query: "SELECT t2.rolname, t3.datname, queryid, calls, total_exec_time /
1000 as total_time_seconds, min_exec_time / 1000 as min_time_seconds,
max_exec_time / 1000 as max_time_seconds, mean_exec_time / 1000 as
mean_time_seconds, stddev_exec_time / 1000 as stddev_time_seconds, rows,
shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written,
local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written,
temp_blks_read, temp_blks_written, blk_read_time / 1000 [...]
+# master: true
+# metrics:
+# - rolname:
+# usage: "LABEL"
+# description: "Name of user"
+# - datname:
+# usage: "LABEL"
+# description: "Name of database"
+# - queryid:
+# usage: "LABEL"
+# description: "Query"
+# - calls:
+# usage: "COUNTER"
+# description: "Number of times executed"
+# - total_time_seconds:
+# usage: "COUNTER"
+# description: "Total time spent in the statement, in seconds"
+# - min_time_seconds:
+# usage: "GAUGE"
+# description: "Minimum time spent in the statement, in seconds"
+# - max_time_seconds:
+# usage: "GAUGE"
+# description: "Maximum time spent in the statement, in seconds"
+# - mean_time_seconds:
+# usage: "GAUGE"
+# description: "Mean time spent in the statement, in seconds"
+# - stddev_time_seconds:
+# usage: "GAUGE"
+# description: "Population standard deviation of time spent in the
statement, in seconds"
+# - rows:
+# usage: "COUNTER"
+# description: "Total number of rows retrieved or affected by the
statement"
+# - shared_blks_hit:
+# usage: "COUNTER"
+# description: "Total number of shared block cache hits by the
statement"
+# - shared_blks_read:
+# usage: "COUNTER"
+# description: "Total number of shared blocks read by the statement"
+# - shared_blks_dirtied:
+# usage: "COUNTER"
+# description: "Total number of shared blocks dirtied by the statement"
+# - shared_blks_written:
+# usage: "COUNTER"
+# description: "Total number of shared blocks written by the statement"
+# - local_blks_hit:
+# usage: "COUNTER"
+# description: "Total number of local block cache hits by the statement"
+# - local_blks_read:
+# usage: "COUNTER"
+# description: "Total number of local blocks read by the statement"
+# - local_blks_dirtied:
+# usage: "COUNTER"
+# description: "Total number of local blocks dirtied by the statement"
+# - local_blks_written:
+# usage: "COUNTER"
+# description: "Total number of local blocks written by the statement"
+# - temp_blks_read:
+# usage: "COUNTER"
+# description: "Total number of temp blocks read by the statement"
+# - temp_blks_written:
+# usage: "COUNTER"
+# description: "Total number of temp blocks written by the statement"
+# - blk_read_time_seconds:
+# usage: "COUNTER"
+# description: "Total time the statement spent reading blocks, in
seconds (if track_io_timing is enabled, otherwise zero)"
+# - blk_write_time_seconds:
+# usage: "COUNTER"
+# description: "Total time the statement spent writing blocks, in
seconds (if track_io_timing is enabled, otherwise zero)"
+#
+#pg_process_idle:
+# query: |
+# WITH
+# metrics AS (
+# SELECT
+# application_name,
+# SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP -
state_change))::bigint)::float AS process_idle_seconds_sum,
+# COUNT(*) AS process_idle_seconds_count
+# FROM pg_stat_activity
+# WHERE state = 'idle'
+# GROUP BY application_name
+# ),
+# buckets AS (
+# SELECT
+# application_name,
+# le,
+# SUM(
+# CASE WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change))
<= le
+# THEN 1
+# ELSE 0
+# END
+# )::bigint AS bucket
+# FROM
+# pg_stat_activity,
+# UNNEST(ARRAY[1, 2, 5, 15, 30, 60, 90, 120, 300]) AS le
+# GROUP BY application_name, le
+# ORDER BY application_name, le
+# )
+# SELECT
+# application_name,
+# process_idle_seconds_sum as seconds_sum,
+# process_idle_seconds_count as seconds_count,
+# ARRAY_AGG(le) AS seconds,
+# ARRAY_AGG(bucket) AS seconds_bucket
+# FROM metrics JOIN buckets USING (application_name)
+# GROUP BY 1, 2, 3
+# metrics:
+# - application_name:
+# usage: "LABEL"
+# description: "Application Name"
+# - seconds:
+# usage: "HISTOGRAM"
+# description: "Idle time of server processes"
+#
diff --git a/configs/etc/monitor/prometheus.yaml
b/configs/etc/monitor/prometheus.yaml
index 37f9773..87924c0 100644
--- a/configs/etc/monitor/prometheus.yaml
+++ b/configs/etc/monitor/prometheus.yaml
@@ -14,10 +14,25 @@ scrape_configs:
# DB Exporter
- job_name: 'database'
static_configs:
- - targets: ['127.0.0.1:9187'] #, '<MERCHANT_HOST_HERE>:9187']
+ - targets: ['127.0.0.1:9187']
# Exchange Proxy Exporter
- job_name: 'exchange-proxy'
static_configs:
- - targets: ['127.0.0.1:9113']
+ - labels:
+ component: 'nginx'
+ targets:
+ # <NGINX_EXPORTERS_HERE>
+
+ # Promtail with custom metrics
+ - job_name: 'promtail'
+ scrape_interval: 2s
+ static_configs:
+ - targets: ['127.0.0.1:9080']
+ - job_name: 'taler'
+ static_configs:
+ - labels:
+ component: 'exchange'
+ targets:
+ # <EXCHANGES_HERE>
diff --git a/configs/etc/monitor/promtail.yaml
b/configs/etc/monitor/promtail.yaml
index 2cd2a75..a5f9260 100644
--- a/configs/etc/monitor/promtail.yaml
+++ b/configs/etc/monitor/promtail.yaml
@@ -9,13 +9,146 @@ clients:
- url: http://127.0.0.1/loki/api/v1/push
scrape_configs:
+
- job_name: taler
syslog:
listen_address: 0.0.0.0:1514
labels:
job: taler
+ max_message_length: 65536
relabel_configs:
- source_labels: [__syslog_message_app_name]
target_label: app
- source_labels: [__syslog_message_hostname]
target_label: host
+
+- job_name: database
+ syslog:
+ listen_address: 0.0.0.0:1515
+ labels:
+ job: database
+ max_message_length: 65536
+ relabel_configs:
+ - source_labels: [__syslog_message_app_name]
+ target_label: app
+ pipeline_stages:
+ - match:
+ selector: '{job="database"} |~ "duration:" !~ "plan:"'
+ stages:
+ - regex:
+ expression: 'duration: (?P<time>\d+\.*\d*) ms'
+ - metrics:
+ slow_query_duration_hist:
+ prefix: 'taler_database_'
+ type: Histogram
+ description: "Slow query duration extracted from logs"
+ source: time
+ max_idle_duration: 24h
+ config:
+ buckets: [20,40,60,80,100,200,500,1000,5000,10000]
+ - match:
+ # '{job="database"} |~ "(011Query Text:)|(duration:.*execute)"'
+ selector: '{job="database"} |~ "duration:.*(execute|statement)"'
+ stages:
+ - regex:
+ # '(011Query Text: (?P<txt>.*))|(duration:.*execute [a-zA-Z_]+:
(?P<plan>.*))'
+ expression: 'duration:.*(execute [a-zA-Z_]+|statement):
(?P<plan>.*)'
+ - template:
+ source: lbl
+ template: '{{ printf "slow-query" }}'
+ - template:
+ source: query
+ template: '{{ coalesce .txt .plan }}'
+ - labels:
+ type: lbl
+ - output:
+ source: query
+
+- job_name: nginx
+ syslog:
+ listen_address: 0.0.0.0:1516
+ labels:
+ job: proxy
+ relabel_configs:
+ - source_labels: [__syslog_message_app_name]
+ target_label: app
+ pipeline_stages:
+ - match:
+ selector: '{job="proxy"}'
+ stages:
+ - regex:
+ expression:
'uri=/(?P<ep>[a-zA-Z]+)(?:/\w+)?(?:/(?P<act>[a-zA-Z]+))?
s=(?P<status>\d{3}).*urt=(?P<upstream_response_time>\d+\.\d+)
rt=(?P<response_time>\d+\.\d+) rl=(?P<request_length>\d+)
bs=(?P<bytes_sent>\d+)'
+ - template:
+ source: endpoint
+ template: '{{ printf "%s-%s" .ep .act | trimSuffix "-" }}'
+ - labels:
+ endpoint:
+ status:
+ - metrics:
+ total_requests:
+ prefix: 'taler_requests_'
+ type: Counter
+ description: "Total Requests"
+ config:
+ match_all: true
+ action: inc
+ # Used to calculate 'over_time' statistics
+ response_time:
+ prefix: 'taler_requests_'
+ type: Gauge
+ description: "Time taken for Nginx to respond"
+ source: response_time
+ max_idle_duration: 24h
+ config:
+ action: set
+ #
https://www.robustperception.io/how-does-a-prometheus-histogram-work
+ request_length_hist:
+ prefix: 'taler_requests_'
+ type: Histogram
+ description: "Request Length reported from Nginx"
+ source: request_length
+ max_idle_duration: 24h
+ config:
+ buckets: [1,10,50,100,200,500,1000,2000,5000]
+ bytes_sent_hist:
+ prefix: 'taler_requests_'
+ type: Histogram
+ description: "Number of bytes sent, reported from Nginx"
+ source: bytes_sent
+ max_idle_duration: 24h
+ config:
+ buckets: [1,10,50,100,200,500,1000,2000,5000]
+ response_time_hist:
+ prefix: 'taler_requests_'
+ type: Histogram
+ description: "Time taken for Nginx to respond"
+ source: response_time
+ max_idle_duration: 24h
+ config:
+ buckets:
[0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+ upstream_response_time_hist:
+ prefix: 'taler_requests_'
+ type: Histogram
+ description: "Time taken for the Exchange to respond to Nginx"
+ source: upstream_response_time
+ max_idle_duration: 24h
+ config:
+ buckets:
[0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+
+- job_name: wallet
+ syslog:
+ listen_address: 0.0.0.0:1517
+ labels:
+ job: wallet
+ relabel_configs:
+ - source_labels: [__syslog_message_app_name]
+ target_label: app
+ pipeline_stages:
+ - match:
+ selector: '{job="wallet"} |~ "Bench1"'
+ stages:
+ - template:
+ source: script
+ template: 'benchmark'
+ - labels:
+ script:
diff --git a/configs/etc/nginx/sites-available/exchange
b/configs/etc/nginx/sites-available/exchange
new file mode 100644
index 0000000..c532895
--- /dev/null
+++ b/configs/etc/nginx/sites-available/exchange
@@ -0,0 +1,66 @@
+upstream exchange {
+ least_conn;
+ keepalive 20;
+ # EXCHANGE_PROCESSES e.g.
+ # server exch.perf.taler:8080;
+ # server exch.perf.taler:80;
+ # <SERVERS_HERE>
+}
+
+# This format is expected by promtail (configs/etc/monitor/promtail.yaml)
+log_format taler 'm=$request_method uri=$uri s=$status '
+ 'uct=$upstream_connect_time '
+ 'urt=$upstream_response_time '
+ 'rt=$request_time '
+ 'rl=$request_length '
+ 'bs=$bytes_sent';
+
+# Disable logging of HEAD requests
+map $request_method $log_line {
+ 'HEAD' 0;
+ default 1;
+}
+
+# Setup a cache with 1GB storage for our exchange
+# https://www.nginx.com/blog/nginx-caching-guide/
+proxy_cache_path /var/cache/proxy levels=1:2 keys_zone=exchange:1m inactive=1m
max_size=1g;
+
+server {
+ listen 80;
+ listen 443 ssl;
+
+ ssl_certificate /etc/ssl/proxy.cert.pem;
+ ssl_certificate_key /etc/ssl/proxy.key.pem;
+
+ server_name <PROXY_DOMAIN_HERE>;
+
+ access_log
syslog:server=localhost,facility=user,tag=taler_exchange_proxy,severity=info
taler if=$log_line;
+
+ allow 172.16.0.0/12;
+ deny all;
+
+ keepalive_timeout 10;
+ keepalive_requests 100000;
+
+ location / {
+
+ proxy_cache exchange;
+ # Dont cache requests too early
+ proxy_cache_min_uses 16;
+
+ proxy_pass http://exchange;
+ proxy_redirect off;
+
+ }
+}
+
+server {
+ listen 80;
+ server_name localhost;
+
+ location /stub_status {
+ stub_status;
+ access_log off;
+ }
+}
+
diff --git a/configs/etc/nginx/sites-available/fakebank
b/configs/etc/nginx/sites-available/fakebank
new file mode 100644
index 0000000..6545770
--- /dev/null
+++ b/configs/etc/nginx/sites-available/fakebank
@@ -0,0 +1,29 @@
+log_format taler 'm=$request_method uri=$uri s=$status '
+ 'uct=$upstream_connect_time '
+ 'urt=$upstream_response_time '
+ 'rt=$request_time '
+ 'rl=$request_length '
+ 'bs=$bytes_sent';
+
+server {
+ listen 80;
+ listen 443 ssl;
+
+ ssl_certificate /etc/ssl/bank.cert.pem;
+ ssl_certificate_key /etc/ssl/bank.key.pem;
+
+ server_name 0.0.0.0;
+
+ allow 172.16.0.0/12;
+ deny all;
+
+ access_log
syslog:server=localhost,facility=user,tag=taler_fakebank_proxy,severity=info
taler;
+
+ location / {
+ proxy_pass http://localhost:8082;
+ proxy_redirect off;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Host $remote_addr;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+}
diff --git a/configs/etc/nginx/sites-available/merchant
b/configs/etc/nginx/sites-available/merchant
new file mode 100644
index 0000000..655cbb7
--- /dev/null
+++ b/configs/etc/nginx/sites-available/merchant
@@ -0,0 +1,29 @@
+log_format taler 'm=$request_method uri=$uri s=$status '
+ 'uct=$upstream_connect_time '
+ 'urt=$upstream_response_time '
+ 'rt=$request_time '
+ 'rl=$request_length '
+ 'bs=$bytes_sent';
+
+server {
+ listen 80;
+ listen 443 ssl;
+
+ ssl_certificate /etc/ssl/merchant.cert.pem;
+ ssl_certificate_key /etc/ssl/merchant.key.pem;
+
+ server_name 0.0.0.0;
+
+ allow 172.16.0.0/12;
+ deny all;
+
+ access_log
syslog:server=localhost,facility=user,tag=taler_merchant_proxy,severity=info
taler;
+
+ location / {
+ proxy_pass http://unix:/var/run/taler/merchant-httpd/merchant.sock;
+ proxy_redirect off;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-Host $remote_addr;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+}
diff --git a/configs/etc/nginx/sites-enabled/proxy
b/configs/etc/nginx/sites-enabled/proxy
deleted file mode 100644
index 4366d21..0000000
--- a/configs/etc/nginx/sites-enabled/proxy
+++ /dev/null
@@ -1,40 +0,0 @@
-upstream exchange {
- least_conn;
- # EXCHANGE_PROCESSES e.g.
- # server exch.perf.taler:8080;
- # server exch.perf.taler:80;
- # <SERVERS_HERE>
-}
-
-log_format taler 'm=$request_method uri=$request_uri s=$status '
- 'uct=$upstream_connect_time '
- 'urt=$upstream_response_time '
- 'rt=$request_time';
-
-map $request_method $log_line {
- 'HEAD' 0;
- default 1;
-}
-
-server {
- listen 80;
- listen [::]:80;
-
- server_name localhost;
-
- access_log
syslog:server=localhost,facility=user,tag=taler_proxy,severity=info taler
if=$log_line;
-
- allow 172.16.0.0/12;
- deny all;
-
- location / {
- proxy_pass http://exchange;
- proxy_redirect off;
- }
-
- location /stub_status {
- stub_status;
- access_log off;
- }
-}
-
diff --git a/configs/etc/rsyslog.d/taler.conf b/configs/etc/rsyslog.d/taler.conf
index 848afe4..df90ce6 100644
--- a/configs/etc/rsyslog.d/taler.conf
+++ b/configs/etc/rsyslog.d/taler.conf
@@ -11,11 +11,11 @@ if ($programname startswith 'taler' or $syslogtag
startswith 'taler') then {
action(type="omfwd"
protocol="tcp"
target="<MONITOR_DOMAIN_HERE>"
- port="1514"
+ port="<PROMTAIL_LOG_PORT_HERE>"
Template="RSYSLOG_SyslogProtocol23Format"
TCP_Framing="octet-counted"
KeepAlive="on")
- # Write all logs also to the file - will periodcally be rotaded by
taler-logbackup.service
+ # Write all logs also to the file - will periodcally be rotated by
taler-logbackup.service
*.* ?FileName
# Do not do any further steps with logs which matched this rule
& stop
diff --git a/configs/etc/taler/conf.d/exchange-business.conf
b/configs/etc/taler/conf.d/exchange-business.conf
index c5e6e17..ee3458a 100644
--- a/configs/etc/taler/conf.d/exchange-business.conf
+++ b/configs/etc/taler/conf.d/exchange-business.conf
@@ -1,38 +1,18 @@
-# Configuration for business-level aspects of the exchange.
-
[exchange]
-# Here you MUST add the master public key of the offline system
-# which you can get using `taler-exchange-offline setup`.
-# This is just an example, your key will be different!
-# MASTER_PUBLIC_KEY = YE6Q6TR1EDB7FD0S68TGDZGF1P0GHJD2S0XVV8R2S62MYJ6HJ4ZG
MASTER_PUBLIC_KEY = <MASTER_KEY_HERE>
-# Publicly visible base URL of the exchange.
-# BASE_URL = https://example.com/
BASE_URL = <BASE_URL_HERE>
MAX_REQUESTS = <MAX_REQUESTS_HERE>
-# For your terms of service and privacy policy, you should specify
-# an Etag that must be updated whenever there are significant
-# changes to either document. The format is up to you, what matters
-# is that the value is updated and never re-used. See the HTTP
-# specification on Etags.
-# TERMS_ETAG =
-# PRIVACY_ETAG =
+AGGREGATOR_SHARD_SIZE = <AGGREGATOR_SHARD_SIZE_HERE>
-# Bank accounts used by the exchange should be specified here:
[exchange-account-1]
enable_credit = yes
enable_debit = yes
-# Account identifier in the form of an RFC-8905 payto:// URI.
-# For SEPA, looks like payto://sepa/$IBAN?receiver-name=$NAME
-# Make sure to URL-encode spaces in $NAME!
payto_uri = payto://x-taler-bank/<BANK_HOST_HERE>/Exchange
-# Credentials to access the account are in a separate
-# config file with restricted permissions.
@inline-secret@ exchange-accountcredentials-1
../secrets/exchange-accountcredentials.secret.conf
diff --git a/configs/etc/taler/conf.d/exchange-coins.conf
b/configs/etc/taler/conf.d/exchange-coins.conf
index f1c6f5c..5c12389 100644
--- a/configs/etc/taler/conf.d/exchange-coins.conf
+++ b/configs/etc/taler/conf.d/exchange-coins.conf
@@ -1,158 +1,38 @@
# Coin configuration for the exchange.
# Should be placed in "/etc/taler/conf.d/exchange-coins.conf".
-[COIN-KUDOS-n1-t1633183611]
-VALUE = KUDOS:0.01
+[COIN-KUDOS-n1-t1647437582]
+VALUE = KUDOS:1
DURATION_WITHDRAW = 7 days
DURATION_SPEND = 2 years
DURATION_LEGAL = 6 years
FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
FEE_REFRESH = KUDOS:0
FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
-[COIN-KUDOS-n2-t1633183611]
-VALUE = KUDOS:0.02
+[COIN-KUDOS-n2-t1647437582]
+VALUE = KUDOS:4
DURATION_WITHDRAW = 7 days
DURATION_SPEND = 2 years
DURATION_LEGAL = 6 years
FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
FEE_REFRESH = KUDOS:0
FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
-[COIN-KUDOS-n3-t1633183611]
-VALUE = KUDOS:0.04
+[COIN-KUDOS-n3-t1647437582]
+VALUE = KUDOS:8
DURATION_WITHDRAW = 7 days
DURATION_SPEND = 2 years
DURATION_LEGAL = 6 years
FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
FEE_REFRESH = KUDOS:0
FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n4-t1633183611]
-VALUE = KUDOS:0.08
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n5-t1633183611]
-VALUE = KUDOS:0.16
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n6-t1633183611]
-VALUE = KUDOS:0.32
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n7-t1633183611]
-VALUE = KUDOS:0.64
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n8-t1633183611]
-VALUE = KUDOS:1.28
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n9-t1633183611]
-VALUE = KUDOS:2.56
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n10-t1633183611]
-VALUE = KUDOS:5.12
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n11-t1633183611]
-VALUE = KUDOS:10.24
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n12-t1633183611]
-VALUE = KUDOS:20.48
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n13-t1633183611]
-VALUE = KUDOS:40.96
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n14-t1633183611]
-VALUE = KUDOS:81.92
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
diff --git a/configs/etc/taler/conf.d/exchange-secmod.conf
b/configs/etc/taler/conf.d/exchange-secmod.conf
new file mode 100644
index 0000000..55fa5a2
--- /dev/null
+++ b/configs/etc/taler/conf.d/exchange-secmod.conf
@@ -0,0 +1,17 @@
+[taler-exchange-secmod-rsa]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-rsa/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-rsa/keys
+
+[taler-exchange-secmod-eddsa]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-eddsa/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-eddsa/keys
+
+[taler-exchange-secmod-cs]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-cs/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-cs/keys
diff --git a/configs/etc/taler/conf.d/exchange-system.conf
b/configs/etc/taler/conf.d/exchange-system.conf
index 75c670f..a72e368 100644
--- a/configs/etc/taler/conf.d/exchange-system.conf
+++ b/configs/etc/taler/conf.d/exchange-system.conf
@@ -1,10 +1,5 @@
-# Configuration settings for system parameters of the exchange.
-
-# Read secret sections into configuration, but only
-# if we have permission to do so.
@inline-secret@ exchangedb-postgres ../secrets/exchange-db.secret.conf
[exchange]
-# Only supported database is Postgres right now.
DATABASE = postgres
diff --git a/configs/etc/taler/conf.d/fake-bank.conf
b/configs/etc/taler/conf.d/fake-bank.conf
index 3b8634a..223a389 100644
--- a/configs/etc/taler/conf.d/fake-bank.conf
+++ b/configs/etc/taler/conf.d/fake-bank.conf
@@ -1,5 +1,5 @@
[bank]
-HTTP_PORT = 80
SERVE = http
+PORT = 8082
MAX_DEBT = KUDOS:100000000000.0
MAX_DEBT_BANK = KUDOS:1000000000000000.0
diff --git a/configs/etc/taler/conf.d/merchant.conf
b/configs/etc/taler/conf.d/merchant.conf
index 0f7bd93..6d58c2d 100644
--- a/configs/etc/taler/conf.d/merchant.conf
+++ b/configs/etc/taler/conf.d/merchant.conf
@@ -3,8 +3,12 @@
[merchant]
DATABASE = postgres
-SERVE = TCP
-PORT = 8080
+SERVE = UNIX
+UNIXPATH = /var/run/taler/merchant-httpd/merchant.sock
+
+[taler]
+
+CURRENCY = KUDOS
[merchant-exchange-perf]
diff --git a/configs/usr/lib/systemd/system/prometheus-node-exporter.service
b/configs/usr/lib/systemd/system/prometheus-node-exporter.service
new file mode 100644
index 0000000..98c3317
--- /dev/null
+++ b/configs/usr/lib/systemd/system/prometheus-node-exporter.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Prometheus exporter for machine metrics
+Documentation=https://github.com/prometheus/node_exporter
+
+[Service]
+Restart=on-failure
+User=prometheus
+EnvironmentFile=/etc/default/prometheus-node-exporter
+ExecStart=/usr/bin/prometheus-node-exporter $ARGS
+ExecReload=/bin/kill -HUP $MAINPID
+TimeoutStopSec=20s
+SendSIGKILL=no
+
+[Install]
+WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-aggregator.service
b/configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
similarity index 92%
rename from configs/usr/lib/systemd/system/taler-exchange-aggregator.service
rename to configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
index 9aba5a4..1f35b0f 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-aggregator.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
@@ -1,6 +1,5 @@
[Unit]
-Description=GNU Taler payment system exchange aggregator service
-PartOf=taler-exchange.target
+Description=GNU Taler payment system exchange aggregator service %I
[Service]
User=taler-exchange-aggregator
diff --git a/configs/usr/lib/systemd/system/taler-exchange-closer.service
b/configs/usr/lib/systemd/system/taler-exchange-closer@.service
similarity index 76%
rename from configs/usr/lib/systemd/system/taler-exchange-closer.service
rename to configs/usr/lib/systemd/system/taler-exchange-closer@.service
index 0728ce2..97a48a5 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-closer.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-closer@.service
@@ -1,6 +1,5 @@
[Unit]
-Description=GNU Taler payment system exchange closer service
-PartOf=taler-exchange.target
+Description=GNU Taler payment system exchange closer service %I
[Service]
User=taler-exchange-closer
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd.service
b/configs/usr/lib/systemd/system/taler-exchange-httpd.service
deleted file mode 100644
index 8be8049..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd.service
+++ /dev/null
@@ -1,25 +0,0 @@
-[Unit]
-Description=GNU Taler payment system exchange REST API
-AssertPathExists=/run/taler/exchange-httpd
-Requires=taler-exchange-httpd.socket taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service
-After=postgres.service network.target taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service
-PartOf=taler-exchange.target
-
-[Service]
-User=taler-exchange-httpd
-Type=simple
-# Depending on the configuration, the service suicides and then
-# needs to be restarted.
-Restart=always
-# Do not dally on restarts.
-RestartSec=1ms
-EnvironmentFile=/etc/environment
-ExecStart=<CMD_PREFIX_HERE>/usr/bin/taler-exchange-httpd -c
/etc/taler/taler.conf $TALER_ARGS $EXCHANGE_ARGS
-StandardOutput=journal
-StandardError=journal
-PrivateTmp=no
-PrivateDevices=yes
-ProtectSystem=full
-
-[Install]
-WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd.socket
b/configs/usr/lib/systemd/system/taler-exchange-httpd.socket
deleted file mode 100644
index 59aa5be..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd.socket
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-Description=Taler Exchange Socket
-PartOf=taler-exchange-httpd.service
-
-[Socket]
-ListenStream=80
-Accept=no
-Service=taler-exchange-httpd.service
-SocketUser=taler-exchange-httpd
-SocketGroup=www-data
-SocketMode=0660
-
-[Install]
-WantedBy=sockets.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
b/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
index 03477ad..65b2a93 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
@@ -1,12 +1,12 @@
[Unit]
Description=GNU Taler payment system exchange REST API at %I
AssertPathExists=/run/taler/exchange-httpd
-Requires=taler-exchange-httpd@%i.socket taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service
-After=postgres.service network.target taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service
-PartOf=taler-exchange.target
+Requires=taler-exchange-httpd@%i.socket taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service taler-exchange-secmod-cs.service
+After=postgres.service network.target taler-exchange-secmod-rsa.service
taler-exchange-secmod-eddsa.service taler-exchange-secmod-cs.service
[Service]
-User=taler-exchange-httpd
+#User=taler-exchange-httpd
+User=root
Type=simple
# Depending on the configuration, the service suicides and then
# needs to be restarted.
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
b/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
new file mode 100644
index 0000000..4284420
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=GNU Taler payment system exchange Clause Schnorr security module
+AssertPathExists=/run/taler/exchange-secmod-cs
+PartOf=taler-exchange.target
+
+[Service]
+#User=taler-exchange-secmod-cs
+User=root
+Type=simple
+Restart=on-failure
+EnvironmentFile=/etc/environment
+ExecStart=/usr/bin/taler-exchange-secmod-cs -c /etc/taler/taler.conf
$TALER_ARGS $CS_ARGS
+StandardOutput=journal
+StandardError=journal
+PrivateTmp=no
+PrivateDevices=yes
+ProtectSystem=full
+
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
b/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
index f96bee3..6e98f5e 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
@@ -4,7 +4,8 @@ AssertPathExists=/run/taler/exchange-secmod-eddsa
PartOf=taler-exchange.target
[Service]
-User=taler-exchange-secmod-eddsa
+#User=taler-exchange-secmod-eddsa
+User=root
Type=simple
Restart=on-failure
EnvironmentFile=/etc/environment
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
b/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
index 433fd5a..5f3a2c9 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
@@ -4,7 +4,8 @@ AssertPathExists=/run/taler/exchange-secmod-rsa
PartOf=taler-exchange.target
[Service]
-User=taler-exchange-secmod-rsa
+#User=taler-exchange-secmod-rsa
+User=root
Type=simple
Restart=on-failure
EnvironmentFile=/etc/environment
diff --git a/configs/usr/lib/systemd/system/taler-exchange-transfer.service
b/configs/usr/lib/systemd/system/taler-exchange-transfer@.service
similarity index 81%
rename from configs/usr/lib/systemd/system/taler-exchange-transfer.service
rename to configs/usr/lib/systemd/system/taler-exchange-transfer@.service
index 325a37a..6377ab6 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-transfer.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-transfer@.service
@@ -1,7 +1,6 @@
[Unit]
-Description=Taler Exchange Transfer Service
+Description=Taler Exchange Transfer Service %I
After=network.target
-PartOf=taler-exchange.target
[Service]
User=taler-exchange-wire
diff --git a/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
b/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
deleted file mode 100644
index 7efe7de..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=GNU Taler payment system exchange wirewatch service
-After=network.target
-PartOf=taler-exchange.target
-
-[Service]
-User=taler-exchange-wire
-Type=simple
-Restart=on-failure
-EnvironmentFile=/etc/environment
-ExecStart=/usr/bin/taler-exchange-wirewatch -c /etc/taler/taler.conf
$TALER_ARGS $WIREWATCH_ARGS
-StandardOutput=journal
-StandardError=journal
-PrivateTmp=yes
-PrivateDevices=yes
-ProtectSystem=full
diff --git a/configs/usr/lib/systemd/system/taler-exchange.target
b/configs/usr/lib/systemd/system/taler-exchange.target
deleted file mode 100644
index eea37c8..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange.target
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=GNU Taler exchange
-After=postgres.service network.target
-
-Wants=taler-exchange-httpd.service
-Wants=taler-exchange-wirewatch.service
-Wants=taler-exchange-aggregator.service
-Wants=taler-exchange-closer.service
-Wants=taler-exchange-transfer.service
-
-[Install]
-WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-prometheus-backup.service
b/configs/usr/lib/systemd/system/taler-prometheus-backup.service
new file mode 100644
index 0000000..8418b59
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-prometheus-backup.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Create periodic snapshots of the Prometheus data in the experiments
+Wants=taler-prometheus-backup.timer
+
+[Service]
+EnvironmentFile=/etc/environment
+ExecStart=/root/scripts/prometheus-backup.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-prometheus-backup.timer
b/configs/usr/lib/systemd/system/taler-prometheus-backup.timer
new file mode 100644
index 0000000..39607b2
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-prometheus-backup.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Create periodic snapshots of the Prometheus data in the experiments
+Requires=taler-prometheus-backup.service
+
+[Timer]
+Unit=taler-prometheus-backup.service
+OnCalendar=*:0/2
+
+[Install]
+WantedBy=timers.target
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 738e307..035443b 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -10,11 +10,6 @@ build the binaries directly"
ENV DEBIAN_FRONTEND=noninteractive
ENV GRID5K_DEST=lyon,lille \
- GNUNET_COMMIT_SHA=master \
- EXCHANGE_COMMIT_SHA=master \
- MERCHANT_COMMIT_SHA=master \
- WALLET_COMMIT_SHA=master \
- GRID5K_COMMIT_SHA=master \
TALER_HOME=/taler
RUN apt update && \
@@ -31,8 +26,8 @@ RUN apt update && \
libcurl4-gnutls-dev \
libsodium-dev \
libidn2-dev \
+ libgnutls28-dev \
libunistring-dev \
- libmicrohttpd-dev \
libextractor-dev \
libsqlite3-dev \
libqrencode-dev \
@@ -68,6 +63,7 @@ RUN apt update && \
gem install --no-document kameleon-builder
RUN mkdir taler && cd taler && \
+ git clone https://git.gnunet.org/libmicrohttpd.git && \
git clone https://git.gnunet.org/gnunet.git && \
git clone https://git.taler.net/exchange.git && \
git clone https://git.taler.net/merchant.git && \
diff --git a/docker/README.md b/docker/README.md
index 270db82..0dc1573 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -1,6 +1,6 @@
-# Taler Grid5000 Build Image
+# Taler Grid'5000 Build Image
-This docker image can be used to build the Grid5000 image for the taler
performance experiments
+This docker image can be used to build the Grid'5000 environment for the taler
performance experiments
## Build
@@ -9,9 +9,9 @@ Or alternatively with `docker-compose up --build` **NOTE** this
will also run th
## Run the build
-Running the image will build GNUnet, Taler and the Grid5000 image from the
specified commits.
+Running the image will build GNUnet, Taler and the Grid'5000 environment from
the specified commits.
-The image will then be uploaded to the specified nodes Grid5000 public
directory using the certificate provided.
+The environment will then be uploaded to the specified nodes Grid5000 public
directory using the certificate provided.
### docker
@@ -30,12 +30,12 @@ docker run -it --rm \
taler:build <ARGUMENTS>
```
-**NOTE** about the port 5900, this one can be used for vncviewer to see whats
happening inside the image which
-will be created. Run `vncviewver :0`.
+**NOTE** About the port 5900: this one can be used for vncviewer to see whats
happening inside the image while
+kameleon is running. Run `vncviewver :0`.
-#### Manual Build
+#### Manual Build / Debugging
-To get an interactive shell into the image override the entrypoint by adding
the following argument
+To get an interactive shell into the docker container override the entrypoint
by adding the following argument
before the last line in the command above:
```bash
@@ -71,13 +71,16 @@ docker-compose run --entrypoint /bin/bash taler-build
#### Environment Variables
+All variables listed below can be passed to the container with either -e or by
adding them to the docker-compose file.
+
**GRID5K_USER**: the user which `GRID5K_CERT` belongs to
**GRID5K_CERT**: the certificate which is used to login to the Grid5000 nodes
(docker-compose only)
**GRID5K_CERT_PASSWD**: the password to decrypt `GRID5K_CERT`
**GRID5K_DEST**: comma separated list of where to copy the image to in the
grid (default: lille,lyon)
**ARGUMENTS**: args to pass to entrypoint, one of
-r|--rebuild (rebuild the image)
- -n|--no-copy (do not copy the generated image to Grid5000 - make sure output
volume is mounted)
+ -n|--no-copy (do not copy the generated image to Grid5000 - make sure output
volume is mounted - see below)
+ --centos (build the `centos8` image instead of the default `debian11`)
As per default, running the docker command again will not clean or rebuild
the image
##### Additional
@@ -87,6 +90,10 @@ docker-compose run --entrypoint /bin/bash taler-build
**MERCHANT_COMMIT_SHA**: Which commit to use of taler-merchant
**WALLET_COMMIT_SHA**: Which commit to use of wallet-core
**GRID5K_COMMIT_SHA**: Which commit to use of this repo
+**LIBMICROHTTPD_CFLAGS**: CFLAGS to pass to ./configure when building
libmicrohttpd
+**GNUNET_CFLAGS**: CFLAGS to pass to ./configure when building gnunet
+**EXCHANGE_CFLAGS**: CFLAGS to pass to ./configure when building taler-exchange
+**MERCHANT_CFLAGS**: CFLAGS to pass to ./configure when building taler-merchant
These are listed explicitely in the docker-compose.yml and not via
environments.
All of them default to master if they are not present in the compose or via
environment.
@@ -104,15 +111,15 @@ apt install -y tigervnc-viewer
vncviewer :0
```
-#### Output
+#### Output Volume
-The image will be published to the Grid5000's public directory on a specified
node.
-Additionally the generated image can also be mounted to the host by specifying
`-v <some_path>:/root/output`
-or
+The image will be published to Grid'5000's public directory on a specified
node.
+Additionally the generated image can also be mounted to the host by passing
`-v <some_path>:/root/output` do `docker run`
+or with docker-compose:
```yaml
volumes:
- <some_path>:/root/output
```
-respectively
+in `docker-compose.yaml`.
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index b1f3eef..422b433 100644
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -5,6 +5,8 @@
set -e
+IMAGE=debian11
+
while [[ $# -gt 0 ]]; do
case "$1" in
-r|--rebuild)
@@ -17,6 +19,10 @@ while [[ $# -gt 0 ]]; do
echo "INFO will not copy image to Grid5000"
shift
;;
+ --centos)
+ IMAGE="centos8"
+ shift
+ ;;
*)
shift
;;
@@ -85,33 +91,45 @@ prepare grid5k "${GRID5K_COMMIT_SHA}"
# Test if the image specification is correct
run_command \
- "kameleon dryrun -g g5k_user:${G5K_USER}
${TALER_HOME}/grid5k/image/taler-debian11.yaml" \
+ "kameleon dryrun -g g5k_user:${G5K_USER}
${TALER_HOME}/grid5k/image/${IMAGE}/taler-${IMAGE}.yaml" \
"dryrun.log"
-cd ${TALER_HOME}/grid5k/image
+cd ${TALER_HOME}/grid5k/image/${IMAGE}
-if [ ! -f "build/taler-debian11/taler-debian11.tar.zst" ] || \
+if [ ! -f "build/taler-${IMAGE}/taler-${IMAGE}.tar.zst" ] || \
[ "$REBUILD" = true ];
then
- rm -rf /tmp/taler-debian11 ${TALER_HOME}/taler-debian11 || true
+ rm -rf /tmp/taler-${IMAGE} ${TALER_HOME}/taler-${IMAGE} || true
echo "INFO building image"
- yes r | kameleon build \
- -b /tmp taler-debian11.yaml \
- -g gnunet_commit_sha:${GNUNET_COMMIT_SHA} \
- exchange_commit_sha:${EXCHANGE_COMMIT_SHA} \
- merchant_commit_sha:${MERCHANT_COMMIT_SHA} \
- wallet_commit_sha:${WALLET_COMMIT_SHA} \
- grid5k_commit_sha:${GRID5K_COMMIT_SHA} \
- g5k_user:${GRID5K_USER} \
- | tee build.log
- mv /tmp/taler-debian11 ${TALER_HOME}
+ if [[ "$IMAGE" == "debian11" ]]; then
+ yes r | kameleon build \
+ -b /tmp taler-${IMAGE}.yaml \
+ -g gnunet_commit_sha:${GNUNET_COMMIT_SHA:-master} \
+ exchange_commit_sha:${EXCHANGE_COMMIT_SHA:-master} \
+ merchant_commit_sha:${MERCHANT_COMMIT_SHA:-master} \
+ wallet_commit_sha:${WALLET_COMMIT_SHA:-master} \
+ grid5k_commit_sha:${GRID5K_COMMIT_SHA:-master} \
+ libmicrohttpd_cflags:"${LIBMICROHTTPD_CFLAGS:--O2}" \
+ gnunet_cflags:"${GNUNET_CFLAGS:--O2}" \
+ exchange_cflags:"${EXCHANGE_CFLAGS:--O2}" \
+ merchant_cflags:"${MERCHANT_CFLAGS:--O2}" \
+ g5k_user:${GRID5K_USER} \
+ | tee build.log
+ else
+ yes r | kameleon build \
+ -b /tmp taler-${IMAGE}.yaml \
+ -g g5k_user:${GRID5K_USER} \
+ grid5k_commit_sha:${GRID5K_COMMIT_SHA:-master} \
+ | tee build.log
+ fi
+ mv /tmp/taler-${IMAGE} ${TALER_HOME}
fi
-cd ${TALER_HOME}/taler-debian11
+cd ${TALER_HOME}/taler-${IMAGE}
if [ -f "/root/cert.pem" ] && [ "$COPY" != false ]; then
- mv taler-debian11.dsc taler-debian11.dsc.bak
+ mv taler-${IMAGE}.dsc taler-${IMAGE}.dsc.bak
IFS=, read -ra G5K_HOSTS <<< "${GRID5K_DEST}"
@@ -119,9 +137,9 @@ if [ -f "/root/cert.pem" ] && [ "$COPY" != false ]; then
echo "Copying image to ${G5K_HOST}"
sed "/g5k_tar_path/s/lyon/${G5K_HOST}/g" \
- taler-debian11.dsc.bak > taler-debian11.dsc
+ taler-${IMAGE}.dsc.bak > taler-${IMAGE}.dsc
- scp -o StrictHostKeyChecking=no taler-debian11.tar.zst taler-debian11.dsc \
+ scp -o StrictHostKeyChecking=no taler-${IMAGE}.tar.zst taler-${IMAGE}.dsc \
"${GRID5K_USER}@access.grid5000.fr:${G5K_HOST}"/public/
done
@@ -129,6 +147,6 @@ fi
if [ -d "/root/output" ]; then
echo "INFO copying image to output (mounted volume)"
- mv taler-debian11.dsc.bak taler-debian11.dsc || true
- cp taler-debian11.tar.zst taler-debian11.dsc /root/output/
+ mv taler-${IMAGE}.dsc.bak taler-${IMAGE}.dsc || true
+ cp taler-${IMAGE}.tar.zst taler-${IMAGE}.dsc /root/output/
fi
diff --git a/experiment/README.md b/experiment/README.md
index 0517538..79c5277 100644
--- a/experiment/README.md
+++ b/experiment/README.md
@@ -1,81 +1,143 @@
# Experiment Setup
+## Requirements
+
+### jFed
+
+jFed is needed to run an experiment with the current setup. Please see
[here](https://jfed.ilabt.imec.be/)..
+
## Files
* experiment-specitication.yml: [ESpec](https://jfed.ilabt.imec.be/espec/) for
jFed
-* taler.rspec: Complete set of nodes to run an experiment
-* infra.rspec: Contains all nodes for the Taler infrastructure only
-* wallets.rspec: Contains an additional set of nodes for wallets
+* taler.rspec: Complete set of nodes to run an experiment (others contain more
wallets
+ or shards for example). Find more in `../aditional/rspecs`
* env: template file to add enviroment variables needed for the experiment
* scripts: Bash scripts which will be run in the experiment
+* ssh: ssh key material which the nodes use in the ESpec phase to communicate
with each other.
+ Safe to use here, since nodes can only be reached from inside the grid
already (currently used
+ for centos8 DB only)
## Run an Experiment
To successfully run an experiment the following steps must be made:
-**NOTE** An external Grafana instance with Taler Performance Dashboards is
needed
- Dashboards can be found in `additional` (TBD)
+**NOTE** An external Grafana instance with Taler Performance Dashboards is
needed (optionally) to see metrics and results.
+ The Dashboards can be found in `additional/grafana`
Install instructions can be found on
[grafana.com](https://grafana.com/docs/grafana/latest/installation/)
Once installed, two datasources must be added - Prometheus and Loki,
they will be updated from the experiment
* Copy the environment default configuration `env` to `.env`
-* Read through `.env` and define the missing variables
+* Read through `.env` and define the missing variables **NOTE**: Postgres
configuration is located in `scripts/database[-centos].sh`
* Start jFed Experimenter GUI
* Load taler.rspec and click Run
* Specify the experiment name and time
* Wait until taler.rspec is allocated successfully and nodes are ready
* Click (Re)Run ESpec for the job (use the type Directory and select this
directory (experiment))
-* If any error ocurr just press (Re)Run Espec again because sometimes there
are still unindentidfied errors
+* If any error ocurrs just press (Re)Run Espec again because sometimes there
are still unidentified errors in jFed / G5k
+* Start wallet processes with `taler-perf start wallet N` on any node in the
experiment
+
+**NOTE** The Grid'5000 environments are copied to a public directory of the
grid. So it might still be
+ available with
`http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc`
+ If not you must build your own (see `../image`) and specify this one
for each node in each rspec.
+ This can be done manually via jFed (double click node, and replace
`bfhch01` with your Grid'5000 username,
+ Or with sed (which is simpler and faster):
-### Add addtional Wallet Hosts
+```bash
+sed -i "s/bfhch01/YOUR_G5K_USERNAME/g" <RSPEC_FILE>
+```
-TODO - DOES NOT WORK YET - DNS host needs to be known ..
+### Hints and Bugs
-* Load wallets.rspec into jFed and click Run
-* Click (Re)Run ESpec for the wallet job (type directory)
-* Run `talet-perf update prometheus` on any deployed node to make prometheus
aware of the freshly added wallets
+#### Dependencies
-**NOTE** On `taler-perf`, when not using a terminal opened from jFed make sure
to forward the ssh-agent
- to make the script work. E.g. `ssh -A graoully-3.nancy.g5k`
+Nodes may have dependencies in `run.sh`, thus waiting for another node to
finish before continuing initialization.
+An example of this is the exchange, it will only be started once `DB_USER` has
remote access enabled (`wait_for_db` in `helpers.sh`).
+
+However, most nodes which log to Promtail/Loki will wait with initialization
until Promtail is running, so if something is stuck
+execute the following command on the `monitor` node:
+
+```bash
+systemctl status promtail.service
+```
+or
+```bash
+cat /var/log/syslog | grep -i promtail
+```
+
+#### DNS not working
+
+It _should_ work, if not just (RE)run ESpec, it happened sometimes that bind
was not ready when we are setting the domain names with dyndns.
## Rebuild Taler Binaries
-To quickly test fixes of new commits in gnunet,exchange,merchant and wallet,
there is a script `scripts/instal.sh`
-which can be run inside a running experiment rather than rebuilding the whole
image.
+On each experiment start the `setup` script checks if variables like
`GNUNET_COMMIT_SHA` are set (`.env`),
+if they are, the corresponding binary is rebuilt from source with the
specified commit.
+For more info please read `scripts/setup.sh` or `scripts/install.sh`
-To do so copy the following snippet into the `Multi Command` window in jFed:
-Please adjust commits as needed, the ones which are not defined or empty will
not be built.
-The ones which are a space only (" ") will build on master.
+If you forgot to set the variables, then `taler-perf rebuild` can do the work
in a running experiment. But
+processes would have to be restarted afterwards.
-```bash
-#!/bin/bash
+## Actions in a running Experiment
-export GNUNET_COMMIT_SHA=master
-export EXCHANGE_COMMIT_SHA=master
-export MERCHANT_COMMIT_SHA=master
-export WALLET_COMMIT_SHA=master
+### Start wallets
-/bin/bash /root/taler/grid5k/experiment/scripts/install.sh
-# /bin/bash /root/scripts/install.sh
-```
+* Run `talet-perf start wallet N` where N is any number
-## Actions in running Experiment
+**NOTE** On `taler-perf`, when not using a terminal opened from jFed make sure
to forward the ssh-agent
+ to make the script work. E.g. `ssh -A graoully-3.nancy.grid5000.fr`
(from an access machine).
-To add more exchange processes run `taler-perf stop ecxchange <NUM>` on any
node
+To add more exchange processes run `taler-perf stop exchange <NUM>` on any node
To add more wallet processes run `taler-perf start wallet <NUM>` on any node
They can also be stopped in the same way: `taler-perf stop <KIND> <NUM>`
-To stop the wallet processes which are logging, specify `taler-perf stop
wallet logging`, they will not
-be stopped otherwise.
-### Grafana Dashboard Plotting
-
+### Experiment Persistence
+
+The script `../additional/persist.sh` can be used to backup and clean the data
in the grid5k NFS.
+This archive created can then be passed to `../additional/recover.sh`, which
will run a local Grafana setup
+in which the experiment can be inspected again.
+
+For this to work the service `taler-databackup` using `scripts/data-backup.sh`
is run periodically.
+Loki data is directly written to the NFS. For the best results it is needed to
stop loki on the `monitor` node
+before an experiment ends - otherwise some of the loki data might become
corrupt.
+
+#### (Deprecated) Grafana Dashboard Plotting
+
To persists the dashboards as png plots, there is a script in `../additional`
which creates png
plots based on a configuration. Please refer to the README located in the
specified directory.
-### Application Logs
-The logs of the taler applications will be moved periodically to
`/home/<G5K_USER>/taler-logs`.
-They can then be retrieved using scp to the respective site they where running
on
-(e.g. nancy/taler-logs for grvingt and others).
-Make sure to back them up before restarting an experiment, since they will be
deleted in a new one.
+### Developer Notes
+
+#### Experiment Flow
+
+1. `experiment-specification.yml` is run when running ESpec, setting up
requirements and uploading scripts
+2. `setup.sh` is run on every node, exporting necessary environment variables
to `~/.env` and /etc/environment
+3. `run.sh` is run on every node, setting domain names and starting the
correct script according to the role the node has assigned
+ (given from `NODES` and `HOSTNAME`)
+
+#### Add more nodes
+
+Adding more nodes should be as simple as:
+
+1. Adding it in an rspec file (jFed)
+2. Adding the node name given in jFed to the `NODES` variable in `env` & `env`
+3. Extending `run.sh` - add a section like:
+ ```bash
+ ...
+ elif [[ "${HOSTNAME}" =~ ${<NODE_NAME_UPPERCASE>_HOSTS} ]]; then
+ ...
+ exec ~/scripts/<node-script>.sh
+ ...
+ ```
+4. Creating the `<node-script>.sh` containing node specific setup steps
+
+#### Environment
+
+That all environment variables are always available in every shell, they are
exported to `/etc/environment`.
+This file is also used by most of our custom service files in
`/usr/lib/systemd/system`.
+
+#### Useful functions
+
+The file `scripts/helpers.sh` contains a lot of re-usable functions - please
read this file for more information.
+
diff --git a/experiment/env b/experiment/env
index e1861e9..d72f84b 100644
--- a/experiment/env
+++ b/experiment/env
@@ -8,7 +8,7 @@
# (used to determine which script to execute in run.sh)
# Wallets are not needed explicitely since they can (and will be)
# exported as a wildcard (*).
-NODES="Bank DB DNS Exchange Merchant Monitor Proxy"
+NODES="Bank DB DNS Exchange Aggregator Closer Transfer Wirewatch Merchant
Monitor EProxy Shard"
# DNS Zone to setup inside the grid for the experiment
DNS_ZONE=perf.taler
@@ -20,18 +20,11 @@ G5K_HOME=/root/taler/grid5k
# configuration files
G5K_COMMIT_SHA=master
-# Domain names for the hosts inside the grid.
-# The most certainly do not need to be adjusted.
-# If you do anyway, make sure the wallets contain a wildcard (*)
-# Otherwise the experiment will not work
- BANK_DOMAIN=bank.${DNS_ZONE}
-DATABASE_DOMAIN=db.${DNS_ZONE}
- DNS_DOMAIN=ns1.${DNS_ZONE}
-EXCHANGE_DOMAIN=exchange.${DNS_ZONE}
-MERCHANT_DOMAIN=merchant.${DNS_ZONE}
- MONITOR_DOMAIN=monitor.${DNS_ZONE}
- PROXY_DOMAIN=proxy.${DNS_ZONE}
- WALLET_DOMAIN=wallet.*.${DNS_ZONE}
+# The exchange which is responsible to generate key material
+PRIMARY_EXCH=Exchange-1
+
+# The dns loadbalancing domain of the exchange (proxy)
+EXCHANGE_GW_DOMAIN=exchange.${DNS_ZONE}
# Arguments to pass to all taler-exchange-* binaries at startup.
# E.g. -L INFO
@@ -45,6 +38,7 @@ AGGREGATOR_ARGS="-y"
WIREWATCH_ARGS=""
EDDSA_ARGS=""
RSA_ARGS=""
+ CS_ARGS=""
# Additional arguments to prepend to taler-exchange-httpd.service
# files ExecStart command, e.g. /usr/bin/valgrind
--log-file=/tmp/exchange-%N.log
EXCHANGE_CMD_PREFIX=""
@@ -53,6 +47,18 @@ EXCHANGE_CMD_PREFIX=""
# before it kills itself
EXCHANGE_MAX_REQUESTS=8192
+# Which cipher the exchange should use
+EXCHANGE_CIPHER=RSA
+
+# When using the RSA cipher, which key size to use
+RSA_KEY_SIZE=2048
+
+# The lookahead sign duration for the exchange secmods
+LOOKAHEAD_SIGN="2 days"
+
+# Token used in Authorize: Bearer $TOKEN for the merchant
+TALER_MERCHANT_TOKEN=taler-perf
+
# Datasource names registered in the grafana instance
PROMETHEUS_DATASOURCE_NAME=Prometheus
LOKI_DATASOURCE_NAME=Loki
@@ -66,26 +72,49 @@ LOKI_G5K_PROXY_PORT=http
# Which version of postgres is installed in the environment
POSTGRES_VERSION=13
+# Setup postgres to use RAM instead of disks to store WAL and data
+POSTGRES_IN_MEMORY=false
# Exchange database configuration
DB_NAME=taler-exchange
DB_USER=taler
# Database password
DB_PASSWORD=taler
+# The mininmum duration of a sql statement to be logged by
log_min_duration_statement in ms
+DB_MIN_DURATION_STATEMENT=80
# If exchanges should connect to pgBouncer rather than to the db directly
USE_PGBOUNCER=false
+# If the taler-exchange database should be sharded
+SHARD_DB=false
+# If the taler-exchange database should be partitioned
+# NOTE sharding and partitioning are mutually exclusive, if both are true,
sharding will be tried
+PARTITION_DB=true
+# How many partitions of partitioned tables should be created
+NUM_PARTITIONS=2
# Initial number of wallets to start in parallel per host.
# This is a bulk size with default = 10
# Start another bunch with `taler-perf start wallet <N>`
NUM_WALLET_PROCESSES=10
+# Which benchmark to use of the wallet-cli (bench1, bench2)
+WALLET_BENCHMARK=bench1
+# Request the exchange via https instead of http
+WALLET_USE_HTTPS=true
+# Run a withdraw only experiment
+WALLET_WITHDRAW_ONLY=false
+# Needed for wallets to accept self signed certificates
+NODE_TLS_REJECT_UNAUTHORIZED=0
# Initial number of exchange processes to run.
# default = 10
# Start another bunch with `taler-perf start exchange <N>`
NUM_EXCHANGE_PROCESSES=1
-# Number of wirewatch processes to run
+# Number of other exchange-* processes to run
# This setting is static, default = 1
+# For the aggregator the number will be actually 2^n (so 0 will be 1 process)
+NUM_AGGREGATOR_PROCESSES=0
+ NUM_CLOSER_PROCESSES=1
+ NUM_TRANSER_PROCESSES=1
NUM_WIREWATTCH_PROCESSES=1
TALER_WALLET_SYNC_CRYPTO=1
@@ -105,3 +134,26 @@ GRAFANA_HOST=https://147.87.255.221:3000
# Needs admin level since datasources need to be updated.
# This can be generated by a grafana admin in 'Configuration->API keys->Add
API key'
GRAFANA_API_KEY=
+
+# If the data persisted from prometheus and loki from a
+# previous experiment should be removed before starting
+# a new one
+REMOVE_PREVIOUS_EXPERIMENT_DATA=true
+
+# If *_COMMIT_SHA is not empty the corresponding
+# binary is rebuilt from source on the specified commit
+# with *_CFLAGS before starting the experiment.
+# NOTE: if you missed it, you can use `taler-perf rebuild` in a running
experiment
+LIBMICROHTTPD_COMMIT_SHA=""
+ LIBMICROHTTPD_CFLAGS=""
+
+GNUNET_COMMIT_SHA=""
+ GNUNET_CFLAGS=""
+
+EXCHANGE_COMMIT_SHA=""
+ EXCHANGE_CFLAGS=""
+
+MERCHANT_COMMIT_SHA=""
+ MERCHANT_CFLAGS=""
+
+WALLET_COMMIT_SHA=""
diff --git a/experiment/experiment-specification.yml
b/experiment/experiment-specification.yml
index 908a4cf..32ab5be 100644
--- a/experiment/experiment-specification.yml
+++ b/experiment/experiment-specification.yml
@@ -12,6 +12,12 @@ upload:
permission: "775"
# Contains information about allocated nodes
- meta: experiment-info.json
+ # Used that nodes can communicate during espec phase
+ # Done since generated: of espec does not work
+ - bundled: ssh/id_rsa
+ path: ~/.ssh/id_rsa
+ - bundled: ssh/id_rsa.pub
+ path: ~/.ssh/id_rsa.pub
execute:
# Clear previous uploads and move new ones to ~/
# This step is necessary since dir uploads are not overriden
@@ -23,6 +29,11 @@ execute:
rm -rf ~/'execute[0].sh'
# Reset possible DNS issues created by our scripts
mv /etc/resolv.conf.bak /etc/resolv.conf || true
+ # Add the uploaded key as trusted
+ echo "" >> ~/.ssh/authorized_keys
+ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
+ # Stop all 'run.sh' scripts which are still running
+ kill $(ps -aux | grep run[.sh] | awk '{print $2}') || true
log: /dev/null
# Setup DNS and Environment config
- path: ~/scripts/setup.sh
diff --git a/experiment/scripts/bank.sh b/experiment/scripts/bank.sh
index feabff3..6184bd4 100755
--- a/experiment/scripts/bank.sh
+++ b/experiment/scripts/bank.sh
@@ -13,9 +13,12 @@ source ~/scripts/helpers.sh
# Start the taler-fakebank
function init_bank() {
+ create_cert "${NODE_NAME}.${DNS_ZONE}" "/etc/ssl/bank"
+ setup_rsyslog_for_nginx
restart_rsyslog
-
- systemctl restart taler-fakebank.service
+ ln -sf /etc/nginx/sites-available/fakebank /etc/nginx/sites-enabled/fakebank
+ systemctl restart taler-fakebank.service \
+ nginx
}
case $1 in
diff --git a/experiment/scripts/benchmark.sh b/experiment/scripts/benchmark.sh
index f2cb7b2..587e360 100755
--- a/experiment/scripts/benchmark.sh
+++ b/experiment/scripts/benchmark.sh
@@ -1,11 +1,13 @@
#!/bin/bash
INFO_MSG="
Start a wallet benchmark loop with 100'000 iterations
+
+Normally started by taler-wallet@.service
"
OPT_MSG="
<N>:
Any number
- If it is dividable by 10 then the wallet will log in INFO level
+ If it is dividable by 100 then the wallet will log in INFO level
"
set -eu
@@ -13,26 +15,36 @@ source ~/scripts/helpers.sh
# Start a wallet benchmark loop
function start_wallet_bench() {
- LOG_LEVEL=ERROR
+
+ PROTO=http
+ if [[ ${WALLET_USE_HTTPS} == "true" ]]; then
+ PROTO=https
+ fi
- # Every thenth wallet should log messages
- if ! (($1 % 10)) || [ $1 == "1" ]; then
+ LOG_LEVEL=ERROR
+ # One wallet in a hundred should log messages
+ if ! (($1 % 100)) || [ $1 == "1" ]; then
LOG_LEVEL=INFO
fi
+
+ NUM_DEPOSITS=$((RANDOM %21))
+ if [[ ${WALLET_WITHDRAW_ONLY} == "true" ]]; then
+ NUM_DEPOSITS=0
+ fi
taler-wallet-cli \
-L ${LOG_LEVEL} \
- advanced bench1 \
+ advanced ${WALLET_BENCHMARK} \
--config-json "
{
- \"exchange\": \"http://${PROXY_DOMAIN}/\",
- \"bank\": \"http://${BANK_DOMAIN}/\",
+ \"exchange\": \"${PROTO}://${EXCHANGE_GW_DOMAIN}/\",
+ \"bank\": \"http://bank.${DNS_ZONE}/\",
\"currency\": \"KUDOS\",
- \"payto\": \"payto://x-taler-bank/${BANK_DOMAIN}/foo\",
+ \"payto\": \"payto://x-taler-bank/bank.${DNS_ZONE}/foo\",
\"iterations\": 100000,
- \"deposits\": 10,
+ \"deposits\": ${NUM_DEPOSITS},
\"restartAfter\": 2
- }" | grep -v getRecords
+ }"
}
case $1 in
diff --git a/experiment/scripts/createusers.sh
b/experiment/scripts/createusers.sh
index a5b3705..3f8d8eb 100755
--- a/experiment/scripts/createusers.sh
+++ b/experiment/scripts/createusers.sh
@@ -4,8 +4,9 @@
# (normaly done automatically when installing from packages)
#
# Usage: ./createusers.sh
-set -e
+set -ex
+DEBIAN_FRONTEND=noninteractive
source /usr/share/debconf/confmodule
TALER_HOME="/var/lib/taler"
@@ -19,6 +20,7 @@ OGROUPNAME=taler-exchange-offline
CLOSERUSERNAME=taler-exchange-closer
RSECUSERNAME=taler-exchange-secmod-rsa
ESECUSERNAME=taler-exchange-secmod-eddsa
+CSECUSERNAME=taler-exchange-secmod-cs
AGGRUSERNAME=taler-exchange-aggregator
WIREUSERNAME=taler-exchange-wire
MERCHUSERNAME=taler-merchant-httpd
@@ -55,6 +57,12 @@ if ! getent passwd ${ESECUSERNAME} >/dev/null; then
--ingroup ${GROUPNAME} \
--home ${TALER_HOME} ${ESECUSERNAME}
fi
+if ! getent passwd ${CSECUSERNAME} >/dev/null; then
+ adduser --quiet --system \
+ --no-create-home \
+ --ingroup ${GROUPNAME} \
+ --home ${TALER_HOME} ${CSECUSERNAME}
+fi
if ! getent passwd ${WIREUSERNAME} >/dev/null; then
adduser --quiet --system \
--no-create-home \
@@ -89,10 +97,12 @@ fi
install -d /var/lib/taler/exchange-offline -m 0700 -o ${OUSERNAME} -g
${OGROUPNAME}
install -d /run/taler/exchange-secmod-rsa -m 0755 -o ${RSECUSERNAME} -g
${GROUPNAME}
install -d /run/taler/exchange-secmod-eddsa -m 0755 -o ${ESECUSERNAME} -g
${GROUPNAME}
+install -d /run/taler/exchange-secmod-cs -m 0755 -o ${CSECUSERNAME} -g
${GROUPNAME}
install -d /run/taler/exchange-httpd -m 0750 -o ${EUSERNAME} -g ${EGROUPNAME}
install -d /var/lib/taler/exchange-offline -m 0700 -o ${OUSERNAME} -g
${OGROUPNAME}
install -d /var/lib/taler/exchange-secmod-rsa -m 0700 -o ${RSECUSERNAME} -g
${GROUPNAME}
install -d /var/lib/taler/exchange-secmod-eddsa -m 0700 -o ${ESECUSERNAME} -g
${GROUPNAME}
+install -d /var/lib/taler/exchange-secmod-cs -m 0700 -o ${CSECUSERNAME} -g
${GROUPNAME}
install -d /run/taler/merchant-httpd -m 0755 -o ${MERCHUSERNAME} -g
${MERCHGROUPNAME}
if ! dpkg-statoverride --list
/etc/taler/secrets/exchange-accountcredentials.secret.conf >/dev/null 2>&1; then
@@ -112,5 +122,3 @@ if ! dpkg-statoverride --list
/etc/taler/secrets/merchant-db.secret.conf >/dev/n
${MERCHUSERNAME} root 460 \
/etc/taler/secrets/merchant-db.secret.conf
fi
-
-exit 0
diff --git a/experiment/scripts/database-centos.sh
b/experiment/scripts/database-centos.sh
new file mode 100755
index 0000000..fe50885
--- /dev/null
+++ b/experiment/scripts/database-centos.sh
@@ -0,0 +1,340 @@
+#!/bin/bash
+INFO_MSG="
+Setup the database node (start postgresql) in a centos environment
+"
+OPT_MSG="
+init:
+ Initialize and start the taler database
+ (calls remote-init on a remote node and thus
+ needs ssh access to other experiment nodes)
+
+remote-init:
+ Call taler-exchange-dbinit against the database
+ node from a remote node (since centos does not have Taler)
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# move to tmp to prevent change directory errors
+cd /tmp
+
+# Create disk and mount it it if possible
+function setup_disks() {
+ if [ -b /dev/disk1 ]; then
+ echo 'start=2048, type=83' | sfdisk /dev/disk1 || true
+ yes | mkfs.ext4 -m 0 /dev/disk1 || true
+ mkdir /mnt/disk || true
+ mount /dev/disk1 /mnt/disk || true
+ fi
+}
+
+# Setup the postgresql configuration
+function setup_config() {
+
+ mkdir -p /etc/systemd/system/postgresql-13.service.d || true
+ echo "
+[Service]
+Environment=PGDATA=/tmp/postgresql/13/data
+ " > /etc/systemd/system/postgresql-13.service.d/override.conf
+
+ systemctl daemon-reload
+
+ PGSETUP_INITDB_OPTIONS="-D /tmp/postgresql/13/data"
+
+ # Only do this if the disk has been configured
+ if [ -d /mnt/disk ]; then
+ mkdir /mnt/disk/pg_wal || true
+ chown -R postgres:postgres /mnt/disk/pg_wal
+ PGSETUP_INITDB_OPTIONS="${PGSETUP_INITDB_OPTIONS} -X /mnt/disk/pg_wal"
+ fi
+
+ if [ ! -d /tmp/postgresql/13/data ]; then
+ mkdir -p /tmp/postgresql/13/data
+ chown -R postgres:postgres /tmp/postgresql/
+ fi
+
+ # does not work for some reason it not exported here, also setting non
default values makes it fail
+ PGSETUP_INITDB_OPTIONS=${PGSETUP_INITDB_OPTIONS}
postgresql-${POSTGRES_VERSION}-setup initdb || true
+
+ # Get hardware info to tune in postgresql.conf
+ SHARED_MEM=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 3 ))
+ CACHE_SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) * 3/4))
+ NUM_CPU=$(lscpu | grep "CPU(s)" | head -n 1 | awk '{print $2}')
+
+ # Enable huge pages
+ # Size for huge_pages =~ shared_buffers * 1.25 so that there is enough
+ VM_PEAK=$((${SHARED_MEM} * 10/8))
+
+ HUGE_PAGES_SIZE=$(grep ^Hugepagesize /proc/meminfo | awk '{print $2}')
+ NUM_PAGES=$((${VM_PEAK} / ${HUGE_PAGES_SIZE}))
+
+ if ! grep -q "vm.nr_hugepages'" /etc/sysctl.conf; then
+ echo "vm.nr_hugepages=${NUM_PAGES}" >> /etc/sysctl.conf
+ sysctl -p
+ fi
+
+ # Allow longer lines to be logged by postgres
+ sed -i '1 i\$MaxMessageSize 4k' /etc/rsyslog.conf
+
+ # Configure postgres with an additional file and include this
+ # in the main configuration
+ echo "
+ listen_addresses='*'
+
+ log_destination=syslog
+ syslog_ident='taler-database'
+
+ log_error_verbosity=terse
+ # log_min_messages=PANIC
+ # log_min_error_statement=PANIC
+ # client_min_messages=ERROR
+
+ # For pgbadger
+ # log_checkpoints=on
+ # log_connections=on
+ # log_disconnections=on
+ # log_lock_waits=on
+ # log_temp_files=0
+ # log_autovacuum_min_duration=0
+ # log_error_verbosity=default
+ # log_duration=on
+ # log_statement=all
+
+ # For explain.py
+ # syslog_split_messages=off
+ # log_statement=all
+ # log_error_verbosity=default
+
+ log_min_duration_statement=${DB_MIN_DURATION_STATEMENT}
+
+ auto_explain.log_min_duration='${DB_MIN_DURATION_STATEMENT}ms'
+ auto_explain.log_verbose=true
+ auto_explain.log_nested_statements=true
+ auto_explain.log_analyze=true
+ auto_explain.log_buffers=true
+ auto_explain.log_wal=true
+
+ shared_preload_libraries='pg_stat_statements,auto_explain'
+
+ # Should be set locally
+ join_collapse_limit=1
+
+ # Large tables perform bad with the default settings
+ # However, they could also be set on each table indiviudally
+ # (NOTE: on partitions!)
+ # ALTER TABLE known_coins_default
+ # SET (autovacuum_vacuum_scale_factor = 0.0, autovacuum_vacuum_threshold =
1000);
+ log_autovacuum_min_duration=0
+ default_statistics_target=300
+ autovacuum_vacuum_cost_limit=400
+ autovacuum_vacuum_scale_factor=0.1
+ autovacuum_vacuum_threshold=1000
+
+ # Default 50, 0.1
+ autovacuum_analyze_threshold=50
+ autovacuum_analyze_scale_factor=0.1
+
+ # use 25% of the available memory
+ # (https://www.postgresql.org/docs/13/runtime-config-resource.html)
+ # shared_buffers=${SHARED_MEM}kB
+ # effective_cache_size=${CACHE_SIZE}kB
+ shared_buffers=24551953kB
+ effective_cache_size=75491895kB
+
+ huge_pages=on
+
+ #
(https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE)
+ min_wal_size=20GB
+ max_wal_size=200GB
+ wal_buffers=1GB
+
+ checkpoint_completion_target=0.9
+ checkpoint_timeout = 15min
+ checkpoint_flush_after = 2MB
+ random_page_cost=1.1
+
+ # Default 2kB
+ bgwriter_flush_after = 2MB
+
+ # Default 0
+ #
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+ backend_flush_after = 2MB
+
+ # Too much results in CPU load
+ #
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+ effective_io_concurrency = 200
+
+ # Bad when turned off - Recovering db may not be possible
+ # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+ fsync = on
+
+ # Not so bad as when turning off fsync, but single transactions might get
lost on crash - but
+ # like they would have aborted cleanly
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+ # When having replication, this one can be changed (in local only on and off
are of use)
+ #
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+ # on causes us to get 100% IO load
+ synchronous_commit = off
+
+ # Default off
+ wal_compression = off
+
+ wal_sync_method = fsync
+
+ # Bad to turn off, may lead to inconcistency
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+ # Write full pages to WAL while partial are written to disk, helpful in case
of crash, then
+ # partially written pages can be recovered.
+ # Can be disabled if FS does not support partial written pages (such as ZFS)
+ full_page_writes = on
+
+ max_worker_processes=${NUM_CPU}
+ max_parallel_workers=${NUM_CPU}
+ max_parallel_workers_per_gather=10
+ max_connections=500
+
+ max_parallel_maintenance_workers=12
+
+ # out of shared memory
+ max_locks_per_transaction=85
+
+ # (max used =~ work_mem * max_connections)
+ # NOTE: This formula is not completely correct
+ work_mem=2GB
+ maintenance_work_mem=4GB
+ # 1 min
+ idle_in_transaction_session_timeout=60000
+
+ # Disable sequential scans
+ # enable_seqscan=off
+
+ " > /tmp/postgresql/${POSTGRES_VERSION}/data/exchange.conf
+
+ cp /tmp/postgresql/${POSTGRES_VERSION}/data/exchange.conf
${LOG_DIR}/postgresql.conf
+
+ if ! grep -q "include = 'exchange.conf'" \
+ /tmp/postgresql/${POSTGRES_VERSION}/data/postgresql.conf; then
+ echo "include = 'exchange.conf'" >> \
+ /tmp/postgresql/${POSTGRES_VERSION}/data/postgresql.conf
+ fi
+
+ if ! grep -q "host all taler-exchange-httpd 127.16.0.0/12 trust" \
+ /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf; then
+ echo "
+ # we need this in centos to initialize the db from remote (taler not
installed)
+ host all taler-exchange-httpd 172.16.0.0/12 trust
+ host all postgres 172.16.0.0/12 trust
+ " >> /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+ fi
+
+ systemctl restart postgresql-${POSTGRES_VERSION}
+}
+
+# Allow DB_USER from remote (Exchange will continue initialization only when
+# this one was run)
+function enable_remote_access() {
+ # Enable password for taler since this is the case in real world deployments
+ # For the postgres user do not enable authentication (used in metrics)
+ if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
+ /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf; then
+ echo "
+ host all ${DB_USER} 172.16.0.0/12 md5
+ host all postgres 172.16.0.0/12 trust
+ " >> /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+ fi
+}
+
+# Create user mappings for DB_USER for each shard
+function configure_shard_access() {
+
+ for i in $(seq $NUM_SHARDS); do
+ su postgres << EOF
+psql -d "${DB_NAME}" -tAc "CREATE USER MAPPING IF NOT EXISTS FOR \"${DB_USER}\"
+ SERVER \"${i}\"
+ OPTIONS (user '${DB_USER}', password
'${DB_PASSWORD}');"
+EOF
+ done
+
+}
+
+# Initialize the database for taler exchange
+# Calls remote-dbinit from a remote system - requires ssh access
+function init_db() {
+
+ # Create the role taler-exchange-httpd and the database
+ su postgres << EOF
+psql postgres -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
+psql postgres -tAc "SELECT 1 FROM pg_roles WHERE
rolname='taler-exchange-httpd'" | \
+ grep -q 1 || \
+ createuser taler-exchange-httpd
+psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+ grep -q 1 || \
+ createdb -O taler-exchange-httpd "${DB_NAME}"
+psql -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
+EOF
+
+ ssh -o StrictHostKeyChecking=no \
+ -i ~/.ssh/id_rsa \
+ monitor.${DNS_ZONE} './scripts/database-centos.sh remote-init'
+
+ if [ "${SHARD_DB}" = "true" ]; then
+ configure_shard_access
+ fi
+
+ # Create the remote user "$DB_USER" and load pg_stat_statements for metrics
+ su postgres << EOF
+psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
+ grep -q 1 || \
+ psql << END
+ CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
+END
+EOF
+
+ # Grant access to the databse to the remote user
+ su postgres << EOF
+psql -d "${DB_NAME}"
+GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
+GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+EOF
+
+ enable_remote_access
+ systemctl restart postgresql-13
+}
+
+# Initialize the database from a system which has GNU Taler installed
+function remote_init_db() {
+
+ sed -i
"s\<DB_URL_HERE>\postgresql://taler-exchange-httpd@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}\g"
\
+ /etc/taler/secrets/exchange-db.secret.conf
+
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+
+ if [ "${SHARD_DB}" = "true" ]; then
+ sudo -u postgres taler-exchange-dbinit -F ${NUM_SHARDS}
+ elif [ "${PARTITION_DB}" = "true" ]; then
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+ else
+ sudo -u taler-exchange-httpd taler-exchange-dbinit
+ fi
+
+}
+
+
+case ${1} in
+ init)
+ setup_disks
+ setup_config
+ restart_rsyslog
+ init_db
+ ;;
+ remote-init)
+ remote_init_db
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
+
+exit 0
diff --git a/experiment/scripts/database.sh b/experiment/scripts/database.sh
index b19cabf..736efb9 100755
--- a/experiment/scripts/database.sh
+++ b/experiment/scripts/database.sh
@@ -13,45 +13,55 @@ source ~/scripts/helpers.sh
# move to tmp to prevent change directory errors
cd /tmp
+# Setup a disk if present to be used for WAL and move the WAL there
+# Don't use in combination with `setup_ram_storage`
function setup_disks() {
- if [[ "$(hostname)" =~ "dahu" ]]; then
- mkdir /mnt/sdb || true
- mount /dev/sdb /mnt/sdb || true
- if [ ! -L /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
- rm -rf /mnt/sdb/pg_wal || true
- mv /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/sdb
- ln -s /mnt/sdb/pg_wal /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal
- chown -R postgres:postgres
/var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/
- fi
+ if [ -b /dev/disk1 ]; then
+ # Dahu ssd
+ DISK=/dev/disk1
+ elif [ -b /dev/disk4 ]; then
+ # Yeti nvme
+ DISK=/dev/disk4
+ else
+ return
+ fi
+ echo 'start=2048, type=83' | sfdisk ${DISK} || true
+ yes | mkfs.ext4 -m 0 ${DISK} || true
+ mkdir /mnt/disk || true
+ mount ${DISK} /mnt/disk || true
+ if [ ! -L /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
+ rm -rf /mnt/disk/pg_wal || true
+ mv /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/disk
+ ln -s /mnt/disk/pg_wal /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal
+ chown -R postgres:postgres /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal
fi
+
}
+# Setup Postgres to use RAM instead of disks to store data
function setup_ram_storage() {
- SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 10))
- if ! df | grep -q /var/lib/postgresql; then
- mv /var/lib/postgresql /var/lib/postgresql.bak
- mkdir /var/lib/postgresql
- chown postgres:postgres /var/lib/postgresql
- mount -t tmpfs -o size=${SIZE}k pgdata /var/lib/postgresql
- cp -rp /var/lib/postgresql.bak/* /var/lib/postgresql
+ SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 4))
+ if ! df | grep -q /tmp/postgresql; then
+ mv /tmp/postgresql /tmp/postgresql.bak
+ mkdir /tmp/postgresql
+ chown postgres:postgres /tmp/postgresql
+ mount -t tmpfs -o size=${SIZE}k pgdata /tmp/postgresql
+ cp -rp /tmp/postgresql.bak/* /tmp/postgresql
fi
}
# Setup the postgresql configuration
function setup_config() {
+
+ # Grid5000 mounts the default disk on /tmp
+ # Move the DB there to get more storage
+ if [ -d /var/lib/postgresql ]; then
+ mv /var/lib/postgresql /tmp/
+ fi
+
sed -i "s\<DB_URL_HERE>\postgresql:///${DB_NAME}\g" \
/etc/taler/secrets/exchange-db.secret.conf
- # Enable password for taler since this is the case in real world deployments
- # For the postgres user do not enable authentication (used in metrics)
- if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
- /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf; then
- echo "
- host all ${DB_USER} 172.16.0.0/12 md5
- host all postgres 172.16.0.0/12 trust
- " >> /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
- fi
-
# Get hardware info to tune in postgresql.conf
SHARED_MEM=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 3 ))
CACHE_SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) * 3/4))
@@ -69,53 +79,148 @@ function setup_config() {
sysctl -p
fi
+ # Allow longer lines to be logged by postgres
+ sed -i '1 i\$MaxMessageSize 4k' /etc/rsyslog.conf
+
# Configure postgres with an additional file and include this
# in the main configuration
echo "
listen_addresses='*'
+
log_destination=syslog
syslog_ident='taler-database'
- log_min_duration_statement=500
- shared_preload_libraries='pg_stat_statements,auto_explain'
- auto_explain.log_min_duration='300ms'
+
+ log_error_verbosity=terse
+ # log_min_messages=PANIC
+ # log_min_error_statement=PANIC
+ # client_min_messages=ERROR
+
+ # For pgbadger
+ # log_checkpoints=on
+ # log_connections=on
+ # log_disconnections=on
+ # log_lock_waits=on
+ # log_temp_files=0
+ # log_autovacuum_min_duration=0
+ # log_error_verbosity=default
+ # log_duration=on
+ # log_statement=all
+
+ # For explain.py
+ # syslog_split_messages=off
+ # log_statement=all
+ # log_error_verbosity=default
+
+ log_min_duration_statement=${DB_MIN_DURATION_STATEMENT}
+
+ auto_explain.log_min_duration='${DB_MIN_DURATION_STATEMENT}ms'
+ auto_explain.log_verbose=true
+ auto_explain.log_nested_statements=true
auto_explain.log_analyze=true
auto_explain.log_buffers=true
auto_explain.log_wal=true
-
+
+ shared_preload_libraries='pg_stat_statements,auto_explain'
+
+ # Should be set locally
+ join_collapse_limit=1
+
+ # Large tables perform bad with the default settings
+ # However, they could also be set on each table indiviudally
+ # (NOTE: on partitions!)
+ # ALTER TABLE known_coins_default
+ # SET (autovacuum_vacuum_scale_factor = 0.0, autovacuum_vacuum_threshold =
1000);
+ log_autovacuum_min_duration=0
+ default_statistics_target=300
+ autovacuum_vacuum_cost_limit=400
+ autovacuum_vacuum_scale_factor=0.1
+ autovacuum_vacuum_threshold=1000
+
+ # Default 50, 0.1
+ autovacuum_analyze_threshold=50
+ autovacuum_analyze_scale_factor=0.1
+
# use 25% of the available memory
# (https://www.postgresql.org/docs/13/runtime-config-resource.html)
- shared_buffers=${SHARED_MEM}kB
- effective_cache_size=${CACHE_SIZE}kB
+ # shared_buffers=${SHARED_MEM}kB
+ # effective_cache_size=${CACHE_SIZE}kB
+ shared_buffers=24551953kB
+ effective_cache_size=75491895kB
+
huge_pages=on
#
(https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE)
- min_wal_size=4GB
- max_wal_size=8GB
- wal_buffers=16MB
+ min_wal_size=20GB
+ max_wal_size=200GB
+ wal_buffers=1GB
- # Hopefully reduce disk IO
- # https://www.postgresql.org/docs/12/wal-configuration.html
checkpoint_completion_target=0.9
+ checkpoint_timeout = 15min
+ checkpoint_flush_after = 2MB
random_page_cost=1.1
+ # Default 2kB
+ bgwriter_flush_after = 2MB
+
+ # Default 0
+ #
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+ backend_flush_after = 2MB
+
+ # Too much results in CPU load
+ #
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+ effective_io_concurrency = 200
+
+ # Bad when turned off - Recovering db may not be possible
+ # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+ fsync = on
+
+ # Not so bad as when turning off fsync, but single transactions might get
lost on crash - but
+ # like they would have aborted cleanly
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+ # When having replication, this one can be changed (in local only on and off
are of use)
+ #
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+ # on causes us to get 100% IO load
+ synchronous_commit = off
+
+ # Default off
+ wal_compression = off
+
+ wal_sync_method = fsync
+
+ # Bad to turn off, may lead to inconcistency
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+ # Write full pages to WAL while partial are written to disk, helpful in case
of crash, then
+ # partially written pages can be recovered.
+ # Can be disabled if FS does not support partial written pages (such as ZFS)
+ full_page_writes = on
+
max_worker_processes=${NUM_CPU}
max_parallel_workers=${NUM_CPU}
+ max_parallel_workers_per_gather=10
max_connections=500
- max_parallel_maintenance_workers=4
+ max_parallel_maintenance_workers=12
# out of shared memory
max_locks_per_transaction=85
- # Increase work mem to lower I/O utilization (max used =~ work_mem *
max_connections)
+ # (max used =~ work_mem * max_connections)
# NOTE: This formula is not completely correct
- work_mem=265MB
- maintenance_work_mem=2GB
+ work_mem=2GB
+ maintenance_work_mem=4GB
# 1 min
idle_in_transaction_session_timeout=60000
+
+ # Disable sequential scans
+ # enable_seqscan=off
+
+ # set our database location to /tmp
+ data_directory='/tmp/postgresql/${POSTGRES_VERSION}/main'
" > /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf
+ cp /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf
${LOG_DIR}/postgresql.conf
+
if ! grep -q "include = 'exchange.conf'" \
/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf; then
echo "include = 'exchange.conf'" >> \
@@ -138,47 +243,99 @@ function setup_pgbouncer() {
fi
}
+# Allow DB_USER from remote (Exchange will continue initialization only when
+# this one was run)
+function enable_remote_access() {
+ # Enable password for taler since this is the case in real world deployments
+ # For the postgres user do not enable authentication (used in metrics)
+ if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
+ /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf; then
+ echo "
+ host all ${DB_USER} 172.16.0.0/12 md5
+ host all postgres 172.16.0.0/12 trust
+ " >> /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
+ fi
+}
+
+# Create user mappings for DB_USER for each shard
+function configure_shard_access() {
+
+ for i in $(seq $NUM_SHARDS); do
+ su postgres << EOF
+psql -d "${DB_NAME}" -tAc "CREATE USER MAPPING IF NOT EXISTS FOR \"${DB_USER}\"
+ SERVER \"${i}\"
+ OPTIONS (user '${DB_USER}', password
'${DB_PASSWORD}');"
+EOF
+# Only in pg 14
+# for in $(seq $NUM_SHARDS); do
+# psql -d "${DB_NAME}" -tAc "ALTER SERVER ${i} OPTIONS (async_capable
"true");
+# done
+ done
+
+}
+
# Initialize the database for taler exchange
function init_db() {
systemctl restart postgresql
# Create the role taler-exchange-httpd and the database
su postgres << EOF
+psql postgres -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
psql postgres -tAc "SELECT 1 FROM pg_roles WHERE
rolname='taler-exchange-httpd'" | \
grep -q 1 || \
createuser taler-exchange-httpd
psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
grep -q 1 || \
createdb -O taler-exchange-httpd "${DB_NAME}"
+psql -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
EOF
-
- sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
- sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
- sudo -u taler-exchange-httpd taler-exchange-dbinit
-
+
# Create the remote user "$DB_USER" and load pg_stat_statements for metrics
su postgres << EOF
psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
grep -q 1 || \
psql << END
CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
- CREATE EXTENSION pg_stat_statements;
END
EOF
-
+
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+
+ if [ "${SHARD_DB}" = "true" ]; then
+ sudo -u postgres taler-exchange-dbinit -F ${NUM_SHARDS}
+ configure_shard_access
+ elif [ "${PARTITION_DB}" = "true" ]; then
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+ else
+ sudo -u taler-exchange-httpd taler-exchange-dbinit
+ fi
+
# Grant access to the databse to the remote user
su taler-exchange-httpd -s /bin/bash << EOF
psql -d "${DB_NAME}"
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
EOF
+
+# for i in $(seq $NUM_PARTITIONS); do
+# su postgres << EOF
+#psql -d ${DB_NAME} -tAc "ALTER TABLE known_coins_${i} SET (fillfactor=90)";
+#EOF
+# done
+
+ enable_remote_access
+ systemctl restart postgresql
}
case ${1} in
init)
setup_config
- #setup_disks
- setup_ram_storage
+ if [[ "${POSTGRES_IN_MEMORY}" == "true" ]]; then
+ setup_ram_storage
+ else
+ setup_disks
+ fi
init_db
setup_pgbouncer
restart_rsyslog
diff --git a/experiment/scripts/dns.sh b/experiment/scripts/dns.sh
new file mode 100755
index 0000000..1754526
--- /dev/null
+++ b/experiment/scripts/dns.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+set -eux
+
+# Backup used nodes for experiment
+cp ~/nodes.json ${LOG_DIR}/nodes.json
+
+if [[ "$REMOVE_PREVIOUS_EXPERIMENT_DATA" == "true" ]]; then
+ rm -rf /home/${G5K_USER}/espec-times || true
+fi
+if ! grep -q "# Times" /home/${G5K_USER}/espec-times; then
+ echo "# Times to use for recovery" > /home/${G5K_USER}/espec-times
+fi
+echo "$(date +%s)" >> /home/${G5K_USER}/espec-times
+
+# Clean the file so it is cleanly updated in each run
+rm ${LOG_DIR}/commits.txt || true
+
+for DIR in $(find ~/taler -type d -maxdepth 1); do
+ cd ${DIR}
+ echo "${DIR}: $(git rev-parse HEAD)" >> ${LOG_DIR}/commits.txt
+ cd -
+done
diff --git a/experiment/scripts/exchange-aggregator.sh
b/experiment/scripts/exchange-aggregator.sh
new file mode 100755
index 0000000..c8a7a77
--- /dev/null
+++ b/experiment/scripts/exchange-aggregator.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Aggregator node
+Start taler-exchange-aggregator
+"
+OPT_MSG="
+init:
+ Initialize the application(s) and start them
+ uses NUM_AGGREGATOR_PROCESSES
+
+init-start:
+ Same as init but do not configure taler.conf,
+ just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_aggregators() {
+ restart_rsyslog
+ for i in $( seq $(echo "2^${1}" | bc) ); do
+ systemctl restart taler-exchange-aggregator@"${i}".service
+ done
+}
+
+case $1 in
+ init)
+ setup_exchange_config_master_key_from_api
+ start_aggregators "$NUM_AGGREGATOR_PROCESSES"
+ ;;
+ init-start)
+ start_aggregators "$NUM_AGGREGATOR_PROCESSES"
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
diff --git a/experiment/scripts/exchange-closer.sh
b/experiment/scripts/exchange-closer.sh
new file mode 100755
index 0000000..e91abda
--- /dev/null
+++ b/experiment/scripts/exchange-closer.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Closer node
+Start taler-exchange-closer
+"
+OPT_MSG="
+init:
+ Initialize the application(s) and start them
+ uses NUM_CLOSER_PROCESSES
+
+init-start:
+ Same as init but do not configure taler.conf,
+ just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_closers() {
+ restart_rsyslog
+ for i in $(seq ${1}); do
+ systemctl restart taler-exchange-closer@"${i}".service
+ done
+}
+
+case $1 in
+ init)
+ setup_exchange_config_master_key_from_api
+ start_closers "$NUM_CLOSER_PROCESSES"
+ ;;
+ init-start)
+ start_closers "$NUM_CLOSER_PROCESSES"
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
diff --git a/experiment/scripts/exchange-proxy.sh
b/experiment/scripts/exchange-proxy.sh
new file mode 100755
index 0000000..ed4854c
--- /dev/null
+++ b/experiment/scripts/exchange-proxy.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+INFO_MSG="
+Confiure and start the nginx proxy server
+"
+OPT_MSG="
+init:
+ Initialize and start the proxy with NUM_EXCHANGE_PROCESSES upstreams
+
+start NUM:
+ Add another NUM exchanges to the list of upstreams
+
+stop NUM:
+ Remove NUM exchanges from the list of upstreams
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Add N exchanges to the upstream servers in the proxy configuration
+# $1: N - Number of currently running exchanges (per exchange host)
+# $2: N - Number of exchanges to add
+function add_exchanges() {
+
+ let "START=$1+10000"
+ let "END=$START+$2-1"
+
+ EXCHANGES=$(get_hosts "exchange-")
+
+ for PORT in $(seq $START $END); do
+ for HOST in ${EXCHANGES}; do
+ sed -i -e "/<SERVERS_HERE>/a \ \ server ${HOST}.${DNS_ZONE}:${PORT};" \
+ /etc/nginx/sites-available/exchange
+ done
+ done
+}
+
+# Setup the node and proxy configuration
+function setup_config() {
+
+ sed -i -e "s/<EXCHANGE_GW_DOMAIN_HERE>/${EXCHANGE_GW_DOMAIN}/g" \
+ /etc/nginx/sites-available/exchange
+
+
+ add_exchanges "0" ${NUM_EXCHANGE_PROCESSES}
+
+ setup_rsyslog_for_nginx
+
+ # Allow enough files to be opened by nginx (www-data)
+ echo "
+ fs.file-max=50000
+ " >> /etc/sysctl.conf
+
+ echo "
+ www-data soft nofile unlimited
+ www-data hard nofile unlimited
+ " >> /etc/security/limits.conf
+
+ sysctl -p
+}
+
+# Initialize and start the proxy
+function init_proxy() {
+ create_cert "${EXCHANGE_GW_DOMAIN}" "/etc/ssl/proxy"
+ setup_config
+
+ # Setup the directory where Ngxinx will place its cache
+ # configured in <g5k>/configs/etc/nginx/sites-availabled/exchange
+ mkdir -p /var/cache/proxy
+
+ restart_rsyslog
+ ln -sf /etc/nginx/sites-available/exchange /etc/nginx/sites-enabled/exchange
+
+ # Nginx does not start until the destination server is reachable - wait here
+ # nginx: [emerg] host not found in upstream "exch.perf.taler" ...
+ wait_for_keys "${PRIMARY_EXCHANGE}:10000"
+
+ systemctl restart nginx \
+ prometheus-nginx-exporter
+}
+
+# Remove N exchanges from the upstream list
+# $1: N - number of currently running exchanges
+# $2: N - number of exchanges to remove
+function remove_exchanges() {
+
+ # We know we started from port 10000
+ # get the highest port numbers and start removing from there
+ let "START=$1+10000"
+ let "END=$START-$2"
+
+ EXCHANGES=$(get_hosts "exchange-")
+
+ for PORT in $(seq $END $START); do
+ for HOST in ${EXCHANGES}; do
+ sed -i "/${HOST}.${DNS_ZONE}:${PORT};/d" \
+ /etc/nginx/sites-available/exchange
+ done
+ done
+}
+
+case $1 in
+ init)
+ init_proxy
+ ;;
+ start)
+ add_exchanges $2 $3
+ ;;
+ stop)
+ remove_exchanges $2 $3
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
+
+systemctl reload nginx
diff --git a/experiment/scripts/exchange-transfer.sh
b/experiment/scripts/exchange-transfer.sh
new file mode 100755
index 0000000..cb1700e
--- /dev/null
+++ b/experiment/scripts/exchange-transfer.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Transfer node
+Start taler-exchange-transfer
+"
+OPT_MSG="
+init:
+ Initialize the application(s) and start them
+ uses NUM_TRANSFER_PROCESSES
+
+init-start:
+ Same as init but do not configure taler.conf,
+ just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_transfers() {
+ restart_rsyslog
+ for i in $(seq ${1}); do
+ systemctl restart taler-exchange-transfer@"${i}".service
+ done
+}
+
+case $1 in
+ init)
+ setup_exchange_config_master_key_from_api
+ start_transfers "$NUM_TRANSFER_PROCESSES"
+ ;;
+ init-start)
+ start_transfers "$NUM_TRANSFER_PROCESSES"
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
diff --git a/experiment/scripts/exchange-wirewatch.sh
b/experiment/scripts/exchange-wirewatch.sh
new file mode 100755
index 0000000..3341a35
--- /dev/null
+++ b/experiment/scripts/exchange-wirewatch.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Wirewatch node
+Start taler-exchange-wirewatch
+"
+OPT_MSG="
+init:
+ Initialize the application(s) and start them
+ uses NUM_WIREWATCH_PROCESSES
+
+init-start:
+ Same as init but do not configure taler.conf,
+ just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+function start_wirewatches() {
+ # count the running wirewatches so that numbers can be increased
+ RUNNING=$(ps -aux | grep "[taler]-exchange-wirewatch" | wc -l)
+
+ for i in $(seq ${1}); do
+ let "i+=${RUNNING}"
+ systemctl restart taler-exchange-wirewatch@"${i}".service
+ sleep 0.5
+ done
+}
+
+function stop_wirewatches() {
+ stop_numbered_services "taler-exchange-wirewatch" $1
+}
+
+case $1 in
+ init)
+ setup_exchange_config_master_key_from_api
+ restart_rsyslog
+ start_wirewatches "$NUM_WIREWATCH_PROCESSES"
+ ;;
+ init-start)
+ restart_rsyslog
+ start_wirewatches "$NUM_WIREWATCH_PROCESSES"
+ ;;
+ start)
+ start_wirewatches "$2"
+ ;;
+ stop)
+ stop_wirewatches "$2"
+ ;;
+ *)
+ taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ ;;
+esac
diff --git a/experiment/scripts/exchange.sh b/experiment/scripts/exchange.sh
index 7277211..12a5f8d 100755
--- a/experiment/scripts/exchange.sh
+++ b/experiment/scripts/exchange.sh
@@ -1,18 +1,22 @@
#!/bin/bash
INFO_MSG="
Setup the Exchange node
-Start taler-exchnage-*
------
- could change later to single nodes
- for aggregator, wirewatch etc..
------
-Each exchange-http daemon, will get its own port starting from 10001,
-unless the first, this one will get port 80
+Start taler-exchange-httpd
+
+Each exchange-http daemon, will get its own port starting from 10000
+Detects it there are seperate nodes for aggregator and co., if not
+the processes are started too.
"
OPT_MSG="
-init:
- Initialize the applications and start them
- uses NUM_EXCHANGE_PROCESSES and NUM_WIREWATCH_PROCESSES
+init-primary:
+ Initialize the 'master exchange' and start NUM_EXCHANGE_PROCESSES
+ exchange processes
+ Sets up key material on the NFS to use for the secondary exchanges
+
+init-secondary:
+ Initialize the 'slave exchange' and start the processes
+ Waits until the master is done and then starts
+ NUM_EXCHANGE_PROCESSES exchange processes.
start NUM:
Start another NUM exchange-http daemons
@@ -25,34 +29,59 @@ set -eux
source ~/scripts/helpers.sh
# Setup the configuration in /etc/taler
-function setup_config() {
- sed -i
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@${DATABASE_DOMAIN}:${DB_PORT}/${DB_NAME}\g"
\
- /etc/taler/secrets/exchange-db.secret.conf
-
- sed -i "s/<BANK_HOST_HERE>/${BANK_DOMAIN}/g" \
- /etc/taler/secrets/exchange-accountcredentials.secret.conf
-
+function setup_primary_config() {
+
+ # remove keys from previous run in same experiment
+ rm -rf /var/lib/taler/exchange-offline/*
+
+ # Setup the base configuration (helpers.sh)
+ setup_exchange_config_without_master_key
+
MASTER_KEY=$(sudo -u taler-exchange-offline taler-exchange-offline setup)
- sed -i -e "s/<BANK_HOST_HERE>/${BANK_DOMAIN}/g" \
- -e "s\<BASE_URL_HERE>\http://${EXCHANGE_DOMAIN}/\g" \
- -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
- -e "s/<MAX_REQUESTS_HERE>/${EXCHANGE_MAX_REQUESTS:-8192}/g" \
+ sed -i -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
/etc/taler/conf.d/exchange-business.conf
+
+}
+
+# Check if there are exchange-* processes configured to be run
+# on external systems, if not start them here.
+function start_other_exchange_binaries() {
+ if [[ "${AGGREGATOR_HOSTS}" == "none" ]]; then
+ source ~/scripts/exchange-aggregator.sh init-start
+ fi
+ if [[ "${CLOSER_HOSTS}" == "none" ]]; then
+ source ~/scripts/exchange-closer.sh init-start
+ fi
+ if [[ "${TRANSFER_HOSTS}" == "none" ]]; then
+ source ~/scripts/exchange-transfer.sh init-start
+ fi
+ if [[ "${WIREWATCH_HOSTS}" == "none" ]]; then
+ source ~/scripts/exchange-wirewatch.sh init-start
+ fi
}
# Setup the exchange with the taler-exchange-offline signing procedure
-function setup_exchange() {
- systemctl restart taler-exchange.target
+function setup_primary_exchange() {
+
+ # Setup the shared key directory when we use a secondary node
+ if [[ ${NUM_EXCHANGES} != "1" ]]; then
+ rm -rf /home/${G5K_USER}/taler || true
+ mkdir -p /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}
+ fi
+
+ systemctl restart taler-exchange-httpd@10000.service
- wait_for_keys "${EXCHANGE_DOMAIN}/management"
+ start_other_exchange_binaries
+
+ wait_for_keys "${PRIMARY_EXCHANGE}:10000/management"
sleep 5
taler-exchange-offline download > sig-req.json
taler-exchange-offline sign < sig-req.json > sig-res.json
- taler-exchange-offline enable-account
"payto://x-taler-bank/${BANK_DOMAIN}/Exchange" > acct-res.json
- taler-exchange-offline wire-fee 2021 x-taler-bank KUDOS:0 KUDOS:0 >
fee-res.json
+ taler-exchange-offline enable-account
"payto://x-taler-bank/bank.${DNS_ZONE}/Exchange" > acct-res.json
+ taler-exchange-offline wire-fee $(date +%Y) x-taler-bank KUDOS:0 KUDOS:0
KUDOS:0 > fee-res.json
taler-exchange-offline upload < sig-res.json
taler-exchange-offline upload < acct-res.json
taler-exchange-offline upload < fee-res.json
@@ -60,47 +89,37 @@ function setup_exchange() {
# Initialize all stuff needed
# logs, configs, exchanges
-function init_exchanges() {
+# For the primary node which is responsible for key creation
+function init_primary_exchange() {
restart_rsyslog
-
- setup_config
-
+ setup_primary_config
wait_for_db
- # Wait another second to make sure user has permissions
- sleep 5
+ setup_primary_exchange
+}
- setup_exchange
+# Initialize all stuff needed for secondary exchange nodes
+# They use the key material from the primary exchange
+function init_secondary_exchange() {
+ restart_rsyslog
+ setup_exchange_config_master_key_from_api
}
# Start N new exchange-http daemons
+# $1: N - number of currently running exchanges
# $1: N - number of new exchanges to start
function start_exchanges() {
- # Get all currently running ones so the next free
- # port can be calculated - 10000 + RUNNING
- RUNNING=$(ps -aux | grep "[taler]-exchange-httpd" | wc -l)
-
- # We cant do seq 0 n, if n=0 it would yield 0, thus do seq n and decrement
- # by one, then seq 0 yields nothing
- for i in $(seq ${1}); do
- # seq starts at 1 - substract it
- let "i+=${RUNNING}-1" || true
- let "i+=10000"
- systemctl restart taler-exchange-httpd@"${i}".socket \
- taler-exchange-httpd@"${i}".service
+
+ let "START=$1+10000"
+ let "END=$START+$2-1"
+
+ for PORT in $(seq $START $END); do
+ systemctl restart taler-exchange-httpd@"${PORT}".socket \
+ taler-exchange-httpd@"${PORT}".service
# Wait so they have some small delay in between their routines from the
start
sleep 0.05
done
}
-# Start N new exchange-wirewatch processes
-# $1: N - number of new wirewatchers to start
-# NOTE: only for init purposes currently
-function start_wirewatchers() {
- for i in $(seq ${1}); do
- systemctl restart taler-exchange-wirewatch@"${i}".service
- done
-}
-
# Stop N exchange daemons
# $1: N -- number of exchanges to stop
function stop_exchanges() {
@@ -108,14 +127,17 @@ function stop_exchanges() {
}
case $1 in
- init)
- init_exchanges
- # TODO adjust when started manually and not with .target
- start_exchanges "$((${NUM_EXCHANGE_PROCESSES}-1))"
- start_wirewatchers "$((${NUM_WIREWATCH_PROCESSES}-1))"
+ init-primary)
+ init_primary_exchange
+ start_exchanges "1" "$((${NUM_EXCHANGE_PROCESSES}-1))"
+ ;;
+ init-secondary)
+ init_secondary_exchange
+ start_exchanges "0" "${NUM_EXCHANGE_PROCESSES}"
;;
start)
- start_exchanges $2
+ RUNNING=$(ps -aux | grep "[taler]-exchange-httpd" | wc -l)
+ start_exchanges $RUNNING $2
;;
stop)
stop_exchanges $2
diff --git a/experiment/scripts/helpers.sh b/experiment/scripts/helpers.sh
index 413043e..c972bd9 100755
--- a/experiment/scripts/helpers.sh
+++ b/experiment/scripts/helpers.sh
@@ -15,16 +15,13 @@ set -x
# is executed on
# $1: The domain to be added
function set_ddn() {
- # There are still issues sometimes
- # hostname -i ... failure syntax error
- # Even when looping with while ! hostname -i the next one
- # possibly may fail. Thus we try to fix it with eval
- while ! eval $(echo IP=$(hostname -i)) ; do
- sleep 5;
- systemctl restart dnsmasq
+ # wait for bind to be ready
+ while ! nc -z ${DNS_IP} 53; do
+ sleep 1
done
+ IP=$(ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p')
nsupdate -v << EOF
-server ${DNS_HOSTS}
+server ${DNS_IP}
zone ${DNS_ZONE}
update add ${1} 3600 A ${IP}
send
@@ -53,13 +50,15 @@ function enable_netdelay() {
}
# Setup the log directiories in the Grid5000 shared home directory (NFS)
+# And configure rsyslog to send logs to promtail
function setup_log() {
HOST_LOG_DIR=${LOG_DIR}/${TALER_HOST}
# || true is sill needed when e.g. wallets want to create the same
# directory at the same time
test -d ${HOST_LOG_DIR} || mkdir ${HOST_LOG_DIR} || true
# Send all logs about taler to promtail on the monitoring node
- sed -i -e "s/<MONITOR_DOMAIN_HERE>/${MONITOR_DOMAIN}/g" \
+ sed -i -e "s/<MONITOR_DOMAIN_HERE>/monitor.${DNS_ZONE}/g" \
+ -e "s/<PROMTAIL_LOG_PORT_HERE>/${PROMTAIL_LOG_PORT}/g" \
-e "s|<LOG_DIR_HERE>|${HOST_LOG_DIR}|g" \
/etc/rsyslog.d/taler.conf
# Enable log rotating for all logs in the host log dir on NFS
@@ -75,14 +74,16 @@ function enable_logrotate() {
# Wait for the database to be acessible by $DB_USER from remote
function wait_for_db() {
until PGPASSWORD="${DB_PASSWORD}" psql \
- -h "${DATABASE_DOMAIN}" \
+ -h "db.${DNS_ZONE}" \
-U "${DB_USER}" \
-d "${DB_NAME}" \
-p "${DB_PORT}" \
-c '\q';
do
echo "Database not ready yet"
- sleep 2
+ # sometimes dns is not working correctly - try to fix with restart
+ systemctl restart dnsmasq
+ sleep 5
done
}
@@ -96,15 +97,83 @@ function wait_for_keys() {
--quiet;
do
echo "Exchange not ready yet"
+ # sometimes dns is not working correctly - try to fix with restart
+ systemctl restart dnsmasq
sleep 5
done
}
+# Nginx will log to our rsyslog directly an then from there it will be
+# redirected to promtail - there was an issue doing it directly that's
+# why it is done this way
+function setup_rsyslog_for_nginx() {
+ sed -i -e '/module(load="imudp")/s/^#//g' \
+ -e '/input(type="imudp" port="514")/s/^#//g' \
+ /etc/rsyslog.conf
+}
+
+
+# Setup taler.conf for aggregator etc. with downloading the
+# master public key from the exchange API
+function setup_exchange_config_master_key_from_api() {
+
+ setup_exchange_config_without_master_key
+
+ wait_for_keys "${PRIMARY_EXCHANGE}:10000"
+
+ MASTER_KEY=$(
+ curl -k -f \
+ "${PRIMARY_EXCHANGE}:10000/keys" \
+ | jq -r '.master_public_key'
+ )
+
+ sed -i -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
+ /etc/taler/conf.d/exchange-business.conf
+
+}
+
+# Setup taler.conf for any exchange-* process, does not configure
+# the master key
+function setup_exchange_config_without_master_key() {
+
+ AGGREGATOR_SHARD_SIZE=$(echo "2^(30-${NUM_AGGREGATOR_PROCESSES})" | bc)
+
+ sed -i
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}\g"
\
+ /etc/taler/secrets/exchange-db.secret.conf
+
+ sed -i -e "s/<EXCHANGE_CIPHER_HERE>/${EXCHANGE_CIPHER}/g" \
+ -e "s/<RSA_KEY_SIZE_HERE>/${RSA_KEY_SIZE}/g" \
+ /etc/taler/conf.d/exchange-coins.conf
+
+ sed -i "s/<BANK_HOST_HERE>/bank.${DNS_ZONE}/g" \
+ /etc/taler/secrets/exchange-accountcredentials.secret.conf
+
+ sed -i -e "s/<BANK_HOST_HERE>/bank.${DNS_ZONE}/g" \
+ -e "s\<BASE_URL_HERE>\http://${NODE_NAME}.${DNS_ZONE}:10000/\g" \
+ -e "s/<MAX_REQUESTS_HERE>/${EXCHANGE_MAX_REQUESTS:-8192}/g" \
+ -e "s/<AGGREGATOR_SHARD_SIZE_HERE>/${AGGREGATOR_SHARD_SIZE}/g" \
+ /etc/taler/conf.d/exchange-business.conf
+
+ sed -i "s/<LOOKAHEAD_SIGN_HERE>/${LOOKAHEAD_SIGN}/g" \
+ /etc/taler/conf.d/exchange-secmod.conf
+
+ if [[ ${NUM_EXCHANGES} != "1" ]]; then
+ # Use a shared NFS key directory when we have multiple exchange-httpd
servers
+ sed -i "s|<SM_KEY_DIR_HERE>|/home/${G5K_USER}/taler|g" \
+ /etc/taler/conf.d/exchange-secmod.conf
+ else
+ # Use the default path if we have only one exchange-httpd server
+ sed -i 's/<SM_KEY_DIR_HERE>/${TALER_DATA_HOME}/g' \
+ /etc/taler/conf.d/exchange-secmod.conf
+ fi
+
+}
+
# Restart (enable) the rsyslog to send the logs to the monitoring
# Node and to the shared log dir (NFS)
function restart_rsyslog() {
# rsyslg fails to apply the taler rule if remote is not reachable
- while ! nc -z ${MONITOR_DOMAIN} 1514;
+ while ! nc -z "monitor.${DNS_ZONE}" 1514;
do
echo "Waiting for promtail"
# There are issues when dnsmasq tries to resolve before the service
@@ -137,26 +206,29 @@ function stop_numbered_services() {
done
}
-# Get all Grid5000 hosts which host wallets
-# Returns only the Grid5000 node - e.g. graoully-1
-function get_wallet_hosts() {
- IFS=$'\n' read -r -d '' -a WALLETS < <(\
+# Get all hosts which are registered under $1
+# Returns the host name - <HOST_NAME>.${DNS_ZONE}
+# $1: a regex for a domain/host to search for
+function get_hosts() {
+ IFS=$'\n' read -r -d '' -a HOSTS < <(\
dig -t AXFR "${DNS_ZONE}" "@${DNS_HOSTS}" \
- | grep ${WALLET_DOMAIN} | awk '{print $1}' | cut -d '.' -f 2 \
+ | grep ${1} | awk '{print $1}' | cut -d '.' -f 1 \
)
- echo ${WALLETS[@]}
+ echo ${HOSTS[@]}
}
-# Get all exchanges which are registered in the nginx proxy config
-# Returns the whole domain - e.g. exchange.perf.taler:80
-function get_exchanges() {
- IFS=$'\n' read -r -d '' -a EXCHANGES < <(\
- ssh -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
- grep -E "^[[:space:]]*server[[:space:]]exch"
/etc/nginx/sites-enabled/proxy \
- | cut -d ";" -f 1 | cut -d " " -f 4 \
- )
- echo ${EXCHANGES[@]}
+# Create a TLS certificate for $1
+# $1: domain to create cert for
+# $2: file name x to save x.key.pem and x.cert.pem
+function create_cert() {
+ openssl req -new -x509 \
+ -newkey rsa:4096 \
+ -keyout ${2}.key.pem \
+ -out ${2}.cert.pem \
+ -sha256 -days 10 -nodes \
+ -subj "/C=CH/ST=Bern/L=Biel/O=TI/CN=${1}"
}
+
# Display a help message and exit
# $1: script name to display help for
diff --git a/experiment/scripts/install.sh b/experiment/scripts/install.sh
index 86d8ed6..0f2e38f 100755
--- a/experiment/scripts/install.sh
+++ b/experiment/scripts/install.sh
@@ -1,18 +1,27 @@
#!/bin/bash
-# Rebuild the taler binaries from source
-# Requires the following optional variables to be set,
-# if not set the corresponding repo will not be rebuilt.
-# <GUNET|EXCHANGE|MERCHANT|WALLET>_COMMIT_SHA
+echo "
+Rebuild the taler binaries from source
+The following optional variables can be set:
+<LIBMICROHTTPD|GUNET|EXCHANGE|MERCHANT|WALLET>_COMMIT_SHA
+
+If not set the corresponding repo will not be rebuilt.
+
+Optionally, CFLAGS can be passed with:
+
+<LIBMICROHTTD|GNUNET|EXCHANGE|MERCHANT>_CFLAGS
+"
+
+set -e
TALER_HOME=~/taler
# Prepare the repository
# $1: Git repo to clone
# $2: Commit to checkout to
-function prepare() {
- DIR="${TALER_HOME}/$(basename ${1%.*})"
- test -d "${DIR}" || git clone "${1}" "${DIR}"
- cd "${DIR}"
+function prepare_repo() {
+ SRC_DIR="${TALER_HOME}/$(basename ${1%.*})"
+ test -d "${SRC_DIR}" || git clone "${1}" "${SRC_DIR}"
+ cd "${SRC_DIR}"
git checkout master > /dev/null && \
(git pull > /dev/null 2>&1 || true)
git checkout "$2" > /dev/null && \
@@ -21,22 +30,24 @@ function prepare() {
# Build the binaries in the current directory with make
# (runs ./bootstrap & ./configure)
+# $1: optional CFLAGS
function build() {
echo "INFO running bootstrap and configure"
./bootstrap
if [ -f contrib/gana.sh ]; then
./contrib/gana.sh
fi
- ./configure --enable-logging=verbose --prefix=/usr || ./configure
- make
+ CFLAGS="$1" ./configure --enable-logging=verbose --prefix=/usr ||
CFLAGS="$1" ./configure
+ make -j $(nproc)
}
# Install from a git repo
# $1: Git repo to clone
# $2: Commit to checkout to
-function install() {
- prepare "$1" "$2"
- build
+# $3: Optional CFLAGS for ./configure
+function install_repo() {
+ prepare_repo "$1" "$2"
+ build "$3"
echo "INFO installing"
make install
ldconfig
@@ -46,29 +57,37 @@ if [ ! -d "${TALER_HOME}" ]; then
mkdir "${TALER_HOME}"
fi
-# Use ! -z since -n would be false for ""
-if [ ! -z "${GNUNET_COMMIT_SHA}" ]; then
+if [[ -n ${LIBMICROHTTPD_COMMIT_SHA} ]]; then
+ echo "INFO installing libmicrohttpd"
+ install_repo "https://git.gnunet.org/libmicrohttpd.git" \
+ "${LIBMICROHTTPD_COMMIT_SHA:-master}" \
+ "${LIBMICROHTTPD_CFLAGS}"
+fi
+
+if [[ -n ${GNUNET_COMMIT_SHA} ]]; then
echo "INFO installing GNUnet"
- install "https://git.gnunet.org/gnunet.git" \
- "${GNUNET_COMMIT_SHA:-master}"
+ install_repo "https://git.gnunet.org/gnunet.git" \
+ "${GNUNET_COMMIT_SHA:-master}" \
+ "${GNUNET_CFLAGS}"
fi
-if [ ! -z "${EXCHANGE_COMMIT_SHA}" ]; then
+if [[ -n ${EXCHANGE_COMMIT_SHA} ]]; then
echo "INFO installing Taler Exchange"
- install "https://git.taler.net/exchange.git" \
- "${EXCHANGE_COMMIT_SHA:-master}"
+ install_repo "https://git.taler.net/exchange.git" \
+ "${EXCHANGE_COMMIT_SHA:-master}" \
+ "${EXCHANGE_CFLAGS}"
fi
-if [ ! -z "${MERCHANT_COMMIT_SHA}" ]; then
+if [[ -n ${MERCHANT_COMMIT_SHA} ]]; then
echo "INFO installing Taler Merchant"
- install "https://git.taler.net/merchant.git" \
- "${MERCHANT_COMMIT_SHA:-master}"
+ install_repo "https://git.taler.net/merchant.git" \
+ "${MERCHANT_COMMIT_SHA:-master}" \
+ "${MERCHANT_CFLAGS}"
fi
-if [ ! -z "${WALLET_COMMIT_SHA}" ]; then
+if [[ -n ${WALLET_COMMIT_SHA} ]]; then
echo "INFO installing Taler Wallet"
- install "https://git.taler.net/wallet-core.git" \
- "${WALLET_COMMIT_SHA:-master}"
+ install_repo "https://git.taler.net/wallet-core.git" \
+ "${WALLET_COMMIT_SHA:-master}" \
+ ""
fi
-
-exit 0
diff --git a/experiment/scripts/merchant.sh b/experiment/scripts/merchant.sh
index e35ffbe..80d4c93 100755
--- a/experiment/scripts/merchant.sh
+++ b/experiment/scripts/merchant.sh
@@ -16,15 +16,15 @@ cd /tmp
# Configurre the merchants files in /etc/taler
function configure_merchant() {
- wait_for_keys "${PROXY_DOMAIN}"
+ wait_for_keys "${EXCHANGE_GW_DOMAIN}"
MASTER_KEY=$(
curl -k -f \
- "${PROXY_DOMAIN}/keys" \
+ "${EXCHANGE_GW_DOMAIN}/keys" \
| jq -r '.master_public_key'
)
- sed -i -e "s\<EXCHANGE_URL_HERE>\http://${EXCHANGE_DOMAIN}/\g" \
+ sed -i -e "s\<EXCHANGE_URL_HERE>\http://${EXCHANGE_GW_DOMAIN}/\g" \
-e "s/<EXCHANGE_MASTER_KEY_HERE>/${MASTER_KEY}/g" \
/etc/taler/conf.d/merchant.conf
}
@@ -61,13 +61,43 @@ EOF
sudo -u taler-merchant-httpd taler-merchant-dbinit
}
+# Create a new merchant instance
+# $1: Instance name
+function create_instance() {
+ curl -X POST \
+ -H "Authorization: Bearer secret-token:${TALER_MERCHANT_TOKEN}" \
+ -H "Content-Type: application/json" \
+ -d "{
+ \"payto_uris\": [ \"payto://x-taler-bank/bank.${DNS_ZONE}/${1}\"
],
+ \"id\": \"${1}\",
+ \"name\": \"${1}\",
+ \"address\": {\"country\": \"CH\"},
+ \"auth\": {\"method\": \"token\", \"token\":
\"secret-token:${TALER_MERCHANT_TOKEN}\"},
+ \"jurisdiction\": {\"country\": \"CH\"},
+ \"default_max_wire_fee\": \"KUDOS:1\",
+ \"default_wire_fee_amortization\": 10,
+ \"default_max_deposit_fee\": \"KUDOS:1\",
+ \"default_wire_transfer_delay\": {\"d_ms\": 1209600000},
+ \"default_pay_delay\": {\"d_ms\": 1209600000}
+ }" \
+ http://localhost/management/instances
+}
+
# Initialize the merchant
function init_merchant() {
+ create_cert "${NODE_NAME}.${DNS_ZONE}" "/etc/ssl/merchant"
+ setup_rsyslog_for_nginx
restart_rsyslog
configure_merchant
configure_db
init_db
- systemctl restart taler-merchant-httpd
+ mkdir /var/lib/taler || true
+ ln -sf /etc/nginx/sites-available/merchant /etc/nginx/sites-enabled/merchant
+ systemctl restart taler-merchant-httpd \
+ nginx
+ sleep 5
+ create_instance "default"
+ create_instance ${NODE_NAME}
}
case $1 in
diff --git a/experiment/scripts/monitor.sh b/experiment/scripts/monitor.sh
index 292b4ff..94a21db 100755
--- a/experiment/scripts/monitor.sh
+++ b/experiment/scripts/monitor.sh
@@ -28,11 +28,12 @@ function update_datasource() {
jq --arg url "https://$(hostname | cut -d "." -f 1,2
-).$2.proxy.grid5000.fr" \
--arg name "$1" \
'.[] | select(.name == $name) | .url = $url' \
- ds.json | tee /dev/tty | curl -X PUT -k -f -d @- \
+ ds.json | \
+ curl -X PUT -k -f -d @- \
-H "${AUTH_HEADER}" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
- "${GRAFANA_API}/datasources/${ID}"
+ "${GRAFANA_API}/datasources/${ID}"
}
# Update the external grafana instance and tell it
@@ -40,7 +41,7 @@ function update_datasource() {
# If GRAFANA_HOST or GRAFANA_API_KEY are empty this
# step is skipped - requires admin level api key to update data sources
function update_grafana() {
- if [ -z "${GRAFANA_HOST}" ] || [ -z ${GRAFANA_API_KEY} ]; then
+ if [[ -z ${GRAFANA_HOST} || -z ${GRAFANA_API_KEY} ]]; then
return
fi
AUTH_HEADER="Authorization: Bearer ${GRAFANA_API_KEY}"
@@ -60,68 +61,148 @@ function update_grafana() {
# Configure all exporters which run on this host
function configure_prometheus_and_exporters() {
- sed -i "s/<MERCHANT_HOST_HERE>/${MERCHANT_DOMAIN}/g" \
- /etc/monitor/prometheus.yaml
- sed -i -e
"s\<EXCHANGE_DB_URL_HERE>\postgresql://postgres@${DATABASE_DOMAIN}:5432\g" \
- -e
"s\<MERCHANT_DB_URL_HERE>\postgresql://postgres@${MERCHANT_DOMAIN}:5432\g" \
+ sed -i -e
"s\<EXCHANGE_DB_URL_HERE>\postgresql://postgres@db.${DNS_ZONE}:5432?sslmode=disable\g"
\
/etc/default/prometheus-postgres-exporter
- sed -i "s\<PROXY_URL_HERE>\http://${PROXY_DOMAIN}/stub_status\g" \
- /etc/default/prometheus-nginx-exporter
+ CFG=""
+ for MERCH in $(get_hosts "merchant"); do
+ CFG="${CFG},postgresql://postgres@${MERCH}.${DNS_ZONE}:5432"
+ sed -i "s/<MERCHANT_HOST_HERE>/${MERCH}.${DNS_ZONE}/g" \
+ /etc/monitor/prometheus.yaml
+ done
+ sed -i -e "s|<MERCHANT_DB_URL_HERE>|${CFG}|g" \
+ /etc/default/prometheus-postgres-exporter
+
+ CFG=""
+ for SHARD in $(get_hosts "shard"); do
+ CFG="${CFG},postgresql://postgres@${SHARD}.${DNS_ZONE}:5432"
+ done
+ sed -i "s|<SHARD_DB_URLS_HERE>|${CFG}|g" \
+ /etc/default/prometheus-postgres-exporter
+}
+
+# Create the directory which will be used to store recovery data
+# for the experiment (prometheus + loki)
+function setup_data_dir() {
+
+ EXPERIMENT_DATA_DIR="/home/${G5K_USER}/exp-data"
+ if [ ! -d /home/${G5K_USER} ]; then
+ EXPERIMENT_DATA_DIR=/tmp/exp-data
+ fi
+
+ if [[ "${REMOVE_PREVIOUS_EXPERIMENT_DATA}" == "true" ]]; then
+ rm -rf ${EXPERIMENT_DATA_DIR} || true
+ fi
+
+ mkdir ${EXPERIMENT_DATA_DIR} || true
+
+ echo "EXPERIMENT_DATA_DIR=${EXPERIMENT_DATA_DIR}" >> ~/.env
+ echo "EXPERIMENT_DATA_DIR=${EXPERIMENT_DATA_DIR}" >> /etc/environment
+
+ sed -i "s|<EXPERIMENT_DATA_PATH_HERE>|${EXPERIMENT_DATA_DIR}|g" \
+ /etc/monitor/loki.yaml
}
# Add wallet nodes to be monitored
# Requires no argument since wallet nodes are retrieved from the DNS
function add_wallet_nodes_to_prometheus() {
- for WALLET in $(get_wallet_hosts); do
- if ! grep -q "${WALLET_DOMAIN//\*/${WALLET}}:9100"
/etc/monitor/prometheus.yaml;
+ for WALLET in $(get_hosts "wallet"); do
+ if ! grep -q "${WALLET}.${DNS_ZONE}:9100" /etc/monitor/prometheus.yaml;
then
- sed -i "/<WALLETS_HERE>/a \ \ \ \ \ \ -
'${WALLET_DOMAIN//\*/${WALLET}}:9100'" \
+ sed -i "/<WALLET_NODES_HERE>/a \ \ \ \ \ \ -
'${WALLET}.${DNS_ZONE}:9100'" \
/etc/monitor/prometheus.yaml
fi
done
}
-# Add new exchanges to be monitored
-# Requires no argument since exchanges are retrieved from the proxy
-function add_exchanges_to_prometheus() {
- if ! grep -q "${EXCHANGE_DOMAIN}:80" /etc/monitor/prometheus.yaml; then
- # unfortunately we do not have access to the other hosts when running from
ESpec
- # But when initializing there are no hosts listed in the yaml yet, thus
- # it's sufficient to search for the exchange from the target
- sed -i "/<EXCHANGES_HERE>/a \ \ \ \ \ \ - '${EXCHANGE_DOMAIN}:80'" \
- /etc/monitor/prometheus.yaml
- for i in $(seq $((${NUM_EXCHANGE_PROCESSES:-10}-1)) ); do
- let "i+=10000"
- sed -i "/<EXCHANGES_HERE>/a \ \ \ \ \ \ - '${EXCHANGE_DOMAIN}:${i}'" \
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_proxy_nodes_to_prometheus() {
+ for HOST in $(get_hosts "eproxy"); do
+ if ! grep -q "${HOST}.${DNS_ZONE}:9100" /etc/monitor/prometheus.yaml;
+ then
+ sed -i "/<PROXY_NODES_HERE>/a \ \ \ \ \ \ - '${HOST}.${DNS_ZONE}:9100'" \
/etc/monitor/prometheus.yaml
- done
- return
- fi
- for EXCH in $(get_exchanges); do
+ fi
+ done
+}
+
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_shard_nodes_to_prometheus() {
+ for SHARD in $(get_hosts "shard"); do
+ if ! grep -q "${SHARD}" /etc/monitor/prometheus.yaml;
+ then
+ sed -i "/<SHARD_NODES_HERE>/a \ \ \ \ \ \ - '${SHARD}.${DNS_ZONE}:9100'"
\
+ /etc/monitor/prometheus.yaml
+ fi
+ done
+}
+
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_merchant_nodes_to_prometheus() {
+ for SHARD in $(get_hosts "merchant"); do
+ if ! grep -q "${MERCH}" /etc/monitor/prometheus.yaml;
+ then
+ sed -i "/<MERCHANT_NODES_HERE>/a \ \ \ \ \ \ -
'${MERCH}.${DNS_ZONE}:9100'" \
+ /etc/monitor/prometheus.yaml
+ fi
+ done
+}
+
+# Add exchange servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_exchange_nodes_to_prometheus() {
+ for EXCH in $(get_hosts "exchange-"); do
if ! grep -q "${EXCH}" /etc/monitor/prometheus.yaml;
then
- sed -i "/<EXCHANGES_HERE>/a \ \ \ \ \ \ - '${EXCH}'" \
+ sed -i "/<EXCHANGE_NODES_HERE>/a \ \ \ \ \ \ -
'${EXCH}.${DNS_ZONE}:9100'" \
/etc/monitor/prometheus.yaml
fi
done
}
+# Add new exchanges to be monitored
+# $1: N - already running exchange processes
+# $2: N - processes to add
+function add_exchanges_to_prometheus() {
+
+ let "START=$1+10000"
+ let "END=$START+$2-1"
+
+ HOSTS=$(get_hosts "exchange-")
+
+ for PORT in $(seq $START $END); do
+ for HOST in $HOSTS; do
+ if ! grep -q "${HOST}.${DNS_ZONE}:${PORT}" /etc/monitor/prometheus.yaml;
+ then
+ sed -i "/<EXCHANGES_HERE>/a \ \ \ \ \ \ -
'${HOST}.${DNS_ZONE}:${PORT}'" \
+ /etc/monitor/prometheus.yaml
+ fi
+ done
+ done
+}
+
# Remove N exchanges which have been stopped
# from the config so they will not be scraped anymore
-# $1: N - number of exchanges to remove
+# $1: N - number of exchanges currently running
+# $2: N - number of exchanges to remove
function remove_exchanges_from_prometheus() {
- TO_STOP=$(\
- get_exchanges | \
- tr " " "\n" | \
- sort -t ":" -k 2 -n -r | \
- head -n ${1}\
- )
-
- for EXCH in ${TO_STOP}; do
- sed -i "/${EXCH}/d" \
- /etc/monitor/prometheus.yaml
+
+ # We know we started from port 10000
+ # get the highest port numbers and start removing from there
+ let "START=$1+10000"
+ let "END=$START-$2"
+
+ HOSTS=$(get_hosts "exchange-")
+
+ for PORT in $(seq $END $START); do
+ for HOST in $HOSTS; do
+ sed -i "/${HOST}.${DNS_ZONE}:${PORT}/d" \
+ /etc/monitor/prometheus.yaml
+ done
done
}
@@ -130,30 +211,43 @@ function remove_exchanges_from_prometheus() {
function init_monitor() {
update_grafana
+
+ setup_data_dir
systemctl restart loki \
- promtail
+ promtail
- configure_prometheus_and_exporters
- wait_for_keys "${PROXY_DOMAIN}"
+ wait_for_keys "${EXCHANGE_GW_DOMAIN}"
if [[ "${ENABLE_EXPORTERS}" == "true" ]]; then
if ! grep -q "job_name: 'nodes'" /etc/monitor/prometheus.yaml; then
cat /etc/monitor/node-exporters.yaml.tpl | \
envsubst >> /etc/monitor/prometheus.yaml
add_wallet_nodes_to_prometheus
+ add_shard_nodes_to_prometheus
+ add_merchant_nodes_to_prometheus
+ add_proxy_nodes_to_prometheus
+ add_exchange_nodes_to_prometheus
fi
fi
- if ! grep -q "job_name: 'taler'" /etc/monitor/prometheus.yaml; then
- cat /etc/monitor/exchange-exporters.yaml.tpl >>
/etc/monitor/prometheus.yaml
- add_exchanges_to_prometheus
- fi
+ # Add nginx exporters
+ for HOST in $(get_hosts "eproxy"); do
+ if ! grep -q "${HOST}.${DNS_ZONE}:9113" /etc/monitor/prometheus.yaml;
+ then
+ sed -i "/<NGINX_EXPORTERS_HERE>/a \ \ \ \ \ \ -
'${HOST}.${DNS_ZONE}:9113'" \
+ /etc/monitor/prometheus.yaml
+ fi
+ done
+
+ add_exchanges_to_prometheus "0" ${NUM_EXCHANGE_PROCESSES}
+
+ configure_prometheus_and_exporters
- systemctl restart prometheus-nginx-exporter \
- prometheus-postgres-exporter \
- prometheus
+ systemctl restart prometheus-postgres-exporter \
+ prometheus \
+ taler-prometheus-backup.timer
exit 0
}
@@ -164,10 +258,10 @@ case $1 in
;;
start)
add_wallet_nodes_to_prometheus
- add_exchanges_to_prometheus
+ add_exchanges_to_prometheus $2 $3
;;
stop-exchanges)
- remove_exchanges_from_prometheus $2
+ remove_exchanges_from_prometheus $2 $3
;;
*)
taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
diff --git a/experiment/scripts/ping.sh b/experiment/scripts/ping.sh
index a766a7d..eae0d57 100755
--- a/experiment/scripts/ping.sh
+++ b/experiment/scripts/ping.sh
@@ -2,6 +2,8 @@
INFO_MSG="
Measure and log round-trip-times between experiment nodes
Logs to promtail directly
+
+Used by taler-netdelay.service
"
OPT_MSG="
<DEST>:
@@ -10,8 +12,9 @@ OPT_MSG="
source ~/scripts/helpers.sh
-if [ -z "${1}" ]; then
+if [[ -z $1 ]]; then
taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+ exit 2
fi
RTT=$(\
@@ -24,7 +27,7 @@ if [[ "${RTT}" == "time="* ]];
then
logger -s --tcp \
--port 1514 \
- --server ${MONITOR_DOMAIN} \
+ --server "monitor.${DNS_ZONE}" \
--tag taler-network \
"src=${TALER_HOST} dst=${1} ${RTT}" \
|| true # Ignore errors (mostly because NXDOMAIN)
diff --git a/experiment/scripts/postgres-cluster/README.md
b/experiment/scripts/postgres-cluster/README.md
new file mode 100644
index 0000000..fcd2e0d
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/README.md
@@ -0,0 +1,24 @@
+## Postgres Cluster Experiment
+
+**UNMAINTAINED** Used for some experiments hosting multiple instances of
postgres on the same node.
+ They may still work but are not actively maintained.
+
+Run in the following order after espec was run (example for two instances):
+
+**NOTE** Requires as many exchange and proxy nodes as postgres instances are
created
+ Example for 2 postgres instances: `DB`, `Exchange-1`, `Exchange-2`,
`Proxy-1`, `Proxy-2`
+
+1. Modify scripts/benchmark.sh to be 'randomly using only one exchange for
each wallet`. e.g. add this line
+ before taler-wallet-cli is called:
+ ```bash
+ EXCHANGE_GW_DOMAIN="exchange-$(shuf -i 1-3 -n 1).${DNS_ZONE}"
+ ```
+2. Run Espec
+3. Create a second postgres instance on the DB node: `./db-cluser.sh 1`
+4. Initialize one Exchange node as a primary exchange for this db
(`Exchange-2`): `./exch-cluster 1`
+5. Configure all proxies to be responsible for one exchange only:
+ `Proxy-1`: `./proxy-cluster 2` - deletes all exchange-2 entries from the
nginx config
+ `Proxy-2`: `./proxy-cluster 1` - ---------- exchange-1
-----------------------------
+6. Start wallets
+
+This can be done with as many instances as required.
diff --git a/experiment/scripts/postgres-cluster/db-cluster.sh
b/experiment/scripts/postgres-cluster/db-cluster.sh
new file mode 100755
index 0000000..d1c655f
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/db-cluster.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+# Create independent postgres instances (cluster)
+
+if [[ -z ${1} ]]; then
+ echo "Usage: ./db-cluster.sh <N>"
+ echo ""
+ echo "Creates an independent Postgres instance main<N> running on port
5432+N"
+ echo "Call after espec was run - only works with partitioning"
+ exit 2
+fi
+
+PORT=$((5432 + ${1}))
+
+pg_createcluster 13 main${1} -p $PORT
+
+mv /var/lib/postgresql/13/main${1} /tmp/postgresql/13/
+
+if [ -d /mnt/disk ]; then
+ mv /tmp/postgresql/13/main${1}/pg_wal /mnt/disk/pg_wal${1}
+ ln -sf /mnt/disk/pg_wal${1} /tmp/postgresql/13/main${1}/pg_wal
+ chown postgres:postgres /tmp/postgresql/13/main${1}/pg_wal
+fi
+
+cp /etc/postgresql/13/main/exchange.conf /etc/postgresql/13/main/pg_hba.conf
/etc/postgresql/13/main${1}
+sed -i "s|/tmp/postgresql/13/main|/tmp/postgresql/13/main${1}|g"
/etc/postgresql/13/main${1}/exchange.conf
+echo "include = 'exchange.conf'" >> /etc/postgresql/13/main${1}/postgresql.conf
+
+systemctl restart postgresql@13-main${1}.service
+
+echo "
+[exchangedb-postgres]
+CONFIG=postgres://:${PORT}/${DB_NAME}
+" > /etc/taler/secrets/exchange-db.secret.conf
+
+su postgres << EOF
+psql postgres -p ${PORT} -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
+psql postgres -p ${PORT} -tAc "SELECT 1 FROM pg_roles WHERE
rolname='taler-exchange-httpd'" | \
+ grep -q 1 || \
+ createuser -p ${PORT} taler-exchange-httpd
+psql -p ${PORT} -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+ grep -q 1 || \
+ createdb -p ${PORT} -O taler-exchange-httpd "${DB_NAME}"
+psql -p ${PORT} -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
+EOF
+
+su postgres << EOF
+psql postgres -p ${PORT} -tAc "SELECT 1 FROM pg_roles WHERE
rolname='${DB_USER}'" | \
+ grep -q 1 || \
+ psql -p ${PORT} << END
+ CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
+END
+EOF
+
+sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+
+su taler-exchange-httpd -s /bin/bash << EOF
+psql -p ${PORT} -d "${DB_NAME}"
+GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
+GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+EOF
+
+ssh -o StrictHostKeyChecking=no monitor.${DNS_ZONE} \
+ "sed -i \"s/DATA_SOURCE_NAME.*'$//\"
/etc/default/prometheus-postgres-exporter &&
+ sed -i
\"s|DATA_SOURCE_NAME.*|&,postgresql://postgres@db.${DNS_ZONE}:${PORT}'|\"
+ /etc/default/prometheus-postgres-exporter && systemctl restart
prometheus-postgres-exporter"
diff --git a/experiment/scripts/postgres-cluster/exch-cluster.sh
b/experiment/scripts/postgres-cluster/exch-cluster.sh
new file mode 100755
index 0000000..9500dc4
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/exch-cluster.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+# Run an exchange against an independent db created with db-cluster.sh
+
+if [[ -z ${1} ]]; then
+ echo "Usage: ./exch-cluster.sh <N>"
+ echo ""
+ echo "Creates an independent Exchange instance running against a db on port
5432+N"
+ echo "Call after espec was run - only works with partitioning"
+ exit 2
+fi
+
+source /root/scripts/helpers.sh
+
+DB_PORT=$((5432 + ${1}))
+
+systemctl stop taler-exchange-*
+
+sed -i -e "s/exchange-secmod-rsa/exchange-secmod-rsa-${1}/g" \
+ -e "s/exchange-secmod-cs/exchange-secmod-cs-${1}/g" \
+ -e "s/exchange-secmod-eddsa/exchange-secmod-eddsa-${1}/g" \
+ /etc/taler/conf.d/exchange-secmod.conf
+
+echo "
+[exchangedb-postgres]
+CONFIG=postgresql://${DB_USER}:${DB_PASSWORD}@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}
+" > /etc/taler/secrets/exchange-db.secret.conf
+
+rm -rf /var/lib/taler/exchange-offline/*
+
+MASTER_KEY=$(sudo -u taler-exchange-offline taler-exchange-offline setup)
+
+sed -i -e "s/MASTER_PUBLIC_KEY.*/MASTER_PUBLIC_KEY = ${MASTER_KEY}/g" \
+ /etc/taler/conf.d/exchange-business.conf
+
+# Setup the shared key directory when we use a secondary node
+if [[ ${NUM_EXCHANGES} != "1" ]]; then
+ rm -rf /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}-${1} || true
+ mkdir -p /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}-${1}
+fi
+
+systemctl restart taler-exchange-httpd@10000.service
+
+wait_for_keys "${NODE_NAME}.${DNS_ZONE}:10000/management"
+
+sleep 5
+
+taler-exchange-offline download > sig-req.json
+taler-exchange-offline sign < sig-req.json > sig-res.json
+taler-exchange-offline enable-account
"payto://x-taler-bank/bank.${DNS_ZONE}/Exchange" > acct-res.json
+taler-exchange-offline wire-fee $(date +%Y) x-taler-bank KUDOS:0 KUDOS:0
KUDOS:0 > fee-res.json
+taler-exchange-offline upload < sig-res.json
+taler-exchange-offline upload < acct-res.json
+taler-exchange-offline upload < fee-res.json
+
+source ~/scripts/exchange-wirewatch.sh init-start
+source ~/scripts/exchange-aggregator.sh init-start
+source ~/scripts/exchange-closer.sh init-start
+source ~/scripts/exchange-transfer.sh init-start
+
+let "START=1+10000"
+let "END=$START+$((${NUM_EXCHANGE_PROCESSES}-1))-1"
+
+for PORT in $(seq $START $END); do
+ systemctl restart taler-exchange-httpd@"${PORT}".socket \
+ taler-exchange-httpd@"${PORT}".service
+ sleep 0.05
+done
diff --git a/experiment/scripts/postgres-cluster/proxy-cluster.sh
b/experiment/scripts/postgres-cluster/proxy-cluster.sh
new file mode 100755
index 0000000..a36adf5
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/proxy-cluster.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Setup an exchange proxy to serve only a single exchange
+
+if [[ -z ${1} ]]; then
+ echo "Usage: ./proxy-cluster.sh <N1...Nn>"
+ echo ""
+ echo "Setup an exchange proxy to serve only for the specified exchange
instance"
+ echo "(deletes the ones matching the arguments N1-Nn)"
+ echo "Call after espec was run"
+ echo "Deletes all exchange-N1...Nn entries in
/etc/nginx/sites-enabled/exchange"
+ exit 2
+fi
+
+for i in $@; do
+ sed -i "/exchange-${i}.${DNS_ZONE}/d" /etc/nginx/sites-enabled/exchange
+done
+
+systemctl reload nginx
diff --git a/experiment/scripts/prometheus-backup.sh
b/experiment/scripts/prometheus-backup.sh
new file mode 100755
index 0000000..08cd9aa
--- /dev/null
+++ b/experiment/scripts/prometheus-backup.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# Script which creates a snapshot of a running Prometheus instance
+
+# This will copy the snapshot to the configured LOG_DIR
+# (setup.sh) hopefully persistent on the Grid5000 NFS
+
+# Usage: ./data-backup.sh
+# Used by taler-databackup.service
+
+set -eu
+
+if [[ $(ps -aux | grep "[data]-backup.sh" | wc -l) -eq 1 ]]; then
+ echo "Previous backup still running, skipping"
+ exit 0
+fi
+
+PROMETHEUS_DATA_DIR=/var/lib/prometheus/metrics2/snapshots
+
+SNAPSHOT_COPY_PATH=${EXPERIMENT_DATA_DIR}/prometheus-tmp
+SNAPSHOT_PATH=${EXPERIMENT_DATA_DIR}/prometheus
+
+END_TIME=$(date +%s)
+
+SNAPSHOT="${PROMETHEUS_DATA_DIR}/$(\
+ curl \
+ -X POST \
+ http://localhost:8080/api/v1/admin/tsdb/snapshot \
+ | jq -r '.data.name'
+)"
+
+# copy first because its nfs, when copied remove the previous one
+cp -r "${SNAPSHOT}" "${SNAPSHOT_COPY_PATH}"
+rm -rf "${SNAPSHOT_PATH}"
+mv "${SNAPSHOT_COPY_PATH}" "${SNAPSHOT_PATH}"
+
+# export timestamps for the recover script in g5k-repo/additional
+echo "
+EXPERIMENT_START=${START_TIME}
+SNAPSHOT_TIME=${END_TIME}
+" > "${EXPERIMENT_DATA_DIR}/times.env"
+
diff --git a/experiment/scripts/proxy.sh b/experiment/scripts/proxy.sh
deleted file mode 100755
index 0c13038..0000000
--- a/experiment/scripts/proxy.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/bash
-INFO_MSG="
-Confiure and start the nginx proxy server
-"
-OPT_MSG="
-init:
- Initialize and start the proxy with NUM_EXCHANGE_PROCESSES upstreams
-
-start NUM:
- Add another NUM exchanges to the list of upstreams
-
-stop NUM:
- Remove NUM exchanges from the list of upstreams
-"
-
-set -eux
-source ~/scripts/helpers.sh
-
-# Add N exchanges to the upstream servers in the proxy configuration
-# $1: Number of exchanges to add
-function add_exchanges() {
- # Determine the number of exchanges which are already added
- # and calculate new ports based on that info
- ADDED=$(\
- grep -r " server ${EXCHANGE_DOMAIN}:" /etc/nginx/sites-enabled/proxy | \
- wc -l
- )
-
- for i in $(seq ${1}); do
- if [[ "${ADDED}" -eq "0" ]] && [[ "${i}" -eq "1" ]]; then
- # The first exchange to add is the default one from the target on port 80
- i="80"
- else
- # seq starts at 1 so remove it again
- # (0 N cannot be used since seq 0 0 would yield 0 while seq N=0 yields
nothing)
- let "i+=${ADDED}-1"
- let "i+=10000"
- fi
- sed -i "/<SERVERS_HERE>/a \ \ server ${EXCHANGE_DOMAIN}:${i};" \
- /etc/nginx/sites-enabled/proxy
- done
-}
-
-# Setup the node and proxy configuration
-function setup_config() {
- add_exchanges ${NUM_EXCHANGE_PROCESSES}
-
- # Nginx will log to our rsyslog directly an then from there it will be
- # redirected to promtail - there was an issue doing it directly that's
- # why it is done this way
- sed -i -e '/module(load="imudp")/s/^#//g' \
- -e '/input(type="imudp" port="514")/s/^#//g' \
- /etc/rsyslog.conf
-
- # Allow enough files to be opened by nginx (www-data)
- echo "
- fs.file-max=50000
- " >> /etc/sysctl.conf
-
- echo "
- www-data soft nofile unlimited
- www-data hard nofile unlimited
- " >> /etc/security/limits.conf
-
- sysctl -p
-}
-
-# Initialize and start the proxy
-function init_proxy() {
- setup_config
-
- restart_rsyslog
-
- # Nginx does not start until the destination server is reachable - wait here
- # nginx: [emerg] host not found in upstream "exch.perf.taler" ...
- wait_for_keys "${EXCHANGE_DOMAIN}"
-
- systemctl restart nginx
-}
-
-# Remove N exchanges from the upstream list
-# $1: N - number of exchanges to remove
-function remove_exchanges() {
- TO_STOP=$(\
- get_exchanges | \
- tr " " "\n" | \
- sort -t ":" -k 2 -n -r | \
- head -n ${1}\
- )
-
- for EXCH in ${TO_STOP}; do
- sed -i "/${EXCH};/d" \
- /etc/nginx/sites-enabled/proxy
- done
-}
-
-case $1 in
- init)
- init_proxy
- ;;
- start)
- add_exchanges $2
- ;;
- stop)
- remove_exchanges $2
- ;;
- *)
- taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
- ;;
-esac
-
-systemctl reload nginx
diff --git a/experiment/scripts/run.sh b/experiment/scripts/run.sh
index 69a451e..8f1dd47 100644
--- a/experiment/scripts/run.sh
+++ b/experiment/scripts/run.sh
@@ -1,7 +1,8 @@
#!/bin/bash
# Run the experiment
-# Will determine the role of the node
-# based on its hostname and start role specific scripts
+# Will determine the role of the node based on its hostname,
+# set the DNS A record and start role specific scripts
+
set -euax
source ~/scripts/helpers.sh
@@ -10,61 +11,87 @@ then
systemctl restart prometheus-node-exporter
fi
-case "${HOSTNAME}" in
- ${BANK_HOSTS})
- set_host bank
- set_ddn ${BANK_DOMAIN}
+# Set the experiment domain name
+set_ddn ${NODE_NAME}.${DNS_ZONE}
+set_host ${NODE_NAME}
+
+# Some applications log to different promtail ports
+# so that we have less log lines to filter when
+# calculating prometheus metrics or other things with promtail
+# (default for all is 1514) - see 'configs/etc/monitor/promtail.yaml'
+PROMTAIL_LOG_PORT=1514
+
+if [[ "${HOSTNAME}" =~ ${BANK_HOSTS} ]]; then
setup_log
enable_logrotate
exec ~/scripts/bank.sh init
- ;;
- ${DB_HOSTS})
- set_host database
- set_ddn ${DATABASE_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${DB_HOSTS} ]]; then
+ PROMTAIL_LOG_PORT=1515
+ setup_log
+ enable_logrotate
+ if grep -q "Red Hat" /proc/version; then
+ # Postgres is run differently in centos
+ exec ~/scripts/database-centos.sh init
+ else
+ exec ~/scripts/database.sh init
+ fi
+elif [[ "${HOSTNAME}" =~ ${SHARD_HOSTS} ]]; then
+ setup_log
+ enable_logrotate
+ exec ~/scripts/shard.sh init
+elif [[ "${HOSTNAME}" =~ ${EXCHANGE_HOSTS} ]]; then
setup_log
enable_logrotate
- exec ~/scripts/database.sh init
- ;;
- ${EXCHANGE_HOSTS})
- set_host exchange
- set_ddn ${EXCHANGE_DOMAIN}
+ enable_netdelay db.${DNS_ZONE}
+ if [[ "${PRIMARY_EXCHANGE}" =~ "${NODE_NAME}" ]]; then
+ exec ~/scripts/exchange.sh init-primary
+ else
+ exec ~/scripts/exchange.sh init-secondary
+ fi
+elif [[ "${HOSTNAME}" =~ ${AGGREGATOR_HOSTS} ]]; then
setup_log
enable_logrotate
- enable_netdelay ${DATABASE_DOMAIN}
- exec ~/scripts/exchange.sh init
- ;;
- ${MERCHANT_HOSTS})
- set_host merchant
- set_ddn ${MERCHANT_DOMAIN}
+ enable_netdelay db.${DNS_ZONE}
+ exec ~/scripts/exchange-aggregator.sh init
+elif [[ "${HOSTNAME}" =~ ${CLOSER_HOSTS} ]]; then
+ setup_log
+ enable_logrotate
+ enable_netdelay db.${DNS_ZONE}
+ exec ~/scripts/exchange-closer.sh init
+elif [[ "${HOSTNAME}" =~ ${TRANSFER_HOSTS} ]]; then
+ setup_log
+ enable_logrotate
+ enable_netdelay db.${DNS_ZONE}
+ exec ~/scripts/exchange-transfer.sh init
+elif [[ "${HOSTNAME}" =~ ${WIREWATCH_HOSTS} ]]; then
+ setup_log
+ enable_logrotate
+ enable_netdelay db.${DNS_ZONE}
+ exec ~/scripts/exchange-wirewatch.sh init
+elif [[ "${HOSTNAME}" =~ ${MERCHANT_HOSTS} ]]; then
setup_log
enable_logrotate
exec ~/scripts/merchant.sh init
- ;;
- ${MONITOR_HOSTS})
- set_host monitor
- set_ddn ${MONITOR_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${MONITOR_HOSTS} ]]; then
exec ~/scripts/monitor.sh init
- ;;
- ${PROXY_HOSTS})
- set_host proxy
- set_ddn ${PROXY_DOMAIN}
- enable_netdelay ${EXCHANGE_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${EPROXY_HOSTS} ]]; then
+ PROMTAIL_LOG_PORT=1516
+ # Single domain for DNS load balancing
+ set_ddn ${EXCHANGE_GW_DOMAIN}
+ # We need a second domain for monitoring to
+ # be able to get information about all proxies
+ enable_netdelay ${PRIMARY_EXCHANGE}
setup_log
enable_logrotate
- exec ~/scripts/proxy.sh init
- ;;
- ${DNS_HOSTS})
- set_host dns
- setup_log
- ;;
- ${WALLET_HOSTS})
- set_host wallet
- HOST=$(hostname | cut -d '.' -f1)
- set_ddn "${WALLET_DOMAIN//\*/${HOST}}"
- enable_netdelay ${PROXY_DOMAIN}
+ exec ~/scripts/exchange-proxy.sh init
+elif [[ "${HOSTNAME}" =~ ${DNS_HOSTS} ]]; then
+ exec ~/scripts/dns.sh
+else
+ # Be a wallet if no other node matched
+ PROMTAIL_LOG_PORT=1517
+ enable_netdelay ${EXCHANGE_GW_DOMAIN}
setup_log
exec ~/scripts/wallet.sh init
- ;;
-esac
+fi
exit 0
diff --git a/experiment/scripts/setup.sh b/experiment/scripts/setup.sh
index 6d5b544..6ceeeb4 100644
--- a/experiment/scripts/setup.sh
+++ b/experiment/scripts/setup.sh
@@ -1,5 +1,19 @@
#!/bin/bash
# Setup nodes for the experiment
+# This script does the following:
+
+# 0. Stop previous experiments
+# 1. Parse the experiment-info.json from jFed to get
+# - The user which runs the experiment (used for NFS) - env: G5K_USER
+# - Which Grid5k node is which node in jFed (used to run the correct script
later)
+# This also sets variables like PRIMARY_EXCHANGE, NUM_<NODES>, NODE_NAME
(jFed) and
+# G5K_HOST (e.g. dahu-3)
+# 2. Setup the directory where application logs will be stored
(/home/G5K_USER/exp-logs)
+# or /tmp/exp-logs
+# 3. Export all environment to ~/.env and /etc/environment
+# 4. Update the g5k repo from taler.net and copy the configurations
(g5k-repo/configs) to /
+# 5. Configure the DNS and start the DNS server on the DNS node
+
# Set the current user
echo "G5K_USER=$(cat ~/experiment-info.json | jq -r '.user.name')" >> ~/.env
@@ -15,7 +29,7 @@ function parse_experiment_nodes() {
if [ ! -f ~/nodes.json ]; then
cat ~/experiment-info.json | \
jq '.nodes | to_entries | .[] | {node: .key, host:
.value.ssh_login[1].hostname }' | \
- jq -s \
+ jq -s '.' \
> ~/nodes.json
fi
@@ -28,30 +42,52 @@ function parse_experiment_nodes() {
# EXCHANGE_HOSTS=node-1.site-1.grid5000.fr
# This will be used in run.sh to determine which role script to execute
for NODE in ${NODES}; do
- echo "${NODE^^}_HOSTS=\"$(\
- cat ~/nodes.json | \
- jq --arg NODE ${NODE}.* -r 'map(select(.node | test($NODE)) | .host) |
join("|")'
- )\"" \
- >> ~/.env
+ NODES_STR=$(\
+ jq --arg NODE ${NODE}.* -r \
+ 'map(select(.node | test($NODE)) | .host) |
+ join("|") |
+ select(. != "") // "none"' \
+ ~/nodes.json
+ )
+
+ echo "${NODE^^}_HOSTS=\"${NODES_STR}\"" >> ~/.env
+ echo "NUM_${NODE^^}S=$(echo ${NODES_STR} | awk -F '|' '{print NF}')" >>
~/.env
done
-
+
+ # Export NODE_NAME, which can be used to set log directories for example
+ jq -r '.[] | .node, .host' ~/nodes.json | \
+ while read -r NODE; read -r HOST; do
+ if [[ "${HOST}" =~ "${HOSTNAME}" ]]; then
+ echo "NODE_NAME=\"${NODE,,}\"" >> ~/.env
+ if grep -q "Red Hat" /proc/version; then
+ # Hostname in centos is set to e.g. dahu-8 only
+ # override with the fqdn from the grid
+ echo HOSTNAME="${HOST}" >> ~/.env
+ fi
+ fi
+ done
+
+ echo "PRIMARY_EXCHANGE=${PRIMARY_EXCH,,}.${DNS_ZONE}" >> ~/.env
+
echo "WALLET_HOSTS=*" >> ~/.env
+
+ echo "G5K_HOST=\"$(hostname | cut -d '.' -f1)\"" >> ~/.env
}
# Determine and create the base log directory
# If NFS exists, it will be created in the users home dir on the NFS
function setup_log_dir() {
- LOG_DIR=/home/${G5K_USER}/taler-logs
+ LOG_DIR=/home/${G5K_USER}/exp-logs
if [ -d ${LOG_DIR} ]; then
# If multiple nodes want to delete the same dir we run into errors
# Let it fail safely with || true
rm -rf ${LOG_DIR}/* || true
- elif [ -d /home/${G5K_USER} ]; then
- mkdir ${LOG_DIR} | true
- else
- LOG_DIR=/tmp/taler && mkdir ${LOG_DIR}
+ elif [ ! -d /home/${G5K_USER} ]; then
+ LOG_DIR=/tmp/taler
fi
+
+ mkdir ${LOG_DIR} || true
echo "LOG_DIR=${LOG_DIR}" >> ~/.env
}
@@ -106,6 +142,8 @@ function setup_config() {
# Configure the experiments DNS
function setup_dns() {
NS_IP=$(host ${DNS_HOSTS} | sed -n 1p | awk '{print $4}')
+ echo "DNS_IP=${NS_IP}" >> ~/.env
+ echo "DNS_IP=${NS_IP}" >> /etc/environment
# Set our DNS to be the only DNS to query by the stub resolver
if ! grep -Fxq "server=${NS_IP}" /etc/dnsmasq.conf ; then
@@ -139,21 +177,47 @@ function setup_dns() {
if ! [[ "${HOSTNAME}" =~ ${DNS_HOSTS} ]]; then
# Wait for named to be ready before starting dnsmasq
- sleep 5
+ sleep 10
systemctl restart dnsmasq
- # Wait again in hope that the hostname error is fixed
- # hostname -I couldn't get address for 'x': failure syntax error
- sleep 5
else
# Start the DNS when we are the DNS host
systemctl restart named
fi
}
+# Stop and 'unconfigure' all important services
+# to start on an 'empty' playground
+function clean_previous_setup() {
+ # (not all are present on every node - || true - to ignore errors)
+ systemctl stop taler-exchange-* \
+ taler-wallet* \
+ prometheus* \
+ postgresql* \
+ promtail \
+ loki \
+ || true
+ # Remove access to postgres for all nodes
+ HBA_FILE=/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
+ if grep -q "Red Hat" /proc/version; then
+ HBA_FILE=/tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+ fi
+ sed -i "/172.16.0.0\/12/d" "${HBA_FILE}" || true
+}
+
+clean_previous_setup
+# Check if binaries need to be rebuilt on debian based operating systems
+if ! grep -q "Red Hat" /proc/version; then
+ source ~/scripts/install.sh &
+fi
parse_experiment_nodes
setup_log_dir
setup_environment
setup_config
setup_dns
-exec ~/scripts/createusers.sh
+wait
+
+if ! grep -q "Red Hat" /proc/version; then
+ # Only works in debian based operating systems
+ exec ~/scripts/createusers.sh
+fi
diff --git a/experiment/scripts/database.sh b/experiment/scripts/shard.sh
similarity index 54%
copy from experiment/scripts/database.sh
copy to experiment/scripts/shard.sh
index b19cabf..4160c5d 100755
--- a/experiment/scripts/database.sh
+++ b/experiment/scripts/shard.sh
@@ -1,46 +1,18 @@
#!/bin/bash
INFO_MSG="
-Setup the database node (start postgresql)
+Setup the database shard nodes
"
OPT_MSG="
init:
- Initialize and start the taler database
+ Initialize and start the shard database
"
set -eux
source ~/scripts/helpers.sh
-# move to tmp to prevent change directory errors
-cd /tmp
-
-function setup_disks() {
- if [[ "$(hostname)" =~ "dahu" ]]; then
- mkdir /mnt/sdb || true
- mount /dev/sdb /mnt/sdb || true
- if [ ! -L /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
- rm -rf /mnt/sdb/pg_wal || true
- mv /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/sdb
- ln -s /mnt/sdb/pg_wal /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal
- chown -R postgres:postgres
/var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/
- fi
- fi
-}
-
-function setup_ram_storage() {
- SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 10))
- if ! df | grep -q /var/lib/postgresql; then
- mv /var/lib/postgresql /var/lib/postgresql.bak
- mkdir /var/lib/postgresql
- chown postgres:postgres /var/lib/postgresql
- mount -t tmpfs -o size=${SIZE}k pgdata /var/lib/postgresql
- cp -rp /var/lib/postgresql.bak/* /var/lib/postgresql
- fi
-}
+cd /tmp
-# Setup the postgresql configuration
function setup_config() {
- sed -i "s\<DB_URL_HERE>\postgresql:///${DB_NAME}\g" \
- /etc/taler/secrets/exchange-db.secret.conf
# Enable password for taler since this is the case in real world deployments
# For the postgres user do not enable authentication (used in metrics)
@@ -74,8 +46,9 @@ function setup_config() {
echo "
listen_addresses='*'
log_destination=syslog
- syslog_ident='taler-database'
- log_min_duration_statement=500
+ log_error_verbosity=terse
+ syslog_ident='taler-database-shard'
+ log_min_duration_statement=300
shared_preload_libraries='pg_stat_statements,auto_explain'
auto_explain.log_min_duration='300ms'
auto_explain.log_analyze=true
@@ -99,6 +72,41 @@ function setup_config() {
checkpoint_completion_target=0.9
random_page_cost=1.1
+ # Default 2kB
+ bgwriter_flush_after = 2MB
+
+ # Default 0
+ #
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+ # backend_flush_after = 0
+
+ # Too much results in CPU load
+ #
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+ effective_io_concurrency = 100
+
+ # Bad when turned off - Recovering db may not be possible
+ # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+ fsync = on
+
+ # Not so bad as when turning off fsync, but single transactions might get
lost on crash - but
+ # like they would have aborted cleanly
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+ # When having replication, this one can be changed (in local only on and off
are of use)
+ #
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+ # on causes us to get 100% IO load
+ synchronous_commit = off
+
+ # Default off
+ wal_compression = off
+
+ wal_sync_method = fsync
+
+ # Bad to turn off, may lead to inconcistency
+ #
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+ # Write full pages to WAL while partial are written to disk, helpful in case
of crash, then
+ # partially written pages can be recovered.
+ # Can be disabled if FS does not support partial written pages (such as ZFS)
+ full_page_writes = on
+
max_worker_processes=${NUM_CPU}
max_parallel_workers=${NUM_CPU}
max_connections=500
@@ -108,54 +116,29 @@ function setup_config() {
# out of shared memory
max_locks_per_transaction=85
- # Increase work mem to lower I/O utilization (max used =~ work_mem *
max_connections)
+ # (max used =~ work_mem * max_connections)
# NOTE: This formula is not completely correct
- work_mem=265MB
+ work_mem=128MB
maintenance_work_mem=2GB
# 1 min
idle_in_transaction_session_timeout=60000
- " > /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf
+ " > /etc/postgresql/${POSTGRES_VERSION}/main/exchange-shard.conf
- if ! grep -q "include = 'exchange.conf'" \
+ if ! grep -q "include = 'exchange-shard.conf'" \
/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf; then
- echo "include = 'exchange.conf'" >> \
+ echo "include = 'exchange-shard.conf'" >> \
/etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
fi
}
-# Configure and start pgBouncer if $USE_PGBOUNCER is true
-function setup_pgbouncer() {
- if [ "${USE_PGBOUNCER}" = "true" ]; then
- sed -i -e "s/<DB_USER_HERE>/${DB_USER}/g" \
- -e "s/<DB_PASSWORD_HERE>/${DB_PASSWORD}/g" \
- /etc/pgbouncer/userlist.txt
- sed -i -e "s/<DB_NAME_HERE>/${DB_NAME}/g" \
- /etc/pgbouncer/pgbouncer.ini
- # pgbouncer does not cleanup those sometimes
- rm -f /var/run/postgresql/pgbouncer.pid
- rm -f /var/run/postgresql/.s.PGSQL.6432
- systemctl restart pgbouncer
- fi
-}
-
-# Initialize the database for taler exchange
+# Initialize the database for taler exchange shard
function init_db() {
+
+ sed -i
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@localhost:${DB_PORT}/${DB_NAME}\g"
\
+ /etc/taler/secrets/exchange-db.secret.conf
+
systemctl restart postgresql
- # Create the role taler-exchange-httpd and the database
- su postgres << EOF
-psql postgres -tAc "SELECT 1 FROM pg_roles WHERE
rolname='taler-exchange-httpd'" | \
- grep -q 1 || \
- createuser taler-exchange-httpd
-psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
- grep -q 1 || \
- createdb -O taler-exchange-httpd "${DB_NAME}"
-EOF
-
- sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
- sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
- sudo -u taler-exchange-httpd taler-exchange-dbinit
-
# Create the remote user "$DB_USER" and load pg_stat_statements for metrics
su postgres << EOF
psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
@@ -165,22 +148,23 @@ psql postgres -tAc "SELECT 1 FROM pg_roles WHERE
rolname='${DB_USER}'" | \
CREATE EXTENSION pg_stat_statements;
END
EOF
-
- # Grant access to the databse to the remote user
- su taler-exchange-httpd -s /bin/bash << EOF
-psql -d "${DB_NAME}"
-GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
-GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+
+ # Create the role taler-exchange-httpd and the database
+ su postgres << EOF
+psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+ grep -q 1 || \
+ createdb -O "${DB_USER}" "${DB_NAME}"
EOF
+
+ IDX=$(echo $NODE_NAME | cut -d "-" -f 2)
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -R ${IDX} || true
+ sudo -u taler-exchange-httpd taler-exchange-dbinit -S ${IDX}
}
case ${1} in
init)
setup_config
- #setup_disks
- setup_ram_storage
init_db
- setup_pgbouncer
restart_rsyslog
;;
*)
diff --git a/experiment/scripts/taler-perf.sh b/experiment/scripts/taler-perf.sh
index e1ff428..9e3340c 100644
--- a/experiment/scripts/taler-perf.sh
+++ b/experiment/scripts/taler-perf.sh
@@ -1,55 +1,75 @@
#!/bin/bash
+# taler-perf utility script
+# Start and stop processes
+#
+# Usage: ./taler-perf.sh
set -e
source ~/scripts/helpers.sh
-function update_processes() {
- case "$1" in
- prometheus)
- ssh -A -o StrictHostKeyChecking=no ${MONITOR_DOMAIN} \
- "/bin/bash /root/scripts/monitor.sh start"
- ;;
- *)
- echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
- echo "Usage: update [prometheus]"
- ;;
- esac
+function get_running_exchanges_per_host() {
+ RUNNING=$(\
+ ssh -o StrictHostKeyChecking=no ${PRIMARY_EXCHANGE} \
+ '/bin/bash -c "ps -aux | grep [taler]-exchange-httpd | wc -l"' \
+ )
+ echo "${RUNNING}"
}
function start_wallets() {
- for WALLET in $(get_wallet_hosts); do
- ssh -o StrictHostKeyChecking=no ${WALLET_DOMAIN//\*/${WALLET}} \
+ for WALLET in $(get_hosts "wallet"); do
+ ssh -o StrictHostKeyChecking=no ${WALLET}.${DNS_ZONE} \
"/bin/bash /root/scripts/wallet.sh start
${1:-${NUM_WALLET_PROCESSES}}" &
done
wait
}
function stop_wallets() {
- for WALLET in $(get_wallet_hosts); do
- ssh -o StrictHostKeyChecking=no ${WALLET_DOMAIN//\*/${WALLET}} \
+ for WALLET in $(get_hosts "wallet"); do
+ ssh -o StrictHostKeyChecking=no ${WALLET}.${DNS_ZONE} \
"/bin/bash /root/scripts/wallet.sh stop
${1:-${NUM_WALLET_PROCESSES}}" &
done
wait
}
function start_exchanges() {
- ssh -o StrictHostKeyChecking=no ${EXCHANGE_DOMAIN} \
- "/bin/bash /root/scripts/exchange.sh start
${1:-${NUM_EXCHANGE_PROCESSES}}"
- ssh -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
- "/bin/bash /root/scripts/proxy.sh start
${1:-${NUM_EXCHANGE_PROCESSES}}"
- update_processes "prometheus"
+ RUNNING=$(get_running_exchanges_per_host)
+ for HOST in $(get_hosts "exchange-"); do
+ ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+ "/bin/bash /root/scripts/exchange.sh start
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ done
+ for HOST in $(get_hosts "eproxy"); do
+ ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+ "/bin/bash /root/scripts/exchange-proxy.sh start ${RUNNING}
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ done
+ ssh -o StrictHostKeyChecking=no "monitor.${DNS_ZONE}" \
+ "/bin/bash /root/scripts/monitor.sh start ${RUNNING}
${1:-${NUM_EXCHANGE_PROCESSES}}"
}
function stop_exchanges() {
# must remove the exchange form the monitor host before the one from the
nginx
# since helpers.sh gets all exchanges from the nginx config
- ssh -A -o StrictHostKeyChecking=no ${MONITOR_DOMAIN} \
- "/bin/bash /root/scripts/monitor.sh stop-exchanges
${1:-${NUM_EXCHANGE_PROCESSES}}"
- ssh -A -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
- "/bin/bash /root/scripts/proxy.sh stop
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ RUNNING=$(get_running_exchanges_per_host)
+ ssh -A -o StrictHostKeyChecking=no "monitor.${DNS_ZONE}" \
+ "/bin/bash /root/scripts/monitor.sh stop-exchanges ${RUNNING}
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ for HOST in $(get_hosts "eproxy"); do
+ ssh -A -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+ "/bin/bash /root/scripts/exchange-proxy.sh stop ${RUNNING}
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ done
sleep 5
- ssh -o StrictHostKeyChecking=no ${EXCHANGE_DOMAIN} \
- "/bin/bash /root/scripts/exchange.sh stop
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ for HOST in $(get_hosts "exchange-"); do
+ ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+ "/bin/bash /root/scripts/exchange.sh stop
${1:-${NUM_EXCHANGE_PROCESSES}}"
+ done
+}
+
+function start_wirewatches() {
+ ssh -A -o StrictHostKeyChecking=no "wirewatch.${DNS_ZONE}" \
+ "/bin/bash /root/scripts/exchange-wirewatch.sh start ${1}"
+}
+
+function stop_wirewatches() {
+ ssh -A -o StrictHostKeyChecking=no "wirewatch.${DNS_ZONE}" \
+ "/bin/bash /root/scripts/exchange-wirewatch.sh stop ${1}"
}
function start_processes() {
@@ -60,9 +80,12 @@ function start_processes() {
exchange)
start_exchanges $2
;;
+ wirewatch)
+ start_wirewatches $2
+ ;;
*)
echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
- echo "Usage: start [wallet|exchange] NUM"
+ echo "Usage: start [wallet|exchange|wirewatch] NUM"
;;
esac
}
@@ -75,9 +98,12 @@ function stop_processes() {
exchange)
stop_exchanges $2
;;
+ wirewatch)
+ stop_wirewatches $2
+ ;;
*)
echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
- echo "Usage: stop [wallet] NUM"
+ echo "Usage: stop [wallet|exchange|wirewatch] NUM"
;;
esac
}
@@ -85,34 +111,67 @@ function stop_processes() {
function rebuild() {
while [[ $# -gt 0 ]]; do
case "$1" in
+ --libmicrohttpd|-m)
+ LIBMICROHTTPD_COMMIT_SHA="$2"
+ shift 2
+ ;;
+ --libmicro-cflags|-lc)
+ LIBMICROHTTPD_CFLAGS="$2"
+ shift 2
+ ;;
--exchange|-e)
- EXCHANGE_COMMIT_SHA=$2
+ EXCHANGE_COMMIT_SHA="$2"
+ shift 2
+ ;;
+ --exch-cflags|-ec)
+ EXCHANGE_CFLAGS="$2"
shift 2
;;
--gnunet|-g)
- GNUNET_COMMIT_SHA=$2
+ GNUNET_COMMIT_SHA="$2"
+ shift 2
+ ;;
+ --gnunet-cflags|-gc)
+ GNUNET_CFLAGS="$2"
shift 2
;;
--wallet|-w)
- WALLET_COMMIT_SHA=$2
- shift 2
- ;;
+ WALLET_COMMIT_SHA="$2"
+ shift 2
+ ;;
--merchant|-m)
- MERCHANT_COMMIT_SHA=$2
+ MERCHANT_COMMIT_SHA="$2"
+ shift 2
+ ;;
+ --merch-cflags|-mc)
+ MERCHANT_CFLAGS="$2"
shift 2
;;
*)
echo "Unkown argument $1"
- echo "Usage rebuilt [target]"
- echo "Targets: "
- echo "-e|--exchange <commit-sha>"
+ echo "Usage rebuilt [target] [cflags]"
+ echo "Targets: "
+ echo "-e|--exchange <commit-sha>"
echo "-g|--gnunet <commit-sha>"
- echo "-w|--wallet <commit-sha>"
- echo "-m|--merchant <commit-sha>"
- exit 1
+ echo "-w|--wallet <commit-sha>"
+ echo "-m|--merchant <commit-sha>"
+ echo "Cflags: "
+ echo "-lc|--libmicro-cflags <cflags>"
+ echo "-gc|--gnunet-cflags <cflags>"
+ echo "-ec|--exch-cflags <cflags>"
+ echo "-mc|--merch-cflags <cflags>"
+ exit 1
esac
done
- # TODO
+ exec ~/scripts/install.sh
+}
+
+function rebuild_all() {
+ for NODE in $(dig -t AXFR ${DNS_ZONE} | grep "\<A\>" | awk 'print substr($1,
1, length($1)-1)}'); do
+ if [[ $NODE == $EXCHANGE_GW_DOMAIN ]]; then continue; fi
+ ssh ${NODE} "taler-perf build $(printf "%q " "$@")" &
+ done
+ wait
}
case "$1" in
@@ -124,13 +183,19 @@ case "$1" in
shift
stop_processes $@
;;
- update)
+ rebuild)
shift
- update_processes $@
+ rebuild_all "$@"
;;
- rebuild)
+ build)
shift
- rebuild
+ rebuild "$@"
+ ;;
+ *)
+ echo "Usage:"
+ echo "start|stop|rebuild"
+ echo "just run a command without an argument to get help"
+ exit 1
;;
esac
diff --git a/experiment/scripts/wallet.sh b/experiment/scripts/wallet.sh
index 45ba4f4..0b55178 100755
--- a/experiment/scripts/wallet.sh
+++ b/experiment/scripts/wallet.sh
@@ -19,7 +19,7 @@ source ~/scripts/helpers.sh
# Enable rsyslog and wait until the exchange is ready
function init_wallets() {
restart_rsyslog
- wait_for_keys "${PROXY_DOMAIN}"
+ wait_for_keys "${EXCHANGE_GW_DOMAIN}"
sleep 5
}
@@ -40,6 +40,7 @@ function start_wallets() {
for i in $(seq ${1}); do
let "i+=${RUNNING}"
+ # This starts the benchmark.sh script with i as argument
systemctl restart taler-wallet@${i}.service
sleep 0.5
done
diff --git a/experiment/ssh/id_rsa b/experiment/ssh/id_rsa
new file mode 100644
index 0000000..87d338a
--- /dev/null
+++ b/experiment/ssh/id_rsa
@@ -0,0 +1,38 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAYEArh6U/jL4LNSr7xhRNTxAK6f6T/RtoUP/BJWfI+6tFPYx8gyM5zoS
+roCkGijow/twt+BnzBq3Lat3o/p0onab00i/ALZkQrsCGv1S5lgUq+VJu1ssu+Ly0tmW3L
+Mi6z0Gzr2IIN92psaxQEZr7JU1KS94KpooR0iXmpiWooaweCLOZhodZL1LmCy1xyGsEv5Z
+BB0jzgEh9MYxvsI9+pnqNI/PbsnFlfUoCltf+R8D5YwRCJKTOO4Gq0kAryL5/B3dLQnFd+
+rge4qUZjiIz9U9/u29m4/DyXYhujO3nEzeiV5Y9Zs9BuxGtba5ZmfvNF2Gc7RbzIZVcWOj
+WIXQ9OtsKZWo0PeMgMAR+unzvIYTt/IwVQzyQQNhRGAwMeBGypV2QlWwfiAboqraxiWFJV
+Gv/AiEurLMaVCV8u8aDvQfYw5F4++a66d1AxH1yQdOdqmn16yeoZZ2q14tDbfeNa2NdU8j
+oFAt/f/zIl/nFCW37WXhu0LNAKOtZdAAFp/mdWEzAAAFiLTJCvG0yQrxAAAAB3NzaC1yc2
+EAAAGBAK4elP4y+CzUq+8YUTU8QCun+k/0baFD/wSVnyPurRT2MfIMjOc6Eq6ApBoo6MP7
+cLfgZ8waty2rd6P6dKJ2m9NIvwC2ZEK7Ahr9UuZYFKvlSbtbLLvi8tLZltyzIus9Bs69iC
+DfdqbGsUBGa+yVNSkveCqaKEdIl5qYlqKGsHgizmYaHWS9S5gstcchrBL+WQQdI84BIfTG
+Mb7CPfqZ6jSPz27JxZX1KApbX/kfA+WMEQiSkzjuBqtJAK8i+fwd3S0JxXfq4HuKlGY4iM
+/VPf7tvZuPw8l2Ibozt5xM3oleWPWbPQbsRrW2uWZn7zRdhnO0W8yGVXFjo1iF0PTrbCmV
+qND3jIDAEfrp87yGE7fyMFUM8kEDYURgMDHgRsqVdkJVsH4gG6Kq2sYlhSVRr/wIhLqyzG
+lQlfLvGg70H2MORePvmuundQMR9ckHTnapp9esnqGWdqteLQ233jWtjXVPI6BQLf3/8yJf
+5xQlt+1l4btCzQCjrWXQABaf5nVhMwAAAAMBAAEAAAGAEf1A4X58m40hcmNtyHVAIAKL3w
+Te6sFusJeQyJKZOUgyYtKfICik03ig+77sRYtN2wGJV9IOyN4lT0DKGhrtAIhMi5NMioRt
+tEIl9Xx2LkhTNNM3rPXGprgqWQT8/5bfhC6ayOKtjI+MsppT/i5wPqAT5zrkHHFIkIVhUs
+tdohvefTgHf2f7Tm6YHUnCUHgM1Fr6XwdI7dQoQZAp/SE3zFRrVwPrsRGSIHfOU5u7uFSf
+UeZq5X/aGopBUtbnQwAGtUQrbSaEkBeEy4wv1GINOSi8to7jt52ERpM/K0K0SQ2EXPJPD8
+LOIeODlT+N3y+JykxgmONcPr68ws3Qgy/YUg4J0gAv/kWlo00iMO15Fv8yuuOSI8Lrdm+U
+VVW0yB6dkyh8wKHIfo21e0Hx7J/RKH1LMzwnu1vvq3s5tYWmrdEXzbyCbmIxscPaOd7TUJ
+UK+UdDWj0RZcHIc0Be5camArsbuSYee95YCt0oR5g+wA3pdPSVHNhcwX/iXg7NpJmBAAAA
+wFawVP34hdVhQc3qEYiyVt2Tw7+cbLCkK7BjiVNSyNZbxdWlmMEAeb5r5SjO038ODzHBnK
+l+9X0OWsRi+vTOR5aoI3z4RC6/uigdNUOwpdrNZiRZDHhiV7ryewbltSJYM6je/+yvpx9o
+6I49k6cqRMu6TdOB8TFM7YWSTRTtHfKYSYfqeEujq0PIlIhgwkI0kgFuNoen43q8CDwbTM
+O2BP0YIp4re82Z1xb/rikBEveUebGpSGc1o0LsQSEzqemRMgAAAMEA2CD9pXBsQkziLk+y
+nSTCkY4ALJ2LYvhCoVkMNCBbHIDcp1N8FfKP/rxL1286qdUBrfl+wKqbpfMuCFBxaI9Y01
+Hrov+WHPnmqeXSroVXpsErC3OyeVAZHj816IDARAxvAP58U+42yxpAo9kJfAyrpFbOHbCx
+aV8Cuq7U0FtmUlZmdYSOU7V6YOS5kSkm2vLQj1qzdZiGo1mwVlghnLTVGmIm0KK7wUZNh4
+ODM8RKuz44Czzis5p+Q2U/lqt6IVJBAAAAwQDOPaJN4wE5uruESHCMOVNEUM9+nSQnYXtH
+mnFjyvwxs+F2mKnDHnepfnl6IkoyPEKdMW8qVVmbO/+/MSByOHqOsuZtTBYOQ+xKv6PBdC
+mn2L+kLQprhXzNbdAYhfjdSlDgZdbGGJhrMtYPuADDQPEf1ZE9HOmtpcSx7BBvlR+fHOkx
+O4SQNW0UrWfcB4w9EQfQ80K3hseVQzQMJZ6l1/LK3yHt5G7yx1Y8yUqhQji+lnWrG0Y8Cr
+/U/8wb8gPF7nMAAAAOdmlzaW9uQHdha2FuZGEBAgMEBQ==
+-----END OPENSSH PRIVATE KEY-----
diff --git a/experiment/ssh/id_rsa.pub b/experiment/ssh/id_rsa.pub
new file mode 100644
index 0000000..dbf1cd5
--- /dev/null
+++ b/experiment/ssh/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABgQCuHpT+Mvgs1KvvGFE1PEArp/pP9G2hQ/8ElZ8j7q0U9jHyDIznOhKugKQaKOjD+3C34GfMGrctq3ej+nSidpvTSL8AtmRCuwIa/VLmWBSr5Um7Wyy74vLS2ZbcsyLrPQbOvYgg33amxrFARmvslTUpL3gqmihHSJeamJaihrB4Is5mGh1kvUuYLLXHIawS/lkEHSPOASH0xjG+wj36meo0j89uycWV9SgKW1/5HwPljBEIkpM47garSQCvIvn8Hd0tCcV36uB7ipRmOIjP1T3+7b2bj8PJdiG6M7ecTN6JXlj1mz0G7Ea1trlmZ+80XYZztFvMhlVxY6NYhdD062wplajQ94yAwBH66fO8hhO38jBVDPJBA2FEYDAx4EbKlXZCVbB+IBuiqtrGJYUlUa/8CIS6ssxpUJXy7xoO9B9jDkXj75rrp3UDEfXJB052qafXrJ6h
[...]
diff --git a/experiment/taler.many.rspec b/experiment/taler.many.rspec
new file mode 100644
index 0000000..4abfe99
--- /dev/null
+++ b/experiment/taler.many.rspec
@@ -0,0 +1,453 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-06T21:42:37.131+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+ <node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="97.68354430379748" y="25.0"/>
+ </node>
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="221.0"
y="72.5"/>
+ </node>
+ <node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="474.7974683544304" y="25.0"/>
+ </node>
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="226.5"
y="126.5"/>
+ </node>
+ <node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="915.0"
y="92.81119637333838"/>
+ </node>
+ <node client_id="Merchant-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="662.6455696202531" y="92.81119637333838"/>
+ </node>
+ <node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="781.0253164556962" y="25.0"/>
+ </node>
+ <node client_id="Aggregator" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="500.5"
y="138.5"/>
+ </node>
+ <node client_id="Wirewatch" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="649.5"
y="139.5"/>
+ </node>
+ <node client_id="Transfer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="790.5"
y="138.5"/>
+ </node>
+ <node client_id="Closer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="913.5"
y="137.5"/>
+ </node>
+ <node client_id="Exchange-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="364.0"
y="70.5"/>
+ </node>
+ <node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="205.30722735107315"/>
+ </node>
+ <node client_id="Wallet-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="273.4810126582279" y="205.30722735107315"/>
+ </node>
+ <node client_id="Wallet-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="471.9620253164557" y="205.30722735107315"/>
+ </node>
+ <node client_id="Wallet-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="660.5"
y="202.5"/>
+ </node>
+ <node client_id="Wallet-5" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="868.9240506329114" y="205.30722735107315"/>
+ </node>
+ <node client_id="Wallet-6" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="236.665006020825"/>
+ </node>
+ <node client_id="Wallet-7" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="273.4810126582279" y="236.665006020825"/>
+ </node>
+ <node client_id="Wallet-8" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="471.9620253164557" y="236.665006020825"/>
+ </node>
+ <node client_id="Wallet-9" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="670.4430379746834" y="236.665006020825"/>
+ </node>
+ <node client_id="Wallet-10" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="868.9240506329114" y="236.665006020825"/>
+ </node>
+ <node client_id="Wallet-11" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="268.0227846905768"/>
+ </node>
+ <node client_id="Wallet-12" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="273.4810126582279" y="268.0227846905768"/>
+ </node>
+ <node client_id="Wallet-13" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="471.9620253164557" y="268.0227846905768"/>
+ </node>
+ <node client_id="Wallet-14" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="670.4430379746834" y="268.0227846905768"/>
+ </node>
+ <node client_id="Wallet-15" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="868.9240506329114" y="268.0227846905768"/>
+ </node>
+ <node client_id="Wallet-16" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="299.3805633603287"/>
+ </node>
+ <node client_id="Wallet-17" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="273.4810126582279" y="299.3805633603287"/>
+ </node>
+ <node client_id="Wallet-18" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="471.9620253164557" y="299.3805633603287"/>
+ </node>
+ <node client_id="Wallet-19" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="670.4430379746834" y="299.3805633603287"/>
+ </node>
+ <node client_id="Wallet-20" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="868.9240506329114" y="299.3805633603287"/>
+ </node>
+ <node client_id="Wallet-21" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="80.67088607594937" y="333.4821476636838"/>
+ </node>
+ <node client_id="Wallet-22" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="279.15189873417717" y="333.4821476636838"/>
+ </node>
+ <node client_id="Wallet-23" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="477.63291139240505" y="334.26609213042764"/>
+ </node>
+ <node client_id="Wallet-24" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="677.5316455696203" y="333.4821476636838"/>
+ </node>
+ <node client_id="Wallet-25" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="876.012658227848" y="331.91425873019625"/>
+ </node>
+ <node client_id="Wallet-26" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="86.34177215189874" y="364.0559818666919"/>
+ </node>
+ <node client_id="Wallet-27" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="281.9873417721519" y="364.8399263334357"/>
+ </node>
+ <node client_id="Wallet-28" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="477.99999999999994" y="370.93658536585366"/>
+ </node>
+ <node client_id="Wallet-29" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="681.7848101265823" y="366.40781526692325"/>
+ </node>
+ <node client_id="Wallet-30" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="881.6835443037975" y="366.40781526692325"/>
+ </node>
+ <node client_id="Wallet-31" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="80.67088607594937" y="393.84587160295615"/>
+ </node>
+ <node client_id="Wallet-32" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="281.9873417721519" y="397.7655939366752"/>
+ </node>
+ <node client_id="Wallet-33" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="484.72151898734177" y="399.33348287016264"/>
+ </node>
+ <node client_id="Wallet-34" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="678.9493670886076" y="397.7655939366752"/>
+ </node>
+ <node client_id="Wallet-35" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="884.5189873417721" y="395.41376053644376"/>
+ </node>
+ <node client_id="Wallet-36" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="80.67088607594937" y="426.77153920619554"/>
+ </node>
+ <node client_id="Wallet-37" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="289.0759493670886" y="428.33942813968315"/>
+ </node>
+ <node client_id="Wallet-38" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="488.97468354430373" y="429.90731707317076"/>
+ </node>
+ <node client_id="Wallet-39" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="688.873417721519" y="426.77153920619554"/>
+ </node>
+ <node client_id="Wallet-40" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="891.6075949367088" y="427.55548367293943"/>
+ </node>
+ <node client_id="Wallet-41" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="84.0"
y="463.3365853658537"/>
+ </node>
+ <node client_id="Wallet-42" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="295.0"
y="460.3317073170732"/>
+ </node>
+ <node client_id="Wallet-43" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="485.0"
y="460.3317073170732"/>
+ </node>
+ <node client_id="Wallet-44" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="685.0"
y="455.8243902439025"/>
+ </node>
+ <node client_id="Wallet-45" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="892.0"
y="460.3317073170732"/>
+ </node>
+ <node client_id="Wallet-46" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="87.0"
y="497.89268292682925"/>
+ </node>
+ <node client_id="Wallet-47" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="297.0"
y="492.63414634146346"/>
+ </node>
+ <node client_id="Wallet-48" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="491.0"
y="496.390243902439"/>
+ </node>
+ <node client_id="Wallet-49" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="689.0"
y="487.37560975609756"/>
+ </node>
+ <node client_id="Wallet-50" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="897.0"
y="492.63414634146346"/>
+ </node>
+ <node client_id="Wallet-51" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="86.0"
y="530.1951219512196"/>
+ </node>
+ <node client_id="Wallet-52" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="301.0"
y="525.6878048780488"/>
+ </node>
+ <node client_id="Wallet-53" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="492.99999999999994" y="529.4439024390244"/>
+ </node>
+ <node client_id="Wallet-54" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="692.0"
y="526.439024390244"/>
+ </node>
+ <node client_id="Wallet-55" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="901.9999999999999" y="529.4439024390244"/>
+ </node>
+ <node client_id="Wallet-56" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="90.0"
y="558.7414634146342"/>
+ </node>
+ <node client_id="Wallet-57" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="304.0"
y="558.7414634146342"/>
+ </node>
+ <node client_id="Wallet-58" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="494.0"
y="560.2439024390244"/>
+ </node>
+ <node client_id="Wallet-59" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="696.0"
y="557.2390243902439"/>
+ </node>
+ <node client_id="Wallet-60" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="904.9999999999999" y="564.0"/>
+ </node>
+ <node client_id="EProxy-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="338.0"
y="126.5"/>
+ </node>
+</rspec>
\ No newline at end of file
diff --git a/experiment/taler.rspec b/experiment/taler.rspec
index 462f39a..065e19a 100644
--- a/experiment/taler.rspec
+++ b/experiment/taler.rspec
@@ -1,51 +1,52 @@
<?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-06T21:41:56.411+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
<node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="156.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="203.0"
y="96.5"/>
</node>
- <node client_id="Exchange" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Exchange-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="283.0"
y="127.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="362.0"
y="162.5"/>
</node>
<node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="422.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="332.0"
y="96.5"/>
</node>
- <node client_id="Proxy" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="EProxy-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="284.5"
y="184.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="354.5"
y="203.5"/>
</node>
<node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="732.5"
y="156.5"/>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="669.5"
y="104.5"/>
</node>
- <node client_id="Merchant" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <node client_id="Merchant-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="554.5"
y="156.5"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="523.5"
y="104.5"/>
</node>
<node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
<disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
</sliver_type>
<hardware_type name="dahu-grenoble"/>
- <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="638.0"
y="70.0"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="599.0"
y="47.5"/>
</node>
<node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
<sliver_type name="raw-pc">
@@ -167,4 +168,46 @@
</sliver_type>
<location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="700.0"
y="420.0"/>
</node>
+ <node client_id="Aggregator" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="532.5"
y="184.5"/>
+ </node>
+ <node client_id="Wirewatch" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="535.5"
y="220.5"/>
+ </node>
+ <node client_id="Transfer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="674.5"
y="183.5"/>
+ </node>
+ <node client_id="Closer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="671.5"
y="221.5"/>
+ </node>
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="210.0"
y="162.5"/>
+ </node>
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="229.5"
y="202.5"/>
+ </node>
</rspec>
\ No newline at end of file
diff --git a/experiment/taler.sharded.rspec b/experiment/taler.sharded.rspec
new file mode 100644
index 0000000..b7befef
--- /dev/null
+++ b/experiment/taler.sharded.rspec
@@ -0,0 +1,481 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3" type="request"
generated_by="jFed RSpec Editor" generated="2022-04-02T11:19:43.414+02:00"
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1" xmlns:
[...]
+ <node client_id="DB" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="139.0"
y="108.5"/>
+ </node>
+ <node client_id="Exchange-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="224.69280280866005" y="153.94117647058823"/>
+ </node>
+ <node client_id="Bank" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="469.5236980690462" y="93.19004524886878"/>
+ </node>
+ <node client_id="EProxy-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="242.65593914569925" y="199.81447963800903"/>
+ </node>
+ <node client_id="Monitor" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1005.091281451141" y="90.710407239819"/>
+ </node>
+ <node client_id="Merchant-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="680.4242246928029" y="90.710407239819"/>
+ </node>
+ <node client_id="DNS" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="847.4148624926859" y="90.710407239819"/>
+ </node>
+ <node client_id="Aggregator" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="679.0936220011703" y="152.70135746606337"/>
+ </node>
+ <node client_id="Wirewatch" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="680.4242246928029" y="197.33484162895928"/>
+ </node>
+ <node client_id="Transfer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="864.0473961380924" y="150.2217194570136"/>
+ </node>
+ <node client_id="Closer" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="861.3861907548273" y="196.09502262443436"/>
+ </node>
+ <node client_id="Exchange-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="421.622001170275" y="152.70135746606337"/>
+ </node>
+ <node client_id="Shard-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="75.0"
y="24.999999999999996"/>
+ </node>
+ <node client_id="Shard-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="205.5"
y="24.5"/>
+ </node>
+ <node client_id="Shard-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1" x="81.5"
y="60.49999999999999"/>
+ </node>
+ <node client_id="Shard-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="207.49999999999997" y="61.5"/>
+ </node>
+ <node client_id="Wallet-1" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="94.29373902867174" y="265.2858836841359"/>
+ </node>
+ <node client_id="Wallet-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="323.5893158059645" y="265.2858836841359"/>
+ </node>
+ <node client_id="Wallet-3" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="552.8848925832572" y="265.2858836841359"/>
+ </node>
+ <node client_id="Wallet-4" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="770.6937553580904" y="261.80542986425337"/>
+ </node>
+ <node client_id="Wallet-5" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1011.4760461378427" y="265.2858836841359"/>
+ </node>
+ <node client_id="Wallet-6" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="94.29373902867174" y="304.1638536185794"/>
+ </node>
+ <node client_id="Wallet-7" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="323.5893158059645" y="304.1638536185794"/>
+ </node>
+ <node client_id="Wallet-8" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="552.8848925832572" y="304.1638536185794"/>
+ </node>
+ <node client_id="Wallet-9" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="782.1804693605496" y="304.1638536185794"/>
+ </node>
+ <node client_id="Wallet-10" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1011.4760461378427" y="304.1638536185794"/>
+ </node>
+ <node client_id="Wallet-11" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="94.29373902867174" y="343.0418235530229"/>
+ </node>
+ <node client_id="Wallet-12" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="323.5893158059645" y="343.0418235530229"/>
+ </node>
+ <node client_id="Wallet-13" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="552.8848925832572" y="343.0418235530229"/>
+ </node>
+ <node client_id="Wallet-14" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="782.1804693605496" y="343.0418235530229"/>
+ </node>
+ <node client_id="Wallet-15" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1011.4760461378427" y="343.0418235530229"/>
+ </node>
+ <node client_id="Wallet-16" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="94.29373902867174" y="381.9197934874664"/>
+ </node>
+ <node client_id="Wallet-17" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="323.5893158059645" y="381.9197934874664"/>
+ </node>
+ <node client_id="Wallet-18" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="552.8848925832572" y="381.9197934874664"/>
+ </node>
+ <node client_id="Wallet-19" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="782.1804693605496" y="381.9197934874664"/>
+ </node>
+ <node client_id="Wallet-20" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1011.4760461378427" y="381.9197934874664"/>
+ </node>
+ <node client_id="Wallet-21" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="100.84504122230867" y="424.19958579117355"/>
+ </node>
+ <node client_id="Wallet-22" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="330.1406179996014" y="424.19958579117355"/>
+ </node>
+ <node client_id="Wallet-23" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="559.4361947768941" y="425.17153503953466"/>
+ </node>
+ <node client_id="Wallet-24" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="790.3695971025962" y="424.19958579117355"/>
+ </node>
+ <node client_id="Wallet-25" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1019.6651738798886" y="422.2556872944515"/>
+ </node>
+ <node client_id="Wallet-26" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="107.39634341594561" y="462.10560647725606"/>
+ </node>
+ <node client_id="Wallet-27" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="333.4162690964199" y="463.07755572561706"/>
+ </node>
+ <node client_id="Wallet-28" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="559.8602746063927" y="470.6363094581172"/>
+ </node>
+ <node client_id="Wallet-29" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="795.2830737478238" y="465.02145422233923"/>
+ </node>
+ <node client_id="Wallet-30" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1026.2164760735259" y="465.02145422233923"/>
+ </node>
+ <node client_id="Wallet-31" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="100.84504122230867" y="499.03967791497723"/>
+ </node>
+ <node client_id="Wallet-32" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="333.4162690964199" y="503.8994241567828"/>
+ </node>
+ <node client_id="Wallet-33" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="567.6253225189403" y="505.84332265350474"/>
+ </node>
+ <node client_id="Wallet-34" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="792.0074226510053" y="503.8994241567828"/>
+ </node>
+ <node client_id="Wallet-35" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1029.4921271703442" y="500.98357641169946"/>
+ </node>
+ <node client_id="Wallet-36" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="100.84504122230867" y="539.8615463461429"/>
+ </node>
+ <node client_id="Wallet-37" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="341.60539683846605" y="541.805444842865"/>
+ </node>
+ <node client_id="Wallet-38" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="572.5387991641679" y="543.7493433395873"/>
+ </node>
+ <node client_id="Wallet-39" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="803.47220148987" y="539.8615463461429"/>
+ </node>
+ <node client_id="Wallet-40" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1037.6812549123902" y="540.833495594504"/>
+ </node>
+ <node client_id="Wallet-41" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="104.69100657259105" y="585.1955854762167"/>
+ </node>
+ <node client_id="Wallet-42" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="348.4491678800332" y="581.4700805650589"/>
+ </node>
+ <node client_id="Wallet-43" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="567.9470382516636" y="581.4700805650589"/>
+ </node>
+ <node client_id="Wallet-44" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="798.9974281165375" y="575.8818231983225"/>
+ </node>
+ <node client_id="Wallet-45" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1038.1345816266821" y="581.4700805650589"/>
+ </node>
+ <node client_id="Wallet-46" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="108.15676242056416" y="628.0388919545303"/>
+ </node>
+ <node client_id="Wallet-47" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="350.759671778682" y="621.5192583600044"/>
+ </node>
+ <node client_id="Wallet-48" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="574.8785499476098" y="626.1761394989514"/>
+ </node>
+ <node client_id="Wallet-49" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="803.618435913835" y="614.9996247654783"/>
+ </node>
+ <node client_id="Wallet-50" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1043.910841373304" y="621.5192583600044"/>
+ </node>
+ <node client_id="Wallet-51" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="107.00151047123981" y="668.0880697494758"/>
+ </node>
+ <node client_id="Wallet-52" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="355.3806795759794" y="662.4998123827393"/>
+ </node>
+ <node client_id="Wallet-53" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="577.1890538462585" y="667.1566935216864"/>
+ </node>
+ <node client_id="Wallet-54" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="807.0841917618081" y="663.4311886105287"/>
+ </node>
+ <node client_id="Wallet-55" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1049.6871011199257" y="667.1566935216864"/>
+ </node>
+ <node client_id="Wallet-56" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="111.62251826853728" y="703.480366405474"/>
+ </node>
+ <node client_id="Wallet-57" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="358.8464354239525" y="703.480366405474"/>
+ </node>
+ <node client_id="Wallet-58" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="578.3443057955828" y="705.3431188610527"/>
+ </node>
+ <node client_id="Wallet-59" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="811.7051995591056" y="701.6176139498951"/>
+ </node>
+ <node client_id="Wallet-60" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="1053.152856967899" y="710.0"/>
+ </node>
+ <node client_id="EProxy-2" exclusive="true"
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+ <sliver_type name="raw-pc">
+ <disk_image
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+ </sliver_type>
+ <hardware_type name="dahu-grenoble"/>
+ <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"
x="396.34055002925686" y="199.81447963800903"/>
+ </node>
+</rspec>
diff --git a/image/README.md b/image/README.md
index cc52c66..2799de6 100644
--- a/image/README.md
+++ b/image/README.md
@@ -1,53 +1,76 @@
-# Grid5000 Environment creation
+# Grid'5000 Environment creation
Official documentation can be found on these links:
-* [Grid5000
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
-* [Grid5000 Kadeploy](https://www.grid5000.fr/w/Advanced_Kadeploy)
+* [Grid'5000
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
+* [Grid'5000 Kadeploy](https://www.grid5000.fr/w/Advanced_Kadeploy)
* [Kameleon Documentation](http://kameleon.imag.fr/grid5000_tutorial.html)
+## Images
+
+There are two variants, debian11 and centos8 please change into the respective
directory
+before running any commands. Please do also replace debian11 with the
corresponding name.
+
+**NOTE** Centos8 does not have nfs enabled and can only be used to run
Postgresql currently.
+
## Manual Build
-Replace `<G5K_USER>` with your Grid5000 username.
+Replace `<G5K_USER>` with your Grid'5000 username.
This variable is required, if not specified the build will fail.
```bash
kameleon build -g g5k_user:<G5K_USER> taler-debian11
```
-**NOTE** Make sure that all dependencies listed in `Grid5000 Environment` are
installed
+**NOTE** Make sure that all dependencies listed in
+[Grid'5000
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
+are installed
### Additional Variables
+#### Source
+
The Taler binaries are built from source. You have the possiblity to override
the commit from
which should be built with the following variables (default `master`):
`gnunet_commit_sha`, `exchange_commit_sha`, `merchant_commit_sha`,
`wallet_commit_sha` and `grid5k_commit_sha`
-To override them you must add them to the `-g` option of `kameleon build`:
+(All except `gid5k_commit_sha` are for the debian11 environment only)
+
+#### Build Flags
+
+For each package built from source there are CFLAG variables which can be
passed to the image build:
+
+`libmicrohttpd_cflags`, `gnunet_cflags`, `exchange_cflags` and
`merchant_cflags`
+
+(debian11 only)
+
+#### Usage
+
+To override them you must pass them with the `-g` option of `kameleon build`:
```bash
-kameleon build -g g5k_user:<G5K_USER> gnunet_commit_sha:master
grid5k_commit_sha:node-setup taler-debian11
+kameleon build -g g5k_user:<G5K_USER> gnunet_commit_sha:master
libmicrohttpd_cflags:"-O0 -g" taler-debian11
```
For more information please run `kameleon build --help`
### Deploy
-Copy the image to a Grid5000 site:
+Copy the image to a Grid'5000 site:
```bash
cd build/taler-debian11
scp taler-debian11.* <G5K_USER>@access.grid5000.fr:<G5K_SITE>/public/
```
-**NOTE** G5K_USER and G5K_SITE should match the ones in taler-debian11.dsc
-G5K_SITE defaults to `lyon`.
+**NOTE** `G5K_USER` and `G5K_SITE` must match the ones in taler-debian11.dsc
+`G5K_SITE` defaults to `lyon`.
## Usage
Place `http://public.lyon.grid5000.fr/~<G5K_USER>/taler-debian11.dsc` in the
nodes disk image field
-in jFed.
+in jFed or replace them directly in the `rspec` files.
## Automated Build
diff --git a/image/grid5000/debian11-x64-common.yaml
b/image/centos8/grid5000/centos8-x64-min.yaml
similarity index 62%
copy from image/grid5000/debian11-x64-common.yaml
copy to image/centos8/grid5000/centos8-x64-min.yaml
index 6b53d71..129a035 100644
--- a/image/grid5000/debian11-x64-common.yaml
+++ b/image/centos8/grid5000/centos8-x64-min.yaml
@@ -2,19 +2,18 @@
# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
#==============================================================================
#
-# DESCRIPTION: Debian bullseye (11) x64 common Grid'5000 environment
+# DESCRIPTION: Centos8 x64 min Grid'5000 environment
#
#==============================================================================
---
-extend: from_scratch/debian-bullseye.yaml
+extend: from_scratch/centos-8.yaml
global:
- # Export format to generate
appliance_formats: qcow2 tar.zst
# Output base filename
output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
# Grid'5000 environment variant
- g5k_variant: common
+ g5k_variant: min
# Grid'5000 environment version
g5k_version: 1111111111
# Grid'5000 environment arch
@@ -24,30 +23,31 @@ global:
g5k_tar_compression: "zstd"
g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
g5k_postinst_compression: "gzip"
- g5k_postinst_script: g5k-postinstall --net debian --disk-aliases
- g5k_kernel_params: ""
- deb_backports: true
- # grub-efi-amd64-bin has to be installed if we want to support both mbr and
- # efi boot methods. This package can be installed in parallel with grub-pc
- # (in contrary to grub-efi-amd64 which conflit with grub-pc)
- packages: "grub-efi-amd64-bin"
+ g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+ g5k_kernel_params: "crashkernel=no"
+ g5k_kernel_path: "/vmlinuz"
+ g5k_initrd_path: "/initramfs.img"
+ g5k_no_chroot_for_grub: "true"
+ # Packages to install
+ packages: "zstd"
# locales
locales: POSIX C en_US.UTF8
lang: en_US.UTF8
timezone: Europe/Paris
- # puppet
- puppetlabs_apt_version: 6.3.0
+ # password
+ root_password: grid5000
bootstrap:
- "@base"
setup:
+ - create_kernel_symlinks
- "@base"
- configure_system
- - configure_apt_sources
- install_packages
- - setup_orchestrator
- - run_orchestrator
+ - disable_kdump
+ - set_g5k_release
+ - set_g5k_motd
export:
- clean_dhcp_leases
diff --git a/image/grid5000/from_scratch/base.yaml
b/image/centos8/grid5000/from_scratch/base.yaml
similarity index 100%
copy from image/grid5000/from_scratch/base.yaml
copy to image/centos8/grid5000/from_scratch/base.yaml
diff --git a/image/grid5000/from_scratch/debian-bullseye.yaml
b/image/centos8/grid5000/from_scratch/centos-8.yaml
similarity index 62%
copy from image/grid5000/from_scratch/debian-bullseye.yaml
copy to image/centos8/grid5000/from_scratch/centos-8.yaml
index a017aab..1cccbda 100644
--- a/image/grid5000/from_scratch/debian-bullseye.yaml
+++ b/image/centos8/grid5000/from_scratch/centos-8.yaml
@@ -2,17 +2,16 @@
# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
#==============================================================================
#
-# DESCRIPTION: Debian 11 (Bullseye) recipe using the netinstall mechanism
+# DESCRIPTION: Centos 8 recipe using the netinstall mechanism
#
#==============================================================================
---
-extend: debian-base.yaml
-# Global variables use by Kameleon engine and the steps
+extend: centos-base.yaml
+
global:
- # Distribution
- distrib: debian
- release: bullseye
- release_number: 11
+ release_number: 8
+ release: 8.5.2111
+ mirror_url: $${mirror_base_url}$${release}/BaseOS/$${arch}/os
bootstrap:
- "@base"
diff --git a/image/centos8/grid5000/from_scratch/centos-base.yaml
b/image/centos8/grid5000/from_scratch/centos-base.yaml
new file mode 100644
index 0000000..19fdad2
--- /dev/null
+++ b/image/centos8/grid5000/from_scratch/centos-base.yaml
@@ -0,0 +1,55 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos generic recipe using the netinstall mechanism
+#
+# Uses the netinstall + kickstart mechanism
+#
+#==============================================================================
+---
+extend: base.yaml
+global:
+ distrib: centos
+ release_number: 7
+ # release_minor and release_date are not required if using the
installer_iso_finder
+ # helper script
+ #release_major: $${release_number}
+ #release_minor: 4
+ #release_date: 1708
+ release: $${release_number}
+
+ #mirror_base_url: https://vault.centos.org/
+ # faster mirror
+ mirror_base_url: http://mirror.nsc.liu.se/centos-store/
+ mirror_url: $${mirror_base_url}$${release}/os/$${arch}/
+
+ # location of the CentOS netinstall iso
+ # can be set manually or guessed using a url finder helper script
+ #installer_iso_filename:
CentOS-$${release_major}-$${arch}-NetInstall-$${release_date}.iso
+ #installer_iso_url:
$${mirror_base_url}/$${release_major}.$${release_minor}.$${release_date}/isos/$${arch}/$${installer_iso_filename}
+ installer_iso_finder_helper:
$${kameleon_data_dir}/helpers/netinstall_iso_finder.py
+ installer_iso_finder_mirror_url: $${mirror_base_url}
+ installer_iso_finder_args: $${distrib} $${release_number} $${arch}
$${installer_iso_finder_mirror_url}
+ qemu_iso_path: $${kameleon_cwd}/$${distrib}.iso
+
+ # If memory size is too low, the VM crashes.
+ qemu_memory_size: 2G
+
+ base_kickstart_path:
$${kameleon_data_dir}/kickstart/$${distrib}$${release_number}-ks.cfg
+
+ qemu_sendkeys_commands:
$${kameleon_data_dir}/qemu-sendkeys/netinst-$${distrib}
+
+ # Include specific steps
+ include_steps:
+ - $${distrib}/$${release_number}
+ - $${distrib}
+
+bootstrap:
+ - "@base"
+
+setup:
+ - "@base"
+
+export:
+ - "@base"
diff --git a/image/grid5000/steps/aliases/defaults.yaml
b/image/centos8/grid5000/steps/aliases/defaults.yaml
similarity index 100%
copy from image/grid5000/steps/aliases/defaults.yaml
copy to image/centos8/grid5000/steps/aliases/defaults.yaml
diff --git
a/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
b/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
new file mode 100644
index 0000000..db41561
--- /dev/null
+++ b/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
@@ -0,0 +1,7 @@
+- copy_kickstart_file_to_http_directory:
+ - exec_local: mkdir -p $${http_directory}
+ - exec_local: cp $${base_kickstart_path} $${http_directory}/ks.cfg
+
+- customize_kickstart:
+ - exec_local: sed -i s'|rootpw\(.*\)|rootpw $${root_password}|'g
$${http_directory}/ks.cfg
+ - exec_local: sed -i s'|url --url\(.*\)|url --url=$${mirror_url}|'g
$${http_directory}/ks.cfg
diff --git a/image/grid5000/steps/bootstrap/download_installer.yaml
b/image/centos8/grid5000/steps/bootstrap/download_installer.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/download_installer.yaml
copy to image/centos8/grid5000/steps/bootstrap/download_installer.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_appliance.yaml
b/image/centos8/grid5000/steps/bootstrap/prepare_appliance.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_appliance.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_appliance.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_disk.yaml
b/image/centos8/grid5000/steps/bootstrap/prepare_disk.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_disk.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_disk.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
b/image/centos8/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
diff --git a/image/grid5000/steps/bootstrap/start_http_server.yaml
b/image/centos8/grid5000/steps/bootstrap/start_http_server.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/start_http_server.yaml
copy to image/centos8/grid5000/steps/bootstrap/start_http_server.yaml
diff --git a/image/grid5000/steps/bootstrap/start_qemu.yaml
b/image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
similarity index 98%
copy from image/grid5000/steps/bootstrap/start_qemu.yaml
copy to image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
index 35e0206..4dd5888 100644
--- a/image/grid5000/steps/bootstrap/start_qemu.yaml
+++ b/image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
@@ -113,10 +113,10 @@
echo "Starting qemu..."
if [ "$${qemu_enable_kvm}" == "true" ] && (/usr/sbin/kvm-ok > /dev/null
|| egrep '(vmx|svm)' /proc/cpuinfo > /dev/null) ; then # print warning if
/usr/sbin/kvm-ok is not installed
if [ "$${qemu_arch}" == "aarch64" ]; then
- ENABLE_KVM="-enable-kvm -accel kvm -machine
virt,gic-version=host,accel=kvm:tcg -cpu host"
+ ENABLE_KVM="-enable-kvm -machine virt,gic-version=host,accel=kvm:tcg
-cpu host"
#ENABLE_KVM="-global virtio-blk-pci.scsi=off -no-user-config
-enable-fips -machine virt,gic-version=host,accel=kvm:tcg -cpu host -rtc
driftfix=slew -object rng-random,filename=/dev/urandom,id=rng0 -device
virtio-rng-pci,rng=rng0"
elif [ "$${qemu_arch}" == "ppc64" ]; then
- ENABLE_KVM="-enable-kvm -accel kvm -machine pseries,accel=kvm:tcg
-cpu host"
+ ENABLE_KVM="-enable-kvm -machine pseries,accel=kvm:tcg -cpu host"
else #X86_64
ENABLE_KVM="-enable-kvm -cpu host"
fi
diff --git a/image/grid5000/steps/checkpoints/simple.yaml
b/image/centos8/grid5000/steps/checkpoints/simple.yaml
similarity index 100%
copy from image/grid5000/steps/checkpoints/simple.yaml
copy to image/centos8/grid5000/steps/checkpoints/simple.yaml
diff --git a/image/grid5000/steps/data/helpers/export_appliance.py
b/image/centos8/grid5000/steps/data/helpers/export_appliance.py
similarity index 100%
copy from image/grid5000/steps/data/helpers/export_appliance.py
copy to image/centos8/grid5000/steps/data/helpers/export_appliance.py
diff --git a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py
b/image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
similarity index 76%
copy from image/grid5000/steps/data/helpers/netinstall_iso_finder.py
copy to image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
index a3a98ab..5eebef5 100755
--- a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py
+++ b/image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
@@ -128,19 +128,45 @@ if __name__ == '__main__':
[visited,found] = url_find(servers, set(), set())
elif (args.distrib.lower() == "centos"):
if args.mirror == None:
- args.mirror = "http://mirror.in2p3.fr/linux/CentOS/"
+ args.mirror = "https://vault.centos.org/"
if not re.match("^\d+$",args.version):
raise Exception("please give the CentOS release number (e.g. 7
for CentOS-7)")
if args.version == '6':
- url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"(?:\.\d+)?-"+args.arch+"-netinstall\.iso)?)?)?)?$")
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)?/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"(?:\.\d+)?-"+args.arch+"-netinstall\.iso)?)?)?)?$")
target_regex =
re.compile("^.*CentOS-\d+(?:\.\d+)?-\w+-netinstall\.iso$")
elif args.version == '7':
- url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"-"+args.arch+"-NetInstall-\d+\.iso)?)?)?)?$")
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)*/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"-"+args.arch+"-NetInstall-\d+\.iso)?)?)?)?$")
target_regex =
re.compile("^.*CentOS-\d+-\w+-NetInstall-\d+\.iso$")
else:
- url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"\.\d+\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)*/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"\.\d+\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
target_regex =
re.compile("^.*CentOS-\d+\.\d+\.\d+-\w+-boot\.iso$")
[visited,found] = url_find(set([args.mirror]), set(), set())
+ elif (args.distrib.lower() == "centos-stream"):
+ if not re.match("^\d+$",args.version):
+ raise Exception("please give the CentOS-stream release number
(e.g. 8)")
+ if args.version == '8':
+ if args.mirror == None:
+ args.mirror = "http://mirror.in2p3.fr/linux/CentOS/"
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"-stream/(?:isos/(?:"+args.arch+"/(?:CentOS-Stream-"+args.version+"-"+args.arch+"-latest-boot\.iso)?)?)?)?$")
+ target_regex =
re.compile("^.*CentOS-Stream-\d+-\w+-latest-boot\.iso$")
+ else:
+ if args.mirror == None:
+ args.mirror = "http://mirror.stream.centos.org/"
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"-stream/(?:BaseOS/(?:"+args.arch+"/(?:iso/(?:CentOS-Stream-"+args.version+"-latest-"+args.arch+"-boot\.iso)?)?)?)?)?$")
+ target_regex =
re.compile("^.*CentOS-Stream-\d+-latest-\w+-boot\.iso$")
+
+ [visited,found] = url_find(set([args.mirror]), set(), set())
+ elif (args.distrib.lower() == "rocky"):
+ if args.mirror == None:
+ args.mirror = "https://mirror.in2p3.fr/linux/rocky/"
+ if not re.match("^\d+$",args.version):
+ raise Exception("please give the Rocky Linux release number
(e.g. 8 for Rocky Linux 8)")
+ if args.version != '8':
+ raise Exception("Only Rocky Linux 8 is supported !")
+ else:
+ url_regex =
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:Rocky-"+args.version+"\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
+ target_regex = re.compile("^.*Rocky-\d+\.\d+-\w+-boot\.iso$")
+ [visited,found] = url_find(set([args.mirror]), set(), set())
else:
raise Exception("this distribution is not supported")
logger.info("URL regex: "+url_regex.pattern)
@@ -155,7 +181,7 @@ if __name__ == '__main__':
if (args.distrib.lower() == "debian"):
print(sorted(found,key=lambda
x:key_normalize(re.sub(r".*/debian-(\d+).(\d+).(\d+)-"+args.arch+"-netinst\.iso$",r"\1.\2.\3",x)),reverse=True)[0])
else:
- print(sorted(found, reverse=False)[0])
+ print(sorted(found, reverse=True)[0])
else:
raise Exception("no url found")
except Exception as exc:
diff --git a/image/grid5000/steps/data/helpers/simple_http_server.py
b/image/centos8/grid5000/steps/data/helpers/simple_http_server.py
similarity index 100%
copy from image/grid5000/steps/data/helpers/simple_http_server.py
copy to image/centos8/grid5000/steps/data/helpers/simple_http_server.py
diff --git a/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
b/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
new file mode 100644
index 0000000..84c3175
--- /dev/null
+++ b/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
@@ -0,0 +1,46 @@
+install
+url --url="http://mirror.nsc.liu.se/centos-store/8.5.2111/BaseOS/x86_64/os/"
+
+lang en_US.UTF-8
+keyboard --vckeymap=us --xlayouts='us'
+timezone Europe/Paris --isUtc
--ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org
+
+firewall --enable --ssh
+selinux --disabled
+rootpw kameleon
+
+text
+skipx
+logging --level=info
+
+## Parition
+clearpart --all --initlabel
+bootloader --location=mbr
+zerombr
+# Disk partitioning information
+# autopart
+part /boot --fstype="ext4" --size=500
+part swap --hibernation
+part / --fstype="ext4" --size=3000 --grow
+
+
+authconfig --enableshadow --passalgo=sha512
+auth --useshadow --enablemd5
+firstboot --disabled
+reboot
+
+%packages
+@Core
+dracut-config-generic
+tar
+-dracut-config-rescue
+grub2-efi-x64-modules
+efibootmgr
+%end
+
+%post
+# Update distribution
+yum update -y
+# Make ssh quicker in disconnected situations.
+echo 'UseDNS no' >> /etc/ssh/sshd_config
+%end
diff --git a/image/grid5000/steps/data/qemu-sendkeys.rb
b/image/centos8/grid5000/steps/data/qemu-sendkeys.rb
old mode 100644
new mode 100755
similarity index 100%
copy from image/grid5000/steps/data/qemu-sendkeys.rb
copy to image/centos8/grid5000/steps/data/qemu-sendkeys.rb
diff --git a/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
b/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
new file mode 100644
index 0000000..f46bf51
--- /dev/null
+++ b/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
@@ -0,0 +1 @@
+<tab><wait> text ks=http://%LOCAL_IP%:%HTTP_PORT%/ks.cfg<kp_enter>
diff --git a/image/grid5000/steps/disable_checkpoint.yaml
b/image/centos8/grid5000/steps/disable_checkpoint.yaml
similarity index 100%
copy from image/grid5000/steps/disable_checkpoint.yaml
copy to image/centos8/grid5000/steps/disable_checkpoint.yaml
diff --git a/image/grid5000/steps/enable_checkpoint.yaml
b/image/centos8/grid5000/steps/enable_checkpoint.yaml
similarity index 100%
copy from image/grid5000/steps/enable_checkpoint.yaml
copy to image/centos8/grid5000/steps/enable_checkpoint.yaml
diff --git a/image/grid5000/steps/env/bashrc
b/image/centos8/grid5000/steps/env/bashrc
similarity index 100%
copy from image/grid5000/steps/env/bashrc
copy to image/centos8/grid5000/steps/env/bashrc
diff --git a/image/grid5000/steps/env/functions.sh
b/image/centos8/grid5000/steps/env/functions.sh
similarity index 100%
copy from image/grid5000/steps/env/functions.sh
copy to image/centos8/grid5000/steps/env/functions.sh
diff --git a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
b/image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
similarity index 62%
copy from image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
copy to image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
index 85ee860..52daa38 100644
--- a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
+++ b/image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
@@ -1,2 +1,2 @@
- clean_dhcp_leases:
- - exec_local: virt-customize -a $${image_disk}.$${image_format}
--run-command "rm -rf /var/lib/dhcp/*"
+ - exec_local: virt-customize -a $${image_disk}.$${image_format}
--run-command "rm -rf /var/lib/NetworkManager/*"
\ No newline at end of file
diff --git a/image/grid5000/steps/export/do_qcow2_finish_works.yaml
b/image/centos8/grid5000/steps/export/do_qcow2_finish_works.yaml
similarity index 100%
copy from image/grid5000/steps/export/do_qcow2_finish_works.yaml
copy to image/centos8/grid5000/steps/export/do_qcow2_finish_works.yaml
diff --git a/image/grid5000/steps/export/export_g5k.yaml
b/image/centos8/grid5000/steps/export/export_g5k.yaml
similarity index 84%
copy from image/grid5000/steps/export/export_g5k.yaml
copy to image/centos8/grid5000/steps/export/export_g5k.yaml
index 3362908..6cb89f1 100644
--- a/image/grid5000/steps/export/export_g5k.yaml
+++ b/image/centos8/grid5000/steps/export/export_g5k.yaml
@@ -10,7 +10,8 @@
- g5k_destructive: "false"
- g5k_tar_compression: "gzip"
- g5k_postinst_compression: "gzip"
-- g5k_description: $${distrib} $${release_number} ($${release}) for
$${g5k_image_arch} - $${g5k_variant}
+- g5k_no_chroot_for_grub: "false"
+- g5k_description: $${distrib} $${release_number} ($${release}) for $${arch} -
$${g5k_variant}
# - save_as_tgz:
# - check_cmd_local: guestfish
@@ -28,7 +29,8 @@
if [[ "x$${g5k_variant}" != "xxen" ]]; then
cat << EOF > $${output}.dsc
$${dashes}
- name: $${kameleon_recipe_name}
+ name: $${distrib}$${release_number}-$${g5k_variant}
+ alias: $${distrib}$${release_number}-$${g5k_image_arch}-$${g5k_variant}
arch: $${arch}
version: $${g5k_version}
description: $${g5k_description}
@@ -55,7 +57,8 @@
else
cat << EOF > $${output}.dsc
$${dashes}
- name: $${kameleon_recipe_name}
+ name: $${distrib}$${release_number}-$${g5k_variant}
+ alias: $${distrib}$${release_number}-$${g5k_image_arch}-$${g5k_variant}
arch: $${arch}
version: $${g5k_version}
description: $${g5k_description}
@@ -82,6 +85,12 @@
multipart: false
EOF
fi
+ if [[ "x$${g5k_no_chroot_for_grub}" == "xtrue" ]]; then
+ cat << EOF >> $${output}.dsc
+ custom_variables:
+ BOOTLOADER_NO_GRUB_FROM_DEST: '1'
+ EOF
+ fi
- generate_md5:
- exec_local: md5sum $${kameleon_recipe_name}.* >
$${kameleon_recipe_name}.md5
diff --git a/image/grid5000/steps/export/save_appliance_VM.yaml
b/image/centos8/grid5000/steps/export/save_appliance_VM.yaml
similarity index 100%
copy from image/grid5000/steps/export/save_appliance_VM.yaml
copy to image/centos8/grid5000/steps/export/save_appliance_VM.yaml
diff --git
a/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
b/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
new file mode 100644
index 0000000..3d895dd
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
@@ -0,0 +1,25 @@
+- create_kernel_symlinks_hook:
+ - exec_in: |
+ mkdir -p /etc/kernel/install.d/
+ cat <<'EOF' > /etc/kernel/install.d/01-symlinks.install
+ #!/bin/bash
+ ACTION=${1:-add}
+ KERNEL_VERSION="${2:-$(uname -r)}"
+ KERNEL_IMAGE="/boot/vmlinuz-${KERNEL_VERSION}"
+ INITRAMFS_IMAGE="/boot/initramfs-${KERNEL_VERSION}.img"
+ case $ACTION in
+ add)
+ echo "Create relative symlinks in /:"
+ ln -sfvn ${KERNEL_IMAGE#/} /vmlinuz
+ ln -sfvn ${INITRAMFS_IMAGE#/} /initramfs.img
+ ;;
+ remove)
+ ;;
+ esac
+ EOF
+ chmod 755 /etc/kernel/install.d/01-symlinks.install
+- force_create_kernel_symlinks:
+ - on_setup_clean:
+ - exec_in: |
+ KERNEL_PKG=$(rpm -q kernel --last | head -n1 | cut -d\ -f1)
+ /etc/kernel/install.d/01-symlinks.install add ${KERNEL_PKG#kernel-}
diff --git a/image/centos8/grid5000/steps/setup/centos/clean_system.yaml
b/image/centos8/grid5000/steps/setup/centos/clean_system.yaml
new file mode 100644
index 0000000..79dc482
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/clean_system.yaml
@@ -0,0 +1,26 @@
+- remove_old_kernels:
+ - on_setup_clean:
+ - exec_in: rpm -q kernel --last | tail -n +2 | cut -d\ -f1 | xargs -I {}
rpm -ev {}
+
+- clean_yum_cache:
+ - on_setup_clean:
+ - exec_in: echo "Cleaning old yum repodata."
+ - exec_in: yum clean all -y
+ - exec_in: yum history new
+ - exec_in: truncate -c -s 0 /var/log/yum.log
+
+- clean_network:
+ - on_setup_clean:
+ - exec_in: rm -f /etc/sysconfig/network-scripts/ifcfg-e*
+ - exec_in: rm -rf /var/lib/dhcp/*
+ - exec_in: rm -rf /var/lib/NetworkManager/*
+
+- clean_udev:
+ - on_setup_clean:
+ - exec_in: rm -rf /etc/udev/rules.d/70-persistent-net.rules
+ - exec_in: rm -rf /dev/.udev/
+
+- clean_rescue_initramfs:
+ - on_setup_clean:
+ - exec_in: rm -f /boot/initramfs*rescue*
+ - exec_in: rm -f /boot/vmlinuz*rescue*
diff --git a/image/centos8/grid5000/steps/setup/centos/configure_system.yaml
b/image/centos8/grid5000/steps/setup/centos/configure_system.yaml
new file mode 100644
index 0000000..15547cb
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/configure_system.yaml
@@ -0,0 +1,61 @@
+# System configuration
+- grub_cmdline_linux: ""
+
+# This will set the locals and the timezone
+- set_locales:
+ # uncomment the locales
+ - exec_in: |
+ echo $${locales} | tr ' ' '\n' | xargs -I {} localedef -v -c -i {} -i {}
-f UTF-8 $${lang} 2>&1 || :
+
+- set_timezone:
+ - exec_in: ln -sf /usr/share/zoneinfo/$${timezone} /etc/localtime
+
+- set_wheel_sudo:
+ - exec_in: echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers
+
+- set_root_password:
+ - exec_in: echo -n 'root:$${root_password}' | chpasswd
+
+- remove_random_seed:
+ - exec_in: echo "Removing random-seed so it's not the same in every image."
+ - exec_in: rm -f /var/lib/random-seed
+
+- cracklib_path: /usr/share/cracklib/pw_dict.pwd
+
+- compress_cracklib:
+ - exec_in: test ! -f $${cracklib_path} || gzip -9 $${cracklib_path}
+
+- selinux: disabled
+- selinuxtype: targeted
+
+- configure_selinux:
+ - write_in:
+ - /etc/selinux/config
+ - |
+ # This file controls the state of SELinux on the system.
+ # SELINUX= can take one of these three values:
+ # enforcing - SELinux security policy is enforced.
+ # permissive - SELinux prints warnings instead of enforcing.
+ # disabled - SELinux is fully disabled.
+ SELINUX=$${selinux}
+ # SELINUXTYPE= type of policy in use. Possible values are:
+ # targeted - Only targeted network daemons are protected.
+ # strict - Full SELinux protection.
+ SELINUXTYPE=$${selinuxtype}
+
+- make_new_kernels_the_default:
+ - write_in:
+ - /etc/sysconfig/kernel
+ - |
+ # UPDATEDEFAULT specifies if new-kernel-pkg should make
+ # new kernels the default
+ UPDATEDEFAULT=yes
+ # DEFAULTKERNEL specifies the default kernel package type
+ DEFAULTKERNEL=kernel
+
+- fix_NetworkManager_timeout:
+ - exec_in: sed -i "s/--timeout=30/--timeout=50/"
/usr/lib/systemd/system/NetworkManager-wait-online.service
+
+- configure_grub:
+ - exec_in: sed -i 's|^\(GRUB_CMDLINE_LINUX=\).*|\1"$${grub_cmdline_linux}"|'
/etc/default/grub
+ - exec_in: grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"
diff --git a/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
b/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
new file mode 100644
index 0000000..ac35a77
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
@@ -0,0 +1,7 @@
+# This disables kdump
+# To enabled, it needs:
+# - crashkernel=auto or a memory size in the kernel command line (grub)
+# - /boot/initramfs-XXX.x86_64kdump.img to be generated (does not work in
kameloen qemu VM.
+#
https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/kernel_crash_dump_guide/sect-memory-requirements
+- disable_kdump_service:
+ - exec_in: systemctl disable kdump
diff --git a/image/centos8/grid5000/steps/setup/centos/install_packages.yaml
b/image/centos8/grid5000/steps/setup/centos/install_packages.yaml
new file mode 100644
index 0000000..3853b34
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/install_packages.yaml
@@ -0,0 +1,13 @@
+
+# > $ ping X.X.X.X
+# > ping: icmp open socket: Operation not permitted
+# http://comments.gmane.org/gmane.linux.redhat.fedora.general/409425
+
+# Fixed iputils
+- reinstall_iputils:
+ - exec_in: yum reinstall -y iputils 2>&1
+
+# Software Install
+- install_packages:
+ - exec_in: yum install -y epel-release 2>&1
+ - exec_in: yum install -y $${packages} 2>&1
diff --git a/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
b/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
new file mode 100644
index 0000000..b3e11cb
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
@@ -0,0 +1,12 @@
+
+- set_root_password:
+ - exec_in: echo -n 'root:$${root_password}' | chpasswd
+
+- update_system:
+ - test:
+ # fix URL for centos 8 (not needed for centos-stream 8)
+ - exec_local: test "$${distrib}" == "centos" -a "$${release_number}" == "8"
+ - exec_in: |
+ sed -i -e 's%^\(mirrorlist=http://mirrorlist.centos.org\)%#\1%'
/etc/yum.repos.d/*
+ sed -i -e
's%^#baseurl=http://mirror.centos.org/%baseurl=http://vault.centos.org/%'
/etc/yum.repos.d/*
+ - exec_in: yum upgrade -y
diff --git a/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
b/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
new file mode 100644
index 0000000..f5d3eea
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
@@ -0,0 +1,19 @@
+- g5k_version: "unknown"
+
+- create_dhclient_hook_for_g5k_hostname:
+ - write_in:
+ - /etc/motd
+ - |
+ %%RECIPE_NAME%%-%%VERSION%%
+ (Image based on %%DISTRIB%% %%RELEASE%% for %%ARCH%%)
+ Maintained by support-staff <support-staff@lists.grid5000.fr>
+
+ - exec_in: |
+ sed -i \
+ -e 's/%%RECIPE_NAME%%/$${kameleon_recipe_name}/g' \
+ -e 's/%%DISTRIB%%/$${distrib}/g' \
+ -e 's/%%RELEASE%%/$${release}/g' \
+ -e 's/%%ARCH%%/$${arch}/g' \
+ -e 's/%%VERSION%%/$${g5k_version}/g' \
+ /etc/motd
+
diff --git a/image/centos8/grid5000/steps/setup/set_g5k_release.yaml
b/image/centos8/grid5000/steps/setup/set_g5k_release.yaml
new file mode 100644
index 0000000..6762fd5
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/set_g5k_release.yaml
@@ -0,0 +1,14 @@
+- g5k_release_file: /etc/grid5000/release
+- g5k_version: 1
+
+- set_release:
+ - exec_in: mkdir -p $(dirname $${g5k_release_file})
+ - write_in:
+ - $${g5k_release_file}
+ - |
+ $${kameleon_recipe_name}-$${g5k_version}
+ # this extracts last git commit hash from local repo
+ - pipe:
+ - exec_local: |
+ (cd ../.. && git rev-parse HEAD 2>/dev/null) || echo "Error: could not
retrieve git sha1"
+ - exec_in: cat - >> $${g5k_release_file}
diff --git a/image/centos8/taler-centos8.yaml b/image/centos8/taler-centos8.yaml
new file mode 100644
index 0000000..6099991
--- /dev/null
+++ b/image/centos8/taler-centos8.yaml
@@ -0,0 +1,92 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Recipe extending a Grid'5000 environment recipe supported by
+# the technical team. The build will be similar to the one of the supported
+# environments, involving puppet notably.
+#
+#==============================================================================
+# This recipe extends another. To look at the step involed, run:
+# kameleon dryrun taler-centos8.yaml
+# To see the variables that you can override, use the following command:
+# kameleon info taler-centos8.yaml
+---
+extend: grid5000/centos8-x64-min.yaml
+
+global:
+ ### Uncomment and adapt the global variables below as needed
+
+ ## Export format to generate
+ # appliance_formats: qcow2 tar.zst
+
+ ## Environment description customization
+ ## Author
+ g5k_author: "bossm8@bfh.ch"
+ ## Version
+ g5k_version: 1
+ ## Environment image path and compression
+ g5k_tar_path:
"http://public.lyon.grid5000.fr/~$${g5k_user}/taler-centos8.tar.zst"
+ # g5k_tar_compression: "zstd"
+ ## Environment postinstall path, compression, and script command
+ # g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+ # g5k_postinst_compression: "gzip"
+ # g5k_postinst_script: g5k-postinstall --net redhat
+ ## Environment kernel path and params
+ # g5k_kernel_path: "/vmlinuz"
+ # g5k_initrd_path: "/initrd.img"
+ # g5k_kernel_params: ""
+ ## Environment visibility
+ # g5k_visibility: "shared"
+ taler_packages: "postgresql13 postgresql-contrib postgresql13-contrib
pgstats_13 curl wget jq bc sudo git bind-utils bind net-tools netcat parallel
dnsmasq bash-completion vim"
+ taler_node_exporter_version: "1.3.1"
+ taler_path: /root/taler
+ grid5k_commit_sha: master
+ ## Other parameters can be changed, see kameleon info taler-centos8.yaml
+
+bootstrap:
+ ### The bootstrap section takes in charge the initial installation of the
+ ## system (distribution installation). No modification should be needed here.
+ - "@base"
+
+setup:
+ ### The setup section is where customizations of the system take place.
+ ## We can request steps from the extended recipe to be executed
+ - "@base"
+ ## We add steps required by our customization after or before @base. Use
+ ## kameleon dryrun taler-centos8.yaml to see the resulting steps in the
build.
+
+ - install:
+ - packages:
+ - exec_in: |
+ yum install -y yum install
https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
+ dnf install -y
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
+ dnf -qy module disable postgresql
+ yum update -y
+ yum upgrade -y
+
+ yum install -y $${taler_packages}
+
+ mkdir -p $${taler_path}
+
+ - grid5k:
+ - exec_in: |
+ cd $${taler_path}
+
+ git clone git://git.taler.net/grid5k.git
+ cd grid5k
+ git checkout $${grid5k_commit_sha} || true
+
+ - prometheus_node_exporter:
+ - exec_in: |
+ useradd -M -r -s /bin/false prometheus
+ wget
https://github.com/prometheus/node_exporter/releases/download/v$${taler_node_exporter_version}/node_exporter-$${taler_node_exporter_version}.linux-amd64.tar.gz
-P /tmp
+ cd /tmp
+ tar xzf
node_exporter-$${taler_node_exporter_version}.linux-amd64.tar.gz
+ mv
node_exporter-$${taler_node_exporter_version}.linux-amd64/node_exporter
/usr/bin/prometheus-node-exporter
+ chown prometheus:prometheus /usr/bin/prometheus-node-exporter
+
+export:
+ ### The export section takes in charge the export of your customized
Grid'5000
+ ## environment. No modification should be needed here.
+ - "@base"
diff --git a/image/grid5000/debian11-x64-common.yaml
b/image/debian11/grid5000/debian11-x64-common.yaml
similarity index 100%
rename from image/grid5000/debian11-x64-common.yaml
rename to image/debian11/grid5000/debian11-x64-common.yaml
diff --git a/image/grid5000/debian11-x64-nfs.yaml
b/image/debian11/grid5000/debian11-x64-nfs.yaml
similarity index 100%
rename from image/grid5000/debian11-x64-nfs.yaml
rename to image/debian11/grid5000/debian11-x64-nfs.yaml
diff --git a/image/grid5000/from_scratch/base.yaml
b/image/debian11/grid5000/from_scratch/base.yaml
similarity index 100%
rename from image/grid5000/from_scratch/base.yaml
rename to image/debian11/grid5000/from_scratch/base.yaml
diff --git a/image/grid5000/from_scratch/debian-base.yaml
b/image/debian11/grid5000/from_scratch/debian-base.yaml
similarity index 100%
rename from image/grid5000/from_scratch/debian-base.yaml
rename to image/debian11/grid5000/from_scratch/debian-base.yaml
diff --git a/image/grid5000/from_scratch/debian-bullseye.yaml
b/image/debian11/grid5000/from_scratch/debian-bullseye.yaml
similarity index 100%
rename from image/grid5000/from_scratch/debian-bullseye.yaml
rename to image/debian11/grid5000/from_scratch/debian-bullseye.yaml
diff --git a/image/grid5000/steps/aliases/defaults.yaml
b/image/debian11/grid5000/steps/aliases/defaults.yaml
similarity index 100%
rename from image/grid5000/steps/aliases/defaults.yaml
rename to image/debian11/grid5000/steps/aliases/defaults.yaml
diff --git a/image/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
b/image/debian11/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
rename to
image/debian11/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
diff --git a/image/grid5000/steps/bootstrap/download_installer.yaml
b/image/debian11/grid5000/steps/bootstrap/download_installer.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/download_installer.yaml
rename to image/debian11/grid5000/steps/bootstrap/download_installer.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_appliance.yaml
b/image/debian11/grid5000/steps/bootstrap/prepare_appliance.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_appliance.yaml
rename to image/debian11/grid5000/steps/bootstrap/prepare_appliance.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_disk.yaml
b/image/debian11/grid5000/steps/bootstrap/prepare_disk.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_disk.yaml
rename to image/debian11/grid5000/steps/bootstrap/prepare_disk.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
b/image/debian11/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
rename to
image/debian11/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
diff --git a/image/grid5000/steps/bootstrap/start_http_server.yaml
b/image/debian11/grid5000/steps/bootstrap/start_http_server.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/start_http_server.yaml
rename to image/debian11/grid5000/steps/bootstrap/start_http_server.yaml
diff --git a/image/grid5000/steps/bootstrap/start_qemu.yaml
b/image/debian11/grid5000/steps/bootstrap/start_qemu.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/start_qemu.yaml
rename to image/debian11/grid5000/steps/bootstrap/start_qemu.yaml
diff --git a/image/grid5000/steps/checkpoints/simple.yaml
b/image/debian11/grid5000/steps/checkpoints/simple.yaml
similarity index 100%
rename from image/grid5000/steps/checkpoints/simple.yaml
rename to image/debian11/grid5000/steps/checkpoints/simple.yaml
diff --git a/image/grid5000/steps/data/helpers/export_appliance.py
b/image/debian11/grid5000/steps/data/helpers/export_appliance.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/export_appliance.py
rename to image/debian11/grid5000/steps/data/helpers/export_appliance.py
diff --git a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py
b/image/debian11/grid5000/steps/data/helpers/netinstall_iso_finder.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/netinstall_iso_finder.py
rename to image/debian11/grid5000/steps/data/helpers/netinstall_iso_finder.py
diff --git a/image/grid5000/steps/data/helpers/simple_http_server.py
b/image/debian11/grid5000/steps/data/helpers/simple_http_server.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/simple_http_server.py
rename to image/debian11/grid5000/steps/data/helpers/simple_http_server.py
diff --git a/image/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
b/image/debian11/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
similarity index 100%
rename from image/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
rename to image/debian11/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
diff --git a/image/grid5000/steps/data/qemu-sendkeys.rb
b/image/debian11/grid5000/steps/data/qemu-sendkeys.rb
similarity index 100%
rename from image/grid5000/steps/data/qemu-sendkeys.rb
rename to image/debian11/grid5000/steps/data/qemu-sendkeys.rb
diff --git a/image/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
b/image/debian11/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
similarity index 100%
rename from image/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
rename to image/debian11/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
diff --git a/image/grid5000/steps/data/setup/hiera/hiera.yaml
b/image/debian11/grid5000/steps/data/setup/hiera/hiera.yaml
similarity index 100%
rename from image/grid5000/steps/data/setup/hiera/hiera.yaml
rename to image/debian11/grid5000/steps/data/setup/hiera/hiera.yaml
diff --git a/image/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
b/image/debian11/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
similarity index 100%
rename from image/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
rename to image/debian11/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/base.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/base.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/base.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/base.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/big.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/big.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/big.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/big.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/min.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/min.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/min.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/min.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/nfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/nfs.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/nfs.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/nfs.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/std.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/std.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/std.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/std.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/xen.pp
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/xen.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/xen.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/xen.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
diff --git a/image/grid5000/steps/data/setup/puppet/modules/env/files/version
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/version
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/files/version
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/version
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
diff --git
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
similarity index 100%
rename from
image/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
rename to
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
diff --git a/image/grid5000/steps/disable_checkpoint.yaml
b/image/debian11/grid5000/steps/disable_checkpoint.yaml
similarity index 100%
rename from image/grid5000/steps/disable_checkpoint.yaml
rename to image/debian11/grid5000/steps/disable_checkpoint.yaml
diff --git a/image/grid5000/steps/enable_checkpoint.yaml
b/image/debian11/grid5000/steps/enable_checkpoint.yaml
similarity index 100%
rename from image/grid5000/steps/enable_checkpoint.yaml
rename to image/debian11/grid5000/steps/enable_checkpoint.yaml
diff --git a/image/grid5000/steps/env/bashrc
b/image/debian11/grid5000/steps/env/bashrc
similarity index 100%
rename from image/grid5000/steps/env/bashrc
rename to image/debian11/grid5000/steps/env/bashrc
diff --git a/image/grid5000/steps/env/functions.sh
b/image/debian11/grid5000/steps/env/functions.sh
similarity index 100%
rename from image/grid5000/steps/env/functions.sh
rename to image/debian11/grid5000/steps/env/functions.sh
diff --git a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
b/image/debian11/grid5000/steps/export/debian/clean_dhcp_leases.yaml
similarity index 100%
rename from image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
rename to image/debian11/grid5000/steps/export/debian/clean_dhcp_leases.yaml
diff --git a/image/grid5000/steps/export/do_qcow2_finish_works.yaml
b/image/debian11/grid5000/steps/export/do_qcow2_finish_works.yaml
similarity index 100%
rename from image/grid5000/steps/export/do_qcow2_finish_works.yaml
rename to image/debian11/grid5000/steps/export/do_qcow2_finish_works.yaml
diff --git a/image/grid5000/steps/export/export_g5k.yaml
b/image/debian11/grid5000/steps/export/export_g5k.yaml
similarity index 100%
rename from image/grid5000/steps/export/export_g5k.yaml
rename to image/debian11/grid5000/steps/export/export_g5k.yaml
diff --git a/image/grid5000/steps/export/save_appliance_VM.yaml
b/image/debian11/grid5000/steps/export/save_appliance_VM.yaml
similarity index 100%
rename from image/grid5000/steps/export/save_appliance_VM.yaml
rename to image/debian11/grid5000/steps/export/save_appliance_VM.yaml
diff --git a/image/grid5000/steps/setup/debian/clean_system.yaml
b/image/debian11/grid5000/steps/setup/debian/clean_system.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/clean_system.yaml
rename to image/debian11/grid5000/steps/setup/debian/clean_system.yaml
diff --git a/image/grid5000/steps/setup/debian/configure_apt_sources.yaml
b/image/debian11/grid5000/steps/setup/debian/configure_apt_sources.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/configure_apt_sources.yaml
rename to image/debian11/grid5000/steps/setup/debian/configure_apt_sources.yaml
diff --git a/image/grid5000/steps/setup/debian/configure_system.yaml
b/image/debian11/grid5000/steps/setup/debian/configure_system.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/configure_system.yaml
rename to image/debian11/grid5000/steps/setup/debian/configure_system.yaml
diff --git a/image/grid5000/steps/setup/debian/install_packages.yaml
b/image/debian11/grid5000/steps/setup/debian/install_packages.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/install_packages.yaml
rename to image/debian11/grid5000/steps/setup/debian/install_packages.yaml
diff --git a/image/grid5000/steps/setup/debian/minimal_install.yaml
b/image/debian11/grid5000/steps/setup/debian/minimal_install.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/minimal_install.yaml
rename to image/debian11/grid5000/steps/setup/debian/minimal_install.yaml
diff --git a/image/grid5000/steps/setup/debian/run_orchestrator.yaml
b/image/debian11/grid5000/steps/setup/debian/run_orchestrator.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/run_orchestrator.yaml
rename to image/debian11/grid5000/steps/setup/debian/run_orchestrator.yaml
diff --git a/image/grid5000/steps/setup/debian/setup_orchestrator.yaml
b/image/debian11/grid5000/steps/setup/debian/setup_orchestrator.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/setup_orchestrator.yaml
rename to image/debian11/grid5000/steps/setup/debian/setup_orchestrator.yaml
diff --git a/image/taler-debian11.yaml b/image/debian11/taler-debian11.yaml
similarity index 80%
rename from image/taler-debian11.yaml
rename to image/debian11/taler-debian11.yaml
index 9f695d3..738fba4 100644
--- a/image/taler-debian11.yaml
+++ b/image/debian11/taler-debian11.yaml
@@ -36,22 +36,25 @@ global:
## Environment kernel path and params
# g5k_kernel_path: "/vmlinuz"
# g5k_initrd_path: "/initrd.img"
- # g5k_kernel_params: ""
+ g5k_kernel_params: "mitigations=off"
## Environment visibility
# g5k_visibility: "shared"
- taler_build_packages: "recutils autoconf uncrustify autopoint libtool
python3-pip libgcrypt20-dev libjansson-dev libcurl4-gnutls-dev libsodium-dev
libidn2-dev libunistring-dev libmicrohttpd-dev libsqlite3-dev libqrencode-dev
valgrind libpq-dev texinfo gdb make npm zip python3-distutils pkg-config"
- taler_packages: "nginx postgresql-13 postgresql-contrib curl jq bc sudo git
zile dnsutils prometheus-postgres-exporter prometheus-nginx-exporter net-tools
netcat parallel nodejs tshark dnsmasq bind9 systemd-coredump bash-completion
pgbouncer pgstat"
+ taler_build_packages: "recutils autoconf uncrustify autopoint libtool
python3-pip libgcrypt20-dev libjansson-dev libcurl4-gnutls-dev libsodium-dev
libidn2-dev libunistring-dev libgnutls28-dev libsqlite3-dev libqrencode-dev
valgrind libpq-dev texinfo gdb make npm zip python3-distutils pkg-config"
+ taler_packages: "nginx postgresql-13 postgresql-contrib curl jq bc sudo git
zile dnsutils prometheus-postgres-exporter prometheus-nginx-exporter net-tools
netcat parallel nodejs tshark dnsmasq bind9 systemd-coredump bash-completion
pgbouncer pgstat linux-perf"
taler_packages_no_recommends: "prometheus prometheus-node-exporter
prometheus-pgbouncer-exporter"
taler_disable_services: "nginx postgresql prometheus
prometheus-postgres-exporter prometheus-nginx-exporter prometheus-node-exporter
named gettext-base dnsmasq prometheus-pgbouncer-exporter pgbouncer"
- taler_loki_version: "v2.4.0"
+ taler_loki_version: "v2.4.2"
taler_path: /root/taler
gnunet_commit_sha: master
exchange_commit_sha: master
merchant_commit_sha: master
wallet_commit_sha: master
grid5k_commit_sha: master
+ libmicrohttpd_cflags: "-O2"
+ gnunet_cflags: "-O2"
+ exchange_cflags: "-O2"
+ merchant_cflags: "-O2"
## Other parameters can be changed, see kameleon info debian10-taler.yaml
-
bootstrap:
### The bootstrap section takes in charge the initial installation of the
## system (distribution installation). No modification should be needed here.
@@ -63,14 +66,10 @@ setup:
- "@base"
## We add steps required by our customization after or before @base. Use
## kameleon dryrun debian10_custom.yaml to see the resulting steps in the
build.
- ## The following is given as example only, replace with your steps.
-
- install:
- packages:
- exec_in: |
- echo "deb https://deb.taler.net/apt/debian bullseye main" >
/etc/apt/sources.list.d/taler.list
- wget -O - https://taler.net/taler-systems.gpg.key | apt-key add -
apt update
apt upgrade -y
apt install -y $${taler_packages} $${taler_build_packages}
@@ -78,17 +77,32 @@ setup:
mkdir -p $${taler_path}
- - gnunet:
+ - microhttpd:
- exec_in: |
cd $${taler_path}
+ git clone https://git.gnunet.org/libmicrohttpd.git
+ cd libmicrohttpd
+
+ # We need sudo, otherwise we'll get a strange error
+ sudo ./bootstrap
+ CFLAGS="$${libmicrohttpd_cflags}" ./configure
--enable-logging=verbose --prefix=/usr # --enable-sanitizer
+ make || true
+ make install
+ ldconfig
+
+ - gnunet:
+ - exec_in: |
+ cd $${taler_path}
+
git clone https://git.gnunet.org/gnunet.git
cd gnunet
git checkout $${gnunet_commit_sha} || true
git pull || true
+ # We need sudo, otherwise we'll get a strange error
sudo ./bootstrap
- CFLAGS="-O0 -g" ./configure --enable-logging=verbose --prefix=/usr #
--enable-sanitizer
+ CFLAGS="$${gnunet_cflags}" ./configure --enable-logging=verbose
--prefix=/usr --enable-poisoning=false # --enable-sanitizer
make || true
make install
ldconfig
@@ -104,8 +118,9 @@ setup:
git checkout $${exchange_commit_sha} || true
git pull || true
+ # We need sudo, otherwise we'll get a strange error
sudo ./bootstrap
- CFLAGS="-O0 -g" ./configure --enable-logging=verbose --prefix=/usr #
--enable-sanitizer
+ CFLAGS="$${exchange_cflags}" ./configure --enable-logging=verbose
--prefix=/usr # --enable-sanitizer
make || true
make install
ldconfig
@@ -119,9 +134,9 @@ setup:
git checkout $${merchant_commit_sha} || true
git pull || true
+ # We need sudo, otherwise we'll get a strange error
sudo ./bootstrap
-
- ./configure --enable-logging=verbose --prefix=/usr #
--enable-sanitizer
+ CFLAGS="$${merchant_cflags}" ./configure --enable-logging=verbose
--prefix=/usr # --enable-sanitizer
make || true
make install
ldconfig
@@ -135,11 +150,11 @@ setup:
git checkout $${wallet_commit_sha} || true
git pull || true
- sudo ./bootstrap
-
npm install -g pnpm
+
+ ./bootstrap
./configure
- make || true
+ sed -i "s|^\s*pnpm install --frozen-lockfile --filter
@gnu-taler/taler-wallet-cli...|& --unsafe-perm|" Makefile
make install
- grid5k:
diff --git a/notes.txt b/notes.txt
deleted file mode 100644
index e69de29..0000000
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-grid5k] branch master updated (37fcfca -> a623f12),
gnunet <=
- [taler-grid5k] 05/189: fix shard naming, gnunet, 2022/04/28
- [taler-grid5k] 07/189: fix sharding permissions, gnunet, 2022/04/28
- [taler-grid5k] 06/189: update tables, gnunet, 2022/04/28
- [taler-grid5k] 03/189: fix table naming, gnunet, 2022/04/28
- [taler-grid5k] 37/189: update test sql, gnunet, 2022/04/28
- [taler-grid5k] 18/189: fix typo, gnunet, 2022/04/28
- [taler-grid5k] 44/189: no create table in slow queries, gnunet, 2022/04/28
- [taler-grid5k] 28/189: fixes, gnunet, 2022/04/28
- [taler-grid5k] 53/189: fix, gnunet, 2022/04/28
- [taler-grid5k] 23/189: update persistance script, gnunet, 2022/04/28