Diagnostics système et analyse de l’utilisation
Libre WebUI offre aux administrateurs deux vues en direct de l’instance : une page Système consacrée aux diagnostics de l’hôte et de l’environnement d’exécution, et une page Utilisation dédiée à l’analyse de l’utilisation des modèles et des fournisseurs. Toutes deux sont réservées aux administrateurs dans le backend et l’interface. La consultation de ces pages reste à l’intérieur du déploiement ; la télémétrie externe facultative suit un parcours d’observabilité distinct et configuré par l’opérateur.
Accédez-y depuis les entrées d’administration de la barre latérale, les raccourcis
d’administration du menu d’onglets, ou directement via /system et /usage. Les
utilisateurs qui ne sont pas administrateurs ne peuvent ouvrir aucune de ces pages,
et les onglets d’administration se ferment si un compte connecté perd le rôle
admin.
Diagnostics système
La page Système (/system) présente :
- Hôte : nom d’hôte, plateforme, version du noyau, architecture, durée de fonctionnement, nombre de CPU logiques, modèle du CPU, charge moyenne et détection de l’exécution probable dans un conteneur. Aucun pourcentage d’utilisation du CPU n’est affiché ; seule la charge moyenne représente sa charge.
- Environnement d’exécution : version de l’application, version de Node.js, identifiant du processus, durée de fonctionnement du processus et répertoire de travail.
- Mémoire : mémoire totale, libre et utilisée de l’hôte, ainsi que les valeurs RSS et de tas du processus.
- Systèmes de fichiers : capacité et utilisation du système de fichiers de
l’environnement d’exécution (
/) et du répertoire de données (DATA_DIR). - Réseau : noms et adresses des interfaces, avec compteurs d’octets reçus et transmis sous Linux.
- Docker : version du moteur, système d’exploitation de l’hôte, noyau, CPU et mémoire tels que rapportés par le moteur, nombre de conteneurs et liste réduite des conteneurs lorsque le socket Docker est disponible.
La page s’actualise toutes les 30 secondes lorsque son onglet a le focus et comporte
un bouton d’actualisation manuelle. Le point de terminaison du backend est
GET /api/system. Il est protégé par l’authentification, un rôle d’administrateur
actif et une limite par utilisateur de 120 requêtes par tranche de 15 minutes. Les
réponses ne sont jamais mises en cache (Cache-Control: no-store) et chaque requête
recueille de nouvelles valeurs.
Dépendance au socket Docker
La section Docker résout son point de terminaison comme l’environnement d’exécution
Work et le terminal interactif : WORK_DOCKER_SOCKET lorsqu’il est défini (toujours
un chemin de socket Unix local), sinon DOCKER_HOST — une URL unix:// ou un point
de terminaison tcp:// en HTTP simple, par exemple un proxy filtré de l’API Docker —
ou, à défaut, /var/run/docker.sock. Les points de terminaison ssh:// et
npipe://, ainsi que les points tcp:// dont la vérification TLS est activée, ne
sont délibérément pas interrogés. Les requêtes sont strictement des appels GET en
lecture seule au moteur (version, informations, liste des conteneurs), avec un délai
d’expiration de 4 secondes et une taille de réponse limitée ; la liste des
conteneurs est limitée à 100 entrées.
Sans socket utilisable, le reste de la page continue de fonctionner : le volet Docker indique pourquoi il est indisponible — socket non monté, monté mais illisible, démon inaccessible ou point de terminaison distant — au lieu de faire échouer toute la requête.
Informations révélées par la page et destinataires
La liste des conteneurs est volontairement réduite : identifiant court, nom, image, état et date de création. Les variables d’environnement, étiquettes, montages, commandes des conteneurs et charges utiles d’inspection ne sont jamais inclus, et aucun identifiant secret n’apparaît dans la réponse.
La page affiche néanmoins de véritables détails d’infrastructure : nom d’hôte,
répertoire de travail, adresses IP internes, ainsi que noms et images de tous les
conteneurs de l’hôte Docker, pas seulement ceux de Libre WebUI. Cela correspond au
modèle de confiance : dans un déploiement Docker, chaque administrateur Libre WebUI
est déjà, dans les faits, administrateur de l’hôte (voir Docker).
Attribuez le rôle admin en conséquence.
Analyse de l’utilisation
La page Utilisation représente le travail des modèles et des fournisseurs attribué aux utilisateurs. La mesure intervient à chaque frontière d’exécution prise en charge et couvre actuellement :
- les appels de chat Ollama locaux, y compris Chat natif et Work via Ollama ;
- les appels de chat des CLI d’agents installés et les appels du moteur Strands ;
- les chats via plugins, en continu ou non ;
- les embeddings, la génération d’images, la transcription, la synthèse vocale, le son et la vidéo via plugins ; et
- les appels Work via plugins.
Les opérations en arrière-plan sans utilisateur propriétaire ne sont délibérément pas attribuées à un compte synthétique et ne sont donc pas mesurées. Un appel reste enregistré lorsqu’il échoue ou est annulé.
Chaque événement enregistre :
- identifiant du fournisseur/plugin et instantané de son nom affiché (
ollamaetagent-cli:*utilisent le même registre que les fournisseurs de plugins) - fonctionnalité (
chat,embedding,image,stt,tts,audio,video) - modèle
- statut :
success,erroroucancelled(un flux interrompu compte comme annulé) - compteurs de jetons, seulement lorsque le fournisseur renvoie des métadonnées d’utilisation
- compteurs d’unités adaptés à la fonctionnalité (caractères pour TTS, images, entrées d’embedding, tâches vidéo, octets audio)
- durée de bout en bout et horodatage
- identifiant de l’utilisateur à l’origine de la requête
Rien d’autre n’est stocké. Les invites, réponses, points de terminaison des
fournisseurs, identifiants et corps d’erreurs des fournisseurs ne sont jamais écrits
dans la table d’utilisation : un appel en échec est uniquement enregistré sous
status = 'error'. Les événements résident dans la base de données d’application
sélectionnée (SQLite en mode individuel, PostgreSQL en mode équipe) et sont
conservés pendant 400 jours ; les lignes plus anciennes sont élaguées de façon
opportuniste lors d’une écriture, au plus une fois par jour. La mesure est conçue
pour fonctionner au mieux et ne peut jamais faire échouer une requête adressée à un
modèle ou un fournisseur.
La page propose des plages de 7, 30 et 90 jours via un seul point de terminaison
réservé aux administrateurs, GET /api/plugins/usage?days=<1..365> (valeur par
défaut : 30). Elle présente le nombre total d’appels, les jetons signalés, le taux
de réussite, la latence moyenne et la part des appels ayant signalé une consommation
de jetons. La consultation de la page se fait en lecture seule et s’appuie sur le
registre d’utilisation existant du déploiement.
Utilisation des agents
La section Agents, près du haut de la page (Appels aux agents CLI et au moteur Strands), présente séparément Claude Code, Codex, OpenCode, Pi et Strands. Elle indique les appels, les jetons signalés, les appels échoués ou annulés, la durée moyenne et jusqu’à 20 modèles les plus utilisés de chaque agent. Les totaux des agents couvrent tous les appels correspondants de la période, indépendamment des limites d’affichage des grandes tables de fournisseurs et de modèles. Ce sont des sous-ensembles des totaux de la page, pas des événements facturables supplémentaires.
Un agent sans enregistrement affiche Aucun appel enregistré sur cette période. Cela n’indique pas si sa CLI est installée ou connectée. Les appels sans métadonnées de jetons affichent Jetons non signalés ; les compteurs manquants ne sont pas estimés. La page s’actualise toutes les 20 secondes lorsqu’elle est visible et propose aussi une actualisation manuelle.
L’utilisation CLI enregistre une invocation et les compteurs de jetons signalés par cette CLI. Les instantanés cumulatifs remplacent les précédents, et les rapports répétés par étape sont dédupliqués. Les compteurs de cache et de raisonnement sont combinés selon le protocole de chaque CLI, sans compter deux fois des sous-ensembles. Les invocations annulées et réponses partielles se terminant en échec conservent leur résultat réel.
Les appels Strands sont attribués à l’agent Strands. Le moteur n’a pas de fournisseur de modèles propre : chaque appel de modèle qu’il effectue passe par les fournisseurs Ollama ou de plugins de Libre WebUI. Les appels extérieurs à LWUI ne sont pas importés. Les anciens enregistrements sans compteurs de jetons restent non mesurés.
Le point d’accès expose cette ventilation bornée dans agents, avec les cinq noms pris en charge même si leurs compteurs sont nuls. La lecture ne découvre pas de modèles CLI, ne lance pas d’agents et ne contacte pas de fournisseurs. Les anciens serveurs dépourvus de ce champ peuvent afficher les entrées d’agents enregistrées dans leur ventilation par fournisseur ; les agents absents n’y sont pas présentés comme ayant une utilisation nulle confirmée.
Explorer les modèles et les fournisseurs
Les couleurs des modèles relient le graphique quotidien, le calendrier d’activité annuel, le tableau des modèles et les barres des fournisseurs. Les noms de modèles, les valeurs et les indicateurs de sélection accompagnent ces couleurs. Le calendrier d’activité couvre toujours les 365 derniers jours, indépendamment de la plage sélectionnée ; la couleur de chaque jour identifie son modèle le plus utilisé.
Le graphique quotidien bascule entre Appels et Jetons. Survolez un modèle dans sa légende ou amenez-y le focus clavier pour suivre sa courbe. Sélectionnez le modèle pour le garder en évidence, sélectionnez-le de nouveau pour le relâcher, ou choisissez Afficher tous les modèles pour réinitialiser. Le tableau des modèles propose lui aussi une action de mise en évidence. La mise en évidence change l’emphase tout en préservant les totaux quotidiens, les valeurs du tableau et les totaux par fournisseur.
Déplacez le pointeur sur le graphique ou utilisez Explorer l’utilisation quotidienne pour inspecter le total d’une journée et sa répartition par modèle. Le curseur quotidien se pilote au clavier : les touches fléchées passent d’un jour à l’autre, et Origine/Fin atteignent le premier et le dernier jour. Les tranches quotidiennes et leurs libellés utilisent UTC.
Par défaut, le graphique affiche les 12 noms de modèles les plus appelés sur la période sélectionnée, y compris en vue des jetons. Chaque modèle reste inspectable individuellement : donnez le focus ou sélectionnez un modèle dans le tableau ou dans le détail d’un fournisseur pour charger sa courbe quotidienne exacte, même s’il ne fait pas partie de ces 12. Un message de chargement nomme le modèle demandé pendant la récupération de son historique.
La courbe d’un modèle supplémentaire est séparée d’Autres modèles, et le groupe restant exclut ses appels, ses jetons signalés et ses échecs. Le graphique contient au plus 13 courbes de modèles nommés en plus du groupe restant, et leurs valeurs quotidiennes se réconcilient toujours avec les mêmes totaux. Choisissez Afficher tous les modèles pour revenir à la vue par défaut.
Les courbes quotidiennes regroupent les appels portant le même nom de modèle enregistré chez différents fournisseurs. Le tableau des modèles conserve des entrées fournisseur/modèle distinctes : un même modèle peut donc apparaître sous plusieurs fournisseurs. Les modèles nommés conservent des couleurs individuelles dans le tableau et dans les barres des fournisseurs, y compris ceux qui sont absents du graphique par défaut.
Le détail des fournisseurs indique la part des requêtes de chaque fournisseur, une barre découpée par modèle, les jetons signalés, les appels échoués ou annulés et le temps de réponse moyen. La répartition des capacités reste disponible sous les détails par modèle et par fournisseur.
Les totaux de jetons comprennent uniquement les appels pour lesquels le fournisseur a renvoyé des métadonnées d’utilisation. Le pourcentage de couverture rend visible un signalement partiel ; les jetons manquants ne sont jamais estimés à partir des requêtes ni d’un autre modèle. Une période sans jetons signalés affiche une explication dans la vue Jetons, et son historique de requêtes reste disponible dans Appels.
Le point de terminaison inclut les points quotidiens par modèle dans modelSeries. Un
paramètre de requête model facultatif demande un nom de modèle enregistré exact en
plus des 12 principaux, par exemple
GET /api/plugins/usage?days=30&model=<encoded-model-name>. Il s’agit du même point de
terminaison réservé aux administrateurs et en lecture seule : il interroge le registre
d’utilisation local et n’appelle jamais un fournisseur de modèles pour récupérer un
historique.
Un paramètre to facultatif fixe la borne de fin de la requête à un horodatage Unix en
millisecondes. Il exige model et n’accepte qu’un entier sûr non négatif, au plus égal
à l’heure actuelle du serveur. Le navigateur envoie le range.to de la vue d’ensemble
lors du chargement d’un modèle individuel, ce qui préserve ses limites de jour et
d’année UTC et exclut les appels postérieurs à cet horodatage. Sans to, le point de
terminaison utilise l’heure actuelle.
Le chargement d’un modèle laisse en place les cartes, le tableau, les totaux par fournisseur et les couleurs de la vue d’ensemble. Sa courbe quotidienne n’est ajoutée que si les bornes temporelles et les totaux quotidiens de la réponse correspondent à cette vue d’ensemble. Cette borne temporelle ne fige pas la base de données : si des reprises d’historique ou des suppressions modifient ces totaux, le navigateur actualise la vue d’ensemble avant d’afficher la courbe du modèle.
Si un serveur plus ancien omet modelSeries, le graphique affiche la série agrégée
Tous les modèles avec une explication indiquant que la répartition par modèle est
indisponible. Le tableau des modèles reste disponible ; le navigateur ne déduit pas
l’historique quotidien par modèle à partir des totaux de la période ni du calendrier
annuel.
Il n’existe aucun bouton pour désactiver la mesure. Comme les données sont agrégées entre les comptes, seuls les administrateurs peuvent les consulter.
La page Utilisation présente les appels, unités, jetons, latences et résultats. Ajoutez la gouvernance des coûts lorsque ces événements exigent des tarifs avec dates d’effet, une ventilation des dépenses, des budgets, des alertes ou une exportation comptable. Les événements sans tarif correspondant ou sans utilisation signalée par le fournisseur restent visiblement non tarifés au lieu d’être considérés comme gratuits.
Attribution OpenRouter
Depuis 0.18.0, les requêtes adressées à OpenRouter identifient l’application au
moyen des en-têtes d’attribution d’application d’OpenRouter
(HTTP-Referer: https://librewebui.org, un titre d’application et des indications
de catégorie). Ces en-têtes sont envoyés uniquement lorsque la requête cible
https://openrouter.ai lui-même, jamais une route personnalisée ou auto-hébergée,
et n’ajoutent rien aux données stockées localement.