2017-01-25 15 views
0

問題:私はKubernetesクラスタの外にプロメテウスを持っています。したがって、リモートクラスタからメトリックをエクスポートしたいと考えています。Prometheus:接続されたKubernetesクラスタからメトリックをエクスポートできません

私はPrometheus Github repoからconfigサンプルを取り出し、これを少し修正しました。だから、ここに私の仕事の設定です。

- job_name: 'kubernetes-apiservers' 

    scheme: http 

    kubernetes_sd_configs: 
    - role: endpoints 
     api_server: http://cluster-manager.dev.example.net:8080 

    bearer_token_file: /opt/prometheus/prometheus/kube_tokens/dev 
    tls_config: 
     insecure_skip_verify: true 

    relabel_configs: 
    - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] 
     action: keep 
     regex: default;kubernetes;http 

    - job_name: 'kubernetes-nodes' 

    scheme: http 

    kubernetes_sd_configs: 
    - role: node 
     api_server: http://cluster-manager.dev.example.net:8080 

    bearer_token_file: /opt/prometheus/prometheus/kube_tokens/dev 
    tls_config: 
     insecure_skip_verify: true 

    relabel_configs: 
    - action: labelmap 
     regex: __meta_kubernetes_node_label_(.+) 

    - job_name: 'kubernetes-service-endpoints' 

    scheme: http 

    kubernetes_sd_configs: 
    - role: endpoints 
     api_server: http://cluster-manager.dev.example.net:8080 

    bearer_token_file: /opt/prometheus/prometheus/kube_tokens/dev 
    tls_config: 
     insecure_skip_verify: true 

    relabel_configs: 
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] 
     action: keep 
     regex: true 
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] 
     action: replace 
     target_label: __scheme__ 
     regex: (http?) 
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] 
     action: replace 
     target_label: __metrics_path__ 
     regex: (.+) 
    - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] 
     action: replace 
     target_label: __address__ 
     regex: (.+)(?::\d+);(\d+) 
     replacement: $1:$2 
    - action: labelmap 
     regex: __meta_kubernetes_service_label_(.+) 
    - source_labels: [__meta_kubernetes_namespace] 
     action: replace 
     target_label: kubernetes_namespace 
    - source_labels: [__meta_kubernetes_service_name] 
     action: replace 
     target_label: kubernetes_name 

    - job_name: 'kubernetes-services' 

    scheme: http 

    metrics_path: /probe 
    params: 
     module: [http_2xx] 

    kubernetes_sd_configs: 
    - role: service 
     api_server: http://cluster-manager.dev.example.net:8080 

    bearer_token_file: /opt/prometheus/prometheus/kube_tokens/dev 
    tls_config: 
     insecure_skip_verify: true 

    relabel_configs: 
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe] 
     action: keep 
     regex: true 
    - source_labels: [__address__] 
     target_label: __param_target 
    - target_label: __address__ 
     replacement: blackbox 
    - source_labels: [__param_target] 
     target_label: instance 
    - action: labelmap 
     regex: __meta_kubernetes_service_label_(.+) 
    - source_labels: [__meta_kubernetes_service_namespace] 
     target_label: kubernetes_namespace 
    - source_labels: [__meta_kubernetes_service_name] 
     target_label: kubernetes_name 

    - job_name: 'kubernetes-pods' 

    scheme: http 

    kubernetes_sd_configs: 
    - role: pod 
     api_server: http://cluster-manager.dev.example.net:8080 

    bearer_token_file: /opt/prometheus/prometheus/kube_tokens/dev 
    tls_config: 
     insecure_skip_verify: true 

    relabel_configs: 
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] 
     action: keep 
     regex: true 
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] 
     action: replace 
     target_label: __metrics_path__ 
     regex: (.+) 
    - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] 
     action: replace 
     regex: (.+):(?:\d+);(\d+) 
     replacement: ${1}:${2} 
     target_label: __address__ 
    - action: labelmap 
     regex: __meta_kubernetes_pod_label_(.+) 
    - source_labels: [__meta_kubernetes_namespace] 
     action: replace 
     target_label: kubernetes_namespace 
    - source_labels: [__meta_kubernetes_pod_name] 
     action: replace 
     target_label: kubernetes_pod_name 

私はAPIにTLS接続を使用しないので、無効にしたいと思います。

プロメテウスのホストのURL /metrics URLをカールすると、それがプリントされます。

最後に、私はクラスタに接続しましたが、ジョブが起動していないため、プロメテウスは再ラベル付けされたメトリックを公開しません。

コンソールに表示される内容

enter image description here

enter image description here

ターゲット状態:

enter image description here

また、私はプロメテウスのデバッグをチェックします。システムが必要な情報を取得し、要求が正常に完了したと考えられています。

