Prometheus
首先要明白 k8s 和 Prometheus 是怎么协作的:随着云原生社区的不断壮大,应用场景越来越复杂,需要一套针对云原生环境的完善并且开放的监控平台。在这样的环境下,Prometheus 应运而生,天然支持 k8s。
Prom 内部是有一个 TSDB 的数据库的,从内部的采集和展示 Prometheus 它都可以完成,展示这块自己的这块 UI 比较 low,所以借助于 Grafana 来展示。
所有的被监控端暴露完指标之后,Prometheus 会主动的抓取这些指标,存储到自己 TSDB 数据库里面,提供给 Web UI,或者 Grafana,或者 API clients 通过 PromQL 来调用这些数据,PromQL 相当于 Mysql 的 SQL,主要是查询这些数据的。
你有很多的被监控端时,手动的去写这些被监控端是不现实的,所以需要自动的去发现新加入的节点,或者以批量的节点,加入到这个监控中,像 k8s 它内置了服务发现的机制,也就是 prom 会连接 k8s 的 API,去发现你部署的哪些应用,哪些 pod,通通的都给你暴露出去,监控出来,也就是为什么 K8S 对 prometheus 特别友好的地方,也就是它内置了做这种相关的支持了。
Prometheus 将所有数据存储为时间序列,具有相同度量名称以及标签属于同一个指标。
写 PromQL 时时间序列格式:<metric name>{<label name>=<label value>, …}
,指标的名字 + 花括号里面有很多的值
如果想监控 node 的资源,就可以放一个 node_exporter
,这是监控 node 资源的,node_exporter
是 Linux 上的采集器,你放上去你就能采集到当前节点的 CPU、内存、网络 IO,等待都可以采集的。
如果想监控容器,k8s 内部提供 cAdvisor 采集器,pod 呀,容器都可以采集到这些指标,都是内置的,不需要单独部署,只知道怎么去访问这个 Cadvisor 就可以了。