2009-09-13 7 views
5

Ich arbeite mit einem System, das aus mehreren Anwendungen und Diensten besteht, wobei fast alle eine SQL-Datenbank verwenden.Verwenden von Leistungsindikatoren zum Verfolgen von Windows-Diensten

Windows-Dienste machen verschiedene Dinge zu unterschiedlichen Zeiten, und ich möchte sie verfolgen. Das heißt, dass auf einigen bereitgestellten Systemen die Maschine hoch auf der CPU läuft, wir sehen, dass der SQL-Prozess hoch läuft, aber wir können nicht sicher sein, welcher Dienst dafür verantwortlich ist.

Ich frage mich, ob Leistungszähler für diesen Job gut sind.

Grundsätzlich möchte ich in einem bestimmten Moment sehen können, welcher Dienst aufgewacht ist und etwas bearbeitet.

Es scheint mir, dass ich am Ende eine perfcounter haben kann, die nur den Wert 0 oder 1 für jeden Dienst hat, um zu zeigen, wenn es etwas tut, aber dies scheint nicht wie eine normale Verwendung für perfcounters.

Sind Leistungszähler geeignet?

Glaubst du, ich sollte das auf eine andere Weise verfolgen?

Antwort

4

Wenn sich Ihr Monitoring-Framework/Ansatz bereits auf die Überwachung von Leistungsindikatoren konzentriert, ist dies ein praktikabler Ansatz.

Persönlich finde ich detailliertere Instrumentierung notwendig, um wirklich zu verstehen, was in meinen Diensten passiert (obwohl das vielleicht mit der Art meiner Dienste zu tun hat).

Ich benutze .NET Logging Framework, weil es einfach ist und auf mehrere Ziele einschließlich Log-Dateien, das Ereignisprotokoll und einen TCP-Socket schreiben kann (Ich habe einen einfachen Monitor, der den Logging-Socket für jeden App-Server abhört und mir in Echtzeit zeigt Zeit, was passiert ist).

+0

zu konfigurieren. Wir werden Log4Net verwenden, um Timings zu behalten, da wir es bereits für die Verfolgung und Fehlerprotokollierung verwenden. – pauloya

1

Leistungsindikatoren sind attraktiv, weil sie wirklich leicht sind, aber wie Sie sagen, erlauben sie nur die Erfassung numerischer Werte. Sicher, es gibt eine Vielzahl von verschiedenen Arten von Werten, die Sie aufzeichnen können, wie Durchschnittswerte, Deltas und Summen, aber sie müssen Zahlen sein.

Wenn Sie mehr Informationen benötigen, müssen Sie auf andere Instrumente zurückgreifen. In deinem Fall klingt es so, als ob dein Bedürfnis mehr in diese Richtung geht.

Wenn Ihre Dienste nicht zu oft aufwachen und sich selbst aussetzen, klingt es wie eine Informationsnachricht an ein benutzerdefiniertes Ereignisprotokoll. Erstellen Sie ein benutzerdefiniertes Ereignisprotokoll für die Anwendung, wenn Sie eine große Menge davon erwarten, damit das reguläre Anwendungsereignisprotokoll nicht überflutet wird.

Die .NET Trace-API wird eine bessere Option sein, wenn Sie erwarten, dass die Instrumentation zu viele Daten für das normale Ereignisprotokoll generiert. Sie können Ihre Anwendung (en) so konfigurieren, dass sie anhand von app/web.config verfolgt werden oder nicht, obwohl für eine Änderung ein Neustart der App erforderlich ist. Dies ist eine gute Option, wenn Sie die Instrumentierung nur für die Fehlerbehebung verwenden möchten, andernfalls jedoch zu viele Daten generiert oder wenn die Überwachung selbst die Leistung zu stark beeinträchtigt. Eine weitere gute Sache über die Ablaufverfolgungs-API ist, dass Sie auf mehreren Ebenen verfolgen können. Selbst wenn Sie Code sehr ausführlich auf Trace geschrieben haben, werden Sie nur diese ausführlichen Ablaufverfolgungsdaten sehen, wenn Sie die ausführliche Ablaufverfolgung aktivieren. Das gibt Ihnen eine bessere Kontrolle darüber, was verfolgt wird.

1

Eric J hat einen guten Punkt. Ich denke, wenn Sie wirklich "Timing" Leistung erfassen möchten, müssen Sie eine andere Art der Protokollierung verwenden und Start-und Stoppzeitprotokolle verwenden.Ich persönlich mag log4net, obwohl es ein Problem sein kann, das erste Mal um