[关闭]
@zhangyy 2021-05-17T15:29:05.000000Z 字数 2827 阅读 207

k8s1.18.18 部署 prometheus+ grafana 监控

kubernetes升级系列



一:prometheus介绍

1.1 什么是promethus

  1. Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
  2. 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), Prometheus纳入其下第二大开源项目。
  3. Prometheus目前在开源社区相当活跃。
  4. PrometheusHeapster(HeapsterK8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

1.2 prometheus 的特点:

  1. 多维度数据模型。
  2. 灵活的查询语言。
  3. 不依赖分布式存储,单个服务器节点是自主的。
  4. 通过基于HTTPpull方式采集时序数据。
  5. 可以通过中间网关进行时序列数据推送。
  6. 通过服务发现或者静态配置来发现目标服务对象。
  7. 支持多种多样的图表和界面展示,比如Grafana等。

1.3 prometheus的架构

image_1f5sfp0lu14hrfts1so2jmi138n9.png-271.2kB

image_1f5sfpmti1acl2di4bh7a1snem.png-621.3kB

1.4 基本原理

  1. Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VMDockerKubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如VarnishHaproxyNginxMySQLLinux系统信息(包括磁盘、内存、CPU、网络等等)。

1.5 服务过程

  1. Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、ZookeeperConsulDNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
  2. Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
  3. Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
  4. PushGateway支持Client主动推送metricsPushGateway,而Prometheus只是定时去Gateway上抓取数据。
  5. Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

1.6 三大套件

  1. Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  2. Alertmanager 警告管理器,用来进行报警。
  3. Push Gateway 支持临时性Job主动推送指标的中间网关。

二:grafana 介绍

  1. Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:
  2. 1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  3. 2、数据源:GraphiteInfluxDBOpenTSDBPrometheusElasticsearchCloudWatchKairosDB等;
  4. 3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过SlackPagerDuty等获得通知;
  5. 4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  6. 5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  7. 6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

image_1f5sg19m1qip8q9f501ljkd7j13.png-963.6kB

三: 在k8s 1.18.18 上面部署prometheus+ grafana

  1. 上传配置部署文件:
  2. k8s-prometheus-grafana-master.tar.gz
  3. tar -zxvf k8s-prometheus-grafana-master.tar.gz
  4. tree k8s-prometheus-grafana-master
  5. ----
  6. k8s-prometheus-grafana-master
  7. ├── grafana
  8. ├── grafana-deploy.yaml
  9. ├── grafana-ing.yaml
  10. └── grafana-svc.yaml
  11. ├── node-exporter.yaml
  12. └── prometheus
  13. ├── configmap.yaml
  14. ├── prometheus.deploy.yml
  15. ├── prometheus.svc.yml
  16. └── rbac-setup.yaml
  17. ----

image_1f5sggvp91toi121f18hb15fg101a1g.png-70.7kB

  1. 安装 所有文件:
  2. kubectl apply -f node-exporter.yaml
  3. 安装prometheus:
  4. kubectl apply -f configmap.yaml
  5. kubectl apply -f prometheus.deploy.yml
  6. kubectl apply -f prometheus.svc.yml
  7. kubectl apply -f rbac-setup.yaml
  8. 安装grafana:
  9. kubectl apply -f grafana-deploy.yaml
  10. kubectl apply -f grafana-ing.yaml
  11. kubectl apply -f grafana-svc.yaml

  1. kubectl get pod -n kube-system

image_1f5sgrdnt17luv9u1s2fh6k1j9k2s.png-87kB

  1. kubectl get svc -n kube-system

image_1f5sgt49f1kap1bs613sp3m17hm39.png-79kB


  1. 打开grafana
  2. http://192.168.3.175:31878
  3. 默认用户名密码:
  4. admin/admin

image_1f5siml831i011bevba61hv91rnv9.png-157.5kB

  1. 增加一个prometheusdatasources
  2. kubectl get pod -n kube-system

image_1f5sj8ita1brrmlghv7a1l1m4e13.png-72.5kB

image_1f5sj7dkj8u618v8bfk1qitt88m.png-230.6kB


  1. 导入一个模板:

image_1f5sjbm80v0dnvm18ek1ofb1hvc1g.png-207.1kB

image_1f5sje7scbpbht7105r1j3utcd1t.png-415.3kB

image_1f5sjfl041p9oaep142do871glk2a.png-240kB

image_1f5sjhdq51e1398h1hfm192k1ike34.png-241.4kB

image_1f5sji4vv10okh5bfm12bpmu3h.png-432.4kB

image_1f5sjj4cb1vuatsa19gpld11vmv3u.png-400.8kB

image_1f5sjkhalqv217fg16mdvnq5p4b.png-235.1kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注