2016-07-15 4 views
1

J'essaie de signaler les mesures de Cassandra 3.0 au serveur Graphite en utilisant des métriques-graphite comme suggéré ici http://www.datastax.com/dev/blog/pluggable-metrics-reporting-in-cassandra-2-0-2. Quand il n'y a pas de charge sur le cluster, tout fonctionne correctement et toutes les métriques sont correctement rapportées. Mais si une certaine charge se produit, je reçois à la suite exception system.log:Impossible de collecter des mesures dans Cassandra

ERROR [metrics-graphite-reporter-1-thread-1] 2016-07-13 08:21:23,580 ScheduledReporter.java:119 - RuntimeException thrown from GraphiteReporter#report. Exception was suppressed. 
java.lang.IllegalStateException: Unable to compute ceiling for max when histogram overflowed 
     at org.apache.cassandra.utils.EstimatedHistogram.rawMean(EstimatedHistogram.java:231) ~[apache-cassandra-3.0.7.jar:3.0.7] 
     at org.apache.cassandra.metrics.EstimatedHistogramReservoir$HistogramSnapshot.getMean(EstimatedHistogramReservoir.java:103) ~[apache-cassandra-3.0.7.jar:3.0.7] 
     at com.codahale.metrics.graphite.GraphiteReporter.reportHistogram(GraphiteReporter.java:265) ~[metrics-graphite-3.1.2.jar:3.1.2] 
     at com.codahale.metrics.graphite.GraphiteReporter.report(GraphiteReporter.java:179) ~[metrics-graphite-3.1.2.jar:3.1.2] 
     at com.codahale.metrics.ScheduledReporter.report(ScheduledReporter.java:162) ~[metrics-core-3.1.0.jar:3.1.0] 
     at com.codahale.metrics.ScheduledReporter$1.run(ScheduledReporter.java:117) ~[metrics-core-3.1.0.jar:3.1.0] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_91] 
     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_91] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_91] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_91] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_91] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_91] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91] 

Ce message est répété à chaque fois que le journaliste tente d'obtenir des mesures sur chaque nœud Cassandra et certains paramètres deviennent indisponibles. Afin de recevoir à nouveau les métriques, je dois redémarrer tous les nœuds de Cassandra, ce qui est très peu pratique. J'ai essayé différentes versions métriques-graphite de 3.1.0 à 3.1.2 avec le même problème.

Répondre

1

Voici une solution de contournement qui supprime cette erreur, si vous pouvez vivre sans rapporter les métriques Table et keyspace à Graphite.

Nous utilisons DataStax Enterprise 5.0.1, qui contient Cassandra 3.0.7.1159. J'ai rencontré cette erreur dans une nouvelle installation (pas une mise à niveau), en utilisant à la fois metrics-graphite-2.2.0.jar et metrics-graphite-3.1.2.jar, donc je ne pense pas que l'erreur dépend de la version de le plug-in Coda Hale/Yammer GraphiteReporter.

En recherchant les tickets CASSANDRA Jira associés, il semble que cette erreur est due au fait que les valeurs métriques de Cassandra 3.0 deviennent plus grandes que ce que GraphiteReporter peut gérer.

Dans mon métriques-journaliste-config.yaml, j'utilisais une valeur générique de liste blanche, de sorte que toutes les mesures ont été signalés au graphite, comme ceci:

graphite: 
    - 
    period: 60 
    timeunit: 'SECONDS' 
    prefix: 'dev.servers' 
    hosts: 
    - host: 'cassandra-1' 
     port: 2003 
    predicate: 
     color: "white" 
     useQualifiedName: false 
     patterns: 
     - ".*" 

La solution que nous avons découvert est que, si nous sommes passés à l'aide d'une liste noire spécifique représentée ci-dessous (déterminé par le processus d'élimination), de sorte que nous empêchons métriques Cassandra table et keyspace d'être signalé, l'erreur disparaîtrait:

graphite: 
    - 
    period: 60 
    timeunit: 'SECONDS' 
    prefix: 'dev.servers' 
    hosts: 
    - host: 'cassandra-1' 
     port: 2003 
    predicate: 
     color: "black" 
     useQualifiedName: true 
     patterns: 
     - "^org.apache.cassandra.metrics.Table.+" 
     - "^org.apache.cassandra.metrics.keyspace.+" 

j'ai dû redémarrer Cassandra après avoir fait ce changement. Après le redémarrage, le message d'erreur n'apparaissait plus dans le fichier journal system.log de Cassandra et les groupes d'indicateurs spécifiés à l'origine des messages d'erreur n'étaient plus signalés.

+1

Malheureusement, les mesures Table sont nécessaires pour moi. Pour surmonter ce problème, je suis passé à collectd et j'ai écrit un conf pour collecter toutes les métriques de Cassandra dont j'ai besoin via JMX. – nickoff

+0

Nous avons rencontré le même bug sur 3.0.9, @nickoff pourriez-vous partager la conf qui fonctionne dans votre cas? –

+0

Selon cassandra jira ce bug est corrigé dans 3.0.10 https://issues.apache.org/jira/browse/CASSANDRA-11117 – nickoff