Contents
LinkerdによるKubernetes監視の概要
Linkerdは、サービスメトリクスの収集と可視化に特化したサービスメッシュであり、Prometheusとの連携によって高精度な監視を実現します。本記事では、公式ドキュメントに基づいた具体的な手順と注意点を解説し、実装時のポイントを整理します。
Linkerdのインストール手順(ARM64/AMD64共通)
KubernetesクラスターにLinkerdを導入する際は、最新版を使用することが推奨されます。以下に基本的な手順と環境依存の記述について解説します。
基本的なインストール手順
-
Helmチャートによるデプロイ(ARM64環境では
--set arch=arm64を指定)
bash
helm install linkerd2 linkerd/linkerd2 --namespace linkerd --create-namespace -
デプロイ完了後の確認コマンド
bash
kubectl get pods -n linkerdARM64/AMD64共通の手順ですが、
--set arch=arm64はARM64専用です。環境に応じて適切に指定してください。
インストール後の検証方法
インストール後は、Linkerdの自身のメトリクスを取得して確認します。
メトリクスエンドポイントの確認手順
/metricsエンドポイントのアクセス(linkerd-webサービスのクラスタIPを取得)
bash
curl -s http://$(kubectl get svc -n linkerd linkerd-web -o jsonpath='{.spec.clusterIP}'):8084/metrics | grep "linkerd_proxy"
サービスメトリクスの収集設定方法
LinkerdはKubernetesのサービスを監視するためのメトリクスを自動収集します。以下に具体的な設定手順と注意点を解説します。
Linkerd自身のメトリクス有効化
Linkerdのデフォルトでは、linkerd-proxyやlinkerd-identityなどのコンポーネントのメトリクスが自動収集されます。代表的なメトリック一覧を以下に示します。
| メトリック名 | 内容 | 参考用途 |
|---|---|---|
linkerd_proxy_requests_total |
プロキシ経由のリクエスト数 | トランザクション監視 |
linkerd_identity_issued_tokens |
発行済みトークン数 | 認証状態確認 |
Prometheus Operatorとの連携設定
Prometheus Operatorを使用してLinkerdのメトリクスを収集するには、以下のようなYAMLでServiceMonitorを配置します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: linkerd-proxy namespace: linkerd spec: selector: matchLabels: app.kubernetes.io/name: proxy endpoints: - port: metrics path: /metrics |
ServiceMonitorは、サービスレベルのメトリクス収集に使用します。一方で、PodレベルならPodMonitorを使用します。
メトリクスエンドポイントの確認
Prometheusが正しくLinkerdからメトリクスを取得しているか、以下のコマンドで確認します。
|
1 2 |
kubectl exec -n monitoring prometheus-k8s-0 -- curl -s http://linkerd-web.linkerd:8084/metrics |
リアルタイム監視ダッシュボード構築手順
取得したメトリクスをGrafanaで可視化し、状況把握を迅速化します。公式テンプレートの活用も重要です。
Grafanaでのダッシュボードテンプレートインポート
- Grafana公式リポジトリからLinkerdテンプレートを検索
- ダウンロード後、Grafana内にインポート
- データソースとしてPrometheusを設定(
monitoringNamespace前提)
Grafanaのダッシュボード構築には
monitoringNamespaceでのPrometheusデプロイが必須です。事前にNamespaceを作成しておく必要があります。
カスタマイズ例と最適化ポイント
公式テンプレートには以下の主要なビューが含まれます。
- サービスごとのレイテンシー分布
- パケットロスト率の時間チャート
- トランザクション成功率(
5xxエラー数をフィルタリング)
リアルタイム表示の最適化
- データサンプリング:大量のメトリクスをリアルタイムで表示する場合、
interval値を調整します。 - アラートルール設定:
linkerd_proxy_requests_total{code!~"2xx"} > 100などの条件でアラートを発火させます。
カスタムメトリクスの定義例
Linkerdはアプリケーション固有のメトリクスも収集可能です。以下に具体例と注意点を解説します。
ServiceMonitor vs PodMonitorの区別
ServiceMonitor:サービスレベル(Podではなくサービス全体)でメトリクスを収集したい場合に使用。PodMonitor:個々のPodごとにメトリクスを収集したい場合に使用。
サンプルYAML(カスタムメトリクス定義)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: myapp-monitor spec: selector: matchLabels: app: myapp endpoints: - port: metrics path: /metrics |
メトリクスコレクターへの反映確認
収集が正常に機能しているか、以下のようにPrometheusからメトリクスを取得します。
|
1 2 |
kubectl exec -n monitoring prometheus-k8s-0 -- curl -s http://myapp-svc.default:9090/metrics | grep "myapp_request_duration_seconds" |
セキュリティ設定とアクセス制御のポイント
監視データはクラスターの重要な情報であるため、適切なセキュリティ対策が必要です。
RBACに基づくアクセス制限
KubernetesでRoleとRoleBindingを定義することで、特定ユーザーのみがメトリクスにアクセスできるように制限できます。以下は例です。
|
1 2 3 4 5 6 7 8 9 |
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: metrics-reader rules: - apiGroups: [""] resources: ["services"] verbs: ["get", "list"] |
TLS通信の有効化方法
LinkerdとPrometheus/Grafana間でのTLS通信を強制するには、以下のような設定を使用します。
TLS有効化コマンド
|
1 2 |
linkerd install --set proxy.tls.enabled=true | kubectl apply -f - |
証明書配置手順(要細節)
- 証明書生成:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 - 証明書のクラスター内配置:
kubectl create secret generic tls-secret --from-file=tls.crt=cert.pem --from-file=tls.key=key.pem -n linkerd - Linkerd設定反映:生成されたSecretをLinkerdのTLS設定に適用する。
監視データのアクセス制限ベストプラクティス
- 監視用専用Namespace作成(例:
monitoring) - Grafanaでのユーザーごとのビュー権限細分化
- 最小権限原則の適用:各ユーザーに必要なアクセスのみを許可
まとめ
本記事では、LinkerdによるKubernetesクラスターの監視設定手順とそのポイントを解説しました。以下の内容をもとに、実装時に注意点を確認し、適切な環境構築を行ってください。
- 最新版Linkerd2のインストール手順(ARM64/AMD64共通)
- サービスメトリクスの収集とPrometheusとの連携方法
- Grafanaによるリアルタイムダッシュボード構築
- カスタムメトリクスの定義例と確認手順
- セキュリティ設定とアクセス制御のポイント
公式ドキュメントを参照しながら、最新情報を反映させることで、より安定した運用が可能です。