KubernetesモニタリングのためにTOBS(Observability Stack)を設定する方法

ステータス: 廃止予定

この記事は廃止予定であり、もはやメンテナンスされていません。

理由

TOBS インストーラーは上流で廃止予定になりました。

代わりに以下を参照してください

公式の TOBS ドキュメント

はじめに

TOBS、The Observability Stack の略称です。これは、既存の Kubernetes クラスターにインストールできる監視ツールとダッシュボードインターフェースの事前パッケージ化されたディストリビューションです。Prometheus と Grafana をベースにした Promlens、TimescaleDB、Alertmanager など、最も人気のあるオープンソースの観測可能性ツールの多くが含まれています。これらを併用することで、サーバートラフィックの分析や非常に大規模な展開の問題を特定するための簡単で維持可能なソリューションを提供します。

TOBSは、デプロイメントの構成と更新のために標準のKubernetes Helmチャートを利用します。これは任意のKubernetesクラスタにインストールできますが、リモートノードではなくローカルマシンからクラスタを管理するためにkubectlを実行している場合に効果的にデモンストレーションできます。デジタルオーシャンのマネージドKubernetesは、デフォルトでこのような構成を提供します。

このチュートリアルでは、既存のKubernetesクラスタにTOBSをインストールし、そのコンポーネントのダッシュボードを更新、構成、および参照する方法を学びます。

前提条件

このチュートリアルに従うには、次のものが必要です:

ステップ1 — Kubernetes構成の確認

TOBSをインストールするには、まずkubectlを使用してワーカーノードにpingできる有効なKubernetes構成をセットアップする必要があります。これをテストするには、kubectl get nodesを実行してください:

  1. kubectl get nodes

kubectlがKubernetesクラスターに接続でき、期待どおりに稼働している場合、このコマンドはReadyステータスを持つノードのリストを返します:

Output
NAME 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を実行できます。i:

  1. head ~/.kube/config
Output
apiVersion: v1 clusters: - cluster: certificate-authority-data: …

ファイルが存在しない場合は、Kubernetesを構成したときと同じユーザーとしてログインしていることを確認してください。~/パスは個々のユーザーのホームディレクトリを反映し、Kubernetes構成はデフォルトでユーザーごとに保存されます。

デジタルオーシャンのマネージドKubernetesを使用している場合は、クラスターをセットアップした後にdoctl kubernetes cluster kubeconfig saveコマンドを実行して、ローカルマシンが認証できるようにする必要があります。これにより、~/.kube/configファイルが作成されます:

  1. doctl kubernetes cluster kubeconfig save your-cluster-name

このマシンを使用して複数のクラスターにアクセスする場合は、環境変数と複数の構成ファイルを使用して競合を回避する方法について、Kubernetesのドキュメントを確認する必要があります。 kubectl環境を構成した後は、次のステップでTOBSをインストールできます。

ステップ2 — TOBSのインストールとエンドポイントのテスト

TOBSには次のコンポーネントが含まれています:

  • Prometheusは、メトリクスのエンドポイントをポーリングし、これらのエンドポイントで公開されているデータをスクレイピングおよび処理する時系列データベースおよびモニタリングツールです。これにより、PromQLという時系列データクエリ言語を使用してこのデータをクエリできます。
  • Alertmanagerは通常、Prometheusと一緒に展開され、スタックのアラートレイヤーを形成し、Prometheusによって生成されたアラートを処理し、重複排除、グループ化、およびEメールやPagerDutyなどの統合にルーティングします。Alertmanagerについて詳しくは、Prometheusのアラートに関するドキュメントを参照してください。
  • Grafanaは、データの視覚化および分析ツールであり、メトリクスデータのダッシュボードやグラフを構築できます。
  • kube-state-metricsは、Kubernetes APIサーバーをリッスンし、DeploymentsやPodsなどのKubernetesオブジェクトの状態に関するメトリクスを生成するアドオンエージェントです。これらのメトリクスはHTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって消費されます。
  • 最後に、node-exporterは、クラスターノード上で実行され、CPUやメモリ使用率などのOSおよびハードウェアのメトリクスをPrometheusに提供するPrometheusエクスポーターです。これらのメトリクスはHTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって消費されます。

TOBSをインストールするには、まず制御プレーンでTOBSインストーラーを実行する必要があります。これにより、tobsコマンドと構成ディレクトリがセットアップされます。前提条件で述べたように、tobsコマンドはLinux/macOS/BSDシステム(公式のKubernetesバイナリなど)でのみ動作するように設計されていますので、これまでWindowsを使用していた場合は、Windows Subsystem for Linux環境で作業する必要があります。

