Microservices mit Application Performance Monitoring in Oracle Cloud überwachen und verfolgen

Die Überwachung von Microservices kann aufgrund der Komplexität ihrer Architektur und ihres verteilten Bereitstellungsmodells eine Herausforderung darstellen.

Microservices-Anwendungen können aus Tausenden von unabhängigen Services bestehen, die in vielen verschiedenen Systemen bereitgestellt werden, während jeder Service mit seinem Prozess ausgeführt wird. Die herkömmlichen Überwachungsansätze, die sich auf bestimmte Ressourcen und Zustandsmonitore konzentrieren, sind nicht mehr wirksam, wenn der Transaktionsfluss verfolgt oder Probleme in Microservices-Anwendungen debuggt werden.

Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) ermöglicht die automatische OpenTracing-Instrumentierung für Microservices und erfasst vollständige End-to-End-Benutzertransaktionen, damit Sie sowohl die Benutzererfahrung als auch die Anwendungsperformance verstehen. APM umfasst eine Implementierung eines verteilten Tracing-Systems, das das Instanz-, End-to-End- und Transaktions-Tracing ermöglicht. Es ermöglicht auch die Überwachung von App-Servern und Geschäftsmetriken.

Architektur

Diese Referenzarchitektur zeigt, wie Sie mit Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) eine Microservice-Anwendung überwachen, die im OCI Kubernetes Engine-(OKE-)Cluster bereitgestellt wird.

Die folgenden Architekturdiagramme zeigen eine Microservices-Anwendung, die in einem Kubernetes-Cluster bereitgestellt wird. Die Anwendung wird auf einem Anwendungsserver mit zwei Deployment-Replikaten gehostet und stellt über JDBC eine Verbindung zu einer Oracle Autonomous Database her. Endbenutzer greifen über eine auf Oracle Cloud gehostete Weboberfläche auf die Anwendung zu. Jedes Diagramm zeigt einen anderen Ansatz:

  • Operator OpenTelemetry: Beim ersten Ansatz wird der Kubernetes-Operator verwendet, um die automatische Injektion von Java-Agents in virtuelle Java-Maschinen (JVMs) zu vereinfachen, die in Kubernetes-Pods ausgeführt werden.

  • Gemeinsames Dateisystem: Bei der zweiten Methode wird ein gemeinsam genutztes Dateisystem verwendet, um einen APM-Agent bereitzustellen und bereitzustellen.

Beide Methoden können Java-Anwendungsserver oder Frameworks überwachen, wie Oracle WebLogic Server oder Spring Boot, die auf Kubernetes bereitgestellt werden.

Das folgende Diagramm zeigt die Implementierung des Operators OpenTelemetry:



apm-microservices-open-telemetry-oracle.zip

Datenflüsse in dieser Architektur wie folgt:

A: Stellen Sie den APM-Java-Agent in Kubernetes-Pods bereit.
  1. Erstellen Sie eine APM-Domain in OCI, und rufen Sie die Endpunkt-URL für den Datenupload sowie private und öffentliche Datenschlüssel der Domain ab.
  2. Erstellen Sie ein gemeinsam verwendetes Dateisystem in OCI, und erstellen Sie Kubernetes-Speicherobjekte, wie z.B. ein persistentes Volume im OKE-Cluster.
  3. Laden Sie den APM-Java-Agent aus der APM-Domain herunter, und stellen Sie ihn im gemounteten Volume bereit.
  4. Stellen Sie den APM-Agent in der Anwendung bereit, indem Sie die YAML-Dateien für die Kubernetes-Deployments oder StatefulSets aktualisieren.

B: Der Operator OpenTelemetry lädt den Java-Agent automatisch in den lokalen Cache herunter. Der Java Agent wird lokal auf den einzelnen Replikaten im OKE-Cluster installiert.

C: Server- und JDBC-Traces, Spans und Metriken werden an die APM-Domain gesendet. Nachdem die Kubernetes-Pods neu gestartet wurden, werden Traces und Spans vom Server an die APM-Domain gesendet, in der sich die Endpunkt-URL für den Datenupload befindet.

D: Browsertraces, Spans und Metriken werden an die APM-Domain gesendet. Erfasste Daten können in den APM-Dashboards und im Trace-Explorer für Performance- und Verfügbarkeitsanalysen visualisiert werden.

Das folgende Diagramm zeigt die Implementierung des Shared File Systems:



apm-microservices-arc-oracle.zip

Datenflüsse in dieser Architektur wie folgt:

A: Stellen Sie den APM-Java-Agent in Kubernetes-Pods bereit.
  1. Erstellen Sie eine APM-Domain in OCI, und rufen Sie die Endpunkt-URL für den Datenupload sowie private und öffentliche Datenschlüssel der Domain ab.
  2. Erstellen Sie ein gemeinsam verwendetes Dateisystem in OCI, und erstellen Sie Kubernetes-Speicherobjekte, wie z.B. ein persistentes Volume im OKE-Cluster.
  3. Laden Sie den APM-Java-Agent aus der APM-Domain herunter, und stellen Sie ihn im gemounteten Volume bereit.
  4. Stellen Sie den APM-Agent in der Anwendung bereit, indem Sie die YAML-Dateien für die Kubernetes-Deployments oder StatefulSets aktualisieren.

