HelmでGrafanaをインストールして、Prometheusと連携する

Helmを使ってGrafanaをインストール
その後、prometheusと連携してみた。

環境

$ kubectl get node -o wide
NAME          STATUS    ROLES     AGE       VERSION   EXTERNAL-IP    OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
test-master   Ready     <none>    9h        v1.11.1   10.16.181.91   Ubuntu 18.04.1 LTS   4.15.0-30-generic   docker://17.12.1-ce
test-node1    Ready     <none>    14m       v1.11.1   10.16.181.92   Ubuntu 18.04.1 LTS   4.15.0-20-generic   docker://17.12.1-ce
test-node2    Ready     <none>    8m        v1.11.1   10.16.181.93   Ubuntu 18.04.1 LTS   4.15.0-20-generic   docker://17.12.1-ce
$ helm version
Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

HelmでGrafanaをインストール

helmでGrafanaのChartを検索

$ helm search grafana
NAME            CHART VERSION   APP VERSION DESCRIPTION
stable/grafana  1.11.0          5.1.3       The leading tool for querying and visualizing t...

今回は、prometheusと一緒のnamespaceのmonitoringに追加

$ kubens monitoring
Context "test-k8s" modified.
Active namespace is "monitoring".ring
$ helm install --name grafana stable/grafana
NAME:   grafana
LAST DEPLOYED: Sun Aug 26 22:14:33 2018
NAMESPACE: monitoring
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                     DATA  AGE
grafana                  1     1s
grafana-dashboards-json  0     1s

==> v1/ClusterRole
NAME                 AGE
grafana-clusterrole  1s

==> v1/ClusterRoleBinding
NAME                        AGE
grafana-clusterrolebinding  1s

==> v1beta1/RoleBinding
NAME     AGE
grafana  1s

==> v1/Service
NAME     TYPE       CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
grafana  ClusterIP  10.102.7.70  <none>       80/TCP   1s

==> v1/Pod(related)
NAME                      READY  STATUS             RESTARTS  AGE
grafana-7877cd4b94-z4j9m  0/1    ContainerCreating  0         1s

==> v1/Secret
NAME     TYPE    DATA  AGE
grafana  Opaque  3     1s

==> v1/ServiceAccount
NAME     SECRETS  AGE
grafana  1        1s

==> v1beta1/Role
NAME     AGE
grafana  1s

==> v1beta2/Deployment
NAME     DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
grafana  1        1        1           0          1s

==> v1beta1/PodSecurityPolicy
NAME     DATA   CAPS      SELINUX   RUNASUSER  FSGROUP   SUPGROUP  READONLYROOTFS  VOLUMES
grafana  false  RunAsAny  RunAsAny  RunAsAny   RunAsAny  false     configMap,emptyDir,projected,secret,downwardAPI,persistentVolumeClaim


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=grafana,component=" -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.                            #####
#################################################################################

svcとしてgrafanaが作成される。

$ kubectl get svc
NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
grafana                         ClusterIP   10.102.7.70      <none>        80/TCP     2m
prometheus-alertmanager         ClusterIP   10.96.119.58     <none>        80/TCP     13d
prometheus-kube-state-metrics   ClusterIP   None             <none>        80/TCP     13d
prometheus-node-exporter        ClusterIP   None             <none>        9100/TCP   13d
prometheus-pushgateway          ClusterIP   10.100.136.122   <none>        9091/TCP   13d
prometheus-server               ClusterIP   10.110.235.79    <none>        80/TCP     13d

svc/grafanaをingressに登録

# grafana-ingress.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana-ingress
spec:
  rules:
  - host: grafana.test.local
    http:
      paths:
      - backend:
          serviceName: grafana
          servicePort: 80
$ kubectl create -f grafana-ingress.yml
ingress.extensions "grafana-ingress" created

これで、http://gafana.test.local:<Node Port>からGrafanaのUIにアクセスできる。

GrafanaからPrometheusに連携

http://gafana.test.local:<Node Port>にアクセス

grafana-login

ログイン画面が出てくるので、adminと下記コマンドで取得したパスワードでログインする

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

ログインすると、HomeがでてくるのでAdd data sourceをクリックする。

grafana-datasource

grafana-prometheus

Prometheusの情報を入力。
– Nameを好きなものに
– TypeをPrometheus
– URLをkubernetes内のURLに。ここではhttp://prometheus-server.monitoring.svc.cluster.local
入力を終えたら、Save&Testをクリック。

grafana-dashboard

Homeに戻り、New dashboardをクリック

grafana-graph

今回はNodeのCPU使用率のグラフを作るのでGraphをクリック。

grafana-graph-edit

作成されたグラフをEdit

grafana-add-nodecpu

続いて、クエリ欄に以下を入力して、ノードごとのCPU使用率を表示。

100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance))

クエリ欄以外をクリックすると、グラフが表示される。

grafana-nodecpu

続いて、Generalタブでタイトルを入力。
右上のダッシュボード戻るボタンをクリック。

gafana-dashboard-installed

戻ると、NodeのCPU使用率のグラフが追加されている。
このダッシュボードに名前をつけて保存することで、NodeのCPU使用率をいつでも確認できるようになった。
このように取得できるメトリックを視覚化が可能なので、時間があればインフラの監視に必要なものを追加していきたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください