Kubernetesモニタリング用のTOBS、可観測性スタックの設定方法
序章
TOBS は、Observability Stackの略で、既存のKubernetesクラスターにインストールできる監視ツールとダッシュボードインターフェイスのパッケージ済みのディストリビューションです。 これには、Promlens、TimescaleDB、Alertmanagerなど、PrometheusとGrafanaをベースラインとする最も人気のあるオープンソースの可観測性ツールの多くが含まれています。 これらを組み合わせることで、サーバートラフィックを分析し、非常に大規模な展開で発生する可能性のある問題を特定するための、簡単で保守可能なソリューションが提供されます。
TOBSは、デプロイメントを構成および更新するために、標準のKubernetesヘルムチャートを利用します。 これは任意のKubernetesクラスターにインストールできますが、kubectl
を実行して、リモートノードではなくローカルマシンからクラスターを管理している場合は、より効果的にデモンストレーションできます。 DigitalOceanのManagedKubernetes は、デフォルトでこのような構成を提供します。
このチュートリアルでは、TOBSを既存のKubernetesクラスターにインストールし、そのコンポーネントダッシュボードを更新、構成、参照する方法を学習します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- ロールベースのアクセス制御(RBAC)が有効になっているKubernetesクラスター。 このセットアップではDigitalOceanKubernetes クラスターを使用しますが、別の方法を使用してクラスターを自由に作成できます。 Kubernetesのバージョンは、でサポートされているTOBSバージョンと一致している必要があります。
kubectl
コマンドラインツールがローカルマシンにインストールされ、クラスターに接続するように構成されています。kubectl
のインストールについて詳しくは、公式ドキュメントをご覧ください。 DigitalOcean Kubernetesクラスターを使用している場合は、 DigitalOcean Kubernetesクラスターへの接続方法を参照して、kubectl
を使用してクラスターに接続する方法を確認してください。
ステップ1—Kubernetes構成を確認する
TOBSをインストールするには、最初にkubectl
を使用して有効なKubernetes構成をセットアップし、そこからワーカーノードにpingを実行できるようにする必要があります。 kubectl get nodes
を実行して、これをテストできます。
kubectl get nodes
kubectl
がKubernetesクラスターに接続でき、期待どおりに稼働している場合、このコマンドはReady
ステータスのノードのリストを返します。
OutputNAME STATUS ROLES AGE VERSION pool-uqv8a47h0-ul5a7 Ready <none> 22m v1.21.5 pool-uqv8a47h0-ul5am Ready <none> 21m v1.21.5 pool-uqv8a47h0-ul5aq Ready <none> 21m v1.21.5
これが成功した場合は、ステップ2に進むことができます。 そうでない場合は、問題がないか構成の詳細を確認する必要があります。
デフォルトでは、kubectl
は、環境を理解するために~/.kube/config
でファイルを検索します。 このファイルが存在し、有効なYAML構文が含まれていることを確認するには、ファイルでhead
を実行して、最初の数行を表示します。
head ~/.kube/config
OutputapiVersion: v1 clusters: - cluster: certificate-authority-data: …
ファイルが存在しない場合は、Kubernetesを設定したのと同じユーザーとしてログインしていることを確認してください。 ~/
パスは個々のユーザーのホームディレクトリを反映し、Kubernetes構成はデフォルトでユーザーごとに保存されます。
DigitalOceanのマネージドKubernetesを使用している場合は、クラスターをセットアップした後にdoctl kubernetes cluster kubeconfig save
コマンドを実行して、ローカルマシンがクラスターを認証できるようにしてください。 これにより、~/.kube/config
ファイルが作成されます。
doctl kubernetes cluster kubeconfig save your-cluster-name
このマシンを使用して複数のクラスターにアクセスしている場合は、競合を回避するために、環境変数と複数の構成ファイルの使用に関するKubernetesドキュメントを確認する必要があります。 kubectl
環境を構成したら、次のステップでTOBSのインストールに進むことができます。
ステップ2—TOBSのインストールとエンドポイントのテスト
TOBSには、次のコンポーネントが含まれています。
- Prometheus は、時系列データベースおよび監視ツールであり、メトリックエンドポイントをポーリングし、これらのエンドポイントによって公開されたデータをスクレイピングおよび処理することで機能します。 時系列データクエリ言語であるPromQLを使用してこのデータをクエリできます。
- Alertmanager は、通常Prometheusと一緒にデプロイされ、スタックのアラートレイヤーを形成し、Prometheusによって生成されたアラートを処理し、それらを重複排除、グループ化して、電子メールやPagerDutyなどの統合にルーティングします。 Alertmanagerの詳細については、アラートに関するPrometheusのドキュメントを参照してください。
- Grafana は、データの視覚化および分析ツールであり、メトリックデータのダッシュボードとグラフを作成できます。
- kube-state-metrics は、Kubernetes APIサーバーをリッスンし、デプロイやポッドなどのKubernetesオブジェクトの状態に関する指標を生成するアドオンエージェントです。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって使用されます。
- 最後に、 node-exporter は、クラスターノードで実行され、CPUやメモリ使用量などのOSおよびハードウェアメトリックをPrometheusに提供するPrometheusエクスポーターです。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとしても提供され、Prometheusによって使用されます。
TOBSをインストールするには、最初にコントロールプレーンでTOBSインストーラーを実行する必要があります。 これにより、tobs
コマンドと構成ディレクトリが設定されます。 前提条件で述べたように、tobs
コマンドはLinux/macOS / BSDシステム(公式のKubernetesバイナリなど)でのみ機能するように設計されているため、これまでWindowsを使用している場合は、 Linux環境用のWindowsサブシステム。
TOBSインストーラーを取得して実行します。
curl --proto '=https' --tlsv1.2 -sSLf https://tsdb.co/install-tobs-sh |sh
Outputtobs 0.7.0 was successfully installed 🎉 Binary is available at /root/.local/bin/tobs.
これで、TOBSをKubernetesクラスターにプッシュできます。 これは、新しく提供されたtobs
コマンドを使用してワンライナーで実行されます。
tobs install
これにより、数行の出力が生成され、しばらく時間がかかる場合があります。 Kubernetesの正確なバージョンによっては、出力にいくつかの警告が表示される場合がありますが、最終的にWelcome to tobs
メッセージを受信する限り、これらを無視できます。
OutputWARNING: Using a generated self-signed certificate for TLS access to TimescaleDB. This should only be used for development and demonstration purposes. To use a signed certificate, use the "--tls-timescaledb-cert" and "--tls-timescaledb-key" flags when issuing the tobs install command. Creating TimescaleDB tobs-certificate secret Creating TimescaleDB tobs-credentials secret skipping to create TimescaleDB s3 backup secret as backup option is disabled. 2022/01/10 11:25:34 Transport: unhandled response frame type *http.http2UnknownFrame 2022/01/10 11:25:35 Transport: unhandled response frame type *http.http2UnknownFrame 2022/01/10 11:25:35 Transport: unhandled response frame type *http.http2UnknownFrame Installing The Observability Stack 2022/01/10 11:25:37 Transport: unhandled response frame type *http.http2UnknownFrame W0110 11:25:55.438728 75479 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ W0110 11:25:55.646392 75479 warnings.go:70] policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ … 👋🏽 Welcome to tobs, The Observability Stack for Kubernetes …
この時点以降の出力には、ブラウザでPrometheus、TimescaleDB、PromLens、およびGrafanaの各Webエンドポイントに接続するための手順が含まれます。 参考までに、以下に完全に再現されています。
Output############################################################################### 🔥 PROMETHEUS NOTES: ############################################################################### Prometheus can be accessed via port 9090 on the following DNS name from within your cluster: tobs-kube-prometheus-prometheus.default.svc.cluster.local Get the Prometheus server URL by running these commands in the same shell: tobs prometheus port-forward The Prometheus alertmanager can be accessed via port 9093 on the following DNS name from within your cluster: tobs-kube-prometheus-alertmanager.default.svc.cluster.local Get the Alertmanager URL by running these commands in the same shell: export POD_NAME=$(kubectl get pods --namespace default -l "app=alertmanager,alertmanager=tobs-kube-prometheus-alertmanager" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace default port-forward $POD_NAME 9093 WARNING! Persistence is disabled on AlertManager. You will lose your data when the AlertManager pod is terminated. ############################################################################### 🐯 TIMESCALEDB NOTES: ############################################################################### TimescaleDB can be accessed via port 5432 on the following DNS name from within your cluster: tobs.default.svc.cluster.local To get your password for superuser run: tobs timescaledb get-password -U <user> To connect to your database, chose one of these options: 1. Run a postgres pod and connect using the psql cli: tobs timescaledb connect -U <user> 2. Directly execute a psql session on the master node tobs timescaledb connect -m ############################################################################### 🧐 PROMLENS NOTES: ############################################################################### PromLens is a PromQL query builder, analyzer, and visualizer. You can access PromLens via a local browser by executing: tobs promlens port-forward Then you can point your browser to http://127.0.0.1:8081/. ############################################################################### 📈 GRAFANA NOTES: ############################################################################### 1. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster: tobs-grafana.default.svc.cluster.local You can access grafana locally by executing: tobs grafana port-forward Then you can point your browser to http://127.0.0.1:8080/. 2. The 'admin' user password can be retrieved by: tobs grafana get-password 3. You can reset the admin user password with grafana-cli from inside the pod. tobs grafana change-password <password-you-want-to-set>
これらのそれぞれには、クラスター内部にDNS名が付けられているため、どのワーカーノードからでもアクセスできます。 Prometheusの場合はtobs-kube-prometheus-alertmanager.default.svc.cluster.local
。 さらに、ローカルWebブラウザからアクセスできるようにそれぞれに設定されたポート転送コマンドがあります。
新しいターミナルで、tobs prometheus port-forward
を実行します。
tobs prometheus port-forward
これは、ポート転送プロセスがアクティブである限り、端末を占有します。 ポートの転送を停止する場合は、Ctrl+C
を押して、このようなブロッキングプロセスを正常に終了できます。 次に、Webブラウザーで、URLhttp://127.0.0.1:9090/
に移動します。 完全なPrometheusインターフェースが実行され、クラスターからメトリックを生成していることがわかります。
別のプロセスでポートフォワーディングがアクティブである限り、http://127.0.0.1:8080/
でアクセス可能なGrafanaについても同じことができます。 まず、インストーラーの出力で提供されるget-password
コマンドを使用する必要があります。
tobs grafana get-password
Outputyour-grafana-password
次に、このパスワードを使用して、ポート転送コマンドを実行し、ブラウザーでhttp://127.0.0.1:8080/
を開くことにより、Grafanaインターフェースにログインできます。
tobs grafana port-forward
これで、Kubernetesクラスターで動作するTOBSスタックが実行されます。 それぞれの機能については、個々のコンポーネントのドキュメントを参照してください。 このチュートリアルの最後のステップでは、TOBS構成自体を更新する方法を学習します。
ステップ3—TOBS構成の編集とアップグレード
TOBSの構成には、スタック内の個々のアプリケーションのいくつかのパラメーターと、TOBSデプロイメント自体のいくつかのパラメーターが含まれています。 Kubernetesヘルムチャートとして生成および保存されます。 tobs helm show-values
を実行すると、現在の構成を出力できます。 ただし、これにより、長い構成全体が端末に出力されるため、読みにくくなる可能性があります。 代わりに、Helmチャートはすべて有効なYAML構文であるため、出力を.yaml
拡張子のファイルにリダイレクトできます。
tobs helm show-values > values.yaml
ファイルの内容は次のようになります。
〜/ values.yaml
2022/01/10 11:56:37 Transport: unhandled response frame type *http.http2UnknownFrame # Values for configuring the deployment of TimescaleDB # The charts README is at: # https://github.com/timescale/timescaledb-kubernetes/tree/master/charts/timescaledb-single # Check out the various configuration options (administration guide) at: # https://github.com/timescale/timescaledb-kubernetes/blob/master/charts/timescaledb-single/admin-guide.md cli: false # Override the deployment namespace namespaceOverride: "" …
TOBSドキュメントを読むと、TOBSの構成に使用できる追加のパラメーターを確認できます。
デプロイメントを更新するためにこのファイルを変更した場合は、更新された構成を使用して、TOBSをそれ自体に再インストールできます。 追加の引数としてYAMLファイルを使用して-f
オプションをtobs install
コマンドに渡すだけです。
tobs install -f values.yaml
最後に、次のコマンドを使用してTOBSをアップグレードできます。
tobs upgrade
これは、最新のアップストリームチャートをフェッチすることにより、helm upgrade
と同等のパフォーマンスを発揮します。
結論
このチュートリアルでは、既存のKubernetesクラスターにTOBS、TheObservabilityStackをデプロイして設定する方法を学びました。 TOBSは、クラスターで実行されているアプリケーションの標準化された監視を提供しながら、これらの各アプリの構成の詳細を個別に維持する必要がないため、特に役立ちます。
次に、Cert-Managerを使用してKubernetesクラスターへのHTTPS入力を処理する方法を学習することをお勧めします。