B: Server- und JDBC-Traces, Spans und Metriken werden an die APM-Domain gesendet. Nachdem die Kubernetes-Pods neu gestartet wurden, werden Traces und Spans vom Server an die APM-Domain gesendet, in der sich die Endpunkt-URL für den Datenupload befindet.

C: Browsertraces, Spans und Metriken werden an die APM-Domain gesendet. Erfasste Daten können in den APM-Dashboards und im Trace-Explorer für Performance- und Verfügbarkeitsanalysen visualisiert werden.

Diese Architektur umfasst die folgenden Komponenten:

  • Tenancy

    Ein Mandant ist eine sichere und isolierte Partition, die Oracle in Oracle Cloud einrichtet, wenn Sie sich für Oracle Cloud Infrastructure registrieren. Sie können Ihre Ressourcen in OCI in Ihrem Mandanten erstellen, organisieren und verwalten. Ein Mandant ist ein Synonym für ein Unternehmen oder eine Organisation. In der Regel verfügt ein Unternehmen über einen einzigen Mandanten und spiegelt seine Organisationsstruktur innerhalb dieses Mandanten wider. Ein einzelner Mandant ist in der Regel mit einem einzelnen Abonnement verknüpft, und ein einzelnes Abonnement hat in der Regel nur einen Mandanten.

  • Region

    Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält und Availability-Domains hostet. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).

  • Compartment

    Compartments sind regionsübergreifende logische Partitionen innerhalb eines Oracle Cloud Infrastructure-Mandanten. Mit Compartments können Sie Nutzungsquoten für Ihre Oracle Cloud-Ressourcen organisieren, den Zugriff kontrollieren und festlegen. In einem bestimmten Compartment definieren Sie Policys, die den Zugriff kontrollieren und Berechtigungen für Ressourcen festlegen.

  • Virtuelles Cloud-Netzwerk (VCN) und Subnetze

    Ein VCN ist ein anpassbares, softwaredefiniertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten. Wie herkömmliche Data Center-Netzwerke erhalten Sie mit VCNs die Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke aufweisen, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain beschränken. Jedes Subnetz besteht aus einem Bereich zusammenhängender Adressen, die sich nicht mit anderen Subnetzen im VCN überschneiden. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.

    In dieser Architektur sind alle Compute-Instanzen, die das Reds-Cluster hosten, an ein einzelnes regionales Subnetz angehängt.

  • Sicherheitslisten

    Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, der in und aus dem Subnetz zulässig ist.

    Diese Architektur fügt Ingress-Regeln für TCP-Ports 16379 und 6379 hinzu. Port 6379 bedient Reds-Clients, und Port 16379 wird vom Reds-Clusterbus verwendet.

  • Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine oder OKE) ist ein vollständig verwalteter, skalierbarer und hoch verfügbarer Service, mit dem Sie Ihre Containeranwendungen in der Cloud bereitstellen können. Sie geben die Compute-Ressourcen an, die Ihre Anwendungen benötigen, und Kubernetes Engine stellt sie in Oracle Cloud Infrastructure in einem vorhandenen Mandanten bereit. OKE automatisiert mit Kubernetes das Deployment, die Skalierung und die Verwaltung containerisierter Anwendungen über Cluster von Hosts hinweg.

  • Autonomous Transaction Processing

    Oracle Autonomous Transaction Processing ist ein selbststeuernder, selbstsichernder, selbstreparierender Datenbankservice, der für Transaktionsverarbeitungs-Workloads optimiert ist. Sie müssen keine Hardware konfigurieren oder verwalten oder Software installieren. Mit Oracle Cloud Infrastructure können Sie die Datenbank erstellen, sichern, patchen, aktualisieren und optimieren.

  • Application Performance Monitoring

    Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) ist eine Platform-as-a-Service-(PaaS-)basierte Lösung, die einen umfassenden Einblick in die Performance Ihrer Anwendung bietet, vom Endbenutzer bis hin zu Anwendungslogs. Der Service integriert Benutzererlebnisinformationen, Anwendungsmetriken und Logdatenanalysen.

    • APM-Domain

      Die APM-Domain ist ein Oracle Cloud Infrastructure-(OCI-)Ressourcentyp, der die von APM überwachten Systeme enthält.

      Jede APM-Domain wird in einem standardmäßigen OCI-Compartment erstellt. Sie können OCI-Zugriffskontroll-Policys definieren, um einer bestimmten Gruppe von Benutzern Zugriff auf die APM-Domain zu erteilen.

    • Datenschlüssel

      Datenschlüssel sind erforderlich, um sicherzustellen, dass APM die von den Datenquellen erfassten Beobachtungen akzeptiert. Die Datenschlüssel werden beim Erstellen einer APM-Domain generiert und haben zwei Typen: Public Data Key und Private Data Key

    • Datenuploadendpunkt-URL

      Der Datenuploadendpunkt ist die URL, an die eine Datenquelle ihre Beobachtungen sendet. Der Datenuploadendpunkt wird beim Erstellen einer APM-Domain generiert. Jede APM-Domain hat ihren Datenuploadendpunkt.

    • Operator OpenTelemetry

      Der Operator OpenTelemetry ist ein Kubernetes-Operator, der die automatische Injektion von Java-Agents in JVMs vereinfacht, die in Kubernetes-Pods ausgeführt werden.

    • APM-Java-Agent

      APM-Java-Agents erfassen Spans und Metriken von Anwendungsservern und senden sie an APM.

    • APM-Browser-Agents

      APM-Browser-Agents erfassen Benutzerinteraktionen mit Websites und senden Spans und Metriken an APM.

    • Trace und Span

      Ein Trace ist der vollständige Ablauf einer Anforderung, während diese alle Komponenten eines verteilten Systems in einem bestimmten Zeitraum durchläuft. Ein Span umfasst Vorgänge oder logische Arbeitseinheiten in einem Trace und hat einen Namen, eine Startzeit und eine Dauer.

