Prometheusの持ち込み

Prometheusは、オープンソースの監視ツールです。デフォルトでは、PrometheusはIstioと一緒にインストールされるため、GrafanaとKialiを使用して、IstioコントロールプレーンとEnvoyが挿入されたワークロードの両方のメトリクスを表示できます。

しかし、すでにクラスタでPrometheusを実行している場合、またはIstioのPrometheusインストールに追加のカスタマイズを行う場合(たとえば、IstioのSlack通知を追加する場合)はどうすればよいでしょうか?

心配要りません。 3つの簡単な手順で、ご自身で管理しているPrometheusをIstioに持ち込むことができます。

まず、Prometheus構成を更新します。 Prometheusサーバー上のスクレイプ構成モデルに依存しており,そこでは targets/metrics エンドポイントを表します。

各Istioコンポーネントの targets を追加します。これらは、Kubernetes APIサーバーを介して取得されます。たとえば、IstioのPilotコンポーネントの構成は次のとおりです。

    - job_name: 'pilot'
      kubernetes_sd_configs:
      - role: endpoints
        namespaces:
          names:
          - istio-system

      relabel_configs:
      - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: istio-pilot;http-monitoring

完全な例は、configmap.yamlをご覧ください。

次に、PrometheusのDeploymentを更新して、Istioの証明書をPrometheusにマウントします。これにより、相互TLSが有効になっている場合でも、PrometheusはIstioワークロードをスクレイピングできます。これを行うには、istio.default SecretをPrometheusのDeployment.yamlに設定します。

    volumes:
    - name: config-volume
        configMap:
        name: prometheus
    - name: istio-certs
        secret:
            defaultMode: 420
            optional: true
            secretName: istio.default

完全な例は、deployment.yamlをご覧ください。

この新しい構成でPrometheusをデプロイすると、DeploymentとServiceが別の monitoring ネームスペースで実行されます。

$ kubectl get service -n monitoring

NAME         TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)          AGE
prometheus   LoadBalancer   10.0.3.155   <IP>             9090:32352/TCP   21m

最後に、カスタムのPrometheusアドレスを使用するようにIstioの構成を更新します。 Istioインストールオプションを使用した Helm テンプレート の例を次に示します。

helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
--set prometheus.enabled=false \
--set kiali.enabled=true --set kiali.createDemoSecret=true \
--set kiali.prometheusAddr="http://prometheus.monitoring.svc.cluster.local:9090" \
--set "kiali.dashboard.jaegerURL=http://jaeger-query:16686" \
--set "kiali.dashboard.grafanaURL=http://grafana:3000" \
--set grafana.enabled=true \
--set grafana.datasources.datasources.datasources.url="http://prometheus.monitoring.svc.cluster.local:9090"  > istio.yaml

IstioとPrometheusの両方をインストールした後、Envoyが挿入されたワークロードをクラスターにデプロイすると、PrometheusがIstioターゲットを正常にスクレイピングしていることがわかります。

Grafanaはサービスレベルの指標を取得できます。

そして、Kialiはサービスグラフを表示できます。