Grafana Loki を使って Kubernetes のクラスタレベルロギングを学ぶ、ハンズオンワークショップのチュートリアルです
- 環境準備
- Loki スタックの概要
- Explore / LogQL 入門
- Aggregatable Events の可視化
- 片付け
この章では、GKE クラスタを作成し、Grafana Loki をベースとしたロギングスタックと、マイクロサービスのサンプルアプリケーションをデプロイします
チュートリアルを開始する前にGCPのプロジェクトを新規に作成してください
ハンズオンに使用するプロジェクトを未だ作成していない場合
GCP プロジェクトを新規作成します
ハンズオンに使用するプロジェクトを作成済みの場合
GCP プロジェクトのプロジェクト ID を表示します
gcloud projects list今回使用するプロジェクトを Cloud Shell のデフォルトプロジェクトに設定します
gcloud config set project <YOUR-PROJECT-ID>.
後続のステップで使用するため、プロジェクト ID を export しておきます
export PROJECT_ID=$(gcloud config get-value project); echo $PROJECT_ID今回使用するゾーンを Cloud Shell のデフォルトゾーンに設定します
gcloud config set compute/zone asia-northeast1-b.
後続のステップで使用するため、利用するゾーンを export しておきます
export COMPUTE_ZONE=$(gcloud config get-value compute/zone); echo $COMPUTE_ZONEGKE クラスタの作成に必要となる API を有効化します
(有効化には数分かかる場合があります)
gcloud services enable cloudapis.googleapis.com container.googleapis.comGKE クラスタの作成をリクエストします
(Cloud Shell のコントロールはクラスタの作成完了を待たずにユーザに戻ります)
gcloud beta container clusters create loki-handson-cluster --addons Istio --zone $COMPUTE_ZONE --async.
GKE クラスタのステータスが PROVISIONING になっていることを確認します
作成した GKE クラスタのステータスが RUNNING になっていることを確認します
gcloud container clusters list.
コンソールで確認する場合は以下をクリック
GKE クラスタへ接続するための Credential を取得します
gcloud container clusters get-credentials loki-handson-cluster --zone $COMPUTE_ZONE --project $PROJECT_IDKubernetes のパッケージマネージャである Helm v3 をインストールします
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bashHelm のバージョンを変更したくない(Helm v2 を利用したい)場合は、上記に代わり、以下の手順を実行してください
Tiller のサービスアカウントを作成します
kubectl -n kube-system create serviceaccount tiller.
Tiller のサービスアカウントにクラスタロールをバインドします
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller.
Tiller を GKE クラスタにインストールします
helm init --service-account=tillerLoki などのロギングスタックを展開するための namespace を作成します
kubectl create ns loki.
サンプルアプリケーションを展開するための namespace を作成します
kubectl create ns appHelm に stable のリポジトリを登録します
helm repo add stable https://kubernetes-charts.storage.googleapis.com/ .
Helm に Grafana Loki のリポジトリを登録します
helm repo add loki https://grafana.github.io/loki/charts/.
リポジトリをアップデートします
helm repo updateサンプルアプリケーションを展開するためのラベルを "app" namespace に付与します
kubectl label namespace app istio-injection=enabled.
サンプルアプリケーションの Istio/Bookinfo を GKE クラスタにインストールします
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.4/samples/bookinfo/platform/kube/bookinfo.yaml -n app.
サンプルアプリケーションのアーキテクチャは次のリンク先で確認することができます
展開したサンプルアプリケーションの状態を確認します
kubectl get all -n appサンプルアプリケーションの Pod の情報を取得します
kubectl get pods -n app.
サンプルアプリケーションの Pod からひとつを選択し、次のコマンドを実行してログを参照します
kubectl logs -n app <YOUR-POD-NAME>.
Pod 内に複数のコンテナを含む場合は、ログを参照する対象のコンテナを指定する必要があります
上記のコマンドを実行して出力されたエラーメッセージ内の "choose one of: ..." の部分に、この Pod に含まれているコンテナがリストされていますので、そのいずれかを下記の <YOUR-CONTAINER-NAME> の部分に入力してください
コンテナの選択方法がわからない場合は、<YOUR-CONTAINER-NAME> を istio-proxy に置き換えて実行してください( $ kubectl logs ... -c istio-proxy )
kubectl logs -n app <YOUR-POD-NAME> -c <YOUR-CONTAINER-NAME>Grafana Loki をベースとしたロギングスタック を GKE クラスタにインストールします
helm install loki-stack --namespace loki loki/loki-stack --set grafana.enabled=true.
イントール結果の確認は次章で行います
この章では、Grafana Loki をベースとしたロギングスタックの構成と、各コンポーネントの関係性を確認します
展開したリソースの状態を確認します
kubectl get all -n lokiGrafana にログインするためのパスワードを確認します
kubectl get secret loki-stack-grafana -n loki -o jsonpath="{.data.admin-password}" | base64 --decode.
Grafana の Web コンソールにアクセスするためのポートフォワードを行います
kubectl port-forward -n loki $(kubectl get pod -n loki --selector="app=grafana,release=loki-stack" --output jsonpath='{.items[0].metadata.name}') 8080:3000ここからは Grafana の Web コンソールを利用します
Cloud Shell の画面右上にある [ウェブでプレビュー] のアイコンをクリックし、サブメニューの [ポート 8080 でプレビュー] をクリックします
.
ログイン画面で次のとおりに入力してログインします
- username: admin
- password: <手順 1.2 で確認したパスワード>
Grafana のコンソール左端のメニューから Configuration(歯車のマーク) をクリックし、サブメニューの Data Sources をクリックします
Data Souces に Loki が追加されていることを確認します
この章では、Grafana の Explore を利用したアドホックなログ検索を行います
Grafana のコンソール左端のメニューから Explore(コンパスのマーク) をクリックします
.
Explore の画面が表示されたら、画面上部の Data Source のプルダウンメニュー から Loki を選択します
プルダウンメニューの右側にある Logs のボタンをクリックします
画面上部のテキストボックス(Log labels ▼ の右側)に次のクエリを入力し、画面右上の Run Query ボタンをクリックします
{namespace="app"}
手順 2.1 のログ検索結果をもとに、Explore の機能や表示について説明します
- 定期的なリロード と Live tail
- Severity フィルタ
- 各スイッチの説明
- Explore の Detail パネル
Grafana の Explore に次のクエリを入力し、Run Query ボタンをクリックします
{namespace="app",app="reviews"} |= "warning"
手順 2.3 のログ検索結果をもとに、Loki のデータモデルと LogQL の基礎について説明します
- 非構造化データの取り扱い
- ログの抽出上限
- ログのコンテキスト
- 単行ログと複数行ログ
この章では、ログに基づくメトリクス(Aggregatable Events)を可視化します
Grafana の Explore に次のクエリを入力し、Run Query ボタンをクリックします
{namespace="app"}
Explore の画面上部、Data Source に Loki と表示されているプルダウンメニューの右にある Metrics のボタンをクリックします
Loki の検索モードがメトリクスに切り替わります
.
クエリのテキストボックスに選択したラベルセットが残っていることを確認し、クエリを次のように修正します
sum(count_over_time({namespace="app"}[10s])) by (app)
.
アプリケーション別のログが可視化されたことを確認し、クエリを次のように修正します
sum(count_over_time({namespace="app"}[10s])) by (app,version)
手順 3.2 のメトリクス検索結果をもとに、ログの集約について説明します
- Range Vector セレクタ
- ログアグリゲーション
- Prometheus との親和性
Grafana にアクセスするためのポートフォワーディングを終了するには、Cloud Shell のターミナル上で Ctrl + C を入力します
時間に余裕のあるかた向けに、追加のハンズオンをご用意しています
次のコマンドでチュートリアルを起動してください
cloudshell launch-tutorial -d appendix.mdチュートリアルを終了する場合はこのセクションをスキップしてください
課金対象のリソースを削除します
.
プロジェクトごと削除する場合はこちら
GKE クラスタを削除します
gcloud container clusters delete loki-handson-cluster --zone $COMPUTE_ZONE --asyncGKE クラスタがリストから削除されたことを確認します
gcloud container clusters list.
コンソールで確認する場合は以下をクリック
おつかれさまでした!
このチュートリアルでは以下を行いました:
- GKE で Grafana Loki のロギングスタックを構成する
- Loki を使った Kubernetes のクラスタレベルロギング
- ログに基づくメトリクス(Aggregatable Events)の可視化