旧バージョンのドキュメントを参照しています。 最新のドキュメントはこちらをご参照ください。
InfluxDBのVitals
Vitalsデータ用の時系列データベースを活用することで、Kongクラスタを支えるデータベースに追加の書き込み負荷をかけることなく、トラフィックが非常に高いKong Gateway Enterpriseクラスタ(数万または数十万のデータを処理する環境など)でリクエストとVitalsのパフォーマンスを向上させることができます。
データベースをバックエンドとしてKong Vitalsを使用する方法については、Kong Vitalsを参照してください。
InfluxDBを使用したKong Vitalsの設定
InfluxDB データベースの起動
本番環境向けのInfluxDBインストールは別の作業としてデプロイされる必要がありますが、概念実証のテストでは、ローカルInfluxDBインスタンスをDockerで実行することは可能です。
-
コンテナがお互いを検出して通信できるようにカスタムネットワークを作成します。
docker network create kong-ee-net
-
Dockerを使用してローカルInfluxDBインスタンスを起動します。
docker run -d -p 8086:8086 \ --network=kong-ee-net \ --name influxdb \ -e INFLUXDB_DB=kong \ influxdb:1.8.4-alpine
InfluxDB 2.0は動作 しない ため、 必ず InfluxDB 1.8.4-alpine を使用する必要があります。
Vitals データを InfluxDB に書き込むには、
kong
データベースを作成する必要があります。これはINFLUXDB_DB
変数を使用して行われます。
Kong Gatewayのインストール
すでにKong Gatewayインスタンスがある場合は、ライセンスのデプロイに進みます。
まだKong Gatewayをインストールしていない場合、Dockerインストールは このガイドの目的に適しています。
Kong Gateway Dockerイメージをプルします {#pull-image}
-
次のDockerイメージをプルします。
docker pull kong/kong-gateway:3.4.3.13
一部の古いKong Gatewayイメージは一般に公開されていません。 特定のパッチバージョンが必要で、KongのパブリックDocker Hubページから見つけられない場合は、Kongサポートにお問い合わせください。
これで、Kong Gateway イメージがローカルに作成されました。
-
画像にタグを付けます。
docker tag kong/kong-gateway:3.4.3.13 kong-ee
データベースと Kong Gateway コンテナの起動
-
PostgreSQL コンテナを起動します。
docker run -d --name kong-ee-database \ --network=kong-ee-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ -e "POSTGRES_PASSWORD=kong" \ postgres:9.6
-
Kongデータベースを準備します。
docker run --rm --network=kong-ee-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-ee-database" \ -e "KONG_PG_PASSWORD=kong" \ -e "KONG_PASSWORD=kongpass" \ kong-ee kong migrations bootstrap
-
Kong ManagerとInfluxDBを使用してゲートウェイを起動します。
重要: 以下の設定は、デフォルトの
admin_listen
設定をオーバーライドして、あらゆるソースからのリクエストをリッスンするため、非本番環境での使用 のみ を目的としています。インターネットに直接公開される環境では、これらの設定を使用 しない でください。
本番環境で「admin_listen」ポートをインターネットに公開する必要がある場合は、 [secure it with authentication](/gateway/3.4.x/production/running-kong/secure-admin-api/).
```sh
docker run -d --name kong-ee --network=kong-ee-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-ee-database" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
-e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
-e "KONG_VITALS_STRATEGY=influxdb" \
-e "KONG_VITALS_TSDB_ADDRESS=influxdb:8086" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-p 8002:8002 \
-p 8445:8445 \
-p 8003:8003 \
-p 8004:8004 \
kong-ee
```
{:.note}
> **Note:** For `KONG_ADMIN_GUI_URL`, replace `localhost`
with with the DNS name or IP of the Docker host. `KONG_ADMIN_GUI_URL`
_should_ have a protocol, for example, `http://`.
Kong Gateway ライセンスのデプロイ
Kong GatewayインスタンスにすでにKong Gateway Enterpriseライセンスを添付している場合、 InfluxDBでVitalsを設定するに進んでください。
Kong Gatewayインスタンスに有効な Kong Gateway Enterpriseライセンスが添付されていない限り、Kong Vitals機能にはアクセスできません。
ライセンスファイルは、次のいずれかの方法でデプロイできます。
メソッド | サポートされているデプロイの種類 |
---|---|
/licenses Admin APIエンドポイント |
• 従来のデータベースを利用したデプロイメント • ハイブリッドモードのデプロイメント |
ノードファイルシステム上のファイル ( license.json ) |
- 従来のデータベースを利用したデプロイメント - DBレスモード |
フルライセンスを含む環境変数 ( KONG_LICENSE_DATA ) |
- 従来のデータベースを利用したデプロイメント - DBレスモード |
ライセンスファイルへのパスを含む環境変数 ( KONG_LICENSE_PATH ) |
- 従来のデータベースを利用したデプロイメント - DBレスモード |
推奨される方法は、Admin APIを使用することです。
重要:
- コントロールプレーンの
/license
エンドポイントを使用してライセンスをデプロイすると、コントロールプレーンは接続されたデータプレーンにライセンスを自動的に伝達します。KONG_LICENSE_DATA
またはKONG_LICENSE_PATH
環境変数を使用してライセンスをデプロイすると、コントロールプレーンはライセンスをデータプレーンノードに伝達 しません 。各データプレーンノードにライセンスを追加する 必要があり 、各ノードはライセンスで起動する 必要があります 。ノードの起動後にライセンスを追加することはできません。ハイブリッドモードのデプロイでは、この方法の使用はお勧めしません。
前提条件
- Kongから
license.json
ファイルを受け取りました。 - Kong Gateway がインストールされています。
####ライセンスをデプロイする
InfluxDB Kong Gatewayを使用してVitalsを構成
注: DockerへのKong Gatewayのインストール の構成を使用した場合は 、この手順を完了する必要はありません。
Kong Vitalsを有効にすることに加えて、InfluxDBをVitalsのバッキングストラテジとして使用するよう Kong Gatewayを構成する必要があります。InfluxDBのホストとポートも定義する必要があります。
echo "KONG_VITALS_STRATEGY=influxdb KONG_VITALS_TSDB_ADDRESS=influxdb:8086 kong reload exit" \
| docker exec -i kong-ee /bin/sh
注 :ハイブリッドモードでは、コントロールプレーンとすべてのデータプレーンの両方で
vitals_strategy
とvitals_tsdb_address
を構成します。
InfluxDB測定を使用したVitalsデータの理解
Kong Vitalsは、2つのInfluxDB測定でメトリクスを記録します。
-
kong_request
: リクエストのレイテンシと HTTP のフィールド値、リクエストに関連するさまざまな Kong エンティティ(対象のルートやサービスなど)のタグが含まれています。 -
kong_datastore_cache
:キャッシュのヒットとミスに関するポイントを含みます。
Docker で実行中の InfluxDB インスタンスの測定スキーマを表示するには以下のようにします。
-
InfluxDB Dockerコンテナでコマンドラインを開きます。
docker exec -it influxdb /bin/sh
-
InfluxDB CLIにログインします。
influx -precision rfc3339
-
指定されたデータベースに関連するタグキーのリストを返す InfluxQL クエリを入力します。
> SHOW TAG KEYS ON kong
結果の例:
name: kong_request tagKey ------ consumer hostname route service status_f wid workspace name: kong_datastore_cache tagKey ------ hostname wid
-
フィールドキーとフィールド値のデータ型を返すInfluxQLクエリを入力します。
> SHOW FIELD KEYS ON kong
結果の例:
name: kong_request fieldKey fieldType -------- --------- kong_latency integer proxy_latency integer request_latency integer status integer name: kong_datastore_cache fieldKey fieldType -------- --------- hits integer misses integer
タグ wid
は、同じタイミングで送信される重複したメトリクスを避けるために、ホストごとの一意のワーカー ID を区別するために使用されます。
上で示したように、 kong_request
測定のシリーズカーディナリティは、Kongクラスタ構成のカーディナリティに基づいて変化します。Kongが処理するサービス/ルート/コンシューマ/ワークスペースの組み合わせの数が増加すると、Vitalsによって書き込まれるシリーズカーディナリティも増加します。
VitalsのInfluxDBノード/クラスターのサイズ設定
InfluxDBノード/クラスタの適切なサイジングに関しては、 InfluxDBのサイジングガイドライン を参考にしてください。
注: Vitalsデータを読み込む場合のクエリ動作は、InfluxDBサイズ設定ガイドラインの定義に従って「中程度」の読み込みカテゴリに該当します。Vitals API応答を生成するために、いくつかの
GROUP BY
ステートメントと関数が使用され、数十万、数百万のデータポイントが存在する場合の実行では大量のCPUリソースが必要になります。
クエリの頻度と精度
Kongは、Vitalsメトリックをバッファリングし、InfluxDBポイントをバッチで書き込むことで、InfluxDB のスループットを向上させ、Kong プロキシパスのオーバーヘッドを削減させます。各Kongワーカープロセスは、10秒ごと、または5000データポイントごと(いずれか早い方)にメトリックのバッファをフラッシュします。
メトリクスポイントはミリ秒(u
)単位の精度で記述されます。Vitals APIに準拠するには、測定値は秒でグループ化されて呼び戻されます。
注: OpenResty APIには制限があるため、マイクロ秒の精度で値を書き込むには、リクエストごとに追加のシステムコールが必要です。
Kongデータベースの保持ポリシー管理
Vitals InfluxDBデータポイントはKong を通じた保持ポリシーによりダウンサンプリングまたは管理されません。
Vitalsデータポイントの管理に必要なディスク容量とメモリを削減するため、InfluxDBオペレータはkong
データベースの保持ポリシーを手動で管理することが推奨されます。