リソース定義@Prometheus¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. セットアップ¶
インストール¶
▼ 非チャートとして (prometheus-operator)¶
Node内で監視系ツール (Prometheus、Alertmanager、Node Exporter、Grafanaなど) をコンテナとして稼働させる場合、マニフェストリポジトリからマニフェストを送信し、Kubernetesリソースを作成する。
$ git clone https://github.com/prometheus-operator/prometheus-operator.git
$ kubectl create -f bundle.yaml
▼ 非チャートとして (kube-prometheus)¶
Node内で監視系ツール (Prometheus、Alertmanager、Node Exporter、Grafanaなど) をコンテナとして稼働させる場合、マニフェストリポジトリからマニフェストを送信し、Kubernetesリソースを作成する。
$ git clone https://github.com/prometheus-operator/kube-prometheus.git
$ kubectl apply --server-side -f manifests/setup
$ kubectl wait --for condition=Established --all CustomResourceDefinition --namespace=monitoring
$ kubectl apply -f manifests/
▼ チャートとして (kube-prometheus-stack)¶
チャートリポジトリからチャートをインストールし、Kubernetesリソースを作成する。
$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts
$ helm repo update
$ kubectl create namespace prometheus
$ helm install <Helmリリース名> <チャートリポジトリ名>/kube-prometheus-stack -n prometheus --version <バージョンタグ>
他のインストール方法と名前が似ていることに注意する。
▼ チャートとして (prometheus)¶
チャートとしてPrometheusをインストールし、リソースを作成する。
kube-prometheus-stackとは異なり、最低限の関連ツール (Alertmanager、Node Exporterなど) のKubernetesリソースも合わせて作成する。
$ helm repo add <チャートリポジトリ名> https://prometheus-community.github.io/helm-charts
$ helm repo update
$ kubectl create namespace prometheus
$ helm install <Helmリリース名> <チャートリポジトリ名>/prometheus -n prometheus --version <バージョンタグ>
▼ バイナリとして¶
バイナリとして監視系ツール (Prometheus、Alertmanagerなど) をインストールし、サーバー上でPrometheusを稼働させる。
$ /opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--web.console.templates=/opt/prometheus/consoles \
--web.console.libraries=/opt/prometheus/console_libraries \
--web.external-url="https://prometheus.example.com/" \
--web.route-prefix=/ \
--storage.tsdb.retention.time=3d \
--storage.tsdb.path=/var/lib/prometheus
Alertmanagerをクラスター化する場合、インスタンス間で相互TLS認証を実施できるように、
$ /opt/alertmanager/alertmanager \
--config.file=/opt/alertmanager/alertmanager.yml \
--web.listen-address=:9093 \
--web.external-url="https://alertmanager.example.com/" \
--web.route-prefix=/ \
--log.format=json \
--data.retention=120h \
--storage.path=/var/lib/alertmanager \
--cluster.listen-address=0.0.0.0:9094 \
--cluster.peer=<サーバーのIPアドレス>:9094 \
--cluster.reconnect-timeout=5m
01-02. ダッシュボード¶
ネットワークに公開しない場合¶
▼ Prometheusの場合¶
$ kubectl port-forward svc/prometheus -n prometheus 9090:9090
▼ Alertmanagerの場合¶
$ kubectl port-forward svc/alertmanager -n prometheus 9093:9093
ネットワークに公開する場合¶
▼ Prometheusの場合¶
Nodeの外からPrometheusのダッシュボードをネットワークに公開する場合、Node外からPrometheusサーバーにインバウンド通信が届くようにする必要がある。
*実装例*
Ingressを作成する。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: prometheus
name: foo-prometheus-ingress
spec:
ingressClassname: foo-ingress-class
rules:
# ドメインを割り当てる場合、Hostヘッダーの合致ルールが必要である。
- host: foo.prometheus.com
http:
paths:
- backend:
service:
name: foo-prometheus-service
port:
number: 9090
path: /
pathType: Prefix
IngressClassを作成する。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: foo-ingress-class
spec:
# AWSの場合、ingress.k8s.aws/alb
controller: k8s.io/ingress-nginx
ClusterIP Serviceを作成する。
apiVersion: v1
kind: Service
metadata:
namespace: prometheus
name: foo-prometheus-service
spec:
clusterIP: *.*.*.*
clusterIPs:
- *.*.*.*
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: tcp-foo
port: 9090
protocol: TCP
targetPort: 9090
selector:
app.kubernetes.io/name: foo-prometheus
sessionAffinity: None
type: ClusterIP
▼ Alertmanagerの場合¶
Nodeの外からAlertmanagerのダッシュボードをネットワークに公開する場合、Node外からAlertmanagerにインバウンド通信が届くようにする必要がある。
*実装例*
Ingressを作成する。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: prometheus
name: foo-alertmanager-ingress
spec:
ingressClassname: foo-ingress-class
rules:
# ドメインを割り当てる場合、Hostヘッダーの合致ルールが必要である。
- host: foo.alertmanager.com
http:
paths:
- backend:
service:
name: foo-alertmanager-service
port:
number: 9093
path: /
pathType: Prefix
IngressClassを作成する。
開発環境では、IngressClassとしてNginxを使用する。
本番環境では、クラウドプロバイダーのIngressClass (AWS ALB、Google Cloud CLB) を使用する。
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: foo-ingress-class
spec:
# AWSの場合、ingress.k8s.aws/alb
controller: k8s.io/ingress-nginx
ClusterIP Serviceを作成する。
apiVersion: v1
kind: Service
metadata:
namespace: prometheus
name: foo-alertmanager-service
spec:
clusterIP: *.*.*.*
clusterIPs:
- *.*.*.*
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: tcp-foo
port: 9093
protocol: TCP
targetPort: 9093
selector:
app.kubernetes.io/name: foo-alertmanager
sessionAffinity: None
type: ClusterIP
02. Alertmanager¶
Alertmanagerとは¶
Alertmanagerのセットアップ方法を決める。
.spec.version¶
Alertmanagerのコンテナイメージのバージョンを設定する。
使用するコンテナイメージは、.spec.baseImage
キーに設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
version: v1.0.0
.spec.serviceAccountName¶
AlertmanagerのPodに紐付けるServiceAccountの名前を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
serviceAccountName: foo-serviceaccount
.spec.baseImage¶
Alertmanagerのコンテナイメージを設定する。
コンテナイメージのバージョンは、.spec.version
キーに設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
baseImage: quay.io/prometheus/alertmanager
.spec.externalUrl¶
AlertmanagerのダッシュボードのURLを設定する。
注意点として、IngressのHostヘッダールールで、ダッシュボードのドメインを許可する必要がある。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
externalUrl: https://alertmanager.example.com
.spec.replicas¶
AlertmanagerのPodの冗長化数を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
replicas: 2
.spec.logLevel¶
Alertmanagerのログレベルを設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
logLevel: warn
.spec.resources¶
Alertmanagerのハードウェアリソースの要求量を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
name: foo-alertmanager
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
storage:
volumeClaimTemplate:
spec:
selector:
matchLabels:
app: foo-app
storageClassName: standard
accessModes:
- "ReadWriteOnce"
resources:
limits:
cpu: 1
memory: 1024Mi
requests:
cpu: 50m
memory: 400Mi
03. AlertmanagerConfig¶
AlertmanagerConfigとは¶
Alertmanagerのアラートグループや通知先ルールを決める。
04. PodMonitor¶
PodMonitorとは¶
Podに対してPull型リクエストを送信し、これのデータポイントを収集する。
Serviceを持つPodではServiceMonitorを使用し、これを持たないPodをPodMonitorで監視する。
.spec.namespaceSelector¶
PodMonitorを有効化する時の任意のmetadata.labels
キー設定する。
Prometheusは、metadata.labels
キー有効化したNamespace内のPodを監視する。
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: foo-pod-monitor
spec:
namespaceSelector:
# 任意のmetadata.labelsキーを設定する。
prometheus-pod-monitor: enabled
apiVersion: v1
kind: Namespace
metadata:
labels:
# PodMonitorを有効化したいNamespaceに付与する
prometheus-pod-monitor: enabled
name: foo-namespace
05. Probe¶
Probeとは¶
Ingressや静的IPアドレスのメトリクスに対してPull型リクエストを送信し、これらのデータポイントを収集する。
06. Prometheus¶
Prometheusとは¶
Prometheusのセットアップ方法を決める。
.spec.alerting¶
アラートの宛先を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
alerting:
alertmanagers:
- apiVersion: v2
name: foo-alertmanager
namespace: prometheus
pathPrefix: /
port: web
.spec.externalLabel¶
Prometheusが外部ツール (例:Alertmanager、VictoriaMetrics、Grafana Mimirなど) にメトリクスを送信する時に、これに付与するラベルを設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
externalLabel:
cluster: foo-cluster
env: prd
.spec.externalUrl¶
PrometheusのダッシュボードのURLを設定する。
注意点として、IngressのHostヘッダールールで、ダッシュボードのドメインを許可する必要がある。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
externalUrl: https://prometheus.example.com
.spec.image¶
prometheusコンテナのベースイメージを設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
image: "quay.io/prometheus/prometheus:v1.0.0"
.spec.retention¶
Prometheusのローカルストレージの保持期間を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
retention: 14d
.spec.remoteWrite¶
リモート書き込み先を設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
remoteWrite:
- name: victoria-metrics
tlsConfig:
insecureSkipVerify: "true"
url: "https://*.*.*.*:8248/api/v1/write"
.spec.storage¶
ローカルストレージを設定する。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: pod-prometheus
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
storage:
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
storageClassName: standard
07. PrometheusRule¶
PrometheusRuleとは¶
ルール (アラートルール、レコーディングルール) を設定する。
PrometheusRuleの定義に応じて、prometheusコンテナの/etc/prometheus/rules
ディレクトリ配下にルールの設定ファイルが配置される。
有効になっているPrometheusRuleは、Prometheusダッシュボードの Status > Rule タブで確認できる。
ルールの種類¶
▼ アラートルール¶
アラートの条件とするために、メトリクスを一時的に分析する。
▼ レコーディングルール¶
メトリクスを分析し、分析結果を名前をつけて保管しておく。
保管したメトリクスは、レコーディング名を使用して、Prometheusのダッシュボードで新しいメトリクスのように取得できる。
公開されているレコーディングルール (例:kubernetes-mixinのレコーディングルール) を使用すると良い。
# 分析結果をnode_namespace_pod_container:container_cpu_usage_seconds_total:sum_irateというレコーディング名で保管しておく
expr: |
sum by (cluster, namespace, pod, container) (
irate(container_cpu_usage_seconds_total{job="cadvisor", image!=""}[5m])
) * on (cluster, namespace, pod) group_left(node) topk by (cluster, namespace, pod) (
1, max by(cluster, namespace, pod, node) (kube_pod_info{node!=""})
)
record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate
公開ルールレシピ¶
▼ 公開ルールレシピとは¶
自前ルールを定義しても良いが、セットアップの簡単さやPrometheusのアップグレードへの追従しやすさの観点から、公開されたルール (例:kubernetes-mixins、runbooks) を使用した方が良い。
▼ kubernetes-mixinsのPrometheusRule¶
kubernetes-mixinsでは、アラートルールとレコーディングルールのレシピが公開されている。
kubernetes-mixinsはGrafanaダッシュボードも公開しており、kubernetes-mixinsのレコーディングルールが定義済みであることが前提になっている。
▼ runbooks¶
prometheus-opratorでは、アラートルールとレコーディングルールのレシピが公開されている。
アラート内で使用できる予約変数¶
変数名 | データ型 | デフォルトラベル例 | 説明 |
---|---|---|---|
Receiver | string型 | .Receiver |
アラートの受信者が割り当てられている。 |
Status | string型 | .Status |
アラートがFiring状態/Resolved状態が割り当てられている。 |
Alerts | map型 | .Alerts.Labels.SortedPairs |
アラートの情報が割り当てられている。 ・https://prometheus.io/docs/alerting/latest/notifications/#alert |
GroupLabels | map型 | ・.GroupLabels.alertname ・ .GroupLabels.instance ・ .GroupLabels.job |
特定のアラートグループに関するラベルが割り当てられている。.spec.groups[*].rules[*].labels キー配下で設定したユーザー定義のラベルも含む。・https://prometheus.io/docs/alerting/latest/notifications/#kv |
CommonLabels | map型 | .CommonLabels.alertname |
全てのアラートに共通するラベルが割り当てられている。 |
CommonAnnotations | map型 | .CommonAnnotations.summary |
全てのアラートに共通するアノテーションが割り当てられている。.spec.groups[*].rules[*].labels キー配下で設定したユーザー定義のアノテーションも含む。 |
ExternalURL | string型 | .ExternalURL |
AlertmangerのURLが割り当てられている。 |
.spec.groups¶
▼ groupsとは¶
アラートグループを設定する。
アラートが多すぎる場合、アラートをグループ化し、通知頻度を調節すると良い。
▼ name¶
ルールのグループ名を設定する。
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: foo
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
groups:
- name: foo-rules
# グループは複数設定できる。
# - name:
# - foo
# - bar
▼ rules (アラートルールの場合)¶
alert
キーを宣言し、アラートルールを設定する。
アラートルールは、『アッパーキャメルケース』で命名する。
項目 | 説明 |
---|---|
alert |
アラートルール名を設定する |
annotations |
アラートルールによるアラートの通知内容を設定する。.metadata.labels キーや発火値 ($value ) を通知内容に変数で出力できる。 |
expr |
アラートルールで監視するメトリクスに関するPromQLを設定する。ロジックを変更すればアラートの発火をテストできる。 |
for |
アラートの通知のクールダウン期間を設定する。クールダウン期間中に発火したアラートは通知されない。 |
labels |
アラートの通知内容に付与するラベルを設定する |
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: foo-prometheus-rule
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
groups:
- name: foo-alert-rules
rules:
# アッパーキャメルケース
- alert: FooPodCpuUtilization
annotations:
summary: 【{{ {{"{{"}} $labels.app {{"}}"}} }}】Pod内のコンテナのCPU使用率の上昇しました。
description: {{ {{"{{"}} $labels.source {{"}}"}} }}コンテナのCPU使用率が{{ {{"{{"}} $value {{"}}"}} }}になりました。
# PromQL
expr: ...
# 受信したアラートの通知のクールダウン期間
for: 1m
# アラートの通知内容に付与するラベル
labels:
env: prd
app: foo
severity: error
source: gin
▼ rules (レコーディングルールの場合)¶
record
キーを宣言し、レコーディングルールを設定する。
アラートルールは、『スネークケース』『コロン区切り』で命名する。
項目 | 説明 |
---|---|
record |
レコーディングルール名を設定する |
expr |
レコーディングルールで監視するメトリクスに関するPromQLを設定する。ロジックを変更すればアラートの発火をテストできる。 |
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: foo-prometheus-rule
namespace: prometheus
labels:
app.kubernetes.io/name: foo
spec:
groups:
- name: foo-recording-rules
rules:
# Prometheusのレコーディングルールを定義する。
- record: node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate
# PromQL
expr: ...
08. ServiceMonitor¶
ServiceMonitorとは¶
指定したServiceに対してPull型リクエストを送信し、これに紐づくPodのメトリクスのデータポイントを収集する。
有効になっているServiceMonitorは、Prometheusダッシュボードの Status > ServiceDiscoveryタブや、Status > Targets タブで確認できる。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- port: http-foo
path: /metrics
namespaceSelector:
any: "true"
selector:
matchLabels:
app.kubernetes.io/name: foo-servive
公開しないPodであるとServiceがないため、メトリクス収集用のServiceを作成することになる。
Prometheusは、Podから直接的にデータポイントを収集できるが、この時PodのIPアドレスは動的に変化してしまう。
そのため、Podからメトリクスを収集する場合は、基本的にはServiceMonitorでServiceを介してPodを動的に検出できるようにする。
注意点として、アプリケーションのPodだけでなく、以下のPodも動的に検出する必要があるため、同様にServiceMonitorが必要である。
- Kubernetesコンポーネント (例:kube-apiserver、kubeletに内蔵されたcAdvisorなど)
- PrometheusのExporter (例:node-exporter、kube-state-metricsなど)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
port: https
scheme: https
metricRelabelings:
- action: drop
regex: apiserver_request_duration_seconds_bucket;(0.15|0.2|0.3|0.35|0.4|0.45|0.6|0.7|0.8|0.9|1.25|1.5|1.75|2|3|3.5|4|4.5|6|7|8|9|15|25|40|50)
sourceLabels:
- __name__
- le
tlsConfig:
caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
serverName: kubernetes
insecureSkipVerify: "false"
jobLabel: component
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
component: apiserver
provider: kubernetes
# kube-apiserverに転送するService
# デフォルトで作成されている
apiVersion: v1
kind: Service
metadata:
name: kubernetes
namespace: default
spec:
clusterIP: *.*.*.*
clusterIPs:
- *.*.*.*
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
sessionAffinity: None
type: ClusterIP
.spec.endpoints¶
▼ endpointsとは¶
収集の対象とするServiceで待ち受けるエンドポイントを設定する。
▼ interval¶
収集の間隔を設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- interval: 15s
▼ relabelings¶
作成したメトリクスのラベルやその値を変換する。
ServiceMonitorでは、Kubernetes SD configurationsのメタラベルのうちで、service
/pod
/endpoints
のラベルを変換できる。
*例*
node-exporterが作成したメトリクスでは、instance
ラベルが*.*.*.*:<ポート番号>
になっている。
これだとわかりにくいため、Podの__meta_kubernetes_pod_node_name
ラベルの値 (Nodeのホスト名) に変換する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
# __meta_kubernetes_pod_node_nameラベルの値をinstanceラベルの値として挿入する
- relabelings:
- action: replace
# 変換のために使用する値を持つラベル名を設定する
sourceLabels:
- __meta_kubernetes_pod_node_name
# 値の変換対象とするラベル名を設定する
targetLabel: instance
selector:
matchLabels:
app.kubernetes.io/name: node-exporter-service
▼ path¶
Serviceの待ち受けるパスを設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- path: /metrics
▼ port¶
Serviceの待ち受けるポート名を設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- port: http-foo
▼ scheme¶
Serviceの待ち受けるプロトコルを設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- scheme: http
▼ targetPort¶
Serviceの待ち受けるポート番号を設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
endpoints:
- targetPort: 9100
.spec.namespaceSelector¶
▼ namespaceSelector¶
収集の対象とするServiceが所属するNamespaceを設定する。
▼ any¶
全てNamespaceを収集対象として設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
namespaceSelector:
any: "true"
▼ matchNames¶
特定のNamespaceを収集対象として設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
namespaceSelector:
matchNames:
- kube-system
# 収集対象のService
apiVersion: v1
kind: Service
metadata:
namespace: kube-system
.spec.selector¶
▼ matchLabels¶
収集の対象とするServiceに付与された.metadata.labels
キーを設定する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: foo-service
# 収集対象のService
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: foo-service
*例*
node-exporterのPodからメトリクスを収集する。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: foo-service-monitor
namespace: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: node-exporter-service
# 収集対象のService
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: node-exporter-service
09. ThanosRuler¶
ThanosRuler¶
リモートストレージとしてThanosを使用する場合、これをセットアップ方法を決める。