Supported OS Linux Mac OS Windows

概要

Kubernetes サービスからメトリクスをリアルタイムに取得すると、以下のことが可能になります。

  • Kubernetes の状態を視覚化および監視できます。
  • Kubernetes のフェイルオーバーとイベントの通知を受けることができます。

Kubernetes State Metrics Core チェックは kube-state-metrics バージョン 2+ を活用し、レガシーの kubernetes_state チェックと比較してパフォーマンスとタグ付けが大幅に改善されています。

レガシーチェックとは対照的に、Kubernetes State Metrics Core チェックでは、クラスターに kube-state-metrics をデプロイする必要がなくなりました。

Kubernetes State Metrics Core は、より詳細なメトリクスとタグを提供するため、従来の kubernetes_state チェックに代わる優れたオプションです。詳しくは Major Changes および Data Collected を参照してください。

セットアップ

インストール

Kubernetes State Metrics Core チェックは Datadog Cluster Agent イメージに含まれているため、Kubernetes サーバーに追加でインストールする必要はありません。

要件

  • Datadog Cluster Agent v1.12+

構成

Helm values.yaml で、以下を追加します。

datadog:
  # (...)
  kubeStateMetricsCore:
    enabled: true

kubernetes_state_core のチェックを有効にするには、DatadogAgent リソースの設定 spec.features.kubeStateMetricsCore.enabledtrue に設定する必要があります。

kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
  features:
    kubeStateMetricsCore:
      enabled: true

: Datadog Operator v0.7.0 以上が必要です。

kubernetes_state から kubernetes_state_core への移行

タグの削除

元の kubernetes_state のチェックでは、いくつかのタグが非推奨とフラグが立てられ、新しいタグに置き換えられています。移行経路を決定するために、どのタグがメトリクスで送信されるかを確認します。

kubernetes_state_core のチェックでは、非推奨のタグのみが提出されます。kubernetes_state から kubernetes_state_core に移行する前に、モニターやダッシュボードで公式タグのみが使用されているか確認します。

以下は、非推奨タグとそれに代わる公式タグの対応表です。

非推奨タグ公式タグ
cluster_namekube_cluster_name
コンテナkube_container_name
cronjobkube_cronjob
daemonsetkube_daemon_set
deploymentkube_deployment
hpahorizontalpodautoscaler
imageimage_name
jobkube_job
job_namekube_job
namespacekube_namespace
phasepod_phase
podpod_name
replicasetkube_replica_set
replicationcontrollerkube_replication_controller
statefulsetkube_stateful_set

後方の非互換性の変更

Kubernetes State Metrics Core チェックには後方互換性がありません。レガシーの kubernetes_state チェックから移行する前に、変更点を注意深くお読みください。

kubernetes_state.node.by_condition
ノード名の粒度を持つ新しいメトリクスです。従来のメトリクス kubernetes_state.nodes.by_condition はこのメトリクスに置き換えられ、非推奨となります。: このメトリクスは従来のチェックにもバックポートされており、両方のメトリクス (これと置き換えられる従来のメトリクス) が利用可能です。
kubernetes_state.persistentvolume.by_phase
永続ボリューム名の粒度を備えた新しいメトリクス。kubernetes_state.persistentvolumes.by_phase を置き換えます。
kubernetes_state.pod.status_phase
メトリクスは、pod_name のようにポッドレベルのタグでタグ付けされます。
kubernetes_state.node.count
このメトリクスには、もう host というタグは付いていません。このメトリクスは、ノード数を kernel_version os_image container_runtime_version kubelet_version によって集計します。
kubernetes_state.container.waitingkubernetes_state.container.status_report.count.waiting
待機中の Pod が存在しない場合、これらのメトリクスは 0 の値を発行しなくなりました。非ゼロの値のみを報告します。
kube_job
kubernetes_state では、JobCronJob をオーナーとしていた場合は kube_job タグの値が CronJob 名となり、それ以外の場合は Job 名となります。kubernetes_state_core では、kube_job タグの値は常に Job 名となり、新たに kube_cronjob タグキーが追加されて CronJob 名をタグ値として持つようになります。kubernetes_state_core に移行する場合、クエリフィルターには新しいタグか kube_job:foo* (fooCronJob 名) を使用することが推奨されます。
kubernetes_state.job.succeeded
従来の kubernetes_state では kuberenetes.job.succeededcount タイプでしたが、kubernetes_state_core では gauge タイプです。

ノードレベルのタグ付け

クラスター中心のメトリクスには、ホストやノードレベルのタグは表示されなくなりました。kubernetes_state.node.by_conditionkubernetes_state.container.restarts のように実際のクラスター内のノードに関連するメトリクスだけが、それぞれのホストやノード レベルのタグを引き続き継承します。

タグをグローバルに追加するには、DD_TAGS 環境変数を使用するか、対応する Helm または Operator の設定を使用してください。インスタンス専用のタグは、カスタムの kubernetes_state_core.yaml を Cluster Agent にマウントして指定できます。

datadog:
  kubeStateMetricsCore:
    enabled: true
  tags: 
    - "<TAG_KEY>:<TAG_VALUE>"
kind: DatadogAgent
apiVersion: datadoghq.com/v2alpha1
metadata:
  name: datadog
