Si vous rencontrez des problèmes lors de la configuration des emplacements privés pour le monitoring synthétique de New Relic, essayez ces conseils de dépannage pour identifier les problèmes courants du Synthetics Job Manager.
Demande d'emploi et consommation
Identifiez votre débit actuel et évaluez si votre gestionnaire de tâches est capable de suivre la charge de travail.
Les tâches nécessitent un débit par minute :
SELECT rate(uniqueCount(jobId), 1 minute) FROM SyntheticRequestWHERE type != 'SIMPLE' FACET location SINCE 2 days agoEmplois par minute au fil du temps :
SELECT rate(uniqueCount(jobId), 1 minute) FROM SyntheticRequestWHERE type != 'SIMPLE' FACET location SINCE 2 weeks ago TIMESERIESIdentifier la croissance de la file d’attente :
SELECT derivative(checksPending, 1 minute) AS 'queue growth rate (per minute)'FROM SyntheticsPrivateLocationStatus WHERE name = 'YOUR_PRIVATE_LOCATION' SINCE 2 days ago TIMESERIESTaux de consommation :
SELECT rate(uniqueCount(jobId), 1 minute) FROM SyntheticRequestWHERE type != 'SIMPLE' FACET location SINCE 2 weeks ago TIMESERIESNettoyer les moniteurs défaillants qui consomment des ressources :
SELECT 100*latest(minionJobsFailed)/latest(minionJobsReceived) AS 'job failure rate (%)'FROM SyntheticsPrivateMinion FACET minionLocation SINCE 2 weeks ago TIMESERIES MAX
dépannage utilisation mémoire
Allocation de mémoire recommandée par gestionnaire de tâches Synthetics :
Docker: 3,256 Gio par cœur de processeur pour le gestionnaire de tâches Docker Synthetics
Gestionnaire de tâches Kubernetes Synthetics (les valeurs sont configurables) :
- 1,6 Gio pour le pod du gestionnaire de tâches
- 1,0 Gio pour le pod d'exécution ping
- 2 Gio par pod d'exécution d'API Node.js
- 3 Gio par pod d'exécution de navigateur Node.js
cible 60% d'utilisation maximale de la mémoire
Requête utile pour identifier l'utilisation actuelle :
Utilisation de la mémoire par emplacement :
SELECT latest(minionPhysicalMemoryUsedPercentage) FROM SyntheticsPrivateMinionFACET minionLocation SINCE 2 weeks ago TIMESERIES MAXUtilisation de la mémoire par nom d'hôte :
SELECT latest(minionPhysicalMemoryUsedPercentage) FROM SyntheticsPrivateMinionWHERE minionLocation = 'YOUR_PRIVATE_LOCATION' FACET minionHostname SINCE 2 weeks ago TIMESERIES MAX
Les moniteurs Browser plantent en raison du dimensionnement de la mémoire partagée sur Podman.
Les moniteurs Browser s’exécutant sur un site privé basé sur Podman peuvent échouer par intermittence avec une erreur comme celle-ci :
NoSuchSessionError: invalid session id: session deleted as the browser has closed the connection, disconnected: Unable to receive message from rendererIl s’agit généralement d’un plantage du processus de rendu de Chrome causé par une mémoire partagée insuffisante (/dev/shm), et non d’un problème de script, ou de réseau. Chrome s’appuie fortement sur la mémoire partagée pour le rendu, et a tendance à l’épuiser plus rapidement que Firefox, en particulier sur les pages qui redirigent vers d’autres origines lors des flux de connexion : chaque nouvelle origine lance des processus de rendu supplémentaires qui puisent dans le même pool /dev/shm.
Comment les pod Podman allouent la mémoire partagée
Lorsque le gestionnaire de jobs Synthetics s’exécute dans Podman avec --pod, chaque conteneur joint à ce pod partage un seul espace de nommage IPC. Le pod lui-même monte /dev/shm une seule fois, à la taille avec laquelle vous avez créé le pod (64 MiB par défaut). Vous définissez cette taille lors de podman pod create, et un conteneur individuel ne peut ni la modifier, ni la remplacer par la suite.
Cela signifie que les tentatives courantes suivantes pour résoudre les problèmes de mémoire partagée ne fonctionnent pas une fois qu’un conteneur a rejoint un pod, car le montage /dev/shm du pod a la priorité sur les paramètres par conteneur :
- Passer
--shm-sizesurpodman runau lieu depodman pod create - Effectuer un montage lié avec
-v /dev/shm:/dev/shmsurpodman run
Diagnostiquer
Avant de modifier quoi que ce soit, exécutez ces vérifications pour confirmer la cause :
Vérifiez la valeur
--shm-sizedans la commande de création du pod :bash$podman pod inspect YOUR_POD_NAME --format '{{.CreateCommand}}'Cela affiche la commande
podman pod createexacte qui a créé le pod. Recherchez--shm-sizedans cette sortie. S’il est manquant, le pod s’exécute sur la valeur par défaut de 64 MiB, indépendamment de ce que vous aviez l’intention de définir ; cela peut se produire si vous n’avez pas complètement supprimé un pod précédent avec le même nom avant de le recréer, ou si vous n’avez pas redémarré un conteneur dans le pod par la suite.Trouvez l’ID du conteneur du runtime du navigateur :
bash$podman ps --filter pod=YOUR_POD_NAME --filter ancestor=newrelic/synthetics-node-browser-runtime --format '{{.ID}}'Utilisez cet ID comme
YOUR_BROWSER_RUNTIME_CONTAINER_IDà l’étape suivante.Vérifiez la mémoire partagée réellement disponible dans ce conteneur, idéalement capturée pendant, ou immédiatement avant une exécution en échec :
bash$podman exec YOUR_BROWSER_RUNTIME_CONTAINER_ID df -h /dev/shmComparez la sortie à la taille que vous avez configurée :
- Si
Sizeaffiche toujours64M, le redimensionnement n’a jamais pris effet ; recréez le pod comme décrit dans la section suivante. - Si
Sizeaffiche votre valeur configurée (par exemple,2.0Gpour un pod créé avec--shm-size=2g), vérifiez les colonnesUsed, etAvail. SiAvailest proche de zéro, le pool est épuisé : chaque conteneur du pod puise dans cette même allocation partagée, donc si plusieurs moniteurs s’exécutent simultanément sur le même site privé, augmentez la taille de--shm-size, ou réduisez le nombre d’exécutions simultanées. SiAvaila encore de la marge, le pool n’est pas la cause de ce plantage particulier, et vous devriez chercher ailleurs (par exemple,HEAVY_WORKER_MEMORY).
- Si
Réparer
Supprimez le pod existant et recréez-le avec un --shm-size plus grand, puis redémarrez le gestionnaire de tâches Synthetics pour qu'il rejoigne le nouveau pod :
$podman pod stop YOUR_POD_NAME$podman pod rm YOUR_POD_NAME$podman pod create --network slirp4netns --name YOUR_POD_NAME --add-host=podman.service:HOST_IP_ADDRESS --shm-size=2gCommencez par 2g, la valeur utilisée par la documentation d’installation. Si la vérification de l’étape 3 montre toujours que le pool est épuisé, augmentez-le davantage (par exemple, à 4g) avant de réduire la simultanéité, et revérifiez df -h /dev/shm après chaque modification.
Ensuite, redémarrez le gestionnaire de jobs Synthetics en utilisant la commande podman run de la procédure de démarrage de Podman : la suppression du pod supprime également les conteneurs qui s’y exécutaient.
Dépannage d'utilisation du processeur
Identifier les périodes potentielles de forte demande de CPU :
Utilisation globale du processeur :
SELECT latest(minionProcessorsUsagePercentage) FROM SyntheticsPrivateMinionFACET minionLocation SINCE 2 weeks ago TIMESERIES MAXUtilisation du processeur pour un emplacement spécifié :
SELECT latest(minionProcessorsUsagePercentage) FROM SyntheticsPrivateMinionWHERE minionLocation = 'YOUR_PRIVATE_LOCATION' FACET minionHostname SINCE 2 weeks ago TIMESERIES MAX
Dépannage réseau
Network access is red:
Le Synthetics Job Manager effectue une vérification auprès de New Relic pour vérifier l'accès au réseau public. Si l'accès au réseau public n'est pas disponible, l'icône Network Access sur la page Overview du Synthetics Job Manager passera au rouge, mais le Synthetics Job Manager restera par ailleurs entièrement fonctionnel. Si c'est le comportement attendu, vous pouvez ignorer cette erreur sans risque.
Vous pouvez également voir des entrées log comme celles-ci :
2016-01-21 21:47:09,401 [dw-22 - GET /private-location/status] c.n.s.m.util.PrivateMinionUtils WARN Unable to detect Public Network Access trying to fetch https://newrelic.com/synthetics: java.net.ConnectException: Connection refusedNew Relic access is red:
Le gestionnaire de tâches Synthetics doit avoir accès à https://synthetics-horde.nr-data.net pour récupérer la liste des tâches à exécuter et publier les résultats que vous pouvez consulter dans votre interface utilisateur New Relic. Si vos règles de pare-feu n'autorisent pas l'accès direct, vous pouvez configurer un accès proxy. Si nécessaire, ajoutez le point de terminaison DNS synthetics-horde.nr-data.net à votre liste d'autorisation.
Conflits de ports exécutant le conteneur Docker sur l'hôte
Si vous exécutez plusieurs conteneurs de gestionnaire de tâches sur le même hôte, vous rencontrerez des conflits de ports et une contention des ressources. Pour éviter cela, veillez à exécuter chaque gestionnaire de tâches sur un hôte distinct.