GrafanaでのAPIMGravitee分析の視覚化

間違いなく、Graviteeインターフェースは、Graviteeゲートウェイの操作を視覚化する非常に視覚的で便利な手段を提供します。ただし、いずれの場合も、これらのツールへのアクセスを監視サービス、API所有者、またはコンシューマーに提供する必要があります。同時に、APIマネージャーが配置されている閉ループの外側にある可能性があります。また、さまざまなAPIで利用可能なすべての情報を1つの画面に表示する方が常に便利です。

Graviteeユーザーインターフェイスの詳細に立ち入ることなく、ゲートウェイで何が起こるかを確認できます。管理者は、Gravitee内でユーザーを作成し、役割と特権を分離する時間を無駄にしません。

Habréはすでに、APIM Graviteeに捧げ記事のカップルを持っていたここここ..。したがって、私のメモでは、読者がAPIM GraviteeとGrafanaのインストール/構成のプロセスにすでに精通していることを意味し、それらの統合を構成するプロセスのみを検討します。





なぜあなたは簡単な道を行くことができないのですか?

デフォルトでは、Gravitee分析のリポジトリはElasticSearchです。情報は4つの異なるインデックスに蓄積され、毎日の内訳が示されます。





  • gravitee-request-YYYY.MM.DD-各リクエストの情報がここに保存されます(nginxのaccess.logと同様)。これが私たちの主な目標です。





  • gravitee-log-YYYY.MM.DD-リクエストに関するより詳細な情報はすでにここに保存されています(デバッグが有効になっている場合は、下の図を参照してください)。つまり、完全な要求ヘッダーと応答ヘッダー、およびペイロードです。設定に応じて、コンシューマーとゲートウェイの間、および/またはゲートウェイとAPIプロバイダーの間の交換の両方をログに記録できます。





    高度なロギングの有効化/無効化画面
    高度なロギングの有効化/無効化画面
  • gravitee-monitor-YYYY.MM.DD-これには興味がありません。





  • gravitee-health-YYYY.MM.DD-これは私たちには興味がありません。





, : ElasticSearch Grafana , .

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





?

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

( ).





Graviteeモジュールの相互作用のスキーム
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.





:





Graviteeのメタデータセクション
Metadata Gravitee

Grafana:





Grafanaでメタデータを表示するオプション
Metadata Grafana
SELECT
  name "",
  value ""
FROM
  metadata
WHERE
  reference_id='${apis}'
      
      



画面オプション

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
      
      



ゲートウェイによるリクエストの配信スケジュール

上記の解決策は、私の主観的な意見では、標準のAPIM Gravitee視覚化ツールに劣ることはありませんが、想像力とニーズによってのみ制限されます。





Grafanaは通常、監視インフラストラクチャの中心的なオブジェクトであることを考えると、このようなソリューションの利点は明らかです。つまり、カバレッジが広く、情報密度が高く、視覚的表現を簡単にカスタマイズできます。





PS

近い将来、GraviteeとActiveDirectoryの統合に関する別の記事が計画されています。プロセスは非常に単純ですが、いつものように、ニュアンスがあります。





建設的な批判、願い、提案は大歓迎です!








All Articles