
EKS Auto ModeにデプロイしたKong GatewayをGrafanaで観測する
ゲームソリューション部の えがわ です。
前回構築したKong GatewayをGrafanaで監視してみたいと思います。
環境
- Ubuntu 22.04.4 LTS(WSL2)
- kubectl: v1.31.0
- eksctl: 0.204.0
やってみる
前回構築したKong Gatewayをそのまま使用します。
構築の手順につきましては以下をご確認ください。
StorageClassを作成
PrometheusやGrafanaのデータ永続化のためのStorageClassを作成します。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: eks-auto-ebs-csi-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.eks.amazonaws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
kubectl apply -f ebs-sc.yaml
egawa@HL01559:kong-o11y$ avp kubectl apply -f ebs-sc.yaml
storageclass.storage.k8s.io/eks-auto-ebs-csi-sc created
※コマンドのavpはaws-vaultのエイリアスです。
Prometheus Stackをインストール
Prometheus Stack(kube-prometheus-stack)は、Prometheus、Grafana、Alertmanager などの主要なモニタリングコンポーネントをまとめてデプロイできる Helm チャートです。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
Helmチャート用のvaluesを作成します。
今回は検証環境のため、SSL証明書は設定せずALBのDNS経由で接続します。
Ingressも同時に設定することができますが、同一のALBでパスルーティングしたいため、ここでは設定していません。
# ----------------------
# Alertmanager 設定
# ----------------------
alertmanager:
ingress:
enabled: false
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
storageClassName: eks-auto-ebs-csi-sc
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
retention: 120h
routePrefix: /alertmanager
# ----------------------
# Grafana 設定
# ----------------------
grafana:
adminPassword: "admin"
ingress:
enabled: false
persistence:
enabled: true
type: statefulset
storageClassName: eks-auto-ebs-csi-sc
accessModes:
- ReadWriteOnce
size: 10Gi
finalizers:
- kubernetes.io/pvc-protection
grafana.ini:
server:
root_url: "%(protocol)s://%(domain)s/grafana"
serve_from_sub_path: true
# ----------------------
# Prometheus Operator / Admission Webhooks
# ----------------------
prometheusOperator:
admissionWebhooks:
certManager:
enabled: false
# ----------------------
# Prometheus 設定
# ----------------------
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: eks-auto-ebs-csi-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
retention: 7d
scrapeInterval: 30s
routePrefix: /prometheus
externalUrl: /prometheus
ingress:
enabled: false
helm upgrade -i -f prometheus-stack-values.yaml prometheus-stack prometheus-community/kube-prometheus-stack -n prometheus-stack --create-namespace --wait
egawa@HL01559:kong-o11y$ avp helm upgrade -i -f prometheus-stack-values.yaml prometheus-stack prometheus-community/kube-prometheus-stack -n prometheus-stack --create-namespace --wait
Release "prometheus-stack" has been upgraded. Happy Helming!
NAME: prometheus-stack
LAST DEPLOYED: Thu Feb 27 13:52:31 2025
NAMESPACE: prometheus-stack
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:
kubectl --namespace prometheus-stack get pods -l "release=prometheus-stack"
Get Grafana 'admin' user password by running:
kubectl --namespace prometheus-stack get secrets prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo
Access Grafana local instance:
export POD_NAME=$(kubectl --namespace prometheus-stack get pod -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=prometheus-stack" -oname)
kubectl --namespace prometheus-stack port-forward $POD_NAME 3000
Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
Prometheus StackのIngress設定
単一のALBでパスルーティングしたいので、別途設定ファイルを設けてデプロイします。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prometheus-stack-mono-ingress
namespace: prometheus-stack
annotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]'
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/group.name: "prometheus-stack-monitoring"
spec:
ingressClassName: eks-auto-alb
rules:
- http:
paths:
- path: /grafana
pathType: Prefix
backend:
service:
name: prometheus-stack-grafana
port:
number: 80
- path: /alertmanager
pathType: Prefix
backend:
service:
name: prometheus-stack-kube-prom-alertmanager
port:
number: 9093
- path: /prometheus
pathType: Prefix
backend:
service:
name: prometheus-stack-kube-prom-prometheus
port:
number: 9090
kubectl apply -f prometheus-stack-ingress.yaml
egawa@HL01559:kong-o11y$ avp kubectl apply -f prometheus-stack-ingress.yaml
ingress.networking.k8s.io/prometheus-stack-mono-ingress created
いったん確認
ALBのDNSを確認します。
egawa@HL01559:kong-o11y$ avp kubectl get ingress -n prometheus-stack
NAME CLASS HOSTS ADDRESS PORTS AGE
prometheus-stack-mono-ingress eks-auto-alb * k8s-promethe-promethe-xxxxxxx.us-east-1.elb.amazonaws.com 80 50m
Prometheusのダッシュボードを確認します。
http://{ALBのDNS}/prometheus
Grafanaのダッシュボードを確認します。
http://{ALBのDNS}/grafana
問題なさそうです。
Kong Gatewayプラグインの設定
PrometheusとGrafanaの起動が完了したので、Kong GatewayのPrometheusプラグインを有効にします。
今回はユーザーサービス全体を有効にしてみます。
プラグイン画面に遷移し、Prometheusを選択します。
任意のMetricsを選択します。
設定することでPrometheusプラグインが有効になります。
Kongの設定はこれだけです。
Prometheusのスクレイプ設定
Prometheusからのスクレイプを有効にするため、ServiceMonitorをデプロイします。
Prometheusプラグインを有効にすると/metricsが公開されます。
どのポートを指定すればいいのか分からなかったのですが、ヘルスチェック用ポート(status)を指定することでスクレイピングできました。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kong-gateway-monitor
namespace: prometheus-stack
labels:
release: prometheus-stack
spec:
selector:
matchLabels:
app: kong-gateway
namespaceSelector:
matchNames:
- kong
endpoints:
- port: status
path: /metrics
interval: 15s
kubectl apply -f service-monitor-kong.yaml
egawa@HL01559:kong-o11y$ avp kubectl apply -f service-monitor-kong.yaml
servicemonitor.monitoring.coreos.com/kong-gateway-monitor created
PrometheusのTargetsを確認します。
問題なくスクレイプを行えているようです。
Grafanaのダッシュボードを作成
Grafanaのダッシュボードを作成していきます。
Kong公式がテンプレートを提供しているので、こちらをそのまま使用します。
ダッシュボード画面に遷移し、New dashboardを選択します。
Import Dashboardを選択します。
IDに7424を指定し
Importを押下するとダッシュボードを作成できます。
ダッシュボードを確認
作成したダッシュボードを確認するとリクエスト数やレイテンシーを確認することができます。
さいごに
EKS Auto ModeにデプロイしたKong GatewayをGrafanaで可視化してみました。
EKS Auto Modeを活用することで、複雑な設定作業を最小限に抑えながら、効果的な可観測性基盤を構築できます。
今回は検証のためセキュリティの対策は行っていませんが、本番環境などで使用する場合は必ず考慮してください。
この記事がどなたかの参考になれば幸いです。
参考