随着云计算和容器化技术的发展,Kubernetes 已经成为了互联网公司中最主流的容器管理平台之一,它能够自动扩缩容,定期备份和自动恢复服务等等。Kubernetes 作为快速开发的利器,但是在实际生产环境中,Kubernetes 的应用严格要求高可用、高性能、高弹性等方面,这就需要一个适合 Kubernetes 的监控方案来帮助我们发现和解决问题。而 Prometheus 这个开源的监控系统能够帮助我们构建高可用的 Kubernetes 集群监控,本文就结合实际使用经验来详解一下 Prometheus 在 Kubernetes 集群监控中的使用。
Prometheus 简介
Prometheus 是一个开源的各种类型的系统和应用程序的监控系统和时间序列数据库,可以从多个源中获取时间序列数据,并以基于 HTTP 的 API 实时查询、录制和呈现这些数据。 Prometheus 非常适合构建动态的、高度可用的监控系统。
Prometheus 的主要特点如下:
- 使用非常简单,具有高度可扩展性。
- 可扩展的查询语言,支持多种类型的查询并可以与聚合数据进行操作。
- 支持多种类型的pipeline处理方式并支持警报管理。
- 具有分布式的数据存储,可支持数十万上亿次的点数。
- 在 HTTP 或推送事件的情况下,支持一对多的广播数据获取。
Kubernetes 集群监控中的 Prometheus 实践
架构和搭建 Prometheus
Prometheus 架构如下图所示:
在 Kubernetes 集群监控中,可以采用下面的架构:
部署 Prometheus 的方式有很多,可以选择使用 Helm 安装,也可以手动安装。这里我们使用 Helm 安装,命令如下:
$ helm install stable/prometheus-operator --namespace monitoring --name prometheus-operator --set=rbac.install=true
其中,设置 --set=rbac.install=true
表示该安装将添加 rbac 规则。
安装完 prometheus-operator 后,可以使用以下两个命令来检查 prometheus 和 alertmanager 的状态。
$ kubectl -n monitoring get pods $ kubectl -n monitoring get svc
监控自定义的应用程序度量指标
在 Prometheus 中,度量指标(Metric)是一种描述的数据,用于描述之前和之后发生的事情。Prometheus 支持两种类型的 Metric,即 Counter 和 Gauge。
- Counter:单调递增的指标,主要用来计算数量和请求频率。
- Gauge:可上下浮动的指标,主要用于测量数值的变化趋势。
在监控自定义的应用程序度量指标时,需要在自己的应用程序中添加一个 HTTP 暴露度量指标的端点,以便 Prometheus 可以访问此端点并收集度量指标数据,具体使用可以参考下面的示例代码:
-- -------------------- ---- ------- ---- ----------------- ------ -------- ------ ----------------- ---- ------ ------ ------- -------------- - ------------------------------ ------ ---- ---------- -------------------- - --------------------------------- ------- -- ----------- ---- ---------- ------------------ - ---------------------------------------- ----- ------- ---------- ------ -- -------- -- ----------- ----------------------- ----- ----- ---- ---------------------------------------- -------------------- ---- -------------------------- - ------ - --- ---------------- ---
上述代码将会启动一个 Python 服务,并通过 a HTTP 形式让 Prometheus 侧边栏来协助瞪眼对数据进行收集和分析。
监控 Kubernetes 集群 Metric
在 Kubernetes 集群监控中,除了监控自定义的应用程序度量指标,还需要监控 Kubernetes 集群内部的一些 Metric。比如,Kubernetes 集群中的 Requests/Memory usage/CPU usage/Network usage 等等。
Prometheus 可以通过 Kubernetes API 访问 Kubernetes 提供的 Metric。由于 Hawkular 和 Prometheus 是两个独立的监控系统,所以需要通过 Heapster 和适当的组件来连接这两个不同的系统。具体使用可以参考下面的示例代码:
$ kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml $ kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml $ kubectl create -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml
在 Grafana 中配置 Prometheus 查询,并设置显示面板即可,具体操作如下:
- 登录 Grafana。
- 点击左侧边栏的“Crate”按钮。
- 选择“Add Row”来添加一个新行。
- 选择“Add Panel”来添加一个新面板。
- 在面板顶部使用“Query”按钮来配置 Prometheus 查询。
- 在查询结果下方使用“Threshold”按钮设置阈值。
- 将刚刚编写的面板保存为 Grafana 的 Dashboard。
总结
Prometheus 这个开源的监控系统能够帮助我们构建高可用的 Kubernetes 集群监控,并且它的使用非常简单,具有高度可扩展性。在实际的应用场景中,需要根据自己的业务需求来监控自定义的应用程序度量指标和 Kubernetes 集群内部的 Metric。通过本文的介绍,相信大家对 Kubernetes 集群监控中的 Prometheus 已经有了更深入的了解,能够更好地运用 Prometheus 并构建高可用的 Kubernetes 集群监控系统。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64972f6248841e9894447144