prometheus介绍

1.多维度数据模型;
时间序列数据由metrics名称和键值对来组成
可以对数据进行聚合,切割等操作
所有的metrics都可以设置任意的多维标签。
2.灵活的查询语言(PromQL):可以对采集的metrics指标进行加法,乘法,连接等操作;
3.可以直接在本地部署,不依赖其他分布式存储;
4.通过基于HTTP的pull方式采集时序数据;
5.可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
6.可通过服务发现或者静态配置来发现目标服务对象(targets)。
7.有多种可视化图像界面,如Grafana等。
8. 高效的存储,每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。

间隔

1.Prometheus Server: 用于收集和存储时间序列数据。
2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。
3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端
4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。
5.Grafana:监控仪表盘
6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。

从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面


Prometheus server由三个部分组成,Retrieval,Storage,PromQL
Retrieval负责在活跃的target主机上抓取监控指标数据
Storage存储主要是把采集到的数据存储到磁盘中
PromQL是Prometheus提供的查询语言模块。

prometheus工作流程是:
1.    Prometheus  server可定期从活跃的(up)目标主机上(target)拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标;也可通过pushgateway把采集的数据上报到prometheus server中;还可通过一些组件自带的exporter采集相应组件的数据;
2.    Prometheus server把采集到的监控指标数据保存到本地磁盘或者数据库;
3.    Prometheus采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到alertmanager
4.    Alertmanager通过配置报警接收方,发送报警到邮件,微信或者钉钉等
5.    Prometheus 自带的web ui界面提供PromQL查询语言,可查询监控数据
6.    Grafana可接入prometheus数据源,把监控数据以图形化形式展示出
1.上传prometheus_v2_2_1.tar.gz镜像到k8s-master和k8s-node节点
解压镜像
docker load -i prometheus_v2_2_1.tar.gz 

在k8s-node节点创建一个存储prometheus数据的目录
mkdir /data
chmod 777 /data/
在k8s-master节点执行如下
wget http://download.zhufunin.com/k8s_1.16/prometheus-cfg.yaml
wget http://download.zhufunin.com/k8s_1.16/prometheus-deploy.yaml

wget http://download.zhufunin.com/k8s_1.16/prometheus-svc.yaml
kubectl apply -f prometheus-cfg.yaml
kubectl apply -f prometheus-deploy.yaml
kubectl apply -f prometheus-svc.yaml



访问prometheus的web ui界面
192.168.124.16:30090

#ip是k8s-master节点的ip

点击targets,可以看到有如下一些监控目标
kubernetes-apiserver (1/1 up) 
kubernetes-node (2/2 up)
kubernetes-node-cadvisor (2/2 up)
kubernetes-service-endpoints (2/2 up)

注:prometheus热更新配置
为了每次修改配置文件可以热加载prometheus,使配置生效,如修改prometheus-cfg.yaml,可用如下热加载命令使配置生效

curl -X POST http://10.244.1.66:9090/-/reload
10.244.1.66是prometheus的pod的ip地址

配置文件解释:
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s      
#默认值为 15s,收集数据的时间间隔,每隔15s收集一次数据,scrape_interval可以基于全局或基于单个metric定义
      scrape_timeout: 10s     
 #采集数据的超时时间,默认为10s
      evaluation_interval: 1m
#默认为1m,对告警规则做定期计算,然后更新告警状态,evaluation_interval只有全局值,告警状态如下三种
inactive:没有触发阈值
pending:已触发阈值但未满足告警持续时间
firing:已触发阈值且满足告警持续时间


    scrape_configs:
    - job_name: 'kubernetes-node'
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:9100'
        target_label: __address__
        action: replace
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
    - job_name: 'kubernetes-node-cadvisor'
      kubernetes_sd_configs:
      - role:  node
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - target_label: __address__
        replacement: kubernetes.default.svc:443
      - source_labels: [__meta_kubernetes_node_name]
        regex: (.+)
        target_label: __metrics_path__
        replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
    - job_name: 'kubernetes-apiserver'
      kubernetes_sd_configs:
      - role: endpoints
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
        action: keep
        regex: default;kubernetes;https
    - job_name: 'kubernetes-service-endpoints'
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
        action: replace
        target_label: __scheme__
        regex: (https?)
      - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
        action: replace
        target_label: __address__
        regex: ([^:]+)(?::d+)?;(d+)
        replacement: $1:$2
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_service_name]
        action: replace
        target_label: kubernetes_name 

间隔

一、    Prometheus的metrics类型

Prometheus有四种metrics类型:
Counter, Gauge, Summary,Histogram

Counter计数器:计数器统计的数据是递增的,不能使用计数器来统计可能减小的指标,计数器统计的指标是累计增加的,如http请求的总数,出现的错误总数,总的处理时间(如cpu累计使用时间),api请求总数,已完成的任务数等

Gauge量规:量规是一种度量标准,代表可以任意上下波动的单个数值,
用于统计cpu使用率,内存使用率,磁盘使用率,温度等指标,还可统计上升和下降的计数,如并发请求数等

Histogram直方图:统计在一定的时间范围内数据的分布情况,如请求的持续/延迟时间,请求的响应大小等,还提供度量指标的总和,数据以直方图显示。
Histogram由<basename>_bucket{le="<upper inclusive bound>"},<basename>_bucket{le="+Inf"}, <basename>_sum,<basename>_count 组成
如:
apiserver_request_latencies_sum
apiserver_request_latencies_count
apiserver_request_latencies_bucket

Summary摘要:和Histogram直方图类似,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小之类的东西),还可计算度量值的总和和度量值的分位数以及在一定时间范围内的分位数,由 <basename>{quantile="<φ>"},<basename>_sum,<basename>_count 组成
原文地址:https://www.cnblogs.com/faberbeta/p/13343662.html