相关组件
整个 istio 环境需要以下组件
- prometheus -- 用于 K8s 平台和 istio 平台监控
- jaeger -- 用于服务间的链路追踪
- elasticsearch -- 用于存储链路追踪的数据,(也可增加部署 fluntd 和 kibana 收集监控 K8s 平台日志)
- istio -- 平台本体
由于需要用于生产环境中,istio 部署包中所集成的 Prometheus 和 jaeger 均无法满足需求,其中平台中其他服务需要复用 Prometheus;istio 中集成的 jaeger 为 allinone 模式(用于测试),无法满足生产需求,因此单独拆出来。
Prometheus 搭建
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目,且在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
其基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等
部署
Prometheus 此处采用的是 coreos 提供的 kube-prometheus,其定义了一组 CRD,且提供了 Operator 便于部署。
当git clone
下来项目后,就可以无脑部署了:
# 部署 Prometheus 所需的 crd 和 namespace(monitoring)
kubectl create -f manifests/setup
# 检查 crd serverMonitor 是否可用
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
# 部署其他组件
kubectl create -f manifests/
在 kube-prometheus 中,主要定义了 以下几个 crd:
# 常用
prometheusrules.monitoring.core