ADC

Überwachen Sie NetScaler, Anwendungen und Anwendungssicherheit mit Prometheus

Metriken sind eine numerische Darstellung von Daten, die über einen bestimmten Zeitraum gemessen werden. Metrische Daten sind nützlich, um den Zustand eines Systems im Laufe der Zeit zu verfolgen. Prometheus ist ein Open-Source-Überwachungstool, das Kennzahlendaten sammelt und diese Daten mit einem Zeitstempel speichert, zu dem die Daten aufgezeichnet wurden.

Durch die Überwachung und Analyse von Metriken können Sie den Zustand Ihrer Anwendungen verfolgen, Anomalien erkennen, Warnmeldungen erstellen und die erforderlichen Korrekturmaßnahmen ergreifen, um eine robuste Softwarebereitstellung zu gewährleisten.

NetScaler unterstützt jetzt den direkten Export von Metriken nach Prometheus. Sie können die umfangreichen Metriken von NetScaler ADC verwenden, um den NetScaler-Zustand und den Anwendungsstatus zu überwachen. Sie können beispielsweise Metriken zur CPU- und Speichernutzung sammeln, um den Zustand von NetScaler zu ermitteln. In ähnlicher Weise können Sie Metriken wie die Anzahl der pro Sekunde empfangenen HTTP-Anfragen oder die Anzahl der aktiven Clients verwenden, um den Zustand der Anwendung zu überwachen.

Export von Metriken von NetScaler nach Prometheus

NetScaler unterstützt den Prometheus-Pull-Modus sowie den Push-Modus. Im Pull-Modus müssen Sie ein Zeitreihenprofil konfigurieren, das Prometheus in regelmäßigen Abständen abfragt und die Metrikdaten direkt abruft, ohne dass eine Exporter-Ressource dazwischen liegt. Im Pull-Modus können Sie einem Benutzer ohne Superuser-Rechte den Lesezugriff aktivieren, um Metriken nach Prometheus zu exportieren. Mit Grafana können Sie die nach Prometheus exportierten NetScaler-Metriken visualisieren, um sie einfacher zu interpretieren und zu verstehen.

Das folgende Diagramm zeigt eine Integration von Prometheus und Grafana mit NetScaler.

NetScaler-Integration mit Prometheus und Grafana

Konfigurieren Sie den Export von Metriken von NetScaler nach Prometheus und die Visualisierung mit Grafana

Sie müssen die folgenden Schritte ausführen, um den Export von Metriken von NetScaler nach Prometheus zu konfigurieren und mit Grafana zu visualisieren.

  1. Konfigurieren Sie NetScaler mit einem Zeitreihenanalyseprofil für den Export von Metriken nach Prometheus.
  2. Installieren Sie Prometheus und konfigurieren Sie es mit den NetScaler-spezifischen Parametern.
  3. Konfigurieren Sie den Prometheus-Lesezugriff für Benutzer, die keine Superuser sind.
  4. Fügen Sie Prometheus als Datenquelle in Grafana hinzu.
  5. Erstellen Sie eine Visualisierung in Grafana.

Konfigurieren Sie ein Zeitreihenanalyseprofil auf NetScaler, um den Prometheus-Pull-Modus zu unterstützen

