Python StatsD-Clientkonfiguration

Das Erstellen und Bereitstellen hochskalierbarer verteilter Anwendungen in einer sich ständig ändernden Softwareentwicklungsumgebung ist nur die halbe Miete. Die andere Hälfte besteht darin, den Anwendungszustand und die Instanzen zu überwachen und gleichzeitig genaue Metriken aufzuzeichnen.

Möglicherweise möchten Sie sehen, wie viele Ressourcen verbraucht werden, wie viele Dateien von einem speziellen Prozess aufgerufen werden usw. Diese Metriken bieten wertvolle Einblicke in die Ausführung und Verwaltung des Technologie-Stacks. Dies gibt Ihnen die Möglichkeit, die endgültige Leistung Ihres Designs zu verstehen, und hilft Ihnen letztendlich, es zu optimieren.

Die meisten Tools, um die Arbeit zu erledigen, sind bereits vorhanden, aber heute werden wir mehr über StatsD sprechen. Wir zeigen Ihnen, wie Sie Ihren eigenen PythonStatsD-Client bereitstellen, ihn zur Überwachung Ihrer Python-Anwendung verwenden und die endgültig aufgezeichneten Metriken in Ihrer Datenbank speichern. Wenn Sie danach StatsD-Metriken auf einem Grafana-Dashboard mit Prometheus oder Graphite anzeigen möchten, klicken Sie auf MetricFire Eine kostenlose Testversion erhalten Sie unter Book Demo in% 20Client. Aber vorher fangen wir mit StatsD an!

Was ist StatsD?

StatsD ist ein node.js-Projekt, das Statistiken und Systemleistungsmetriken sammelt und abhört. Diese Statistiken werden über das Netzwerk gesendet und können verschiedene Arten von Metrikdaten erfassen. Der Hauptvorteil der Verwendung von StatsD besteht darin, dass es problemlos in andere Tools wie Grafana, Graphite und InfluxDB integriert werden kann.

Vorteile von StatsD

  1. Hervorragende Startzeit
  2. Die Perzentilverarbeitung wird vom Server durchgeführt und bietet eine aggregierte Ansicht mehrerer Instanzen gleichzeitig (für denselben Dienst).
  3. Der clientseitige Overhead ist relativ gering.
  4. Wir verwenden UDP, um alle Daten zu senden, um Verbindungsprobleme zu vermeiden.
  5. Einfach, effektiv und einfach zu implementieren, wenn kurzlebige Apps erstellt werden.
  6. Metriken werden erst bei der Ankunft auf den Server übertragen, was zu einer geringen Speichernutzung führt.

Aber ... was bedeutet es, "gepusht" zu werden, wenn eine Metrik eingeht?

Es gibt zwei Hauptausführungsmodelle für Metrikberichte. Im Pull-Modell "verschrottet" das Überwachungssystem die App auf einem bestimmten HTTP-Endpunkt. In dem von StatsD verwendeten Push-Modell sendet die Anwendung die Metrik an das Überwachungssystem.

Voraussetzungen und Installation

  1. Zuerst muss Python 3.6 oder höher und pip auf Ihrem System installiert sein.

Sie können Ihre Python-Installation überprüfen, indem Sie den folgenden Befehl auf einem Linux-, Windows- oder MacOS-System ausführen.

$ python --version

