AI

API分析比較:Tyk vs Kong vs Moesif でAPI使用状況を可視化・監視する

オープンソースラボ編集部2026年6月14日

API分析比較:Tyk vs Kong vs Moesif でAPI使用状況を可視化・監視する

マイクロサービス・パブリックAPI・内部APIを本番運用する際、どのエンドポイントが遅いか・どのクライアントがエラーを出しているか・APIコストを誰が消費しているかをリアルタイムで把握するAPI分析・ゲートウェイツールが必要です。Tyk(OSS APIゲートウェイ・分析内蔵)・Kong(OSS APIゲートウェイ・Plugin型)・Moesif(専門API分析SaaS)の3つが主要ツールです。

API分析ツールを使う理由

  • SLA管理: レイテンシ・エラー率をリアルタイム監視してSLOを達成
  • コスト配賦: クライアントID・プランごとのAPIコール数・帯域を計測して課金に活用
  • セキュリティ: 異常なリクエストパターン(レートリミット超過・スキャン攻撃)を検知
  • デバッグ: 特定リクエストの全ヘッダー・ボディ・レスポンスをトレース

主要ツールの概要

Tyk

2014年公開、Go製のOSSです。GitHubスター9k+。セルフホストAPIゲートウェイ・デベロッパーポータル・ダッシュボード・Pumpが一体となったAPI管理プラットフォームです。PumpコンポーネントがリクエストデータをElasticsearch・MongoDB・InfluxDB等に送ってリアルタイム分析を提供します。

# docker-compose.yml: Tyk Stack(Gateway + Dashboard + Pump + Redis + MongoDB)
version: "3.8"
services:
  tyk-gateway:
    image: docker.tyk.io/tyk-gateway/tyk-gateway:v5.3
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./tyk/tyk.conf:/opt/tyk-gateway/tyk.conf
      - ./tyk/apps:/opt/tyk-gateway/apps
      - ./tyk/middleware:/opt/tyk-gateway/middleware
    depends_on: [redis]
    environment:
      TYK_GW_STORAGE_HOST: redis

  tyk-pump:
    image: docker.tyk.io/tyk-pump/tyk-pump:v1.9
    restart: unless-stopped
    volumes:
      - ./tyk/pump.conf:/opt/tyk-pump/pump.conf
    depends_on: [redis, mongodb]

  tyk-dashboard:
    image: docker.tyk.io/tyk-dashboard/tyk-dashboard:v5.3
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - ./tyk/tyk_analytics.conf:/opt/tyk-dashboard/tyk_analytics.conf
    depends_on: [mongodb, redis]

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

  mongodb:
    image: mongo:7
    volumes:
      - mongo_data:/data/db

volumes:
  redis_data:
  mongo_data:
# Tyk Dashboard API: 分析データをPythonで取得
import requests
import json
from datetime import datetime, timedelta

TYK_DASHBOARD_URL = 'http://localhost:3000'
AUTH_CODE = 'your-dashboard-auth-code'

headers = {'Authorization': AUTH_CODE}

def get_api_activity(api_id: str, days: int = 7) -> dict:
    '''指定APIの使用量サマリーを取得'''
    params = {
        'p': -1,
        'date': (datetime.now() - timedelta(days=days)).strftime('%Y-%m-%d'),
    }
    resp = requests.get(
        f'{TYK_DASHBOARD_URL}/api/activity/apis/{api_id}',
        headers=headers,
        params=params,
    )
    return resp.json()

def get_endpoint_usage(api_id: str, endpoint: str) -> dict:
    '''特定エンドポイントのメトリクス取得'''
    resp = requests.get(
        f'{TYK_DASHBOARD_URL}/api/activity/apis/{api_id}/endpoint/{endpoint}',
        headers=headers,
    )
    return resp.json()

def get_error_breakdown() -> dict:
    '''エラーコード別の統計取得'''
    resp = requests.get(
        f'{TYK_DASHBOARD_URL}/api/activity/errors',
        headers=headers,
    )
    return resp.json()

# 高エラー率のAPIを検出してSlackに通知
def monitor_api_health():
    import requests as slack_req
    health_data = get_error_breakdown()

    for api in health_data.get('data', []):
        error_rate = api['error'] / max(api['total'], 1)
        if error_rate > 0.05:  # エラー率5%超
            slack_req.post(
                'https://hooks.slack.com/services/YOUR/WEBHOOK/URL',
                json={'text': f'⚠️ API {api["api_name"]} エラー率: {error_rate:.1%}'}
            )

Kong

2015年公開、Lua/Go製のOSSです。GitHubスター39k+。最もPlugin生態系が充実したAPIゲートウェイで、File Log・HTTP Log・StatsD・Prometheusなどのプラグインでリクエストデータを各種バックエンドに転送できます。