time="2017-01-25T06:58:04Z" level=debug msg="pod update" kubernetes_sd=pod source="pod.go:66" tg="&config.TargetGroup{Targets:[]model.LabelSet{model.LabelSet{\"__meta_kubernetes_pod_container_port_protocol\":\"UDP\", \"__address__\":\"10.32.0.2:10053\", \"__meta_kubernetes_pod_container_name\":\"kube-dns\", \"__meta_kubernetes_pod_container_port_number\":\"10053\", \"__meta_kubernetes_pod_container_port_name\":\"dns-local\"}, model.LabelSet{\"__address__\":\"10.32.0.2:10053\", \"__meta_kubernetes_pod_container_name\":\"kube-dns\", \"__meta_kubernetes_pod_container_port_number\":\"10053\", \"__meta_kubernetes_pod_container_port_name\":\"dns-tcp-local\", \"__meta_kubernetes_pod_container_port_protocol\":\"TCP\"}, model.LabelSet{\"__meta_kubernetes_pod_container_name\":\"kube-dns\", \"__meta_kubernetes_pod_container_port_number\":\"10055\", \"__meta_kubernetes_pod_container_port_name\":\"metrics\", \"__meta_kubernetes_pod_container_port_protocol\":\"TCP\", \"__address__\":\"10.32.0.2:10055\"}, model.LabelSet{\"__address__\":\"10.32.0.2:53\", \"__meta_kubernetes_pod_container_name\":\"dnsmasq\", \"__meta_kubernetes_pod_container_port_number\":\"53\", \"__meta_kubernetes_pod_container_port_name\":\"dns\", \"__meta_kubernetes_pod_container_port_protocol\":\"UDP\"}, model.LabelSet{\"__address__\":\"10.32.0.2:53\", \"__meta_kubernetes_pod_container_name\":\"dnsmasq\", \"__meta_kubernetes_pod_container_port_number\":\"53\", \"__meta_kubernetes_pod_container_port_name\":\"dns-tcp\", \"__meta_kubernetes_pod_container_port_protocol\":\"TCP\"}, model.LabelSet{\"__meta_kubernetes_pod_container_port_number\":\"10054\", \"__meta_kubernetes_pod_container_port_name\":\"metrics\", \"__meta_kubernetes_pod_container_port_protocol\":\"TCP\", \"__address__\":\"10.32.0.2:10054\", \"__meta_kubernetes_pod_container_name\":\"dnsmasq-metrics\"}, model.LabelSet{\"__meta_kubernetes_pod_container_port_protocol\":\"TCP\", \"__address__\":\"10.32.0.2:8080\", \"__meta_kubernetes_pod_container_name\":\"healthz\", \"__meta_kubernetes_pod_container_port_number\":\"8080\", \"__meta_kubernetes_pod_container_port_name\":\"\"}}, Labels:model.LabelSet{\"__meta_kubernetes_pod_ready\":\"true\", \"__meta_kubernetes_pod_annotation_kubernetes_io_created_by\":\"{\\\"kind\\\":\\\"SerializedReference\\\",\\\"apiVersion\\\":\\\"v1\\\",\\\"reference\\\":{\\\"kind\\\":\\\"ReplicaSet\\\",\\\"namespace\\\":\\\"kube-system\\\",\\\"name\\\":\\\"kube-dns-2924299975\\\",\\\"uid\\\":\\\"fa808d95-d7d9-11e6-9ac9-02dfdae1a1e9\\\",\\\"apiVersion\\\":\\\"extensions\\\",\\\"resourceVersion\\\":\\\"89\\\"}}\\n\", \"__meta_kubernetes_pod_annotation_scheduler_alpha_kubernetes_io_affinity\":\"{\\\"nodeAffinity\\\":{\\\"requiredDuringSchedulingIgnoredDuringExecution\\\":{\\\"nodeSelectorTerms\\\":[{\\\"matchExpressions\\\":[{\\\"key\\\":\\\"beta.kubernetes.io/arch\\\",\\\"operator\\\":\\\"In\\\",\\\"values\\\":[\\\"amd64\\\"]}]}]}}}\", \"__meta_kubernetes_pod_name\":\"kube-dns-2924299975-dksg5\", \"__meta_kubernetes_pod_ip\":\"10.32.0.2\", \"__meta_kubernetes_pod_label_k8s_app\":\"kube-dns\", \"__meta_kubernetes_pod_label_pod_template_hash\":\"2924299975\", \"__meta_kubernetes_pod_label_tier\":\"node\", \"__meta_kubernetes_pod_annotation_scheduler_alpha_kubernetes_io_tolerations\":\"[{\\\"key\\\":\\\"dedicated\\\",\\\"value\\\":\\\"master\\\",\\\"effect\\\":\\\"NoSchedule\\\"}]\", \"__meta_kubernetes_namespace\":\"kube-system\", \"__meta_kubernetes_pod_node_name\":\"cluster-manager.dev.example.net\", \"__meta_kubernetes_pod_label_component\":\"kube-dns\", \"__meta_kubernetes_pod_label_kubernetes_io_cluster_service\":\"true\", \"__meta_kubernetes_pod_host_ip\":\"54.194.166.39\", \"__meta_kubernetes_pod_label_name\":\"kube-dns\"}, Source:\"pod/kube-system/kube-dns-2924299975-dksg5\"}" 
time="2017-01-25T06:58:04Z" level=debug msg="pod update" kubernetes_sd=pod source="pod.go:66" tg="&config.TargetGroup{Targets:[]model.LabelSet{model.LabelSet{\"__address__\":\"10.43.0.0\", \"__meta_kubernetes_pod_container_name\":\"bot\"}}, Labels:model.LabelSet{\"__meta_kubernetes_pod_host_ip\":\"172.17.101.25\", \"__meta_kubernetes_pod_label_app\":\"bot\", \"__meta_kubernetes_namespace\":\"default\", \"__meta_kubernetes_pod_name\":\"bot-272181271-pnzsz\", \"__meta_kubernetes_pod_ip\":\"10.43.0.0\", \"__meta_kubernetes_pod_node_name\":\"ip-172-17-101-25\", \"__meta_kubernetes_pod_annotation_kubernetes_io_created_by\":\"{\\\"kind\\\":\\\"SerializedReference\\\",\\\"apiVersion\\\":\\\"v1\\\",\\\"reference\\\":{\\\"kind\\\":\\\"ReplicaSet\\\",\\\"namespace\\\":\\\"default\\\",\\\"name\\\":\\\"bot-272181271\\\",\\\"uid\\\":\\\"c297b3c2-e15d-11e6-a28a-02dfdae1a1e9\\\",\\\"apiVersion\\\":\\\"extensions\\\",\\\"resourceVersion\\\":\\\"1465127\\\"}}\\n\", \"__meta_kubernetes_pod_ready\":\"true\", \"__meta_kubernetes_pod_label_pod_template_hash\":\"272181271\", \"__meta_kubernetes_pod_label_version\":\"v0.1\"}, Source:\"pod/default/bot-272181271-pnzsz\"}" 

