🕌

Local MacのMinikubeでPrometheusとGrafana

8 min read

概要

RustのDocumentもサクッと読んだのでなんか作るぞ!という気持ち

privtateで作るので使いたいものは全部入れていこうの精神で
インフラはKubernetesを取り入れたい
ので、まずはMinikube, Promethus, Grafana使ってMac Book Proにローカル環境作ってみる

Minikube起動

$ minikube start
😄  Darwin 11.3.1 上の minikube v1.22.0
✨  dockerドライバーが自動的に選択されました。他の選択肢:  hyperkit, ssh
👍  コントロールプレーンのノード minikube を minikube 上で起動しています
🚜  イメージを Pull しています...
    > gcr.io/k8s-minikube/kicbase...: 361.09 MiB / 361.09 MiB  100.00% 11.70 Mi
🔥  docker container (CPUs=2, Memory=7914MB) を作成しています...
🐳  Docker 20.10.7 で Kubernetes v1.21.2 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ Control Plane を起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ イメージ gcr.io/k8s-minikube/storage-provisioner:v5 を使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass
🏄  完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました

helmでPrometheusとGrafanaインストール

monitoring用のnamespace作成

kubectl create ns monitoring

Prometheusインストール

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
"prometheus-community" has been added to your repositories
$
$ helm repo list
NAME                	URL
prometheus-community	https://prometheus-community.github.io/helm-charts
$
$ helm search repo prometheus-community
NAME                                              	CHART VERSION	APP VERSION	DESCRIPTION
prometheus-community/alertmanager                 	0.12.1       	v0.22.1    	The Alertmanager handles alerts sent by client ...
...
prometheus-community/prometheus                   	14.4.1       	2.26.0     	Prometheus is a monitoring system and time seri...
...
$
$ helm install -n monitoring prometheus prometheus-community/prometheus
NAME: prometheus
LAST DEPLOYED: Wed Jul 21 22:35:42 2021
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.monitoring.svc.cluster.local


Get the Prometheus server URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace monitoring port-forward $POD_NAME 9090


The Prometheus alertmanager can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-alertmanager.monitoring.svc.cluster.local


Get the Alertmanager URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace monitoring port-forward $POD_NAME 9093
#################################################################################
######   WARNING: Pod Security Policy has been moved to a global property.  #####
######            use .Values.podSecurityPolicy.enabled with pod-based      #####
######            annotations                                               #####
######            (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
#################################################################################


The Prometheus PushGateway can be accessed via port 9091 on the following DNS name from within your cluster:
prometheus-pushgateway.monitoring.svc.cluster.local


Get the PushGateway URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace monitoring -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace monitoring port-forward $POD_NAME 9091

For more information on running Prometheus, visit:
https://prometheus.io/

Grafanaインストール

$ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories
$
$ helm repo list
NAME                	URL
prometheus-community	https://prometheus-community.github.io/helm-charts
grafana             	https://grafana.github.io/helm-charts
$
$ helm search repo grafana
NAME                                          	CHART VERSION	APP VERSION	DESCRIPTION
grafana/grafana                               	6.14.1       	8.0.5      	The leading tool for querying and visualizing t...
...
$
$ helm install -n monitoring grafana grafana/grafana
W0722 09:35:52.635048     594 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0722 09:35:52.640954     594 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0722 09:35:52.744382     594 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
W0722 09:35:52.747272     594 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
NAME: grafana
LAST DEPLOYED: Thu Jul 22 09:35:52 2021
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.monitoring.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:

     export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace monitoring port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

GrafanaのDashboard設定

事前準備

  1. adminのパスワード取得
  2. port-forwardしてブラウザからアクセスできるようにする
$ kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
password
$
$ export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
$
$ kubectl --namespace monitoring port-forward $POD_NAME 3000
Forwarding from 127.0.0.1:3000 -> 3000
Forwarding from [::1]:3000 -> 3000

DataSourceにPrometheusを設定

Grafanaにアクセス
http://localhost:3000/datasources

PromethuesをDatasourceに追加
(Defaultで選ばれてるかも?

URLにhttp://prometheus-serverを指定

Dashboardをimport

DatasourceのDashboardタブで3つ全部import

Dashboard表示してみる

Searchクリックすると
importしたDashboard出てくるのでクリック

そうするとそれっぽいDashboardが出てくるぞ!!!

まとめ

完全に作業ログになった。
4連休だし次はistioとか入れてみよう🤹‍♂️