【俄狄俄斯+Grafana】从头开始解释如何设置监控Kubernetes的搭配
首先
在云原生架构和微服务趋势的背后,存在着技术上的复杂性、范式转变以及陡峭的学习曲线。这种复杂性体现在设计、部署、安全性,以及运行在分布式系统(如Kubernetes)中的应用程序的监控与可观察性方面的一切。幸运的是,开发人员有一些工具可以帮助他们克服这些障碍。例如,在可观察性方面,开源工具如Prometheus和Grafana可以给开发者社区提供巨大的帮助。
在这篇文章中,我们将看一下如何在Kubernetes中使用Prometheus和Grafana。我们将了解Prometheus的工作原理,以及如何创建自定义仪表板。然后,我们将深入了解一些概念,讨论在生产环境中应该查看哪些指标,并讨论如何进行设置。
开始使用Prometheus和Grafana的简单方法是注册MetricFire的免费试用。MetricFire提供Prometheus和Grafana的托管服务。
安装和设置
在最开始,需要运行 Kubernetes 集群。您可以选择使用像 Minikube 这样的集群,正如其他文章中介绍的那样,也可以选择部署像 GKE 这样的云托管解决方案。在本文中,我们将使用 GKE。
另外,使用Helm部署Grafana和Prometheus。Helm是Kubernetes的包管理器,类似于Debian的APT。 CNCF与Microsoft,Google,Bitnami以及Helm的贡献者社区合作,以维护该项目。
通过使用Helm,你可以轻松地使用”Helm Charts”来管理Kubernetes应用程序。Helm Charts的主要功能是定义、安装和升级Kubernetes应用程序。
Helm社区在Helm hub上开发和分享图表。Helm hub是一个分布式存储库,托管了从Web服务器、CI/CD工具、数据库、安全工具到Web应用的Kubernetes兼容应用。
要安装Helm,请先下载并解压最新版本,将“helm”二进制文件移动到“/usr/local/bin/helm”。
mv linux-amd64/helm /usr/local/bin/helm
MacOS用户可以使用“brew install helm”,Windows用户可以使用“Chocolatey choco install kubernetes-helm”。Linux用户(包括MacOS用户)可以使用以下脚本。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
使用Helm,将Prometheus Operator安装到另一个命名空间中。
建議在另一個命名空間中運行Prometheus容器。因此,我們需要創建一個新的命名空間。
kubectl create ns monitor
接下来,继续安装 Prometheus Operator。
在 monitor 命名空间中,使用 helm install 命令,将 prometheus-operator 安装为稳定版本的 prometheus-operator。
「prometheus-operator」是发布的名称。您可以根据需要对其进行更改。
「stable / prometheus-operator」是图表的名称。
「monitor」是要部署运算符的命名空间的名称。
kubectl get pods -n monitor
应该显示 Prometheus Alertmanager、Grafana、kube-state-metrics Pod、Prometheus Node Exporter 和 Prometheus Pod。
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-operator-alertmanager-0 2/2 Running 0 49s
prometheus-operator-grafana-5bd6cbc556-w9lds 2/2 Running 0 59s
prometheus-operator-kube-state-metrics-746dc6ccc-gk2p8 1/1 Running 0 59s
prometheus-operator-operator-7d69d686f6-wpjtd 2/2 Running 0 59s
prometheus-operator-prometheus-node-exporter-4nwbf 1/1 Running 0 59s
prometheus-operator-prometheus-node-exporter-jrw69 1/1 Running 0 59s
prometheus-operator-prometheus-node-exporter-rnqfc 1/1 Running 0 60s
prometheus-prometheus-operator-prometheus-0 3/3 Running 1 39s
由于Pod已经在本地机器上执行了,因此有一个直接从本地机器上使用Prometheus仪表板的选项。这可以通过使用以下命令来完成。
kubectl port-forward -n monitor prometheus-prometheus-operator-prometheus-0 9090
在这里访问http://127.0.0.1:9090,并进入Prometheus仪表盘。
您可以使用此命令来访问Grafana仪表板,就像Prometheus一样。
kubectl port-forward $(kubectl get pods --selector=app=grafana -n monitor --output=jsonpath="{.items..metadata.name}") -n monitor 3000
当访问 http://127.0.0.1:3000 时,可以发现有一些预设的默认仪表板。
请注意,登录需要使用用户名为“admin”和密码为“prom-operator”。这两者都在Kubernetes Secret对象中。
kubectl get secret --namespace monitor grafana-credentials -o yaml
我需要获取已编码的登录和密码的YAML描述。
apiVersion: v1 data: password: cHJvbS1vcGVyYXRvcgo= user: YWRtaW4=
您需要使用以下内容对用户名和密码进行解码。
echo "YWRtaW4=" | base64 --decode echo "cHJvbS1vcGVyYXRvcgo=" | base64 --decode
使用「base64 –decode」可以验证明确的凭据信息。
预先配置的Grafana仪表板,适用于Kubernetes。
默认情况下,Prometheus操作员附带预配置的Grafana-一些默认的仪表板可以使用。
这些默认仪表板包括「Kubernetes / 节点」、「Kubernetes / Pod(容器组)」、「Kubernetes / 计算资源 / 集群」、「Kubernetes / 网络 / 命名空间(Pod)」、「Kubernetes / 网络 / 命名空间(工作负载)」等等。
关于这些仪表盘的详细信息,请参阅这里。例如,如果您想了解如何使用“Kubernetes / Compute Resources / Namespace(Pods)”仪表盘的功能,您需要查看这个ConfigMap。关于Grafana可视化的详细信息,请参阅您喜欢的Grafana仪表盘文章。
可用于Helm安装的指标结果
为了理解Prometheus的机制,让我们访问Prometheus仪表板。使用以下端口转发命令。
kubectl port-forward -n monitor prometheus-prometheus-operator-prometheus-0 9090
接下来,访问 http://127.0.0.1:9090/metrics。您将能够查看一个包含许多指标的长列表。
Prometheus使用的是一种名为PromQL(Prometheus Query Language)的函数查询语言,用户可以实时选择和聚合时间序列数据。如果想全面学习,PromQL可能会变得复杂,但通过使用官方文档中的这些示例开始,您可以理解其中大部分内容。关于PromQL的详细信息,请参阅提供了10个主要示例的优秀文章。
當使用Helm部署Prometheus時,我們使用了這個圖表。實際上,除了Prometheus之外,還部署了以下的元件。
-
- prometheus-operator
-
- prometheus
-
- alertmanager
-
- node-exporter
-
- kube-state-metrics
-
- grafana
-
- service monitors to scrape internal kubernetes components
-
- kube-apiserver
-
- kube-scheduler
-
- kube-controller-manager
-
- etcd
-
- kube-dns/coredns
- kube-proxy
除了Prometheus之外,还添加了能够监控内部系统指标的服务监视器工具和其他工具,如”kube-state-metrics”等。
kube-state-metrics将导出Prometheus服务器可以读取的信息。您可以在执行后访问http://127.0.0.1:8080/metrics以确认这些指标的列表。
kubectl port-forward -n monitor prometheus-operator-kube-state-metrics-xxxx-xxx 8080
在生产环境中监控的重要指标。
我已将Prometheus设置为Grafana的数据源,因此需要监视哪些指标。对于如何进行监视有什么想法吗?
在Grafana中,有很多提供的默认仪表板。这些默认仪表板的名称清晰明了,要显示与集群节点相关的指标,需要使用”Kubernetes / Nodes”仪表板。以下是默认的仪表板。
除非使用minikube或其替代方案之一,否则Kubernetes集群通常会运行多个节点。您需要逐个选择并确保监视所有节点。
您可以使用相同的ConfigMap清单,或直接使用Grafana仪表盘界面来添加自定义仪表盘。它将显示在”创建仪表盘”界面之下。
当您创建新的自定义仪表板时,您将被要求添加查询或选择可视化。选择“选择可视化”后,您将被要求选择图表类型和数据源。请选择Prometheus作为数据源。另外,您还可以使用Prometheus作为数据源来添加查询。
例如,您可以设置一个图表来监控用于每个终端点的Kubernetes API的HTTP请求总数的相关信息,该信息由prometheus_sd_kubernetes_http_request_total度量提供。
由于该指标是累积的,因此Grafana会使用函数rate()来提供关于函数的更详细信息。
在设定了 Visualization 的名称之后,您可以设置警报。假设我们要确保所选择的指标的平均值不超过「0.06」。
让我们选择更重要的指标,如Kubernetes系统容器的Resident Set Size(RSS)。(RSS是指由主存(RAM)中的进程所占用的内存部分)。请查看以下的仪表板。
根据不同情况,有时会出现某些视图过度布局的情况。在这个示例中,由于需要监控系统容器,您可以通过使用命名空间进行筛选来调整仪表板。
让我们看一下第三个重要指标,例如容器的总重启次数。您可以使用特定命名空间的kube_pod_container_status_restarts_total或kube_pod_container_status_restarts_total {namespace = “”}来访问此信息。
在正式环境中,还有许多其他重要的度量指标。其中一些是常见的,并与节点、Pod、Kube API、CPU、内存、存储和资源的使用总体情况有关。以下是一些示例:
-
- kube_node_status_capacity_cpu_cores:ノードのCPU容量について説明します
-
- kube_node_status_capacity_memory_bytes:ノードのメモリ容量について説明します
-
- kubelet_running_container_count:現在実行中のコンテナの数を返します
-
- cloudprovider _ * _ api_request_errors:クラウドプロバイダーAPIリクエストエラー(GKE、AKS、EKSなど)を返します
- cloudprovider _ * _ api_request_duration_seconds:クラウドプロバイダーAPI呼び出しのリクエスト期間を秒単位で返します
除了默认的度量指标之外,Prometheus实例还监控kube-apiserver、kube-scheduler、kube-controller-manager、etcd、kube-dns/coredns、kube-proxy以及”kube-state-metrics”。 这些数据量庞大,不一定都是好事。
列表可能会很长,但重要的度量指标可能因上下文而异。Etcd的度量指标可能对其他人来说并不重要,可能只对生产环境重要。
然而,像Google的Golden Signal和USE方法这样的优秀抽象化和可观测性手段,有助于选择需要监视的指标。
如果您正在考虑使用 Prometheus,或有任何问题,请务必预订 MetricFire 的演示会议进行咨询(可使用日本语)。同时,通过 MetricFire 的免费试用,实际使用 Prometheus 和 Grafana,并实践本文中的内容。
那麼,在下一篇文章中見!