Prometheusはアップデートをフェッチしますが、それらをメトリックに変換しません。 私はなぜこのようになっているのか理解するために私の脳を壊しました。だから間違いの可能性がある場合は助けてください。

+0

ステータス - >ターゲットページのイメージをuiから投稿できますか? – FuzzyAmi

+0

更新しました。奇妙なことに、私が設定したすべてのKubernetesの仕事は1つだけだと思う​​。 – cazorla19

+0

クウェルネットには何の経験もありませんが、プロメテウスによれば、彼らはその可能性が低いと言います。もしあなたがprometheusがインストールされているホストからそれらの隙間を曲げたら、その測定値は得られますか? (おそらく9090番ポートで) – FuzzyAmi

答えて

0

最後に、クヴェルネズのクラスタ監視をクラスタ外でセットアップすることは自明ではありません。原因Kubernetesアーキテクチャは、すべてのインフラストラクチャを1つのローカルネットワーク内に維持することを提案しています。だから、すべての回避策は面倒です。 また、nods、pods、サービス、エンドポイントなどのKubernetesロールに関する設定済みのジョブがターゲットステータスページに表示されないようにする理由をデバッグしようとすると、問題が発生しました。私は間違っていると思うかもしれませんが、私はプロメテウスでこの問題をどのようにデバッグするかを知りませんでした。

Kubernetesクラスタの外部を監視するソリューションは、kube-api-exporterでした。非常にシンプルなPythonスクリプトで、ds、デプロイメント、ポッドに関するすべてのメトリックを取得し、最終的にそれらをフェッチするURLを提供します。だから、この種の統合に悩まされている皆さんに、このソリューションをお勧めしたいと思います。

また、私はetcdからメトリックを取得し始めました。それは、etcdがPrometheusスタイルのメトリックをそのまま提供することは素晴らしいことです。

P .:感謝のためFuzzyAmiに感謝します。

0

外部プロメテウスサーバからKubernetesクラスタを監視する場合は、私がPrometheus federationトポロジ設定することをお勧め:K8S内部

  • を、短期でノード・輸出国のポッドとプロメテウスのインスタンスをインストール長期保存
  • Prometheusサービスは、入力コントローラ(LB)またはノードポート経由で、K8クラスタから暴露します。このエンドポイントは、HTTPS +基本認証で保護できます。
  • 適切な認証とタグを使用して、上記のエンドポイントからメトリックを削除するようにPrometheusの中心を設定します。

これはスケーラブルなソリューションです。プロメテウスの中心になるまで、必要な数のK8クラスタをモニタに追加できます。その後、別のCenter Prometheusインスタンスを追加して他の人を監視することができます。

関連する問題