Visualisierung der APIM Gravitee-Analyse in Grafana

Zweifellos bietet die Gravitee-Oberfläche eine sehr visuelle und bequeme Möglichkeit, den Betrieb von Gravitee-Gateways zu visualisieren. In jedem Fall muss dem Überwachungsdienst, den API-Eigentümern oder den Verbrauchern Zugriff auf diese Tools gewährt werden, und gleichzeitig können sie sich außerhalb des geschlossenen Regelkreises befinden, in dem sich der API-Manager befindet. Und es ist immer bequemer, alle verfügbaren Informationen zu verschiedenen APIs auf einem Bildschirm zu haben.

Sehen Sie, was auf Gateways passiert, ohne auf die Besonderheiten der Gravitee-Benutzeroberfläche einzugehen, und Administratoren verschwenden keine Zeit damit, Benutzer zu erstellen und Rollen und Berechtigungen in Gravitee zu trennen.

Habré hatte hier und hier bereits einige Artikel über APIM Gravitee... Daher werde ich in meinem Hinweis implizieren, dass der Leser bereits mit dem Prozess der Installation / Konfiguration von APIM Gravitee und Grafana vertraut ist. Ich werde nur den Prozess der Konfiguration ihrer Integration betrachten.





Warum kannst du nicht den einfachen Weg gehen?

Standardmäßig ist das Repository für Gravitee-Analysen ElasticSearch. Die Informationen werden in vier verschiedenen Indizes mit einer täglichen Aufschlüsselung zusammengefasst:





  • gravitee-request-YYYY.MM.DD - Informationen für jede Anfrage werden hier gespeichert (ähnlich wie access.log in nginx). Dies ist unser Hauptziel;





  • gravitee-log-YYYY.MM.DD - detailliertere Informationen zur Anforderung sind hier bereits gespeichert (vorausgesetzt, das Debuggen ist aktiviert, siehe Abbildung unten). Nämlich die vollständigen Anforderungs- und Antwortheader sowie die Nutzdaten. Abhängig von den Einstellungen kann sowohl der Austausch zwischen dem Verbraucher und dem Gateway und / oder dem Gateway und dem API-Anbieter protokolliert werden.





    Bildschirm zum Aktivieren / Deaktivieren der erweiterten Protokollierung
    Bildschirm zum Aktivieren / Deaktivieren der erweiterten Protokollierung
  • gravitee-monitor-YYYY.MM.DD - wir sind nicht an diesem interessiert;





  • gravitee-health-YYYY.MM.DD - das interessiert uns nicht.





, : ElasticSearch Grafana , .

, , .. - , . , Grafana, . Gravitee . , MongoDB PostgreSQL, . ( Grafana) - , - .





?

PostgreSQL , ElasticSearch (). , Grafana - PostgreSQL, ElasticSearch .

( ).





Interaktionsschema von Gravitee-Modulen
Gravitee

, !

: CentOS 7, APIM Gravitee 3.6, PostgreSQL 11, ElasticSearch 7.+





