1、什么是Prometheus?

普罗米修斯是一个云计算基础基金项目,它是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集度量,评估规则表达式,显示结果,并在观察到指定条件时触发警报。

普罗米修斯与其他度量(metrics)和监控系统的区别在于:

  • 多维数据模型(由度量名称和键/值维度集定义的时间序列)
  • PromQL是一种强大而灵活的查询语言,可以利用这种维度
  • 不依赖分布式存储;单服务器节点是自治的
  • 用于时间序列采集的HTTP pull模型
  • 通过批处理作业的中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 图形和仪表板支持的多种模式
  • 支持分层和水平联合

运行流程如下,prometheus根据配置定时去拉取各个节点的数据,默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。将获取到的数据存入TSDB,一款时序型数据库。此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。它的报警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和发送报警的一个组件。prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。
 
Prometheus资源地址:https://github.com/coreos/prometheus-operator/

2、k8s中部署Prometheus监控

首先查找prometheus-oprator并拉取部署文件
 
解压prometheus-oprator包
 
仓库中创建新项目,kubeapps
 
提前下载相关镜像并上传到仓库
 
进入解压得到的目录,可以看到有三个组件,

  • kube-state-metrics:直接采集的数据集群无法使用,kube-state-metrics负责从prometheus的数据格式转换为k8s集群可以识别的格式。
  • prometheus-node-exporter安装在被监控端,负责采集多种数据
  • grafana可以产生图像化监控

 
修改主配置value.yaml文件
 
打开三个ingress,设定域名和路径
 
 
 
并修改八个镜像路径到自己的仓库路径,
 

 

 

 
 

 

添加登陆密码
 
接下来分别修改子配置文件的value.yaml文件
进入grafana子目录,修改value.yaml文件
 
修改五个镜像路径到自己的仓库路径
 

 

 

 

 

并打开ingress服务,设置域名
 

进入kube-state-metrics子目录,修改value.yaml文件
 

修改一个镜像路径到自己的仓库路径
 

进入prometheus-node-exporter子目录,修改value.yaml文件,发现不用修改
 

创建命名空间
 
指定ns安装prometheus-operator
 
查看pod和svc全部正常启动
 
控制器也正常
 
查看ingress也正常开启
 
给真机添加解析
 
网页输入prometheus.westos.org访问,进入
 
grafana.westos.org也可以访问,输入密码
 
grafana的图形化展示比原本的Prometheus做的好,配置默认的Prometheus
 
测试  
添加Prometheus
 
看到了图形界面
 

3、prometheus监控nginx

使用helm图形化界面安装nginx
 
进入nginx,使用9.4.1版本
 
打开Prometheus监控
 
修改YAML文件,添加仓库信息
 
指定ns
 
最后可以看到修改的地方
 
部署成功
 
网页访问上面展示的url,成功访问
 
查看开放了9113端口监控
 
设备发现没有nginx,原因是未添加对应的标签release=prometheus-operator
 
查看nginx没有标签release=prometheus-operator,其他有
 
给nginx添加标签
 
现在服务发现就有nginx了
 
点击graph,选择访问流量指标,添加图
 

如图  

4、基于prometheus监控nginx的HPA自动伸缩

之前学习了根据核心指标(cpu和mem),hpa控制副本的数量。如果想根据其他指标(比如nginx的访问量)控制的话,需要要用到自定义指标的HPA,需要提供社区标准的Custom Metric API,一般用户使用Prometheus-Adapter来提供Custom Metric API,其主要功能是将接受到custom metric api转换成普罗的请求,从普罗中查询数据返回给API Server。简单说,prometheus-adapter负责转换数据
搜索并拉取prometheus-adapter插件
 
解压tar包,进入
 
编辑values.yaml文件,修改镜像路径,修改服务的url
 
上面url的编写可以查看指定ns下的svc
 
保险起见,进入一个容器,看url能否正确解析
 
创建ns,指定ns安装
 
安装完成后,使用提示语句,可以看到有变量出现
 
再详细指定ns,指定pod,指定监控指标,可以成功看到
 
使用python语句更清晰明了
 
编写hpa-nginx.yaml 文件

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-example
spec:
  maxReplicas: 10			%最少1个副本
  minReplicas: 1			%最多10个副本
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  metrics:
  - type: Pods
    pods:
      metric:
        name: nginx_http_requests		%监控类型为nginx的访问流量
      target:
        type: AverageValue				%hpa变化的依据是平均值是否在10附近
        averageValue: 10				

 
应用hpa-nginx.yaml文件
 
查看hpa
 
 
接下来使用hey压力测试,把hey放到/usr/local/bin可执行
 
运行压力测试

chmod +x hey		%赋予可执行权限
hey -n 10000 -c 5 -q 5 http://172.25.11.12/index.html	%总运行次数一万次,每秒五次访问,同时并发五个,即每秒25次访问

-w动态查看hpa,可以看到集群根据压力大小进行动态添加副本,副本数从1到2,从2到3