Kubernetes(GKE)+PrometeusにGrafanaを導入する
前回記事で、GKE(Google Kubernetes Engine)+Prometeusの環境を構築しました。本記事では、Grafanaを導入する手順を記載していきます。
Prometheusの公式ドキュメントを参考に進めていきます。
利用するイメージとデフォルト設定の確認
Prometheusの公式ドキュメントの『Installing』の章に記載されている以下のリンクを辿ります。Grafanaのダウンロードページに案内されます。
To install Grafana see the official Grafana documentation.
初期ページは『Linux』が選択されています。今回はGKE上で稼働させるため、『Docker』を選択します。

同ページの『installation guide』を参考に、公式のGrafanaのイメージを構成していきます。
こちらでデフォルトで設定されているパス設定を確認します。このパス設定は、環境変数で指定されているため、変更するには設定ファイル(conf/grafana.ini)ではなく、環境変数を変更する必要があるようです。
上記の『Default Paths』に記載があるように、設定ファイルは、/etc/grafana/grafana.ini に、データ領域は、/var/lib/grafana にあることがわかります。
PVCを作成
『Grafana container with persistent storage (recommended)』という章があるように、永続ストレージを利用することがrecommendedされています。本項では、永続ボリュームを要求するPVC(persistentVolumeClaim)を作成します。
利用するボリュームサイズは、監視対象のユーザ/データソース/ダッシュボード/プラグインなどに依存します(※ 情報元)。個人利用の環境のため、適当に10GBぐらいで作成してみます。
○ grafana_pvc.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-pvc
namespace: monitoring
labels:
app: grafana-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
以下コマンドを実行し、PVCを作成します。
kubectl create -f grafana_pvc.yml
Deploymentを作成
以下のDeploymentファイルを作成します。
○ grafana_deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitoring
labels:
app: grafana
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- image: grafana/grafana:6.4.2
name: grafana
ports:
- containerPort: 3000
name: grafana
volumeMounts:
- name: grafana-storage-volume
mountPath: /var/lib/grafana
volumes:
- name: grafana-storage-volume
persistentVolumeClaim:
claimName: grafana-pvc
securityContext:
runAsUser: 472
fsGroup: 472
runAsNonRoot: true
・Dockerイメージの 6.4.0 より、ベースイメージがDebianからAlpineに変更されているため、6.4.x系の10月14日時点で最新である 6.4.2を利用します。
v6.4.0-beta1
https://hub.docker.com/r/grafana/grafana
・Switch base image from ubuntu:18:04 to Alpine 3.10
・Grafanaの設定ファイル(/etc/grafana/grafana.ini)は、動作確認用途のためデフォルトのまま利用します。適宜ConfigMap等を利用して、設定を変更してください。
・securityContextで、grafanaユーザ(472)、grafanaグループ(472)を指定します。
以下コマンドを実行し、Deploymentを作成します。
kubectl create -f grafana_deployment.yml
Grafanaのデータソースを設定
まず、Grafanaの管理画面に接続するため、Grafanaの管理画面にポートフォワードします。
以下コマンドで、稼働中のpodを確認します。
kubectl get pods --namespace=monitoring
NAME READY STATUS RESTARTS AGE
grafana-847fcfb699-cvlwc 1/1 Running 0 11m
prometheus-7454d8ff8c-ghfk8 1/1 Running 0 17h
上記で確認したgrafanaのPodにポートフォワードします。
kubectl port-forward grafana-847fcfb699-cvlwc 3000:3000 --namespace=monitoring
以下URLに接続し、Grafanaの管理画面に接続します。
http://localhost:3000
ログイン画面が表示されます。

デフォルトでは、ユーザ/パスワードが admin/admin でログインできます。
初回ログインすると、ログインパスワードの変更を求められます。画面に従ってパスワードを変更します。

トップ画面が表示されます。Add data source を選択します。

以下画面が表示されます。Prometheus欄にあるSelectを選択します。

URLには、こちらで設定したservice名とポートを指定し、「Save&Test」を選択します。

問題なくSaveされた旨が表示されたら、GrafanaのHOME画面に戻ります。
Grafanaダッシュボードを作成
Prometheus公式ドキュメントの『Importing pre-built dashboards from Grafana.com』に記載があるように、Grafana.comより、Data SourceをPrometheusでFillterして良さげなダッシュボードを探してImportするのが良いです。
ざっと検索して、Download数が多かったこちらをimportしてみた状態が以下です。


ところどころ取得できていないグラフがあるのが確認できます。画像2枚目のように、Podごとのメモリ使用量や、PVの使用率を取得できている箇所もあります。
以上からわかるように、適切なモニタリングを行うには、取得したメトリクスを元にダッシュボードを作成する必要がありそうです。ダッシュボードを作成するには、こちらのQiita記事が参考になりそうでした。
とりあえず入れてみるレベルの導入は行えましたが、本番で運用するには、Grafanaの設定やPrometheusの設定、ダッシュボードの作成など取り組む作業は多そうです。そのあたりについても、随時記事にしていければと思います。
ディスカッション
コメント一覧
まだ、コメントがありません