docker promethues 的监控部署

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker promethues 的监控部署相关的知识,希望对你有一定的参考价值。

promethues的简单使用

一,promethues的简介

promethues,即是普罗米修斯监控系统,是一款针对容器运维开发的功能强大的监控的系统


组件:
1、Server:负责定时在目标上抓取 Metrics(指标)数据。
2、Target:暴露一个HTTP服务接口用户Server抓取数据。
3、Exporter:客户端向服务端推送 Metrics 数据,并以 key/value 格式呈现。
4、Pushgateway:服务端自定义抓取数据的脚本,放在被监控的主机,由pushgateway进行推送。
5、AlertManager :接收server推送的告警信息,并触发告警。
6、Grafana:监控数据展示。

exporter指标数据直接由server端pull搜集
pushgateway 指标先通过脚本收集短周期临时的任务数据,push到pushgateway中,再由server端pull获取
Prometheus各组件运行流程如下:
1、Prometheus Server:Prometheus Sever是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储及查询。Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery(服务发现)的斱式劢态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Sever需要对采集到的数据迚行存储,Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的斱式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。另外Prometheus Server的联邦集群能力可以使其从其他的PrometheusServer实例中获取数据。
2、Exporters:Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:(1)、直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。(2)、间接采集:原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如:mysql Exporter,JMX Exporter,Consul Exporter等。
3、AlertManager:在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产生一条告警。常见的接收方式有:电子邮件,webhook 等。
4、PushGateway:Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行行中转。
:Prometheus的工作流:
1.Prometheus server定期从配置好的jobs和exporters中拉取metrics,或者接收来自Pushgateway发送过来的metrics,或者从其它的Prometheus server中拉metrics。
2.Prometheus server在本地存储收集到的metrics,并运行定义好的alerts.rules,记录新的时间序列或者向Alert manager推送警报。
3.Alertmanager根据配置文件,对接收到的警报迚行处理,发出告警。
4.在图形界面中,可规化采集数据


1、Metrics
prometheus 监控中 对于采集过来的数据,统一称为 metrics 数据。

Metrics:当我们需要为某个系统某个服务做监控、统计、就要用到 Metrics,Metrics 是一种对采样数据的总称 ( metrics 并不代表某一种具体的数据格式,而是一种对于度量计算单位的抽象)
如:

指标1 http_request_totalstatus="200",method="POST"
指标2 \\__name__="http_request_total",status="200",methos="POST"

HTTP请求状态的总和 status 值 200,代表状态为 200 

Metric类型:
Counter: 一种累加的metric,如请求的个数,结束的任务数,出现的错误数等
Gauge: 常规的metric,如温度,可任意加减。其为瞬时的,与时间没有关系的,可以任意变化的数据。
Histogram: 柱状图,用于观察结果采样,分组及统计,如:请求持续时间,响应大小。其主要用于表示一段时间内对数据的采样,并能够对其指定区间及总数进行统计。根据统计区间计算
Summary: 类似Histogram,用于表示一段时间内数据采样结果,其直接存储quantile数据,而不是根据统计区间计算出来的。不需要计算,直接存储结果

2、key/value
Metrics 是数据逻辑的概念,包含多种数据类型
Key / Value 是数据具体的格式,供用户使用查看

process_max_fas  65535
process_open_fds  10
##第一个代表的是 当前采集的 最大文件句柄 65535
第二个代表的是 当前采集的 被打开的文件句柄 10

如:一个 exporter 给我们采集来的服务器上 key/value 形式的 Metrics 数据

​ 当一个 node_exporter 被安装和运行在被监控的服务器上后
​ 使用简单的 curl命令 就可以看到 exporter 帮我们采集到的 metrics 数据的样子,以 key/value 形式展现和保存。curl localhost:9100/metrics9100 exporter 默认端口号

3、时序数据
prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。

时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。

4、标签与样本
标签:使同一个时间序列有了不同维度的识别。例如 httprequests_totalmethod=”Get” 表示所有 http 请求中的 Get 请求。当 method=”post” 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z:][a-zA-Z0-9_:]*。

样本:按照某个时序以时间维度采集的数据,称之为样本。实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳

一个 float64 值
一个毫秒级的 unix 时间戳

格式:Prometheus时序格式与OpenTSDB相似
=,…,例如:http_requests_totalmethod=”POST”,endpoint=”/api/tracks”。

5、instance 和 jobs
instance: 一个单独 scrape 的目标, 一般对应于一个进程。
jobs: 一组同种类型的 instances(主要用于保证可扩展性和可靠性),例如:

job: api-server

    instance 1: 1.2.3.4:5670
    instance 2: 1.2.3.4:5671
    instance 3: 5.6.7.8:5670
    instance 4: 5.6.7.8:5671

二、promethues的安装部署

实验环境
prometheus 192.168.100.21 prometheus-2.27.1.linux-amd64.tar.gz
node1 192.168.100.22 node_exporter-1.1.2.linux-amd64.tar.gz
node2 192.168.100.5 node_exporter-1.1.2.linux-amd64.tar.gz
node3 192.168.100.6 node_exporter-1.1.2.linux-amd64.tar.gz

做好时间同步 ntpdate ntp.aliyun.com