Wenn es nicht installiert ist, lesen Sie die Installationsanweisungen Ihres Systems (https://www.makeuseof.com/tag/install-pip-for-python/).

  1. StatsD, Flask, Flask-StatsD werden benötigt und flaschenbezogene Metriken werden automatisch erfasst. Darüber hinaus benötigen Sie eine virtuelle Umgebung. Dies ist ein Tool zum Erstellen einer isolierten Python-Umgebung, und SQLALCHEMY ist eine Beispieldatenbank.
pip install StatsD, flask, Flask-StatsD, virtualenv, Flask-SQLAlchemy

Pip installiert automatisch die neuesten Versionen dieser Pakete.

Spielen wir mit dem StatsD-Paket

Beginnen Sie mit der Implementierung des Basis-Timers.

import statsd
timer = statsd.Timer('Statsd_Tutorial_Application')
timer.start()
# we can do just about anything over here
timer.stop('TutorialTimer')

Ebenso für Basiszähler:

import statsd
counter = statsd.Counter('Statsd_Tutorial_Application')
# again do anything random over here
counter += 1

Überwachung mit Kolben

In diesem Lernprogramm entwerfen Sie eine grundlegende Aufgabenlistenanwendung in Flask und zeichnen Betriebsmetriken auf.

Das vollständige Tutorial-Repository kann von Github abgerufen werden.

Schritt 1: Importabhängigkeiten-5-12:

from flask import Flask, request
from flask import render_template
from flask import redirect
from flask_sqlalchemy import SQLAlchemy
import time
import statsd

Schritt 2: Starten Sie die Flask-App, den Statsd-Client und die 14. DB-Zeile: 23. Zeile:

c = statsd.StatsClient('localhost',8125)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

Erstellen Sie eine Taskklasse und definieren Sie sie in den DB-Modellzeilen 26-35:

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text)
    done = db.Column(db.Boolean, default=False)

    def __init__(self, content):
        self.content = content
        self.done = False

db.create_all()
  1. Erstellen Sie eine Variablen-ID für die DB-Spalte, die die Ganzzahl als Primärschlüssel enthält.
  2. Erstellen Sie eine Textinhaltsspalte.
  3. Erstellen Sie eine boolesche Spalte mit dem Standardwert false, um anzugeben, ob die Aufgabe abgeschlossen / gelöst wurde.
  4. Starten Sie die Inhalts- und Abschlussspalten.
  5. Geben Sie die Datenbank in einem druckbaren Format zurück.
  6. Erstellen und starten Sie eine neue Datenbank.

Fügen Sie nun eine Aufgabenzeile 42-57 hinzu:

@app.route('/task', methods=['POST'])
def add_task():
    start=time.time()
    content = request.form['content']
    if not content:
     dur = (time.time() - start) *1000
     c.timing("errortime",dur)
     c.incr("errorcount")
        return 'Error'

    task = Task(content)
    db.session.add(task)
    db.session.commit()
    dur = (time.time() - start) *1000
    c.timing("tasktime",dur)
    c.incr("taskcount")

Dieser Code fügt den Inhalt der vom Formular empfangenen Aufgabe zur POST-Anforderung hinzu. Wichtiger ist hier jedoch der hinzugefügte Metrikbericht.

  1. Der Basis-Timer startet, sobald die Funktion startet.
  2. Wenn der Inhalt fehlerhaft ist, wird der Fehler am Basiszähler erhöht. Ebenso wird die Fehlerzeit aufgezeichnet. Schließlich wird ein Fehler zurückgegeben.
  3. Wenn die Datenbank eine Aufgabe hinzufügt, berechnet sie die volle Zeit, zu der die Funktion ausgeführt wurde, und aktualisiert den Inkrementierer. Der Gesamtzeitraum wird ebenfalls aktualisiert.

Task-Lines 60-65 löschen:

@app.route('/delete/<int:task_id>')
def delete_task(task_id):
    task = Task.query.get(task_id)
    db.session.delete(task)
    db.session.commit()
    c.incr("deletecount")

Der obige Code führt eine Aufgabenlöschung aus der Datenbank durch, indem dem Basiszähler eine Löschanzahl für Inkremente hinzugefügt wird.

Senden von Metriken von pyStatsD an MetricFire

Das Aufzeichnen dieser Metriken mit StatsD ist für Anfänger hilfreich. In Produktionsumgebungen mit mehr Industriequalität müssen diese Metriken jedoch von Diensten verarbeitet werden, die das Speichern und Verarbeiten von Diagrammen erleichtern. Hier kommt Graphite ins Spiel.

Einführung in Graphit:

Graphite wurde als Überwachungstool entwickelt, mit dem die Leistung von Websites, Anwendungen / anderen Diensten und Netzwerkservern verfolgt werden kann. Graphit hat in der Welt der Technologie für Aufsehen gesorgt und im Wesentlichen eine neue Generation von Überwachungstools in Gang gesetzt, die das Teilen und Visualisieren sowie Speichern und Abrufen von Zeitreihendaten erheblich vereinfachen.