Empfehlungen

Ihre Anforderungen können von der hier beschriebenen Architektur abweichen. Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt für den Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM).

  • APM-Browser-Agent

    Stellen Sie den APM-Browser-Agent auf der Webschnittstelle der Anwendung bereit, um die Endbenutzerüberwachung zu aktivieren. Traces beginnen mit der Benutzeraktion im Browser.

  • Synthetisches Monitoring

    Konfigurieren Sie das synthetische Monitoring, um die Anwendungsbenutzeroberfläche und API-Endpunkte zu überwachen und Verfügbarkeits- und Performanceprobleme proaktiv zu erkennen. Sie können browserbasierte oder REST-basierte Monitore erstellen und deren regelmäßige Ausführung von globalen Standorten oder aus dem virtuellen Cloud-Mandantennetzwerk (VCN) planen.

Hinweise

Beachten Sie Folgendes, wenn Sie Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) verwenden.

  • Datenschlüssel

    Verwenden Sie benutzerdefinierte Datenschlüssel, um die an APM gesendeten Daten zu verwalten. Zusätzlich zu den Standarddatenschlüsseln können Sie eigene Datenschlüssel für bestimmte Zwecke erstellen. Bei großen Deployments, bei denen viele Personen APM verwenden, stellen Sie verschiedenen Projekteigentümern verschiedene Schlüssel zur Verfügung, damit Sie als APM-Domainadministrator einfach steuern können, welche Daten in APM aufgenommen werden und welche nicht.

    Beispiel: APM empfängt ein Dataset von einem abgebrochenen Projekt und Sie möchten die Datenerfassung deaktivieren. Da der Projektverantwortliche die Organisation verlassen hat, ist es jedoch schwierig zu identifizieren, welche Agents deaktiviert werden sollen. Sie können den vom Projekt verwendeten Datenschlüssel löschen, um die mit diesem Datenschlüssel verknüpften Daten zu ignorieren.

  • Kubernetes-Ressourcen

    Wenn Sie Microservices konfigurieren, sollten Sie StatefulSets anstelle von Deployments verwenden, wenn Sie Kubernetes-Podressourcen konfigurieren, um die Historie in APM besser zu verfolgen. Deployment-Pods ändern ihre IDs, wenn sie neu generiert werden. StatefulSets werden mit demselben ID-Index neu generiert (Beispiel: SS_0, SS_1, SS_2). Dadurch wird das Tracing der Historie mit APM vereinfacht.

  • APM-Service-Name

    Beim Provisioning des APM-Java-Agent müssen Sie den in APM verwendeten Servicenamen angeben. Verwenden Sie den Deployment-/StatefulSet-Namen als APM serviceName für konsistentes Tracing in APM.

  • Sampling

    Verwenden Sie Stichproben in Anwendungen mit hohem Volumen (z. B. 1 Million Transaktionen pro Sekunde). APM erfasst standardmäßig alle Spans und ermöglicht es Ihnen, alle Transaktionen Ihrer Anwendung zu verfolgen. Dies kann jedoch bei Anwendungen mit hohem Volumen viele Spans generieren. In solchen Fällen sollten Sie die Stichprobenkonfiguration explizit angeben, um die Kosteneffizienz zu verbessern und die Menge der Trace-Daten zu reduzieren.

Stellen Sie

Beziehen Sie sich auf die Schritt-für-Schritt-Anweisungen in den folgenden Oracle LiveLabs-Workshops, wenn Sie den in dieser Referenzarchitektur beschriebenen APM-Java-Agent bereitstellen.

Danksagungen

  • Author: Yutaka Takatsu
  • Contributors: Avi Huber, Robert Lies