kubernates上でblogを運用していることから、kubernatesや各contaienr, nodeのmetricをkubernates上で動かしたprometheusで収集し、grafanaで描写するようにしました。
Overview 以下のような方針で構成する
ingress <-> monitor service <-> monitor deployments - grafana -> prometheus GKEを利用している node, containerのmetricを収集する grafanaはpublic urlからアクセスできる prometheusはアクセス制御ができないので、port forwardingでアクセスする grafana, prometheusのデータは永続化しておく monitorというdeploymentを用意し、grafana, prometheusを同居させる monitor podsはdowntimeを許容する Prometheus kubernatesから各contaienrおよびnodeのmetricをkubernates apiserverを通して取得する。
以下のprometheusにrepoに同梱されているexpampleを参考にすることでイメージが付くと思います
https://github.com/prometheus/prometheus/blob/master/documentation/examples/prometheus-kubernetes.yml
nodeのmetric収集
# Scrape config for nodes (kubelet).-job_name:'kubernetes-nodes'kubernetes_sd_configs:-role:nodescheme:httpstls_config:ca_file:/var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file:/var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:-action:labelmapregex:__meta_kubernetes_node_label_(.+)-target_label:__address__replacement:kubernetes.default.svc:443-source_labels:[__meta_kubernetes_node_name]regex:(.+)target_label:__metrics_path__replacement:/api/v1/nodes/${1}/proxy/metrics container metrics
# Scrape config for Kubelet cAdvisor.-job_name:'kubernetes-cadvisor'kubernetes_sd_configs:-role:nodescheme:httpstls_config:ca_file:/var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file:/var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:-action:labelmapregex:__meta_kubernetes_node_label_(.+)-target_label:__address__replacement:kubernetes.default.svc:443-source_labels:[__meta_kubernetes_node_name]regex:(.+)target_label:__metrics_path__replacement:/api/v1/nodes/${1}/proxy/metrics/cadvisor node, container以外にも、pod, service, endpoint, ingress, kubernates api-serverの状態を監視することも可能です。
今回は、pod, endpoint, apiserverのmetricを収集します。
# Scrape config for API servers.-job_name:'kubernetes-apiservers'kubernetes_sd_configs:-role:endpointsscheme:httpstls_config:ca_file:/var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file:/var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:-source_labels:[__meta_kubernetes_namespace,__meta_kubernetes_service_name,__meta_kubernetes_endpoint_port_name]action:keepregex:default;kubernetes;https# scrape config for service endpoints.
...
Read more