Graphit führt grundsätzlich zwei Operationen aus.

--Speichern Sie numerische Zeitreihendaten —— Rendern Sie das Diagramm dieser Daten bei Bedarf

Graphit ist kein Sammelmittel und sollte nicht wie ein Sammelmittel behandelt werden. Vielmehr bietet es einen einfacheren Weg, um Messungen in eine Zeitreihen-DB zu bekommen. Führen Sie den folgenden einzeiligen Befehl aus, um das Senden einer Metrik von einem Server oder einem lokalen Computer an eine bereits ausgeführte Graphitinstanz zu testen:

`$ echo "foo.bar 1 `date +%s`" | nc localhost 2003`

Nach der Installation protokollieren Sie einfach die Metrik in StatsD und Graphite ruft alle protokollierten Daten ab. Nun, Graphite scheint eine große Sache zu sein, aber es gibt immer noch bestimmte Graphite-Fallbacks, die Entwickler beheben möchten. Hier kommt MetricFire ins Spiel.

Warum MetricFire:

  1. Bietet Graphite-as-a-Service
  2. Ein integrierter Agent wurde hinzugefügt, um die Lücke in der aktuellen Graphite-Version zu schließen
  3. Ermöglichen Sie Teamkonten, frühere Probleme bei der Zusammenarbeit zu lösen
  4. Benutzerdefinierte detaillierte Dashboard-Berechtigungen
  5. Hervorragende Integration mit anderen Diensten wie AWS, Heroku
  6. Der Betrieb über API verbessert die Entwicklung
  7. Stündliche Sicherung der Dashboard- und Benutzerdaten
  8. Einfach und schnell nach Bedarf skalieren
  9. Solide Erfolgsbilanz bei der Graphitüberwachung
  10. 24/7 Unterstützung durch erfahrene Ingenieure
  11. Einfache Verwendung mit Plug-and-Play-Modell

Wenn Sie jedoch weiterhin selbst gehostete und selbstverwaltete Dienste und die vollständige Kontrolle über alles wünschen, ist die Verwendung von StatsD und Docker eine einfache Möglichkeit, Graphit zu starten.

Einsatz

StatsD kann in Ihrer bevorzugten Umgebung mithilfe Ihrer bevorzugten Architektur und anderer Dienste / Mikrodienste bereitgestellt werden. Stellen Sie sicher, dass alle clientseitigen Apps, die Metriken an den StatsD-Server senden, für den StatsD-Server erreichbar sind. Auf diese Weise wird sich StatsD nicht darüber beschweren.

Just In: AWS Cloudwatch unterstützt auch StatsD-Metriken, wenn Sie die AWS-Cloud zum Hosten Ihrer Infrastruktur verwenden (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch). -Agent-custom -metrics-statsd.html) ist jetzt verfügbar.

Für die Visualisierung der von uns gesammelten Metriken ist Grafana das De-facto-Visualisierungswerkzeug.

Wenn Sie es selbst ausprobieren möchten, melden Sie sich für eine Demo an (https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Configuring%20Python%20StatsD%20Client) und wir Kann über die besten Graphit- und Prometheus-Überwachungslösungen für Sie sprechen. Fühlen Sie sich frei, eine Reservierung zu machen.

StatsD API

Der Python StatsD-Client verfügt außerdem über eine API, die Sie über eine HTTP-Anforderung auslösen können, wenn Sie sie integrieren möchten.

Referenz

Recommended Posts

Python StatsD-Clientkonfiguration
Verwenden Sie LiquidTap Python Client ③
Verwenden Sie LiquidTap Python Client ②
Verwenden Sie LiquidTap Python Client ①
Versuchen Sie es mit Kubernetes Client -Python-
Einfacher IRC-Client mit Python
Python
[google-oauth] [python] Google APIs-Clientbibliothek für Python
Ein einfacher HTTP-Client, der in Python implementiert ist
Einfacher Slack API-Client mit Python
Schreiben Sie einen TCP-Client mit Python Twisted
Bearbeiten Sie BigQuery-Tabellen von einem Python-Client aus
"Erste elastische Suche" beginnend mit einem Python-Client
Ich habe mit Python eine Einstellungsdatei erstellt