kubernetes之promethus部署
-
星火燎原:promethus
Prometheus的前身是由SoundCloud公司开发的报警工具包演变而来的一个开源监控系统。该系统凭借灵活的查询语法而备受广大运维人员的欢迎,因为在进入容器云时代之后,集群的监控变得更加复杂,监控维度变得混乱,仅凭借过去常见的诸如Zabbix等监控系统已经很难实现对一个集群的全方位监控 。
从容器进入人们视野时,Prometheus的优势就逐渐显示出来了,得益于灵活的时间序列数据库,运维人员可以根据业务需要定制各式各样的监控规则。Prometheus的开发人员和用户社区非常活跃,目前Prometheus已经是一个独立的开源项目,且不依赖于任何公司。为了强调这点和明确该项目治理结构, Prometheus在2016年加入了云原生计算基金会(Cloud Native Computing Foundation),这也是该基金会继Kurberntes之后第二个入驻的项目,足以证明Prometheus在容器云方面的声望。
- 核心组件
Prometheus的核心是一个时间序列数据库,我们可以通过它抓取和存储数据,并通过Prometheus 定义的一些查询语句来获取我们需要的数据。
Prometheus架构如图所示,整个系统工作流程大体可以橄述为:Prometheus Server通过拉取(pull)的方式从监控目标的指标(metrics)获取数据,或者通过中间网关(Pushgateway)间接地拉取监控目标推送给网关的数据,后面这种情况一般出现于监控目标的网络无法直接联通Prometheus Server的时候,通过网关中转监控数据是一个常见的方法。Prometheus Server在本地存储抓取到的数据,通过一定规则进行清理和整理数据,然后把得到的结果存储起来。接下来各种WebUI就可以通过Server提供API,使用PromQL查询语言获取任意监控数据了。当Server监测到有异常时会推送报警给Alertmanager, Alertmanager处理各类报警信息之后,再把报警信息分别发送给相关人员。
官网地址:https://prometheus.io/docs/prometheus/latest/getting_started/
![]()
下图为企业级promethus架构
![]()
主要组件介绍如下:
Prometheus Server:用于收集和存储时间序列数据。
Client Library:客户端库,为需要监控的服务生成相应的指标并暴露给 Prometheus server。当Prometheus server 拉取肘,直接返回实时状态的指标。
Push Gateway:主要用于短期任务。由于这 类任务存在时间较短,可能在Prometheus拉取之前就消失了。为此,这次任务可以直接向Prometheus server端推送它们的指标。这种方式主要用于服务层面的指标,对于机器层面的指标,则需要使用node exporter。
Exporters:用于暴露已有的第三方服务的指标给Prometheus。
Alertmanager:从Prometheus server端接收到报警后,会进行去除重复数据、分组,并路由到相应接收方式,发出报警。常见的接收方式有:电子邮件、pagerduty、OpsGenie、webhook等。
一些其它工具
prothmethus客户端库只要提供4种主要的指标类型:
Counter
一种累加的指标,典型的应用如请求的个数、结束的任务数、出现的错误数等。
例如,查询http_requests_total{method="get",job="Prometheus",handler="query"}返回8,10秒后,再次查询,则返回14。
Gauge
一种常规的metric,典型的应用如温度,运行的goroutines的个数。
可以任意加减。
例如,go_goroutines { instance="172.17.0.2",job="Prometheus"}返回值 147, 10秒后再次查询返回124。
Histogram
可以理解为柱状图,典型的应用如请求持续时间、响应大小等。
可以对观察结果采样、分组及统计。
summary
与Histogram 类似,典型的应用如请求持续时间、响应大小等。
提供观测值的count和sum功能。
提供百分位的功能,即可以按百分比划分跟踪结果。
更多详细内容参考官网
https://prometheus.io/docs/prometheus/latest/getting_started/
部署promethues,我的版本为k8s 1.20,使用以下配置是没有问题的。
#创建文件prometheus-config.yml(如果是实验环境目录无所谓)
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config data: prometheus.yml: | global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']#创建 prometheus-deployment.yml 文件
apiVersion: v1 kind: "Service" metadata: name: prometheus labels: name: prometheus spec: ports: - name: prometheus protocol: TCP port: 9090 targetPort: 9090 selector: app: prometheus type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: labels: name: prometheus name: prometheus spec: replicas: 1 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: containers: - name: prometheus image: prom/prometheus:v2.2.1 command: - "/bin/prometheus" args: - "--config.file=/etc/prometheus/prometheus.yml" ports: - containerPort: 9090 protocol: TCP volumeMounts: - mountPath: "/etc/prometheus" name: prometheus-config volumes: - name: prometheus-config configMap: name: prometheus-config![]()
![]()
![]()
访问即可,http://ip:30106还没有设置任何监控指标。
![]()







浙公网安备 33010602011771号