Chez Aukfood, nous utilisons deux outils pour superviser nos infrastructures : Centreon (pour le côté alerting), et Grafana (pour avoir tout un tas de données à un instant T). Ce sont deux outils très intéressants, et avec lesquels on peut aller très loin dans le processus de supervision.
C'est pour cela que nous avons réussi à superviser une instance Nextcloud de façon plus poussée, avec Grafana, avec un système de métriques.
1. Le concept
Nous avons mis en place un exporteur de métriques, dont le projet (bien sûr open-source) est disponible sur GitHub (https://github.com/xperimental/nextcloud-exporter). On va le connecter à l'API de Nextcloud, et l'exporteur va remonter des informations de façon périodique, grâce à Prometheus, qui seront ensuite exploitées par Grafana.
Les valeurs remontées par l'exporteur sont les suivantes, et on ne peut qu'espérer qu'elles seront plus nombreuses au fur et à mesure des mises à jour :
name | description |
---|---|
nextcloud_active_users_daily_total | Number of active users in the last 24 hours |
nextcloud_active_users_hourly_total | Number of active users in the last hour |
nextcloud_active_users_total | Number of active users for the last five minutes |
nextcloud_apps_installed_total | Number of currently installed apps |
nextcloud_apps_updates_available_total | Number of apps that have available updates |
nextcloud_database_info | Contains meta information about the database as labels. Value is always 1. |
nextcloud_database_size_bytes | Size of database in bytes as reported from engine |
nextcloud_exporter_info | Contains meta information of the exporter. Value is always 1. |
nextcloud_files_total | Number of files served by the instance |
nextcloud_free_space_bytes | Free disk space in data directory in bytes |
nextcloud_php_info | Contains meta information about PHP as labels. Value is always 1. |
nextcloud_php_memory_limit_bytes | Configured PHP memory limit in bytes |
nextcloud_php_upload_max_size_bytes | Configured maximum upload size in bytes |
nextcloud_scrape_errors_total | Counts the number of scrape errors by this collector |
nextcloud_shares_federated_total | Number of federated shares by direction sent / received |
nextcloud_shares_total | Number of shares by type: authlink : shared password protected links group : shared groups link : all shared links user : shared users mail : shared by mail room : shared with room |
nextcloud_system_info | Contains meta information about Nextcloud as labels. Value is always 1. |
nextcloud_up | Indicates if the metrics could be scraped by the exporter: 1 : successful 0 : unsuccessful (server down, server/endpoint not reachable, invalid credentials, ...) |
nextcloud_users_total | Number of users of the instance |
2. Installation de Nextcloud Exporter
Supposons que vous avez déjà une architecture Nextcloud, et Grafana (avec Prometheus installé) opérationnelle. Nous allons installer l'exporteur en conteneur Docker.
Vous pouvez l'installer sur n'importe quelle machine, le seul prérequis est qu'il faut qu'elle puisse effectuer des requêtes sur le serveur Nextcloud, et qu'elle puisse être atteinte par Prometheus.
Créons un répertoire nextcloud-exporter
:
mkdir nextcloud-exporter
Puis utilisons le docker-compose.yml
suivant :
---
version: "3.3"
services:
nextcloud-exporter:
container_name: nextcloud-exporter
image: "xperimental/nextcloud-exporter"
security_opt:
- no-new-privileges:true
command: nextcloud-exporter -c /conf/config.yml
ports:
- 127.0.0.1:9205:9205
cap_add:
- MKNOD
volumes:
- /var/nextcloud-exporter/nextcloud_exporter_conf:/conf:ro
restart: always
volumes:
nextcloud_exporter_conf:
driver: local
Notons également que le conteneur sera exposé en local sur le port 9205. Nous configurerons un Vhost Apache pour qu'il soit accessible (à travers une restriction IP et un .htpasswd
) depuis le serveur de supervision.
À l'intérieur de ce répertoire, créer nextcloud_exporter_conf
, qui abritera le fichier de configuration config.yml
:
# required
server: "https://URL_NEXTCLOUD"
# required for token authentication
authToken: "A_Generer"
# optional
listenAddress: ":9205"
timeout: "5s"
tlsSkipVerify: false
Il faudra également générer un token pour la valeur de authToken
. Ceci se fait depuis Nextcloud.
Lorsque tout est fait, lançons le conteneur :
docker-compose up -d
Le conteneur est opérationnel, libre à vous de faire la configuration du proxy.
3. Configuration de Prometheus
Pour la suite de l'article, nous allons paramétrer la partie Prometheus. Le fichier de configuration est le suivant : /etc/prometheus/prometheus.yml
.
Ajoutons le job suivant (attention à l'intendation qui est indispensable 😉) :
- job_name: 'nextcloud-test'
metrics_path: '/'
scrape_interval: 5s
scheme: https
basic_auth:
username: "usernameDefini"
password: "passwordHtAccess"
static_configs:
- targets:
- 'URL_Nextcloud_Exporter'
Puis redémarrons Prometheus :
systemctl restart prometheus
4. Configuration du dashboard Grafana
Maintenant, libre à vous d'ajouter les panels de votre choix, suivant les valeurs remontées par l'exporter, et définis en introduction.
Ci-joint un exemple de dashboard :