Führen Sie die folgenden Schritte aus, um den Pull-Modus mit der NetScaler CLI zu konfigurieren:

  1. Erstellen Sie ein Analyseprofil mit dem Typ als Zeitreihe. Geben Sie die Schemadatei mit den erforderlichen NetScaler-Metriken an.

     add analytics profile <timeseries_profile_name> -type timeseries -schemaFile <name_of_schema_file> -outputMode Prometheus -serveMode PULL -metrics ENABLED
    <!--NeedCopy-->
    

    In diesem Befehl:

    • timeseries_profile_name: Geben Sie den Namen des Zeitreihenprofils an.
    • schemaFile: Geben Sie den Namen der Schemadatei mit NetScaler-Zählern an. Standardmäßig ist eine Schemadatei /var/metrics_conf/schema.json mit einer Liste von Zählern konfiguriert. Eine Referenzschemadatei reference_schema.json mit allen unterstützten Zählern ist ebenfalls unter dem Pfad /var/metrics_conf/ verfügbar. Diese Schemadatei kann als Referenz verwendet werden, um eine benutzerdefinierte Liste von Zählern zu erstellen. Wenn Sie die Schemadatei angeben, wird der Pfad der Schemadatei /var/metrics_conf/ automatisch hinzugefügt und Sie müssen nur den Namen der Schemadatei angeben. Wenn Sie beispielsweise eine Schemadatei schema1.json mit einer benutzerdefinierten Liste von Leistungsindikatoren unter /var/metrics_conf/ erstellt haben, müssen Sie nur den Dateinamen als schema1.json angeben.

      Hinweis:

      Konfigurieren Sie die folgenden Zeichenfolgenzähler nicht, da sie für Prometheus nicht unterstützt werden:

      • si_peer_ip_str
      • cl_cur_vleader
      • cl_cur_nodeip
      • gslb_site_ip_str
      • gslb_site_publicip_str
      • vsvr_IPstr
      • nic_cur_if_alias
      • vsvr_DynamicProtocolStr
      • api_endpoint_apiname
    • outputMode: Stellen Sie den Ausgabemodus auf Prometheus ein.
    • serveMode: Geben Sie den Prometheus-Pull-Modus an.
    • metrics: Aktivieren Sie das Erfassen von Metriken von NetScaler.

    Hinweis:

    Mit dem Befehl add können Sie ein Analyseprofil mit allen erforderlichen Parametern konfigurieren. Wenn Sie nach der Erstellung des Profils Änderungen vornehmen müssen, können Sie den Befehl set verwenden, um die entsprechenden Maßnahmen zu ergreifen, z. B. die Metriken zu deaktivieren und den Servermodus zu ändern. Sie können den schreibgeschützten Prometheus-Zugriff für einen Nicht-Superuser konfigurieren. Weitere Informationen finden Sie unter Konfiguration des schreibgeschützten Prometheus-Zugriffs für Nicht-Superuser.

Installieren und konfigurieren Sie Prometheus für den Metrikenexport aus NetScaler

Sie können Prometheus von Repositorys wie DockerHub oder Quay oder dem offiziellen Prometheus-Repository herunterladen.

Um Prometheus als Docker-Container auszuführen, verwenden Sie den folgenden Befehl:

docker run -dp 39090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml --name native_prom prom/prometheus:latest
<!--NeedCopy-->

Hinweis:

Hier wird /tmp/prometheus.yml als Pfad zur Datei prometheus.yml verwendet. Stattdessen können Sie den Pfad auf Ihrer virtuellen Maschine angeben.

Sie müssen das prometheus.yml mit den NetScaler-Parametern bearbeiten.

Um Metriken aus NetScaler zu exportieren, müssen Sie im Abschnitt Prometheus YAML Scrape-Konfiguration die folgenden NetScaler-spezifischen Parameter angeben. Der Abschnitt Scrape-Konfiguration spezifiziert eine Reihe von Zielen und Konfigurationsparametern, die beschreiben, wie sie ausgelesen werden.

  • metrics_path : Geben Sie den HTTP-Ressourcenpfad in NetScaler an, um Metriken abzurufen. Dieser Parameter ist optional und der Standardpfad ist /metrics. Wenn kein Wert definiert ist, fügt Prometheus “/metrics” als Pfad hinzu.
  • username: Geben Sie den NetScaler-Benutzernamen an.
  • password: Geben Sie das NetScaler-Kennwort an.
  • targets: Geben Sie die IP-Adresse des NetScaler an, von dem Sie die Metriken exportieren müssen, und den Port, den Sie verfügbar machen möchten.
  • profilename : Geben Sie anstelle von den Namen des profilenameProfils an. Der profilenameParameter ist optional und akzeptiert einen benutzerdefinierten Zeitreihenprofilnamen. Wenn profile nameder Parameter fehlt, wird ns_analytics_time_series_profile er als Profilname betrachtet.
  • follow_redirects: Konfigurieren Sie, ob HTTP-Anfragen auf HTTP 3xx-Weiterleitungen folgen. Dieser Parameter ist optional und der Standardwert wird von Prometheus auf gesetzttrue. Wenn Sie diesen Parameter konfigurieren, müssen Sie den Wert auf setzentrue.

