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!
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.
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.
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/).
pip install StatsD, flask, Flask-StatsD, virtualenv, Flask-SQLAlchemy
Pip installiert automatisch die neuesten Versionen dieser Pakete.
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
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()
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.
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.
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.
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.
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.
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.
Recommended Posts