CloudWatch AgentでKonnectのData Planeのメトリクスを取得した時のメモ。
こちらを参考にした。
ただ、CloudWatch Agentを使ったPrometheusのメトリクスの取り込みでは、ヒストグラムの取り込みがサポートされていないのであまり実用的ではなく、バッドノウハウの共有に近いかも。
前提
以下の環境で動作確認した。
- Data PlaneはEC2上にDockerで構築
検証手順
まず、Data Plane側でメトリクスが出せるようにStatusAPIを利用する設定を追加してコンテナを起動する。
docker run -d --restart=always --name konnect-dp \
:(省略)
-e "KONG_STATUS_LISTEN=0.0.0.0:8100" \
-p 8100:8100
これでメトリクスが取れるようになる。
$ curl -s localhost:8100/metrics | head
# HELP kong_control_plane_connected Kong connected to control plane, 0 is unconnected
# TYPE kong_control_plane_connected gauge
kong_control_plane_connected 1
次にスクレイプ設定となるprometheus.ymlを作成する。
cat <<EOF > ./konnect-dp-prometheus.yml
global:
scrape_interval: 1m
scrape_timeout: 10s
scrape_configs:
- job_name: 'konnect-dp'
sample_limit: 10000
scrape_interval: 15s
static_configs:
- targets: ['localhost:8100']
EOF
次にAWS側の設定をする。
EC2のロールにCloudWatchAgentServerPolicyのポリシーを割り当てる
CloudWatch AgentをEC2にインストールする。
インストール方法はこちらを参照。
以下はUbuntuの例。
wget https://amazoncloudwatch-agent.s3.amazonaws.com/debian/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i amazon-cloudwatch-agent.deb
インストール後、自動起動を有効化しておく。
sudo systemctl enable amazon-cloudwatch-agent
CloudWatch Agentの設定ファイルを作成する。
cat <<'EOF' | sudo tee /etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/konnect-config.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"logs":{
"metrics_collected":{
"prometheus":{
"cluster_name": "konnect-dp",
"log_group_name": "konnect-dp-logs",
"prometheus_config_path":"/home/ubuntu/cloudwatch-agent/konnect-dp-prometheus.yml",
"emf_processor": {
"metric_declaration_dedup": true,
"metric_namespace": "KonnectDPMetrics",
"metric_declaration": [
{
"source_labels": ["job"],
"label_matcher": ".*",
"dimensions": [
["InstanceId"],
["job"]
],
"metric_selectors": [
".*"
]
}
]
}
}
},
"force_flush_interval": 5
}
}
EOF
CloudWatch Agentに設定を読み込ませる。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/etc/amazon/amazon-cloudwatch-agent/amazon-cloudwatch-agent.d/konnect-config.json
CloudWatch Agentを起動する。
sudo systemctl restart amazon-cloudwatch-agent
状態を確認し、Activeの項目がactive (running)になっていることを確認する。
sudo systemctl status amazon-cloudwatch-agent
CloudWatchを確認する。
カスタム名前空間のところにmetric_namespace設定したNamespaceが作成されている。

数が少ないように見える。
これは前述の通りCloudWatch Agentを使ったPrometheusのメトリクスの取り込みでは、ヒストグラムの取り込みがサポートされていないためである。
なので、レイテンシ系の確認で利用するkong_request_latency_msなどは確認することが出来ない。
取れているものについては以下のような感じで値の推移などを確認できる。

まとめ
上述のように設定自体はそれほど大変ではないが、ヒストグラムが取れないのであまり実用的ではない。
AWS Distro for OpenTelemetry(ADOT)やAmazon Managed Service for Prometheus(AMP)を使いましょう。