Im Folgenden finden Sie den Abschnitt zur Scrap-Konfiguration der Prometheus-YAML, um die NetScaler-IP-Adresse als Ziel auf Prometheus hinzuzufügen, um Metriken zu exportieren. Hier wird HTTP als Schema verwendet. Sie können entweder HTTP oder HTTPS verwenden.

  scrape_configs:
    - job_name: 'vpx2_metrics_direct'
      metrics_path: /metrics
      params:
        profilename:
        - 'profile_name'
      basic_auth:
        username: 'prom_user'
        password: 'user_password'
      scheme: http
      scrape_interval: 30s
      follow_redirects: true
      static_configs:
      - targets: ['10.102.34.231:80']
<!--NeedCopy-->

Konfigurieren Sie den schreibgeschützten Prometheus-Zugriff für einen Nicht-Superuser

Gehen Sie wie folgt vor, um den schreibgeschützten Prometheus-Zugriff für einen Nicht-Superuser zu konfigurieren.

  1. Fügen Sie der NetScaler Appliance einen neuen Benutzer hinzu.

    add system user <ns_user_name> <ns_user's_password> -externalAuth enabled -promptString user-%u-at-%T logging enabled
    <!--NeedCopy-->
    

    Beispiel:

    add system user nspaul nspaul -externalAuth enabled -promptString user-%u-at-%T logging enabled
    <!--NeedCopy-->
    
  2. Erstellen Sie eine Befehlsrichtlinie für einen schreibgeschützten Benutzer. Diese Befehlsrichtlinie ermöglicht den schreibgeschützten Zugriff von jeder Datei unter dem /var/nslog/ directory.

    add system cmdPolicy read-only-prometheus ALLOW "(^man.*)|(^show\s+(?!system)(?!configstatus)(?!ns ns\.conf)(?!ns savedconfig)(?!ns runningConfig)(?!gslb runningConfig)(?!audit messages)(?!techsupport).*)|(^stat.*)|(show system file .* -filelocation "/var/nslog")"
    <!--NeedCopy-->
    
  3. Wenn Metriken nur in eine bestimmte Datei geschrieben werden, können Sie den Benutzerzugriff sogar so einschränken, dass sie nur diese bestimmte Datei abrufen können.

    add system cmdPolicy read-only-prometheus ALLOW "(^man.*)|(^show\s+(!system)(!configstatus)(!ns ns\.conf)(!ns savedconfig) (!ns runningConfig)(!gslb   runningConfig)(!audit messages)(!techsupport).*)|(^stat.*) |(show system file metrics_prom_<name_of_timeseries_profile>.log -filelocation "/var/nslog")"
    <!--NeedCopy-->
    

    Hinweis:

    Geben Sie im show system file Befehl den Namen des Zeitreihenprofils an, das Sie anstelle von konfiguriert haben name_of_ timeseries_profile.

  4. Binden Sie einen Benutzer an die Befehlsrichtlinie.

    bind system user <userName> ((<policyName> <priority>) | -partitionName <string>)
    <!--NeedCopy-->
    

    Zum Beispiel:

    bind system user user1 read-only-prometheus 0
    <!--NeedCopy-->
    

