Le graphite cesse de collecter des données au hasard


8

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 ?


Je pars généralement de l’approche fondamentale des problèmes de graphite; y a-t-il de l'espace sur le disque pour écrire? Les autorisations du répertoire de données ont-elles changé du tout? Y a-t-il eu un changement dans l'utilisateur du démon qui collecte des statistiques? S'il n'y a pas de cause claire, il est tout à fait possible que vous ayez une corruption RRD et que vous ayez besoin de trouver un moyen d'exporter ce que vous avez et de démarrer la collecte de mesures à partir de zéro.
Stephan

Nous avons vérifié l'espace disque et l'autorisation, rien d'étrange là-bas. Aucun changement dans le démon de collecte de données, peut-être une augmentation du nombre de métriques, mais pas si grand. Nous examinons la corruption WSP.
Guillaume

Réponses:


2

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 .

Étrangement, le cpuUsage diminue légèrement de 100% (nous avons 4 CPU) à 50% lorsque la taille du cache augmente.

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.


Je vois exactement le même problème décrit dans la question. Cependant, l'utilisation du disque est minimale (rapportée entre 0% et 3% au sommet) et je ne pousse que ~ 80 métriques / s via StatsD. Par conséquent, il semble peu probable que j'aie un goulot d'étranglement d'E / S. Une idée de ce qui pourrait être à l'origine du problème?
heyman

1

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.