spec:
  global:
    credentials:
      apiKey: <DATADOG_API_KEY>
    tags:
      - "<TAG_KEY>:<TAG_VALUE>"
  features:
    kubeStateMetricsCore:
      enabled: true

kubernetes_state.container.memory_limit.totalkubernetes_state.node.count のようなメトリクスは、クラスター内のグループの合計数なので、ホストやノードレベルのタグは付与されません。

従来のチェック

Helm の values.yamlkubeStateMetricsCore を有効にすると、従来の kubernetes_state チェック用の自動設定ファイルを Agent が無視するように構成されます。これは両方のチェックを同時に実行しないようにするためです。

それでも移行フェーズで両方のチェックを同時に有効にする場合は、values.yamlignoreLegacyKSMCheck フィールドを無効にします。

: ignoreLegacyKSMCheck を無効にすると、Agent は従来の kubernetes_state チェック用の自動設定を無視しなくなります。カスタムの kubernetes_state 設定ファイルは手動で削除が必要です。

Kubernetes State Metrics Core チェックでは、クラスターに kube-state-metrics をデプロイする必要がなくなりました。Datadog Helm Chart の一部として kube-state-metrics のデプロイを無効にできます。これを行うには、Helm の values.yaml に以下を追加します。

datadog:
  # (...)
  kubeStateMetricsEnabled: false

重要な注意: Kubernetes State Metrics Core チェックは、レガシーの kubernetes_state チェックに代わるものです。Datadog は、一貫したメトリクスを保証するために、両方のチェックを同時に有効にしないことをお勧めします。

収集データ

メトリクス

: Kubernetes オブジェクトに Datadog Standard labels を設定すると、envserviceversion タグを取得できます。

イベント

Kubernetes State Metrics Core チェックには、イベントは含まれません。

デフォルトのラベルをタグとして使用

デフォルト推奨の Kubernetes および Helm ラベル

推奨ラベルタグ
app.kubernetes.io/namekube_app_name
app.kubernetes.io/instancekube_app_instance
app.kubernetes.io/versionkube_app_version
app.kubernetes.io/componentkube_app_component
app.kubernetes.io/part-ofkube_app_part_of
app.kubernetes.io/managed-bykube_app_managed_by
helm.sh/charthelm_chart

デフォルト推奨の Kubernetes ノード ラベル

推奨ラベルタグ
topology.kubernetes.io/regionkube_region
topology.kubernetes.io/zonekube_zone
failure-domain.beta.kubernetes.io/regionkube_region
failure-domain.beta.kubernetes.io/zonekube_zone

Datadog ラベル (統合サービスタグ付け)

Datadog ラベルタグ
tags.datadoghq.com/envenv
tags.datadoghq.com/serviceservice
tags.datadoghq.com/versionversion

サービスチェック

kubernetes_state.cronjob.complete
cronjob の最後のジョブが失敗したかどうか。タグ:kube_cronjob kube_namespace (標準ラベルの env service version)。
kubernetes_state.cronjob.on_schedule_check
cronjob の次のスケジュールが過去である場合に警告します。タグ: kube_cronjob kube_namespace (標準ラベルの env service version)。
kubernetes_state.job.complete
ジョブが失敗したかどうか。タグ: kube_job または kube_cronjob kube_namespace (標準ラベルの env service version)。
kubernetes_state.node.ready
ノードの準備ができているかどうか。タグ: node condition status
kubernetes_state.node.out_of_disk
ノードの準備ができているかどうか。タグ: node condition status
kubernetes_state.node.disk_pressure
ノードにディスクプレッシャーがかかっているかどうか。タグ: node condition status
kubernetes_state.node.network_unavailable
ノードネットワークが利用できないかどうか。タグ: node condition status
kubernetes_state.node.memory_pressure
ノードネットワークにメモリプレッシャーがかかっているかどうか。タグ: node condition status

検証

Cluster Agent コンテナ内で status サブコマンドを実行し、Checks セクションの下に kubernetes_state_core があるか確認してください。

トラブルシューティング

タイムアウトエラー

デフォルトでは、Kubernetes State Metrics Core チェックは、Kubernetes API サーバーからの応答を 10 秒間待ちます。大規模なクラスターでは、リクエストがタイムアウトし、メトリクスが欠落する可能性があります。

環境変数 DD_KUBERNETES_APISERVER_CLIENT_TIMEOUT をデフォルトの 10 秒よりも大きな値に設定することで、これを避けることができます。

datadog-agent.yaml を以下の設定で更新してください。

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  override:
    clusterAgent:
      env:
        - name: DD_KUBERNETES_APISERVER_CLIENT_TIMEOUT
          value: <value_greater_than_10>

次に、新しいコンフィギュレーションを適用します。

kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml

以下の構成で datadog-values.yaml を更新します。

clusterAgent:
  env:
    - name: DD_KUBERNETES_APISERVER_CLIENT_TIMEOUT
      value: <value_greater_than_10>

次に、Helm チャートをアップグレードします。

helm upgrade -f datadog-values.yaml <RELEASE_NAME> datadog/datadog

ご不明な点は、Datadog のサポートチームまでお問い合わせください。

その他の参考資料

PREVIEWING: may/restructure-op-docs