如何为Kubernetes监控设置TOBS,可观察性堆栈

状态:已弃用

本文已弃用,不再维护。

原因

TOBS 安装程序已被上游弃用。

参见

官方的 TOBS 文档

介绍

TOBS,即 The Observability Stack,是一个预打包的监控工具和仪表板界面分发,可以安装到任何现有的 Kubernetes 集群中。它包括许多最受欢迎的开源可观测性工具,以 Prometheus 和 Grafana 作为基线,包括 Promlens、TimescaleDB、Alertmanager 等。这些工具一起提供了一个简单、可维护的解决方案,用于分析服务器流量并识别部署中的任何潜在问题,可扩展到非常大的规模。

TOBS利用标准的Kubernetes Helm图表来配置和更新部署。它可以安装到任何Kubernetes集群中,但如果您从本地机器而不是远程节点使用kubectl管理您的集群,则可以更有效地演示。DigitalOcean的托管的Kubernetes将默认为您提供这样的配置。

在本教程中,您将把TOBS安装到现有的Kubernetes集群中,并学习如何更新、配置和浏览其组件仪表板。

先决条件

要完成本教程,您需要:

第1步 — 验证您的Kubernetes配置

要安装TOBS,您应首先设置了一个有效的Kubernetes配置,其中包括能够ping通您的工作节点的kubectl。您可以通过运行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 命令查看其前几行,如下所示:

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

如果文件不存在,请确保您已登录为配置 Kubernetes 的相同用户。~/ 路径反映了各个用户的主目录,并且默认情况下每个用户保存 Kubernetes 配置。

如果您正在使用 DigitalOcean 的托管 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 生成的警报,并对其进行重复消除、分组和路由到诸如电子邮件或 PagerDuty 等集成。要了解有关 Alertmanager 的更多信息,请参阅 Prometheus 警报文档
  • Grafana 是一个数据可视化和分析工具,允许您为您的指标数据构建仪表板和图形。
  • kube-state-metrics 是一个附加代理,监听 Kubernetes API 服务器并生成有关 Kubernetes 对象(如部署和 Pod)状态的指标。这些指标以纯文本形式在 HTTP 端点上提供,并由 Prometheus 消耗。
  • 最后是node-exporter,它是在集群节点上运行的 Prometheus 导出器,提供诸如 CPU 和内存使用率之类的操作系统和硬件指标给 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 精确版本,输出中可能会有几个警告,但只要最终收到欢迎使用 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名称,该名称是集群内部的,这样它们就可以从任何工作节点访问,例如tobs-kube-prometheus-alertmanager.default.svc.cluster.local用于Prometheus。此外,还为每个配置了一个端口转发命令,允许您从本地Web浏览器访问它们。

在新的终端中运行tobs prometheus port-forward

  1. tobs prometheus port-forward

这将占用终端,只要端口转发进程处于活动状态。当您想要停止转发端口时,您可以按Ctrl+C以优雅地退出像这样的阻塞进程。接下来,在Web浏览器中,转到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

然后,您可以使用此密码通过运行其端口转发命令并在浏览器中打开http://127.0.0.1:8080/来登录Grafana界面。

  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。只需将 -f 选项传递给 tobs install 命令,并将 YAML 文件作为附加参数。

  1. tobs install -f values.yaml

最后,您可以使用以下命令升级 TOBS:

  1. tobs upgrade

这将执行相当于 helm upgrade 的操作,通过获取最新的上游图表。

结论

在本教程中,您学习了如何在现有的 Kubernetes 集群上部署和配置 TOBS(可观测性堆栈)。TOBS 特别有帮助,因为它消除了单独维护每个应用程序的配置细节的需要,同时为您集群中运行的应用程序提供了标准化的监控。

接下来,您可能想学习如何使用 Cert-Manager 处理 Kubernetes 集群的 HTTPS 入口。

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