Kubernetes 是一个现代化的容器管理系统,大量的应用程序以及服务都运行在 Kubernetes 上,因此对 Kubernetes 集群的监控就显得非常重要。本文将介绍如何使用 Prometheus+Grafana 进行全面的 Kubernetes 监控。
Prometheus
Prometheus 是一款开源的监控系统,它由 Google 开发。Prometheus 可以监控多种类型的数据,包括 CPU 使用率、内存使用率、网络流量等等。Prometheus 还提供了一些强大的查询语句,可以轻松地查询和分析监控数据。
安装 Prometheus
Prometheus 可以作为单独的一个容器运行,也可以作为 Kubernetes Pod 运行。下面以 Pod 的形式运行 Prometheus 为例。
通过使用以下命令,可以在 Kubernetes 集群中启动一个 Prometheus 实例:
kubectl create -f https://raw.githubusercontent.com/prometheus/prometheus/master/documentation/examples/prometheus-kubernetes.yaml
上面的命令将从 GitHub 下载一个 YAML 文件,并使用该文件启动一个 Prometheus 实例。稍等片刻,Prometheus 实例就会在 Kubernetes 集群中运行起来。
监控 Kubernetes 集群
既然 Prometheus 已经部署好了,我们现在需要设置一些监控规则,以便 Prometheus 能够监控我们的 Kubernetes 集群。
首先,我们需要为 Kubernetes 集群创建一个 ServiceMonitor。ServiceMonitor 可以监控 Kubernetes 集群内的任意 Service。下面是一个示例 ServiceMonitor YAML 文件:
// www.javascriptcn.com code example
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-monitor
annotations:
prometheus.io/scrape: 'true'
spec:
selector:
matchLabels:
app: my-app
endpoints:
- port: metrics上述 YAML 文件将监控名称为 “my-app” 的 Kubernetes Service,该服务的对外暴露的端口号是 “metrics”。
当然,这只是一个示例。在使用 Prometheus 监控 Kubernetes 之前,我们需要为所有的 Kubernetes 服务添加监控。
监控已发布的 Kubernetes 服务
在您的应用程序或服务部署后,需要在相应的 Service 之上定义一个可访问的端口,并且在应用程序或服务允许抓取的端点上公开 prometheus 格式的指标信息。kubelet 从应用程序或服务中捕获指标,然后将它们公开到 Kubelet API 服务器上。您可以通过访问 kubelet 节点 IP:<kubelet>:10255/metrics/cadvisor 来访问您的应用程序的 metrics。例如:
// www.javascriptcn.com code example
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
ports:
- name: metrics-port
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: my-app'default' 的命名空间中的上述服务公开 meterics 系统端口 8080,kubelet 将捕获此端点并将其暴露在公共指标 URL 上。您可以从当前系统运行的任何位置(包括 Internet 端点)访问此 URL:
'http://<kubelet>:10255/metrics/cadvisor'
Grafana
Grafana 是一个开源的数据可视化工具,支持多种数据源(如 Prometheus)和多种可视化方式。使用 Grafana 可以轻松地可视化 Prometheus 监控数据,方便用户进行数据的查看和分析。
安装 Grafana
Grafana 也可以作为单独的容器运行或作为 Kubernetes Pod 运行。下面以 Pod 的形式运行 Grafana 为例。
通过使用以下命令,可以在 Kubernetes 集群中启动一个 Grafana 实例:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/grafana.yaml
上述命令将从 GitHub 下载 YAML 文件并使用该文件启动一个 Grafana 实例。稍等片刻,Grafana 实例就会在 Kubernetes 集群中运行起来。
配置 Grafana
一旦我们成功地安装了 Grafana,我们就需要为它配置一个数据源。在这种情况下,我们将设置 Prometheus 作为我们的数据源。
进入 Grafana 的界面后,单击左侧菜单上的“Datasources”按钮,然后将 Prometheus 添加为数据源。
要添加 Prometheus 作为数据源,请按照以下步骤操作:
1.单击“Add data source”按钮。
2.从列表中选择 Prometheus 数据源。
3.输入 Prometheus 的 URL。
4.选择 Prometheus 暴露的指标。
5.点击"Save & Test"按钮。
一旦我们添加了 Prometheus 数据源,我们就可以开始构建我们的仪表板。在 Grafana 中,我们可以创建多种类型的面板,包括图表、表格和地图。面板中的每个元素都关联着一个查询,该查询从 Prometheus 数据源中提取数据。
下面是一个示例仪表板,它显示了各个 Kubernetes Service 的监控情况:
// www.javascriptcn.com code example
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-dashboard-configmap
data:
kubernetes-monitoring.json: |
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"datasource": "prometheus",
"fieldConfig": {
"defaults": {
"color": {"mode":"palette-classic"},
"unit": "percent",
"decimals": 0
},
"overrides": []
},
"gridPos": {"h":5,"w":5,"x":0,"y":0},
"id": 2,
"options": {
"showThresholdLabels": "auto",
"showThresholdMarkers": true
},
"pluginVersion": "6.7.1",
"targets": [
{
"expr": "sum(kube_service_labels{job=\"kube-state-metrics\",app!=\"\",label_environment!=~\"\"} == 1)",
"intervalFactor": 1,
"legendFormat": "{{label_environment}} - {{app}}",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Kubernetes Services",
"type": "stat"
},
],
"schemaVersion": 22,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {"from": "now-6h","to": "now"},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "",
"title": "Kubernetes Monitoring",
"uid": "kubernetes-monitoring",
"version": 1
}上述 YAML 文件定义了一个由一个面板组成的仪表板,该面板显示了 Kubernetes Service 的监控情况。这个仪表板可以在 Grafana 中渲染出来,以便用户方便地查看监控数据。
结语
Prometheus+Grafana 是一款非常强大的监控组合。使用它们,您可以轻松地监控您的 Kubernetes 集群,提高应用程序的可靠性,并减少错误。我希望这篇文章对您有所帮助,并希望您能够在您的 Kubernetes 集群中实现一套完整的监控系统。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d64773a941bf7134bfadff