[resolu] Navidrome : 502 Bad Gateway. Aléatoire

What type of hardware are you using: Other(?)
What YunoHost version are you running: 12.1.14 (stable)
What app is this about: navidrome Version installée : 0.58.0~ynh2

Describe your issue

Bonjour
j’ai un soucis avec navodrome qui tourne correctement depuis quelques années.

De temps en temps (au moins une ou deux fois par jour), je n’arrive plus à y accèder et j’ai ce message

502 Bad Gateway

If you see this page, your connection with the server is working but the internal service providing this path is not responding.

Administrator, make sure that the service is running, and check its logs if it is not. The Services page is in your webadmin, under Tools > Services.

Thank you for using YunoHost.

Imossible de relancer le service en CLI ou via l’API d’admin. J’ai ce log

root@crust:~# yunohost service log navidrome
journalctl: 
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Starting scheduler"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Periodic backup is DISABLED"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Starting Insight Collector"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Setting Session Timeout" value=24h
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Login rate limit set" requestLimit=5 windowLength=2
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Found ffmpeg" path=/usr/bin/ffmpeg
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Spotify integration is not enabled: missing ID/Secret"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Started watcher for library" libraryID=1 name="Music Library" path=/diskUSB
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=error msg="Error starting watcher" error="open /diskUSB/lost+found: permission denied" lib=/diskUSB/...
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Scheduling DB optimizer" schedule="@every 24h"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting Native API routes" path=/zik/api
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=warning msg="Transcoding cache disabled"
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Finished initializing cache" cache=Transcoding elapsedTime=1.7ms maxSize=0
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting Subsonic API routes" path=/zik/rest
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting Public Endpoints routes" path=/zik/share
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting LastFM Auth routes" path=/zik/api/lastfm
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting ListenBrainz Auth routes" path=/zik/api/listenbrainz
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="Mounting WebUI routes" path=/zik/app
  - août 22 00:31:12 navidrome[12479]: time="2025-08-22T00:31:12+02:00" level=info msg="----> Navidrome server is ready!" address="127.0.0.1:50561" startupTime=124.8ms tlsEnabled=false
  - août 22 00:31:13 systemd[1]: navidrome.service: Main process exited, code=killed, status=9/KILL
  - août 22 00:31:13 systemd[1]: navidrome.service: Failed with result 'signal'.
  - août 22 00:31:13 systemd[1]: navidrome.service: Scheduled restart job, restart counter is at 4.
  - août 22 00:31:13 systemd[1]: Stopped navidrome.service - Navidrome: Music Server and Streamer.
  - août 22 00:31:13 systemd[1]: Started navidrome.service - Navidrome: Music Server and Streamer.
  - août 22 00:31:13 navidrome[12492]:  _   _             _     _
  - août 22 00:31:13 navidrome[12492]: | \ | |           (_)   | |
  - août 22 00:31:13 navidrome[12492]: |  \| | __ ___   ___  __| |_ __ ___  _ __ ___   ___
  - août 22 00:31:13 navidrome[12492]: | . ` |/ _` \ \ / / |/ _` | '__/ _ \| '_ ` _ \ / _ \
  - août 22 00:31:13 navidrome[12492]: | |\  | (_| |\ V /| | (_| | | | (_) | | | | | |  __/
  - août 22 00:31:13 navidrome[12492]: \_| \_/\__,_| \_/ |_|\__,_|_|  \___/|_| |_| |_|\___|
  - août 22 00:31:13 navidrome[12492]:                           Version: 0.58.0 (9dbe0c18)
  - août 22 00:31:13 systemd[1]: navidrome.service: Main process exited, code=killed, status=9/KILL
  - août 22 00:31:13 systemd[1]: navidrome.service: Failed with result 'signal'.
  - août 22 00:31:13 systemd[1]: navidrome.service: Scheduled restart job, restart counter is at 5.
  - août 22 00:31:13 systemd[1]: Stopped navidrome.service - Navidrome: Music Server and Streamer.
  - août 22 00:31:13 systemd[1]: Started navidrome.service - Navidrome: Music Server and Streamer.
  - août 22 00:31:14 navidrome[12503]:  _   _             _     _
  - août 22 00:31:14 navidrome[12503]: | \ | |           (_)   | |
  - août 22 00:31:14 navidrome[12503]: |  \| | __ ___   ___  __| |_ __ ___  _ __ ___   ___
  - août 22 00:31:14 navidrome[12503]: | . ` |/ _` \ \ / / |/ _` | '__/ _ \| '_ ` _ \ / _ \
  - août 22 00:31:14 navidrome[12503]: | |\  | (_| |\ V /| | (_| | | | (_) | | | | | |  __/
  - août 22 00:31:14 navidrome[12503]: \_| \_/\__,_| \_/ |_|\__,_|_|  \___/|_| |_| |_|\___|
  - août 22 00:31:14 navidrome[12503]:                           Version: 0.58.0 (9dbe0c18)
  - août 22 00:31:14 systemd[1]: navidrome.service: Main process exited, code=killed, status=9/KILL
  - août 22 00:31:14 systemd[1]: navidrome.service: Failed with result 'signal'.
  - août 22 00:31:14 systemd[1]: navidrome.service: Scheduled restart job, restart counter is at 6.
  - août 22 00:31:14 systemd[1]: Stopped navidrome.service - Navidrome: Music Server and Streamer.
  - août 22 00:31:14 systemd[1]: navidrome.service: Start request repeated too quickly.
  - août 22 00:31:14 systemd[1]: navidrome.service: Failed with result 'signal'.
  - août 22 00:31:14 systemd[1]: Failed to start navidrome.service - Navidrome: Music Server and Streamer.

Et voici ce qui dit dmesg, je ne sais si c’est en rapport ou non

dmsg
[23720.638620] adbd (10142): /proc/10142/oom_adj is deprecated, please use /proc/10142/oom_score_adj instead.
[26936.312731] systemd-journald[755]: /var/log/journal/1e5342ba1e594423a4468122703ae56a/system.journal: Journal file corrupted, rotating.
[26936.312770] systemd-journald[755]: Failed to write entry to /var/log/journal/1e5342ba1e594423a4468122703ae56a/system.journal (27 items, 649 bytes), rotating before retrying: Bad message
[28785.109686] process 'data/local/tmp/arm6' started with executable stack

La seule solution actuelle est de rebooter le serveur, si quelqu’un a des pistes je suis preneur

C’est apparu, il me semble, depuis l’avant dernière mise à jour système

Merci de vos retours :wink:
Bon dimanche

(PS j’ai posté dans APPS / navidrome car c’est la seule application d’impactée sur le serveur pour ce bad gateway, mywebapp et nextcloud restent fonctionnels)

Share relevant logs or error messages

Dans le message

Bonjour,
Possibilité de visualiser plus de log:
voir ici

Ou un monitoring:
ici

It has been killed because of low memory.

You may have to upgrade your hardware or add swap, depending on your configuration

@Marc :Merci, je vais voir pour avoir des logs plus parlant :wink:

@jarod5001
Bizarre
C’est un OrangePI 3B avec 4 Go de RAM et 2 de swap


free -h
               total       utilisé      libre     partagé tamp/cache   disponible
Mem:           3,8Gi       826Mi       139Mi        53Mi       3,0Gi       3,0Gi
Échange:       1,9Gi       6,5Mi       1,9Gi

Moins d’1 Go est utilisé et il n’y a quasi rien sur ce serveur, hormis navidrome et un nextcloud sans extension

D’autant plus bizarre c’est que quand Navidrome plante, un restart ne le relance guère, seul un reboot y arrive

Certains mentionnent des leaks mémoire (en rapport avec go) ici et ici
Un des utilisateurs rapporte qu’il était possible de contourner en mettant en place une memory limit dans le service systemd.

OK… Merci beaucoup pour les infos.
Mais concrètement, on fait cela comment

Un des utilisateurs rapporte qu’il était possible de contourner en mettant en place une memory limit dans le service systemd.

?

Si tu as des pistes je suis preneur, en tout cas merci :wink:

@marc
Ai mis les log en DEBUG, je verrai si ils sont plus locaces

Par contre ai installé, grafana et promotheus mais j’avoue que je suis incapable de les configurer pour monitorer navirome…

Si tu as installé Promotheus et Grafana avec Yunohost, les infos de configuration sont ici:

et

Il faut donc configurer le fichier de configuration de navidrome.
D’après navidrome_ynh/doc/ADMIN.md at master · YunoHost-Apps/navidrome_ynh · GitHub, il est ici:

/var/lib/navidrome/navidrome.toml

Le contenu doit prendre en compte les variables pour avoir :

You need to set ND_PROMETHEUS_ENABLED to enable Prometheus metrics endpoint. Setting custom ND_PROMETHEUS_METRICSPATH is highly recommended if your Navidrome instance is publicly available.

Utilse la doc ici pour finaliser ce fichier.

Concernant Prometheus:
Il faut modifier __INSTALL_DIR__/prometheus.yml en s’inspirant de:

global:
  scrape_interval: 10s
scrape_configs:
  - job_name: 'navidrome'
    metrics_path: /metrics_SOME_SECRET_KEY
    scheme: http
    static_configs:
      - targets: ['navidrome:4533']

Pour Grafana: utiliser l’interface graphique pour configurer la récupération de données depuis Prometheus

2 Likes

Bonjour
Bon j’ai finalement restauré la sauvegarde d’avant la mise à jour de navidrome et plus de soucis depuis

Par contre je suis toujours intéressé par le monitoring de navidrome

J’ai donc ajouté à /var/lib/navidrome/navidrome.toml

# Prise en compte prometheus
Prometheus.Enabled = "true"
Prometheus.MetricsPath = "/metrics"

Les metrics sont bien disponibles à cette adresse
https://crust.ovh/zik/metrics

J’ai installé prometheus et grafana

Prometheus, d’après la page de conf de yunohost, une api devrait être dispo ici
https://crust.ovh/prometheus/api
Pourtant j’ai une erreur 404
Mais bon , c’est secondaire dira t on…

Sinon prometheus semble fonctionnel, mais j’avoue que son système de requête m’échappe

J’ai bien lu la doc de prometheus et le fait d’adapter le fichier de conf

  - job_name: 'navidrome'
    metrics_path: /zik/metrics
    scheme: https
    static_configs:
           - targets: ["crust.ovh"]

D’après la doc, il y avait une SECRET_KEY après metrics, mais aucune idée d’où la trouver donc en ai pas mis. Je ne sais pas si c’est embêtant ou non

Le status du démon dit que c’est OK et dans l’interface graphique de prometheus, la section target contient bien une entrée navidrome sans erreur

Donc grafana maintenant
Je demande un nouveau tableau de bord et je copie le fichier navidrome grafana disponible ici

Je selectionne comme source de données une Data sources prometheus avec l’url du serveur prometheus et valide

Puis je crée un nouveau tableau de bord et importe l’ID depuis https://grafana.com/grafana/dashboards/18038-navidrome/

Donc ça semble OK !

Finalement , je ne sais pas pourquoi le serveur planté, mais un downgrade a réglé le soucis et vos pistes et idées m’ont permis de monitorer navidrome

Un grand merci !

1 Like

Peut-être au lieu de metrics tout court, tu ajoutes une longue chaîne de caractère faisant office de token, cela évitera à n’importe qui de consulter l’état de santé de ton serveur :thinking:

Par contre, c’est vrai que le couple grafana prometheus n’est pas facile à assimiler.

2 Likes

Bien vu !
Ensuite, on ne peut pas dire qu’il y ait des infos intéressantes.
Mais je vais opter pour cette option

Merci bien :wink:

J’ai appris plein de trucs grâce à vos pistes :wink:

1 Like

Par prudence, ai écrit un petit script sans prétention qui teste si navidrome est actif (peut marcher pour autres services aussi), si non actif, tente de le redémarrer et envoie un mail d’alerte, si le service ne redémarre toujours pas, alors redémarrage du serveur et mail alerte

Usage :
/chemin/vers/repertoire/scripts/services-testing.sh navidrome

Le script
(ai laissé en commentaire les lignes de DEBUG)

#!/bin/bash
SERVICE=$1
DATE=$(date)
CORPS="Alerte serveur XXXX.YY"
SUJET_UP="$DATE: Service $1 actif"
SUJET_DOWN="$DATE : Service $1 down"
SUJET_UP_2="$DATE: Service $1 redémarré"
SUJET_DOWN_2="$DATE : Service $1 toujours mort. Redémarrage serveur"
DESTINATAIRE="adresse1@XXXX.YY, adresse2@ZZZZ.WW"
ADMIN="$DATE : Une tâche d'admin est en cours, on quitte."



if (/usr/bin/ps -C apt-get,dpkg,apt,aptitude,yunohost >/dev/null); then
	# Un processus d'admin est en cours, on loggue et on quitte
	echo "$ADMIN" >> "/var/log/etat_service_$SERVICE"
	exit 1
	
else
	# Sinon, on teste

	if (systemctl is-active --quiet "$SERVICE"); then
			exit 1
			# Le serice est actif, on passe
			# echo -e $SUJET_UP
			# echo "$SUJET_UP" >> "/var/log/etat_service_$SERVICE"
	        # mail DEBUG
			# echo  "$CORPS" | mail -s "$SUJET_UP" "$DESTINATAIRE"

			else
			# Le service est planté, on inscrit dans le log
	        # echo -e $SUJET_DOWN
			# echo "$SUJET_DOWN" >> "/var/log/etat_service_$SERVICE"
			# On envoie mail alerte service down
	        echo  "$CORPS" | mail -s "$SUJET_DOWN" "$DESTINATAIRE"
	        # On tente de redémarrer le service
	        /usr/bin/systemctl restart  "$SERVICE".service 2> /dev/null
			# On attend 10 secondes avant nouvel essai
			sleep 10

			# On resteste voir si le service a bien été redémarré, sinon on reboote
			if (systemctl is-active --quiet "$SERVICE"); then
				# Le service a bien redémarré, on l'inscrit dans les logs
			    # echo -e $SUJET_UP_2
				echo "$SUJET_UP_2" >> "/var/log/etat_service_$SERVICE"
				# mail DEBUG
	        	echo  "$CORPS" | mail -s "$SUJET_UP_2" "$DESTINATAIRE"
			else
				# Le service est toujours planté, on inscrit le reboot du serveur dans les logs
				# echo -e $SUJET_DOWN_2
				echo "$SUJET_DOWN_2" >> "/var/log/etat_service_$SERVICE"

				# mail alerte du reboot du serveur
	        	echo  "$CORPS" | mail -s "$SUJET_DOWN_2" "$DESTINATAIRE"

				# On attend 5 secondes et on redémarre le serveur
				sleep 5
				/usr/sbin/reboot
			fi
	fi
fi

A positionner sur cron root, toutes les 10 minutes

# # Si navidrome plante
*/10 * * * * /chemin/vers/repertoire/scripts/services-testing.sh navidrome

Si ça peut servir à quelqu’un :wink:

Bonjour,
Enchanté que tout fonctionne désormais.

Ton script est très bon.
Peux-tu le proposer à la communauté de développeurs de Yunohost pour qu’on bénéficie dans une prochaine mise à jour?

J’enlèverai la ligne du reboot. Le service peut être en fail pour d’autres raisons et le script fera rebooter le serveur en boucle

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.