# Kong + Konga(UI)+ Prometheus + Grafana
version: "3.8"
services:
  kong:
    image: kong:3.7
    restart: unless-stopped
    environment:
      KONG_DATABASE: 'off'                # DBレスモード
      KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
      KONG_ADMIN_LISTEN: '0.0.0.0:8001'
      KONG_PROXY_LISTEN: '0.0.0.0:8000'
      KONG_PLUGINS: bundled,prometheus
    ports:
      - "8000:8000"
      - "8001:8001"
    volumes:
      - ./kong/kong.yml:/etc/kong/kong.yml

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3001:3000"
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin
# kong.yml: 宣言的設定(DBレスモード)
_format_version: "3.0"
services:
  - name: user-api
    url: http://user-service:8080
    plugins:
      - name: prometheus          # Prometheusメトリクス
        config:
          per_consumer: true
          status_code_metrics: true
          latency_metrics: true
          bandwidth_metrics: true
      - name: rate-limiting
        config:
          minute: 1000
          policy: local
      - name: http-log
        config:
          http_endpoint: http://log-collector:8888/logs
    routes:
      - name: users-route
        paths: [/api/users]
        methods: [GET, POST, PUT, DELETE]

機能比較表

比較項目TykKongMoesif
セルフホスト△(有料)
分析ダッシュボード△(Grafana連携)✅ 最充実
Plugin数✅ 最多N/A
ユーザー行動分析
無料枠OSS無制限OSS無制限35万コール/月

API分析はDevOpsカテゴリ/categories/devopsのPrometheus・Grafanaと組み合わせてKongのメトリクスをリアルタイムダッシュボードで監視します。LLM Toolsカテゴリ/categories/llm-toolsのClaude API・OpenAI APIを内部ゲートウェイに通すことでLLM API費用の部門別集計・コスト配賦を実現します。

FAQ

Q. Kong + PrometheusのGrafanaダッシュボードを設定するには?

A. KongのPrometheusプラグインを有効化してGrafana公式ダッシュボード(ID: 7424)をインポートします。手順: ①Kongのkong.ymlまたはAdmin APIでPrometheusプラグインを有効化②prometheus.ymlでKong scrape設定: - job_name: kong; static_configs: [{targets: ['kong:8001']}]③Grafana→Dashboards→Import→ID「7424」を入力してPrometheusデータソースを選択。主要パネル: リクエストレート(req/s)・P99レイテンシ・HTTP 5xx エラー率・アクティブコネクション数。アラート: Grafana Alertingで「P99 > 500ms」「エラー率 > 1%」のルールを設定してPagerDuty・Slackに通知します。

Q. APIゲートウェイでJWT認証を設定するには?

A. KongのJWTプラグインまたはTykのJWT認証ポリシーで設定します。Kong JWT設定: ①kong.ymlでJWTプラグインを追加: plugins: - name: jwt; config: {secret_is_base64: false, claims_to_verify: [exp]}②コンシューマーを作成→JWTクレデンシャル(ISS・秘密鍵)を発行③クライアントはAuthorizationヘッダーにBearer <JWT>を付けてリクエスト。Tyk JWT設定: ①APIのAuthentication MethodをJWT(RSA or HMAC)に設定②JWK URL(JWKSエンドポイント)を設定してAuth0・Keycloakと統合③Policy IDをJWTのカスタムクレームで指定してレートリミットポリシーを動的に割り当て。

Q. API分析でどんなメトリクスを監視すべきですか?

A. RED Method(Rate・Errors・Duration)とUSE Method(Utilization・Saturation・Errors)が基本です。必須メトリクス: ①リクエストレート(RPS): 正常時と異常時のベースラインを把握②エラー率(4xx/5xx): 1%超でアラート・5%超でインシデント対応③P99レイテンシ: 99パーセンタイルの応答時間(SLOで200ms以下等を設定)④可用性: アップタイムの月次集計(99.9% = 月8.7時間ダウン許容)。高度なメトリクス: ⑤コンシューマー別のAPI使用量(課金・プラン管理)⑥エンドポイント別エラー率(問題のあるAPIを特定)⑦地域別レイテンシ(CDN最適化に活用)。

Q. Tyk PumpをElasticsearchに接続するには?

A. pump.confでElasticsearchバックエンドを設定します。設定例: {"pumps": {"elasticsearch": {"type": "elasticsearch", "meta": {"index_name": "tyk-analytics", "elasticsearch_url": "http://elasticsearch:9200", "enable_sniffing": false}}}}}。インデックスにはtimestampapi_idapi_namepathstatus_coderequest_timeresponse_size等のフィールドが自動生成されます。Kibanaダッシュボード: ①Kibana→Discover→tyk-analytics-*インデックスパターンを作成②Lens/VisualizationでAPIレイテンシのヒストグラム・エラー率の折れ線グラフを作成③KibanaアラートでElasticsearchクエリをトリガーにSlack通知を設定。

まとめ

ユースケース推奨ツール
セルフホスト統合管理・デベロッパーポータルTyk
Plugin豊富・Prometheus連携・K8s対応Kong
ユーザー行動分析・LLM API費用追跡Moesif

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。