在服务器上搭建Prometheus+Grafana资源监控系统

2,227 阅读3分钟

本文首发于本人的知乎专栏

0 前置要求

请确认你的服务器上已正确安装Docker, Kubernetes, Ingress-Nginx。

关于Ingress-Nginx的使用,可以参考这篇

1 Kube-state-metrics

1.1 简介

项目地址:

github.com/kubernetes/…

Kube-state-metrics 是一个与Kubernetes API服务器交互的服务,以获得关于所有API对象的所有细节,如Deployments、Pods、Daemonsets、Statefulsets等。

它主要是以Prometheus格式产生指标,其稳定性与Kubernetes API相同。总的来说,它提供的Kubernetes对象和资源指标是你无法直接从本地Kubernetes监控组件中获得的。

Kube-state-metrics 服务在/metrics URI上公开了所有的指标。Prometheus 可以抓取Kube-state-metrics 暴露的所有指标。

以下是我们可以从Kube-state-metrics中获得的一些重要指标。

  • 节点状态,节点容量(CPU和内存)
  • 复制集的合规性(每个部署的复制所需的/可用的/不可用的/更新的状态)
  • Pod状态(等待、运行、准备等)
  • Ingress 指标
  • PV、PVC 指标
  • Daemonset 和 Statefulset指标
  • 资源请求和限制
  • Job 和 Cronjob 指标

1.2 部署

我的服务器上的kubernetes版本是v1.19,所以我选用了v2.3.0版本的Kube-state-metrics

Image

如果你的版本与我相同,你可以直接使用下面的部署文件,否则请自行修改为可用的版本。

# clone部署文件 
git clone https://github.com/devopscube/kube-state-metrics-configs.git
# 一键部署
kubectl apply -f kube-state-metrics-configs/
# 查看Deployment的状态
kubectl get deployments kube-state-metrics -n kube-system

如果你在pull k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0镜像过程中遇到了问题,可以先pul我上传到Docker Hub的镜像,再重命名:

docker pull placebo0531/kube-state-metrics:v2.3.0
docker tag placebo0531/kube-state-metrics:v2.3.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.3.0

然后你可以重新部署。

Image

确认状态没有问题以后,可以进入下一步。

2 Prometheus

2.1 简介

Prometheus是一个高扩展性的开源监控框架。它为Kubernetes容器编排平台提供开箱即用的监控功能。另外,在可观察性领域,它正变得越来越流行,因为它有助于指标和警报。

Prometheus的架构如下:

Image

2.2 部署

git clone https://github.com/Placeboy/kubernetes-prometheus.git
# 创建命名空间
kubectl create namespace monitoring
# 一键部署
kubectl apply -f kubernetes-prometheus

然后访问http:/prometheus.example.com/prometheus/graph,应该可以看到如下界面:

Image

点击 Status → Targets,可以看到类似下面的界面:

Image

回到主页,在搜索框中输入container_cpu_usage_seconds_total,点击回车,选择”Graph”,可以看到过去一小时各个容器的CPU使用情况:

Image

现在我们可以进行最后一项工作——部署Grafana。

3 Grafana

3.1 简介

Grafana是一个开源的轻量级仪表盘工具。它可以与许多数据源集成,如Prometheus、AWS云观察、Stackdriver等。

3.2 部署

git clone https://github.com/Placeboy/kubernetes-grafana.git
# 一键部署
kubectl apply -f kubernetes-grafana

访问 http://你的服务器IP:32000/,可以看到如下界面:

Image

用户名和密码都是admin。

登陆成功以后,点击加号,点击Import按钮:

Image

我们使用ID为8588的模板,点击右边的Load:

Image

在下拉框中选择prometheus作为数据源,点击下方的Import:

Image

大功告成!

Image

参考文章

How To Setup Kube State Metrics On Kubernetes Cluster

How To Setup Prometheus Monitoring On Kubernetes [Tutorial]

How To Setup Grafana On Kubernetes - Beginners Guide