PostgreSQL ElasticSearch. :





  1. multicorn11 pip, :





    yum install multicorn11 python3-pip
          
          



  2. pip-, python3 ElasticSearch:





    pip3 install pg_es_fdw
          
          



  3. , PostgreSQL. multicorn :





    GRANT USAGE on FOREIGN DATA WRAPPER multicorn TO gatewaytest;
    GRANT USAGE ON FOREIGN SERVER multicorn_es TO gatewaytest;
          
          



     CREATE EXTENSION multicorn;
     CREATE SERVER multicorn_es FOREIGN DATA WRAPPER multicorn
      OPTIONS (wrapper 'pg_es_fdw.ElasticsearchFDW');
          
          



  4. , . logreader:





    GRANT USAGE on FOREIGN DATA WRAPPER multicorn TO logreader;
    GRANT USAGE ON FOREIGN SERVER multicorn_es TO logreader;
          
          



  5. , logging, logreader:





    CREATE SCHEMA logging AUTHORIZATION logreader;
          
          



  6. , :





    CREATE TABLE logging.requests (
      id varchar(36),
      "@timestamp" timestamp with time zone,
      api varchar(36),
      "api-response-time" int,
      application varchar(36),
      custom json,
      endpoint text,
      gateway varchar(36),
      "local-address" varchar(16),
      method int,
      path text,
      plan varchar(36),
      "proxy-latency" int,
      "remote-address" varchar(16),
      "request-content-length" int,
      "response-content-length" int,
      "response-time" int,
      sort text,
      status int,
      subscription varchar(36),
      uri text,
      query TEXT,
      score NUMERIC) PARTITION BY RANGE("@timestamp");
          
          



    , , , - .





  7. , shell- cron:





    #!/bin/sh
    
    NEWPART=${1:-$(date +'%Y.%m.%d')}
    OLDPART=$(date --date='14 days ago' +'%Y.%m.%d')
    
    curl http://gateway.corp/test
    
    psql gateway -U logreader -c "CREATE FOREIGN TABLE logging.\"requests_${NEWPART}\"
    PARTITION OF logging.requests 
      FOR VALUES FROM ('${NEWPART} 00:00:00') TO ('${NEWPART} 23:59:59')
    SERVER multicorn_es
    OPTIONS (
    	host 'els-host',
      port '9200',
      index 'gravitee-request-${NEWPART}',
      rowid_column 'id',
      query_column 'query',
      query_dsl 'false',  
      score_column 'score',
      sort_column 'sort',
      refresh 'false',
      complete_returning 'false',
      timeout '20',
      username 'elastic-ro',
      password 'Sup3rS3cr3tP@ssw0rd');"
      
      psql gateway -U gatewaydev -c "drop foreign table logging.\"requests_${OLDPART}\""
          
          



    :





    • NEWPART - , , ElasticSearch;





    • OLDPART - , , 14 ( ES Curator). , - . , , ;





    • 'curl http://gateway.corp/test', , , API. , , . ;





    • , ;





    • - .









    • TABLE logging.requests LIMIT 1;
            
            



      ,





    -[ RECORD 1 ]-----------+-------------------------------------
    id                      | 55efea8a-9c91-4a61-afea-8a9c917a6133
    @timestamp              | 2021-05-16 00:00:02.025+03
    api                     | 9db39338-1019-453c-b393-381019f53c72
    api-response-time       | 0
    application             | 1
    custom                  | {}
    endpoint                | 
    gateway                 | 7804bc6c-2b72-497f-84bc-6c2b72897fa9
    local-address           | 10.15.79.29
    method                  | 3
    path                    | 
    plan                    | 
    proxy-latency           | 2
    remote-address          | 10.15.79.27
    request-content-length  | 0
    response-content-length | 49
    response-time           | 2
    sort                    | 
    status                  | 401
    subscription            | 
    uri                     | /test
    query                   | 
    score                   | 1.0
    
          
          



, - Gravitee. , , PostgreSQL, . , : , ; ; , .

, Metadata, Grafana.





:





Metadatenabschnitt in Gravitee
Metadata Gravitee

Grafana:





Option zum Anzeigen von Metadaten in Grafana
Metadata Grafana
SELECT
  name "",
  value ""
FROM
  metadata
WHERE
  reference_id='${apis}'
      
      



Bildschirmoption

APIs () - .





SELECT COUNT(*) AS "" FROM apis;
SELECT COUNT(*) AS "" FROM apis WHERE lifecycle_state='STARTED';
      
      



Applications, , applications





API Hits - .





SELECT
  date_trunc('minute',"@timestamp") AS time,
  apis.name,ee  Grafana


  COUNT(*)
FROM
  logging.requests al
JOIN
  apis ON al.api = apis.id
WHERE
  query='@timestamp:[$__from TO $__to]'
GROUP BY 1,2
      
      



Average response time by API - , .





SELECT
  date_trunc('minute',"@timestamp") AS time,
  apis.name,
  AVG(al."api-response-time")
FROM
  logging.requests al
JOIN
  apis ON al.api = apis.id
WHERE
  query='@timestamp:[$__from TO $__to]'
GROUP BY 1,2
      
      



Hits, by gateways, . :





SELECT
  date_trunc('minute',"@timestamp") as time,
  al."local-address",
  COUNT(*)
FROM
  logging.requests al
WHERE
  query='@timestamp:[$__from TO $__to]'
GROUP BY 1,2
      
      



Zeitplan für die Verteilung von Anforderungen nach Gateways

Die obige Lösung ist meiner subjektiven Meinung nach den Standard-Visualisierungstools von APIM Gravitee in keiner Weise unterlegen, sondern nur durch Vorstellungskraft und Bedürfnisse begrenzt.





Angesichts der Tatsache, dass Grafana normalerweise das zentrale Objekt der Überwachungsinfrastruktur ist, liegen die Vorteile einer solchen Lösung auf der Hand: eine breitere Abdeckung, eine höhere Informationsdichte und eine einfache Anpassung der visuellen Darstellungen.





PS

In naher Zukunft ist ein weiterer Artikel zur Integration von Gravitee in ActiveDirectory geplant. Der Prozess ist recht einfach, aber wie immer gibt es Nuancen.





Konstruktive Kritik, Wünsche und Anregungen sind willkommen!








All Articles