Nous avons un serveur Graphite pour collecter des données via collectd, statsd, JMXTrans ... Depuis quelques jours, nous avons fréquemment des trous dans nos données. En fouillant dans les données que nous avons encore, nous pouvons voir une augmentation de la taille du cache de carbone (de 50K à 4M). Nous ne voyons pas d'augmentation du nombre de métriques collectées (metricsReceived est stable autour de 300K). Nous avons une augmentation du nombre de requêtes de 1000 à 1500 en moyenne.
Étrangement, le cpuUsage diminue légèrement de 100% (nous avons 4 CPU) à 50% lorsque la taille du cache augmente.
Curieusement, nous constatons une augmentation du nombre d'octets lus sur le disque et une diminution du nombre d'octets écrits.
Nous avons la configuration de carbone principalement avec des valeurs par défaut:
- MAX_CACHE_SIZE = inf
- MAX_UPDATES_PER_SECOND = 5000
- MAX_CREATES_PER_MINUTE = 2000
De toute évidence, quelque chose a changé dans notre système, mais nous ne comprenons pas quoi, ni comment trouver cette cause ...
De l'aide ?
Réponses:
Ce n'est pas un bug de pile de graphite, mais plutôt un goulot d'étranglement d'E / S, très probablement parce que votre stockage n'a pas le nombre d'E / S par seconde suffisamment élevé. Pour cette raison, la file d'attente continue de s'accumuler et déborde à 4M. À ce stade, vous perdez autant de données en file d'attente, qui se reflètent plus tard, comme des «lacunes» aléatoires dans votre graphique. Votre système ne peut pas suivre l'échelle à laquelle il reçoit les métriques. Il continue de se remplir et de déborder .
Cela est dû au fait que votre système commence à échanger et que les processeurs ont beaucoup de `` temps d'inactivité '', en raison de l'attente d'E / S.
Pour ajouter du contexte, j'ai 500 IOPS provisionnés à aws sur un système sur lequel je reçois quelques métriques 40K. La file d'attente est stable à 50K.
la source
Un autre répondeur a mentionné un goulot d'étranglement d'E / S disque. Je vais parler du goulot d'étranglement du réseau comme une autre cause de cela.
Dans mon environnement, nous exécutons un cluster de serveurs d'interface utilisateur frontaux (httpd, memcached); un autre groupe de relais de couche intermédiaire (relais carbone-c effectuant la transmission et l'agrégation); et une couche dorsale (httpd, memcached, carbon-c-relay et carbon-cache.) Chacun de ces clusters se compose de plusieurs instances dans EC2 et traite au total 15 millions de métriques par minute.
Nous avons eu un problème où nous voyions des écarts pour les mesures générées par la fonction "somme" agrégée, et les valeurs agrégées étaient également incorrectes (trop faibles). Le problème serait résolu en redémarrant le relais carbone-c dans la couche intermédiaire, mais les lacunes recommenceraient à apparaître après plusieurs heures.
Nous avons eu une agrégation se déroulant à la fois dans la couche intermédiaire et la couche principale (la couche principale a agrégé les métriques agrégées qui lui ont été transmises par la couche intermédiaire).
Les hôtes de la couche intermédiaire n'étaient pas liés au processeur, pas liés au disque et aucune contrainte sur la mémoire. Ceci combiné avec le fait que le problème n'apparaîtrait que quelques heures après le redémarrage des processus de relais, signifiait qu'il y avait un goulot d'étranglement du réseau. Notre solution était simplement d'ajouter plus d'hôtes à la couche intermédiaire. En faisant cela instantanément, les mesures agrégées fonctionnaient correctement et ne présentaient pas de lacunes.
L'endroit exact dans la pile réseau où était le goulot d'étranglement? Je ne pourrais pas te le dire. Cela aurait pu être sur les hôtes Linux; cela aurait pu être du côté de l'Amazonie.
la source