Verwenden Sie die folgenden Befehle, um einen Benutzer aus der Befehlsrichtlinie zu entbinden und ihn aus der Befehlsrichtlinie zu entfernen:

  1. Entbindet einen konfigurierten Benutzer von der Systembefehlsrichtlinie.

    unbind system user <userName> (<policyName> | -partitionName <string>
    <!--NeedCopy-->
    

    Beispiel:

    unbind system user user1 read-only-prometheus
    <!--NeedCopy-->
    
  2. Entfernen Sie die Befehlsrichtlinie aus NetScaler.

    rm system cmdPolicy read-only-prometheus
    <!--NeedCopy-->
    

Fügen Sie Prometheus als Datenquelle in Grafana hinzu

Wenn Sie Metriken mithilfe von Grafana-Dashboards visualisieren möchten, müssen Sie Prometheus als Datenquelle in Grafana hinzufügen. Weitere Informationen finden Sie unter Hinzufügen von Prometheus als Datenquelle in Grafana.

Erstellen Sie die Visualisierung von Metriken in Grafana

Sie können ein Grafana-Dashboard erstellen und die wichtigsten Kennzahlen und den entsprechenden Visualisierungstyp auswählen.

Das folgende Verfahren zeigt, wie Sie dem Grafana-Bedienfeld eine Metrik hinzufügen und ein Beispiel für ein Visualisierungs-Dashboard erstellen.

  1. Geben Sie den Titel des Panels an.
  2. Geben Sie auf der Registerkarte Abfrage für die Abfrage A die erforderliche Metrik an.
  3. Wählen Sie auf der Registerkarte Einstellungen den Visualisierungstypaus.

Sie können die Daten und ihre Darstellung in Grafana ändern. Weitere Informationen finden Sie in der Grafana-Dokumentation.

Im Folgenden finden Sie ein Beispiel für ein Grafana-Dashboard mit einigen NetScaler-Metriken:

Beispiel für ein Grafana-Dashboard

In diesem Dashboard sehen Sie Grafiken für verschiedene NetScaler-Metriken wie:

  • vsvr_tot_Hits: Zeigt die Anzahl der vom virtuellen Server empfangenen Anfragen an.
  • cc_cpu_use: Zeigt den Prozentsatz der CPU-Auslastung an.
  • http_tot_Requests: Zeigt empfangene HTTP-Anfragen an.
  • serv_tot_serviced: Zeigt an, dass die Anfrage bearbeitet wird.
  • mem_cur_used_size: Zeigt den aktuell verwendeten Speicher der NetScaler Appliance an.

Beispiele für Prometheus-Grafiken

Mit dem Prometheus-Expressionsbrowser können Sie die vom Prometheus-Server gesammelten Zeitreihenmetriken anzeigen. Sie können auf den Expressionsbrowser zugreifen, indem Sie prometheu-server-ip-address/graph in Ihrem Browser auf zeigen. Sie können einen Ausdruck eingeben und das Ergebnis entweder als Tabelle oder als Grafik im Zeitverlauf sehen. Geben Sie an, welche genaue Metrik Sie anzeigen möchten, indem Sie den Namen der Metrik in das Feld Ausdruck eingeben. Sie können mehrere Zähler mithilfe verschiedener Bedienfelder angeben.

Das folgende Diagramm zeigt Prometheus-Diagramme für zwei NetScaler-Metriken cpu_use und http_tot_requests.

Beispiel für ein Prometheus-Dashboard

Beispiel für ein Grafana-Dashboard

NetScaler unterstützt Beispiel-Dashboards auf Grafana. Eine vollständige Liste der von Grafana unterstützten Beispiel-Dashboards und deren Details finden Sie unter Beispiel-Dashboardsfür Grafana.

Sie können die Beispiel-Dashboards von der NetScaler-Downloadseite herunterladen.

Weitere Informationen

Schema mit den erforderlichen NetScaler-Zählern für den Export

Metrics Collector exportiert die in der konfigurierten Schemadatei vorhandenen Zähler. Die /var/metrics_conf/schema.json Datei ist die Standardschemadatei, die im Analyseprofil konfiguriert ist.

Die Schemadatei ist eine Liste von Entitätstypen und zugehörigen Zählern. Im Schema sind alle Zähler auf globaler Ebene oder auf Systemebene nach dem Entitätstyp netscaler gruppiert. Einige der globalen Zähler sind die CPU-Auslastung (cpu_use), die Verwaltungs-CPU-Auslastung (mgmt_cpu_use) und die Gesamtzahl der empfangenen HTTP-Anfragen (http_tot_Requests). Die spezifischen Leistungsindikatoren für Dienstgruppen, lbvserver, csvserver, usw. sind unter den jeweiligen Entitätstypen aufgeführt.

Im Folgenden finden Sie ein Beispiel für Zähler in der Datei schema.json für die virtuelle Authentifizierungsserver-Entität (vserver_authn).

"vserver_authn":
  [
      {"name":"si_tot_Requests","rate":"True"},
      {"name":"si_tot_Responses","rate":"True"},
      {"name":"si_tot_RequestBytes","rate":"True"},
      {"name":"si_cur_state","rate":"False"},
      {"name":"si_tot_ResponseBytes","rate":"True"},
      {"name":"si_peer_port","rate":"True"},
      {"name":"vsvr_Protocol","rate":"False"}
  ]
<!--NeedCopy-->

In der folgenden Tabelle werden die in diesem Beispiel genannten Leistungsindikatoren erläutert:

Indikatorname Beschreibung
si_tot_Requests Gesamtzahl der auf diesem Dienst oder virtuellen Server eingegangenen Anfragen.
si_tot_Responses Gesamtzahl der auf diesem Dienst oder virtuellen Server eingegangenen Antworten.
si_tot_RequestBytes Gesamtzahl der auf diesem Dienst oder virtuellen Server empfangenen Anforderungsbytes.
si_cur_state Aktueller Status des virtuellen Servers.
si_tot_ResponseBytes Gesamtzahl der auf diesem Dienst oder virtuellen Server empfangenen Antwortbytes.
si_peer_port Der Port, auf dem der Dienst ausgeführt wird.
vsvr_Protocol Mit dem virtuellen Server verknüpftes Protokoll.

Das Feld rate kann auf True festgelegt werden, wenn der Ratenwert eines Zählers exportiert werden muss. Beispielsweise wird die Rate von si_tot_Requests exportiert, wenn rate auf True für si_tot_Requests festgelegt ist.

Im Folgenden finden Sie ein Beispiel für Zähler der netscaler Entität.

"netscaler":
  [
      {"name":"cpu_use","rate":"False"},
      {"name":"mgmt_cpu_use","rate":"False"},
      {"name":"tcp_tot_rxpkts","rate":"True"},
      {"name":"tcp_tot_rxbytes","rate":"True"},
      {"name":"tcp_tot_txpkts","rate":"True"},
      {"name":"tcp_tot_txbytes","rate":"True"},
      {"name":"tcp_cur_ClientConnEst","rate":"False"},
      {"name":"tcp_cur_ServerConnEst","rate":"False"},
      {"name":"tcp_cur_ClientConn","rate":"False"},
      {"name":"tcp_cur_ClientConnClosing","rate":"False"},
      {"name":"tcp_tot_ClientOpen","rate":"True"},
      {"name":"tcp_cur_ServerConn","rate":"False"},
      {"name":"tcp_cur_ServerConnClosing","rate":"False"},
      {"name":"http_tot_Requests","rate":"True"},
      {"name":"http_tot_Responses","rate":"True"},
      {"name":"http_tot_Gets","rate":"True"},
      {"name":"http_tot_Posts","rate":"True"},
      {"name":"http_tot_Others","rate":"True"},
  ]
<!--NeedCopy-->

In der folgenden Tabelle werden die in diesem Beispiel genannten Leistungsindikatoren erläutert:

Indikatorname Beschreibung
cpu_use Zeichnet die prozentuale CPU-Auslastung auf (CPU-Auslastungsprozentsatz * 10).
tcp_tot_rxpkts Empfangene TCP-Pakete.
tcp_tot_rxbytes Empfangene Byte an TCP-Daten.
tcp_tot_txpkts TCP-Pakete wurden übertragen.
tcp_tot_txbytes Byte an übertragenen TCP-Daten.
tcp_cur_ClientConnEst Aktuelle Client-Verbindungen befinden sich im Status Established, was darauf hinweist, dass eine Datenübertragung zwischen der NetScaler-Appliance und dem Client stattfinden kann.
tcp_cur_ServerConnEst Aktuelle Serververbindungen befinden sich im Status Etabliert, was darauf hinweist, dass eine Datenübertragung zwischen der NetScaler-Appliance und dem Server stattfinden kann.
tcp_cur_ClientConn Client-Verbindungen, einschließlich Verbindungen im Status “Öffnet”, “Aufgebaut” und “Wird geschlossen”. Serververbindungen, einschließlich Verbindungen im Status Wird geöffnet, hergestellt und geschlossen.
tcp_cur_ClientConnClosing Client-Verbindungen im Status “Beenden”, was darauf hinweist, dass der Verbindungsabbruch zwar eingeleitet, aber noch nicht abgeschlossen ist.
tcp_cur_ServerConn Serververbindungen, einschließlich Verbindungen im Status Wird geöffnet, hergestellt und geschlossen.
tcp_cur_ServerConnClosing Serververbindungen im Status “Beenden”, was darauf hinweist, dass der Verbindungsabbruch zwar eingeleitet, aber noch nicht abgeschlossen ist.
http_tot_Requests Dieser Zähler verfolgt HTTP-Anfragen, die mit der GET-Methode empfangen wurden.
http_tot_Responses Dieser Zähler verfolgt HTTP-Anfragen, die mit der POST-Methode empfangen wurden.
http_tot_Gets Dieser Zähler verfolgt HTTP-Anfragen, die mit der GET-Methode empfangen wurden.
http_tot_Posts Dieser Zähler verfolgt empfangene HTTP-Anfragen.
http_tot_Others Dieser Zähler verfolgt HTTP-Anfragen, die mit anderen Methoden als GET und POST empfangen wurden.

Im Folgenden finden Sie ein Beispiel für Zähler der vserver_ssl Entität.

"vserver_ssl":
  [
    {"name":"ssl_ctx_tot_session_hits","rate":"True"},
    {"name":"ssl_ctx_tot_session_new","rate":"True"},
    {"name":"ssl_ctx_tot_enc_bytes","rate":"True"},
    {"name":"ssl_ctx_tot_dec_bytes","rate":"True"},
  ]
<!--NeedCopy-->

In der folgenden Tabelle werden die in diesem Beispiel genannten SSL-Zähler erläutert:

Indikatorname Beschreibung
ssl_ctx_tot_session_hits Dieser Zähler verfolgt die Anzahl der Sitzungszugriffe.
ssl_ctx_tot_session_new Dieser Zähler verfolgt die Anzahl der neu erstellten Sitzungen.
ssl_ctx_tot_enc_bytes Dieser Zähler verfolgt die Anzahl der verschlüsselten Bytes pro virtuellem SSL-Server.
ssl_ctx_tot_dec_bytes Dieser Zähler verfolgt die Anzahl der Byte, die pro virtuellem SSL-Server entschlüsselt wurden.

Abonnement von Zählern für mehrere Zeitreihenprofile

NetScaler unterstützt die Erstellung mehrerer Zeitreihenprofile und gibt für jedes Profil unterschiedliche Leistungsindikatoren an. Außerdem können Sie nur die Zähler exportieren, die Ihren Anforderungen entsprechen.

Sie müssen mehrere schema.json Dateien erstellen, die die erforderlichen Zähler mit eindeutigen Namen und der .json Erweiterung enthalten, um mehrere Zeitreihenprofile zu konfigurieren. Eine Referenzschemadatei reference_schema.json ist unter dem Pfad /var/metrics_conf/ für Ihre Referenz verfügbar.

Die Konfiguration der beiden neuen Zeitreihenprofile sieht wie folgt aus:

  add analytics profile ns_analytics_timeseries_profile_1   -type timeseries -schemaFile schema1.json

  set analytics profile  ns_analytics_timeseries_profile_1 -outputMode prometheus -serveMode PULL -metrics ENABLED

  add analytics profile ns_analytics_timeseries_profile_2   -type timeseries -schemaFile schema2.json

  set analytics profile  ns_analytics_timeseries_profile_2 -outputMode prometheus -serveMode PULL -metrics ENABLED
  <!--NeedCopy-->

In diesem Beispiel haben schema1.json und schema2.json unterschiedliche Zählersätze.

Prometheus-Konfiguration

Die Konfiguration einer prometheus.yml Beispieldatei sieht wie folgt aus:

scrape_configs:
  - job_name: 'vpx2_metrics_direct'
    metrics_path: /metrics
    params:
     - 'profile_name'
    basic_auth:
     username: 'prom_user'
     password: 'user_password'
    scheme: https
    scrape_interval: 30s
    follow_redirects: true
    static_configs:
     - targets: ['ADC1-ip:port', 'ADC2-ip:port']
<!--NeedCopy-->