TOBSインストーラーを取得して実行します:

  1. curl --proto '=https' --tlsv1.2 -sSLf https://tsdb.co/install-tobs-sh |sh
Output
tobs 0.7.0 was successfully installed ? Binary is available at /root/.local/bin/tobs.

これで、TOBSをKubernetesクラスターにプッシュできます。これは、新しく提供されたtobsコマンドを使用してワンライナーで実行されます:

  1. tobs install

これにより、いくつかの出力が生成され、数分かかる場合があります。Kubernetesの正確なバージョンに応じて、出力にいくつかの警告が表示される場合がありますが、最終的にWelcome to tobsメッセージを受け取れば、これらの警告を無視して構いません。

Output
WARNING: 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の各ウェブエンドポイントに接続するための手順が含まれます。参照のために、以下に完全に再現されています:

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です。さらに、それぞれのポートフォワーディングコマンドが設定されており、ローカルのウェブブラウザからアクセスできるようになっています。

新しいターミナルで、tobs prometheus port-forwardを実行してください。

  1. tobs prometheus port-forward

これにより、ポートフォワーディングプロセスがアクティブな限り、そのターミナルは占有されます。ポートの転送を停止したい場合は、Ctrl+Cを押してください。次に、ウェブブラウザでURLhttp://127.0.0.1:9090/にアクセスしてください。クラスタからメトリクスを生成する、完全なPrometheusインターフェースが表示されるはずです。

Grafanaについても同様に行うことができます。ポートの転送が別のプロセスでアクティブな間、これはhttp://127.0.0.1:8080/でアクセス可能です。まず、インストーラの出力から提供されるget-passwordコマンドを使用する必要があります。

  1. tobs grafana get-password
Output
your-grafana-password

次に、このパスワードを使用して、Grafanaインターフェースにログインできます。そのためには、ポートフォワーディングコマンドを実行し、ブラウザでhttp://127.0.0.1:8080/を開いてください。

  1. tobs grafana port-forward

これで、Kubernetesクラスタで動作するTOBSスタックができました。各コンポーネントのドキュメントを参照して、それぞれの機能を学ぶことができます。このチュートリアルの最後のステップでは、TOBS構成自体を更新する方法について学びます。

ステップ3 — TOBS構成の編集とアップグレード

TOBSの構成には、スタック内の個々のアプリケーションのパラメータや、TOBSデプロイメント自体のいくつかのパラメータが含まれています。これは、KubernetesのHelmチャートとして生成および保存されます。現在の構成を出力するには、tobs helm show-valuesを実行します。ただし、これにより、ターミナルに長大な構成全体が出力されるため、読みにくくなります。代わりに、出力を.yaml拡張子のファイルにリダイレクトできます。なぜなら、Helmチャートはすべて有効なYAML構文だからです:

  1. tobs helm show-values > values.yaml

ファイルの内容は次のようになります:

~/values.yaml
2022/01/10 11:56:37 Transport: unhandled response frame type *http.http2UnknownFrame
# TimescaleDBのデプロイメントを構成するための値
# チャートのREADMEは次の場所にあります:
#    https://github.com/timescale/timescaledb-kubernetes/tree/master/charts/timescaledb-single
# 様々な構成オプション(管理ガイド)は次の場所で確認してください:
#    https://github.com/timescale/timescaledb-kubernetes/blob/master/charts/timescaledb-single/admin-guide.md
cli: false

# デプロイメントの名前空間を上書きします
namespaceOverride: ""
…

TOBSの構成に利用可能な追加のパラメータについては、TOBSドキュメントを参照してください。

デプロイメントを更新するためにこのファイルを変更した場合は、更新された構成を使用してTOBSを再インストールできます。単にtobs installコマンドに-fオプションを追加の引数として渡して、YAMLファイルを指定します。

  1. tobs install -f values.yaml

最後に、以下のコマンドを使用して TOBS をアップグレードできます:

  1. tobs upgrade

これにより、最新のアップストリーム チャートを取得して、helm upgrade 相当の操作が実行されます。

結論

このチュートリアルでは、既存の Kubernetes クラスターに TOBS(The Observability Stack)を展開および構成する方法を学びました。TOBS は特に役立ちます。なぜなら、各アプリケーションの構成詳細を個別に管理する必要がなく、クラスター上で実行されているアプリケーションに対して標準化されたモニタリングを提供するからです。

次に、Kubernetes クラスターへの HTTPS イングレスを処理するために Cert-Manager の使用方法を学ぶことができます。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-tobs-the-observability-stack-for-kubernetes-monitoring