1、安装promethues server

.解压安装包
tar zxvf prometheus-2.27.1.linux-amd64.tar.gz -C /usr/local

#默认配置文件
cd /usr/local/
mv prometheus-2.27.1.linux-amd64/ prometheus-2.27.1
cd prometheus-2.27.1
cat prometheus.yml

[root@prometheus prometheus-2.27.1]# cat prometheus.yml
# my global config    #全局设置
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.  #每隔多久抓取一次指标,不设置默认1分钟
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.    #内置告警规则的评估周期
  # scrape_timeout is set to the global default (10s).    #收集指标间隔过期时间

# Alertmanager configuration     #告警模块设置
alerting:
  alertmanagers:
  - static_configs:  #静态配置
    - targets:
      # - alertmanager:9093        #端口

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:     #告警规则
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:      #刮擦数据,采集
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'      #名称

    # metrics_path defaults to '/metrics'     #默认数据展示路径
    # scheme defaults to 'http'.      #http方式

    static_configs:
    - targets: ['localhost:9090']
[root@prometheus prometheus-2.13.1]#

登陆192.168.100.21:9090,web表达式游览器

登陆192.168.100.21:9090/metrics,可以支持的指标数据类型,

复制任意一个指标类型进行搜索

选择图标形式,生成图标

2、安装exporter

在node1上

解压安装包,命令优化路径,设置服务控制,开启服务
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz

cd node_exporter-1.1.2.linux-amd64
cp node_exporter /usr/local/bin #f复制命令让系统可以识别

上传数据包再解压
[root@node1 ~]# ls
anaconda-ks.cfg  node_exporter-1.1.2.linux-amd64
compose_tomcat   node_exporter-1.1.2.linux-amd64.tar.gz
[root@node1 ~]# cd node_exporter-1.1.2.linux-amd64/
[root@node1  node_exporter-1.1.2.linux-amd64]#]# cp node_exporter /usr/local/bin
[root@node1 node_exporter-1.1.2.linux-amd64]# ./node_exporter

登陆node节点192.168.100.22:9100可以看到页面

其他exporter暴露器

(1)在promethues官网下载各类型exporter

(2)通过github官网,克隆数据代码到本地
yum install -y git*
git clone https://github.com/prometheus/node_exporter.git

3、将node节点加到server中

netstat -nautp | grep prometheus
killall -9 prometheus

vim /usr/local/prometheus-2.27.1.linux-amd64/prometheus.yml
-----最后一行添加------

  • job_name: ‘nodes’
    static_configs:
    • targets:
      • 192.168.100.22:9100
      • 192.168.100.5:9100
      • 192.168.100.6:9100
        ——>wq
        ./prometheus

#显示node节点状态

4、在其他两个node节点安装exporter

同样的操作
tar zxvf node_exporter-1.1.2.linux-amd64.tar.gz
cd node_exporter-1.1.2.linux-amd64/
cp node_exporter /usr/local/bin
./node_exporter
#登陆http://192.168.100.21:9090/targets
可以看到所有节点已经开启

5、表达式浏览器(promQL 过滤使用)


2、表达式浏览器常规使用
在prometheusUI控制台上可以进行数据过滤
####简单的用法:
#CPU使用总量
node_cpu_seconds_total
#进阶1:
计算过去5分钟内的CPU空闲速率
PromQL: irate(node_cpu_seconds_totalmode="idle"[5m])
解析:
irate:速率计算函数(灵敏度非常高)
node_cpu_seconds_total:node节点CPU使用总量(指标)
mode="idle" 空闲指标(标签)
5m:过去的5分钟内,所有CPU空闲数的样本值,每个数值做速率运算
mode="idle" :整体称为标签过滤器
#进阶2:
每台主机CPU 在5分组内的平均使用率
PromQL:(1- avg (irate(node_cpu_seconds_totalmode='idle'[5m]))by (instance))* 100
解析
avg:平均值
avg (irate(node_cpu_seconds_totalmode='idle'[5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点
(1- avg (irate(node_cpu_seconds_totalmode='idle'[5m]))by (instance))* 100:CPU 5分钟内的平均使用率

其他常用的指标:
1、查询1分钟平均负载
node_load1 > on (instance) 2 * count (node_cpu_seconds_totalmode='idle') by(instance)
node_load5
node_load15 
1、5、15分钟的cpu负载
一般来说以上的值不能长时间大于CPU核心数量
top 


查询指定CPU使用率

2、内存使用率
node_memory_MemTotal_bytes
node_memory_MemFree_bytes
node_memory_Buffers_bytes
node_memory_Cached_bytes

计算使用率:
可用空间:以上后三个指标之和
已用空间:总空间减去可用空间
使用率:已用空间除以总空间

以上是关于docker promethues 的监控部署的主要内容,如果未能解决你的问题,请参考以下文章

promethues exporter+ grafana 监控pg+mysql

docker promethues的服务发现和grafana

docker promethues的服务发现和grafana

服务监控之promethues+grafana,直接送你上大师,这还不上热门吗

服务监控之promethues+grafana,直接送你上大师,这还不上热门吗

服务监控之promethues+grafana,直接送你上大师,这还不上热门吗