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>
にアクセス
ログイン画面が出てくるので、adminと下記コマンドで取得したパスワードでログインする
$ kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
DsWFNgTIngCfqg511Ab7OmsGqr4id1skaeWbq5c1
ログインすると、HomeがでてくるのでAdd data source
をクリックする。
Prometheusの情報を入力。
– Nameを好きなものに
– TypeをPrometheus
に
– URLをkubernetes内のURLに。ここではhttp://prometheus-server.monitoring.svc.cluster.local
入力を終えたら、Save&Testをクリック。
Homeに戻り、New dashboard
をクリック
今回はNodeのCPU使用率のグラフを作るのでGraph
をクリック。
作成されたグラフをEdit
続いて、クエリ欄に以下を入力して、ノードごとのCPU使用率を表示。
100 * (1 - avg(rate(node_cpu{mode='idle'}[5m])) BY (instance))
クエリ欄以外をクリックすると、グラフが表示される。
続いて、Generalタブでタイトルを入力。
右上のダッシュボード戻るボタンをクリック。
戻ると、NodeのCPU使用率のグラフが追加されている。
このダッシュボードに名前をつけて保存することで、NodeのCPU使用率をいつでも確認できるようになった。
このように取得できるメトリックを視覚化が可能なので、時間があればインフラの監視に必要なものを追加していきたい。