2014-10-10 4 views
5

Wir verwenden Amazon Kinesis (ein Warteschlangen-Service) und haben Warteschlangenleser in Java geschrieben. Sie lesen grundsätzlich aus der Warteschlange und fügen Daten in unseren Datenspeicher ein. Ich habe mich gefragt, ob jemand Erfolge bei der Verwendung von New Relic zur Überwachung von Warteschlangenmitarbeitern im Hintergrund hatte?New Relic für Amazon Kinesis Worker Monitoring

Einige Ich bin interessiert Analytik in:

  1. Wie viele Warteschlange Arbeiter jetzt laufen? (sie skalieren nach oben und unten basierend auf der Last)
  2. Wie viele Nachrichten/Sekunde wird jede Warteschlange bearbeitet? Wie sieht das im Laufe der Zeit aus?
  3. Wie viele Nachrichten/Sekunde ist die gesamte Worker-Flotte?
  4. Die Mitarbeiter stellen Anfragen an MySQL und Cassandra. Welcher Teil ihrer Zeit wird damit verbracht?
  5. Wir loggen mit log4j. Wenn die Arbeiter Fehler/Spuren erzeugt haben, was sind sie? Wie hoch ist die Fehlerquote im Zeitverlauf?

Danke,

Advait

Antwort

2

New Relic hat keine Probleme Batch Überwachungsaufgaben auf dem Web-Transaktionen im Gegensatz, so dass kein Problem sein wird.

Angenommen, Sie beginnen mit einer Java-Anwendung, für die Sie Quellcode zur Verfügung haben. Der beste Weg ist die Verwendung der Agenten-API: https://docs.newrelic.com/docs/agents/java-agent/custom-instrumentation/java-agent-api. Auf diese Weise können Sie alle Messwerte, die Ihnen gefallen, melden, auch wenn wir sie nicht automatisch aufzeichnen. Ich werde Ihre Fragen 1 zu 1 beantworten:

1) Wir haben ein paar Möglichkeiten, um diese Torte zu schneiden, aber die einfachste, die ich mir vorstellen kann, ist eine NewRelic.recordMetric ("Custom/Queue_worker/alive", 1) Anruf. Ich würde nur einen Timer laufen lassen, um diesen Aufruf einmal pro Minute (da dies unser metrischer Erntezyklus ist) für jeden Arbeiter auszuführen. Dann können Sie in einem benutzerdefinierten Dashboard (https://docs.newrelic.com/docs/apm/dashboards-menu/custom-dashboards) die Metrikwerte ignorieren (die gemittelt werden) - es sei denn, Sie haben einen Master, der den Wert "kennt" und ihn so oft melden kann, wie Sie möchten Wirkung durch Melden von 1 + 1 + 1 ... = 1). Sie werden das Feld call_count grafisch darstellen, um zu sehen, wie viele Worker in dieser Minute ausgeführt wurden.

2) In diesem Fall sollten Sie weitgehend dasselbe Muster wie oben verwenden, außer dass Sie für jeden Worker eine andere benutzerdefinierte Metrik erstellen. Glücklicherweise helfen benutzerdefinierte Dashboards mit dem Heavy Lifting hier - machen etwas wie NewRelic.recordMetric ("Benutzerdefiniert/Queue_worker/y/number_of_messages", x) für x = die Anzahl der verarbeiteten Nachrichten, y = ein eindeutiger Bezeichner (GUID? Zufallswert?) pro Arbeiter ... über eine Minute - und dann können Sie einfach Custom/Queue_worker/*/number_of_messages grafisch darstellen, um sie alle auf dem gleichen Graphen anzuzeigen.

3) Lassen Sie jeden Mitarbeiter die gleiche benutzerdefinierte Metrik, Custom/queue_worker/message_sent, und Graph Call Count für diese Metrik einreichen. Erneut können Sie nicht einfach einen Wert für jeden Arbeiter melden, da die nachfolgenden metrischen Daten zusammen gemittelt werden, aber wir behalten eine gute Anzahl an Anrufen für Sie.

4) Sie erhalten MySQL kostenlos (solange Sie den hier aufgelisteten mysql- oder JDBC-Konnektor verwenden: https://docs.newrelic.com/docs/agents/java-agent/getting-started/new-relic-java#h2-compatibility) - er wird in Ihren Grafiken und Transaktionsspuren als 'Datenbank' angezeigt. Für Cassandra haben wir keine spezifische Instrumentierung, aber Sie können die Agenten-API noch einmal verwenden (NewRelic.recordResponseTimeMetric() empfohlen), um dies zumindest aufzuzeichnen und separat grafisch darzustellen.

5) Sie erhalten eine Fehlerrate kostenlos, solange Ihre Fehler aus nicht behandelten Ausnahmen bestehen - oder Sie können jederzeit einen API-Aufruf an NewRelic vornehmen, wenn Sie eine Ausnahme behandeln (oder eine Fehlerbedingung, die Sie markieren möchten). HinweisError(). Wenn die Fehler als unbehandelte Ausnahmen auftreten (sauberer Trick: Behandeln Sie Ihre Ausnahme in Ihrem Code, und wiederholen Sie sie dann, damit unser Agent sie mit dem Kontext sieht), erhalten Sie einen Stack-Trace und alle Metadaten über die Transaktion, die Sie haben aufgezeichnet mit NewRelic.addCustomParameter(). Wir führen keine Logfile-Verarbeitung durch, obwohl Sie ein sehr kleines Programm schreiben könnten, um diese Metriken zu verarbeiten und zu importieren, und da wir pro laufendem Host lizenzieren, nicht pro Agent, könnten Sie dies auf einem bereits lizenzierten ausführen Arbeiter ohne zusätzliche Kosten.

Es gibt viel einfachere Möglichkeiten, dies mit Insights (https://docs.newrelic.com/docs/insights/new-relic-insights) zu tun - zum Beispiel können Sie ohne weitere Arbeit auf die Liste der laufenden Agenten zugreifen, und Sie können Zahlen melden, die nicht gemittelt werden können Rechne und zeichne sie. Aber das ist ein separates Produkt und ich versuche nicht, Sie upselling :)

Hinweis: Ich arbeite für New Relic.

Verwandte Themen