前言
Kubernetes 是现代云原生应用构建与管理的重要平台,能够自动化部署、扩展和管理容器化应用程序。监控应用程序的性能是应用程序开发运维过程中必不可少的一项工作。本文将重点介绍如何使用 Kubernetes 提供的工具和第三方软件来监控应用程序的性能。
Kubernetes 提供的监控工具
Metrics Server
Metrics Server 是 Kubernetes 集群监控的官方组件,它会定期从 kubelet 和 kube-apiserver 上收集节点和 Pod 的 CPU、内存使用情况,然后将数据存储在 Kubernetes 中。利用 Metrics Server,可以获取到单个 Pod、命名空间、整个集群的资源使用情况等数据。利用 Metrics Server 可以获取以下资源 metrics:
- CPU usage
- Memory usage
- Network I/O
- Disk I/O
Metrics Server 灵活、简单,无需外部配置即可使用。因此,它非常适合于 Kubernetes 集群初期的部署。但 Metrics Server 无法处理大量的节点和 Pod 数量,此时就需要其他第三方监控工具。
Prometheus
Prometheus 是一个流行的开源监控解决方案,能够进行多维度的指标采集和告警。在 Kubernetes 中使用 Prometheus 监控系统的方案和应用程序的相关指标,Prometheus 与 Kubernetes 的兼容性非常好。
Prometheus 通过 HTTP 协议采集 JSON 格式的指标,并将其存储在时间序列数据库中。使用 Prometheus 能够监控以下指标:
- CPU usage
- Memory usage
- Network traffic
- Request duration
- Database queries
- Custom application metrics
通过 Grafana,Prometheus 能够将采集到的各个节点的相关指标画出一些漂亮的可视化表格。同时也可以通过 Prometheus 的告警机制实现在系统异常高峰期判定资源不足,以便在尽可能短的时间内进行扩容,从而使系统更加平稳地运转。
ELK
ELK 是 Elastic Stack 的缩写,是一个完整的、开源的日志管理和告警平台。它由 Elastic Search、Logstash 和 Kibana 三个开源工具组成。在使用 ELK 监控 Kubernetes 集群时,可以使用巨量的日志数据进行监控。
Elastic Search 是一个开源的搜索引擎,具有非常好的水平扩展性,能够处理大数据;Logstash 是一个用于日志收集、过滤、转化和输出的服务器端处理管道,它可以从不同的数据源中收集数据,过滤和转化数据以供使用;Kibana 则是一个开源数据可视化平台,可以实现对数据的可视化。使用 ELK 能够监控以下方面:
- 应用程序日志
- 运行时日志
- 针对慢出现,异常或错误等的日志
如何使用 Kubernetes 监控工具?
安装 Metrics Server
首先我们需要安装 Metrics Server,我们可以从以下的 GitHub 位置上获取:
git clone https://github.com/kubernetes-incubator/metrics-server.git
安装 Metrics Server,需要执行以下命令:
cd metrics-server/ kubectl apply -f deploy/kubernetes
执行上述命令后,我们可以通过以下命令来检查 Metrics Server 是否安装成功:
kubectl get deployment metrics-server -n kube-system
如果状态显示 running 则说明安装成功。
安装 Prometheus
Prometheus 在 Kubernetes 上安装非常简单,在 Kubernetes 集群上进行安装即可。可以依次执行以下命令:
kubectl create ns prometheus helm install stable/prometheus -n prometheus
执行上述命令后,我们可以通过以下命令来检查 Prometheus 是否安装成功:
kubectl get pods -n prometheus
如果返回的值中有一个 pod 在运行,则说明安装成功。
此时我们需要访问 Prometheus UI 界面,可以通过以下命令获取 URL:
export POD_NAME=$(kubectl get pods -n prometheus -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace prometheus port-forward $POD_NAME 9090
执行完毕后即可在 localhost:9090 上查看到 Prometheus UI 界面。
安装 ELK
安装 ELK,首先需要安装 Elastic Search。可以执行以下命令:
helm repo add elastic https://helm.elastic.co helm repo update helm install elasticsearch elastic/elasticsearch
执行完毕后,我们检查 Elastic Search 是否安装成功:
kubectl get svc elasticsearch-quickstart
接下来需要安装 Kibana。可以执行以下命令:
helm install kibana elastic/kibana
Kibana 的 URL:http://localhost:<node_port> 这个 NODE_PORT 是可以通过以下命令获取的:
kubectl get service kibana-quickstart
上面的 NODE_PORT 就是 Kibana 的 NodePort。
最后安装 Logstash。Logstash 的工作方式为收集收集源输入的日志信息并过滤处理,处理过的数据再输出到 Elasticsearch 中。可以执行以下命令:
helm install logstash elastic/logstash
执行完毕后,我们检查 Logstash 是否安装成功:
kubectl get svc logstash-quickstart
至此,我们已经完成了 ELK 的安装。我们可以在 Kibana 界面上查看 Elastic Search 收集到的日志信息。
总结
Kubernetes 提供的监控工具能够监控应用程序的资源使用情况,以及通过过程日志进行代码逻辑分析。通过 Prometheus 与 Kubernetes 的深度集成,我们能够更加快速简单地实现服务化部署与监控的同时加强了系统的稳定性,提高了开发效率。同时,ELK 也是我们一项不可忽视的日志功能工具。它能够帮助我们对应用程序的日志信息进行一系列的分析和解决,更好地监控应用程序的运行状态。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ded461f6b2d6eab39f61ee