PrometheusとGrafanaを使用してNetScalerのメトリクスを表示する
NetScaler Metrics ExporterとPrometheus-Operatorを使用して、NetScaler VPXまたはCPXイングレデバイス、およびNetScaler CPX (east-west) デバイスを監視できます。
NetScaler メトリクス エクスポーター
NetScaler Metrics Exporterは、NetScalerの統計情報を収集し、
HTTPを使用してPrometheusにエクスポートするシンプルなサーバーです。その後、PrometheusをGrafanaのデータソースとして追加し、NetScalerの統計情報をグラフィカルに表示できます。詳細については、NetScaler Metrics Exporterを参照してください。
注:
NetScaler Metrics Exporterは、NetScalerの管理パーティションからのメトリクスエクスポートをサポートしています。
Prometheus Operatorを起動する
Prometheus Operatorは、Kubernetes上のサービスを監視するための広範な方法を提供します。開始するには、このトピックでは
kube-prometheusとそのマニフェストファイルを使用します。マニフェストファイルは、基本的な動作モデルをデプロイするのに役立ちます。以下のコマンドを使用して、Kubernetes環境にPrometheus Operatorをデプロイします。
git clone https://github.com/coreos/kube-prometheus.git
kubectl create -f kube-prometheus/manifests/setup/
kubectl create -f kube-prometheus/manifests/
Prometheus-Operatorをデプロイすると、いくつかのポッドとサービスがデプロイされます。デプロイされたポッドのうち、
prometheus-k8s-xxポッドはメトリクス集約とタイムスタンプ用であり、grafanaポッドは視覚化用です。クラスターで実行されているすべてのコンテナイメージを表示すると、次の出力が表示されます。
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 2h
alertmanager-main-1 2/2 Running 0 2h
alertmanager-main-2 2/2 Running 0 2h
grafana-5b68464b84-5fvxq 1/1 Running 0 2h
kube-state-metrics-6588b6b755-d6ftg 4/4 Running 0 2h
node-exporter-4hbcp 2/2 Running 0 2h
node-exporter-kn9dg 2/2 Running 0 2h
node-exporter-tpxhp 2/2 Running 0 2h
prometheus-k8s-0 3/3 Running 1 2h
prometheus-k8s-1 3/3 Running 1 2h
prometheus-operator-7d9fd546c4-m8t7v 1/1 Running 0 2h
注:
manifestsフォルダー内のファイルは相互に依存しているため、作成順序が重要です。特定のシナリオでは、マニフェストファイルが順不同で作成され、Kubernetesからエラーメッセージが表示されることがあります。 このシナリオを解決するには、kubectl create -f kube-prometheus/manifests/コマンドを再実行してください。初回に満たされていない依存関係のために作成されなかったYAMLファイルは、これで作成されます。
PrometheusおよびGrafanaポッドをNodePort経由で公開することをお勧めします。そのためには、
prometheus-service.yamlおよびgrafana-service.yamlファイルを次のように変更する必要があります。
Prometheusサービスを変更する
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort
ports:
- name: web
port: 9090
targetPort: web
selector:
app: prometheus
prometheus: k8s
prometheus-service.yamlファイルを変更した後、以下のコマンドを使用してKubernetesクラスターに変更を適用します。
kubectl apply -f prometheus-service.yaml
Grafanaサービスを変更する
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitoring
spec:
type: NodePort
ports:
- name: http
port: 3000
targetPort: http
selector:
app: grafana
grafana-service.yamlファイルを変更した後、以下のコマンドを使用してKubernetesクラスターに変更を適用します。
kubectl apply -f grafana-service.yaml
NetScaler Metrics Exporter の構成
このトピックでは、NetScaler Metrics Exporter を NetScaler VPX または CPX イングレスデバイス、あるいは NetScaler CPX (east-west) デバイスと統合する方法について説明します。
NetScaler VPX イングレスデバイス用の NetScaler Metrics Exporter の構成
イングレス NetScaler VPX デバイスを監視するには、NetScaler Metrics Exporter は Kubernetes クラスター内でポッドとして実行されます。NetScaler VPX イングレスデバイスの IP アドレスは、NetScaler Metrics Exporter への引数として提供されます。ADC にアクセスするためのログイン資格情報を提供するには、シークレットを作成し、ボリュームをマウントパス「/mnt/nslogin」にマウントします。
kubectl create secret generic nslogin --from-literal=username=<citrix-adc-user> --from-literal=password=<citrix-adc-password> -n <namespace>
エクスポーターをデプロイするための YAML ファイルの例を次に示します。
apiVersion: v1
kind: Pod
metadata:
name: exporter-vpx-ingress
labels:
app: exporter-vpx-ingress
spec:
containers:
- name: exporter
image: "quay.io/citrix/citrix-adc-metrics-exporter:1.4.8"
imagePullPolicy: IfNotPresent
args:
- "--target-nsip=<IP_of_VPX>"
- "--port=8888"
volumeMounts:
- name: nslogin
mountPath: "/mnt/nslogin"
readOnly: true
securityContext:
readOnlyRootFilesystem: true
volumes:
- name: nslogin
secret:
secretName: nslogin
---
kind: Service
apiVersion: v1
metadata:
name: exporter-vpx-ingress
labels:
service-type: citrix-adc-monitor
spec:
selector:
app: exporter-vpx-ingress
ports:
- name: exporter-port
port: 8888
targetPort: 8888
NetScaler VPX デバイスの IP アドレスとポートは、
--target-nsip パラメーターで指定する必要があります。例: --target-nsip=10.0.0.20。
NetScaler CPX イングレスデバイス用の NetScaler Metrics Exporter の構成
NetScaler CPX イングレスデバイスを監視するには、NetScaler Metrics Exporter は NetScaler CPX のサイドカーとして追加されます。エクスポーターをサイドカーとして持つ NetScaler CPX イングレスデバイスの YAML ファイルの例を次に示します。
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: cpx-ingress
name: cpx-ingress
spec:
replicas: 1
selector:
matchLabels:
app: cpx-ingress
template:
metadata:
annotations:
NETSCALER_AS_APP: "True"
labels:
app: cpx-ingress
spec:
containers:
- env:
- name: EULA
value: "YES"
- name: NS_PROTOCOL
value: HTTP
- name: NS_PORT
value: "9080"
#Define the NITRO port here
image: quay.io/citrix/citrix-k8s-cpx-ingress:13.0-52.24
imagePullPolicy: IfNotPresent
name: cpx-ingress
ports:
- containerPort: 80
name: http
protocol: TCP
- containerPort: 443
name: https
protocol: TCP
- containerPort: 9080
name: nitro-http
protocol: TCP
- containerPort: 9443
name: nitro-https
protocol: TCP
securityContext:
privileged: true
# Adding exporter as a sidecar
- args:
- --target-nsip=192.0.0.2
- --port=8888
- --secure=no
env:
- name: NS_USER
value: nsroot
- name: NS_PASSWORD
value: nsroot
image: quay.io/citrix/citrix-adc-metrics-exporter:1.4.8
imagePullPolicy: IfNotPresent
name: exporter
securityContext:
readOnlyRootFilesystem: true
serviceAccountName: cpx
---
kind: Service
apiVersion: v1
metadata:
name: exporter-cpx-ingress
labels:
service-type: citrix-adc-monitor
spec:
selector:
app: cpx-ingress
ports:
- name: exporter-port
port: 8888
targetPort: 8888
ここでは、エクスポーターはローカル IP アドレス (
192.0.0.2) を使用して NetScaler CPX からメトリクスをフェッチします。
NetScaler CPX (east-west) デバイス用の NetScaler Metrics Exporter の構成
NetScaler CPX (east-west) デバイスを監視するには、NetScaler Metrics Exporter は NetScaler CPX のサイドカーとして追加されます。エクスポーターをサイドカーとして持つ NetScaler CPX (east-west) デバイスの YAML ファイルの例を次に示します。
apiVersion: apps/v1
kind: DaemonSet
metadata:
annotations:
deprecated.daemonset.template.generation: "0"
labels:
app: cpx-ew
name: cpx-ew
spec:
selector:
matchLabels:
app: cpx-ew
template:
metadata:
annotations:
NETSCALER_AS_APP: "True"
labels:
app: cpx-ew
name: cpx-ew
spec:
containers:
- env:
- name: EULA
value: "yes"
- name: NS_NETMODE
value: HOST
#- name: "kubernetes_url"
# value: "https://10..xx.xx:6443"
image: quay.io/citrix/citrix-k8s-cpx-ingress:13.0-52.24
imagePullPolicy: IfNotPresent
name: cpx
securityContext:
privileged: true
# Add exporter as a sidecar
- args:
- --target-nsip=192.168.0.2
- --port=8888
- --secure=no
env:
- name: NS_USER
value: nsroot
- name: NS_PASSWORD
value: nsroot
image: quay.io/citrix/citrix-adc-metrics-exporter:1.4.8
imagePullPolicy: IfNotPresent
name: exporter
securityContext:
readOnlyRootFilesystem: true
serviceAccountName: cpx
---
kind: Service
apiVersion: v1
metadata:
name: exporter-cpx-ew
labels:
service-type: citrix-adc-monitor
spec:
selector:
app: cpx-ew
ports:
- name: exporter-port
port: 8888
targetPort: 8888
ここでは、エクスポーターはローカル IP (
192.168.0.2) を使用して NetScaler CPX (east-west) デバイスからメトリクスをフェッチします。
NetScaler を検出するための ServiceMonitor
NetScaler Metrics Exporter は、NetScaler VPX または CPX イングレスデバイス、および NetScaler CPX (east-west) デバイスからデータを収集するのに役立ちます。Prometheus Operator は、メトリクスにタイムスタンプを付け、保存し、Grafana で視覚化できるように、これらのエクスポーターを検出する必要があります。Prometheus Operator は、ServiceMonitor の概念を使用して、サービスにアタッチされたラベルを使用して、そのサービスに属するポッドを検出します。
次の YAML ファイルの例は、
service-type: citrix-adc-monitor ラベルが関連付けられているすべてのエクスポーターサービス (サンプル YAML ファイルで指定) を検出します。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: citrix-adc-servicemonitor
labels:
servicemonitor: citrix-adc
spec:
endpoints:
- interval: 30s
port: exporter-port
selector:
matchLabels:
service-type: citrix-adc-monitor
namespaceSelector:
matchNames:
- monitoring
- default
ServiceMonitorは、Prometheusがdefaultとmonitoringの名前空間にあるExporterのみを検出するように指示します。他の名前空間からExporterを検出するには、それらの名前空間の名前をnamespaceSelector:フィールドの下に追加します。
注記:
監視する必要があるExporterが
defaultまたはmonitoring以外の名前空間に存在する場合、Prometheusがそれらの名前空間にアクセスするために追加のRBAC権限を提供する必要があります。以下は、Prometheusにすべての名前空間のリソースへのフルアクセスを提供するサンプルYAML (prometheus-clusterRole.yaml) ファイルです。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-k8s
rules:
- apiGroups:
- ""
resources:
- nodes/metrics
- namespaces
- services
- endpoints
- pods
verbs: ["*"]
- nonResourceURLs:
- /metrics
verbs: ["*"]
Prometheusに追加の権限を付与するには、次のコマンドを使用してサンプルYAMLをデプロイします。
kubectl apply -f prometheus-clusterRole.yaml
Grafanaでメトリクスを表示する
監視のために検出されたNetScalerインスタンスは、Prometheusコンテナのターゲットページに表示されます。ターゲットページには、次のURLからアクセスできます:
http://<k8s_cluster_ip>:<prometheus_nodeport>/targets:
メトリクスをグラフで表示するには:
-
http://<k8s_cluster_ip>:<grafafa_nodeport>を使用して、デフォルトの認証情報 admin:admin でGrafanaにログインします。 -
左側のパネルで**+**を選択し、インポートをクリックしてサンプルGrafanaダッシュボードをインポートします。
次のようなグラフを含むダッシュボードが表示されます。