Prometheus学习笔记二–安装部署简单监控及使用PromQL查询监控数据

1,安装部署。
1,环境准备。

软件包下载地址:https://prometheus.io/download/

地址 规划/软件包
192.168.0.10 Prometheus Server
192.168.0.10 node_exporter

2,部署Prometheus Server。
1,下载安装包。

$ cd /usr/local/src/
$ wget https://github.com/prometheus/prometheus/releases/download/v2.19.1/prometheus-2.19.1.linux-amd64.tar.gz
$ wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz

2.安装 Prometheus

创建prometheus用户
$ groupadd prometheus
$ useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
解压安装包。
$ tar xf prometheus-2.19.1.linux-amd64.tar.gz -C /usr/local/ && cd /usr/local/
$ ln -s /usr/local/prometheus-2.19.1.linux-amd64/ prometheus

创建systemd启动脚本

$ vim /etc/systemd/system/prometheus.service
 
添加如下内容:
[Unit]
Description=prometheus
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/
var/lib/prometheus --storage.tsdb.retention.time=10d --log.level=info
Restart=on-failure

[Install]
WantedBy=multi-user.target

–storage.tsdb.path 修改本地数据存储的路径
–log.level 日志等级
–storage.tsdb.retention.time 保存时间

2.1 使用容器安装
对于Docker用户,直接使用Prometheus的镜像即可启动Prometheus Server

docker run -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

启动完成后,可以通过http://localhost:9090访问Prometheus的UI界面:

3,安装 node_exporter
在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据.

从上面的描述中可以看出Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向Prometheus提供标准格式的监控样本数据即可。

在 Prometheus 本节点或者另一台节点上分别安装 node_exporter

$ tar xf node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local/ && cd /usr/local/
$ ln -s /usr/local/node_exporter-1.0.1.linux-amd64/ node_exporter
$ chown -R prometheus.prometheus node_exporter/

创建 node_exporter 启动脚本

$ vim /etc/systemd/system/node_exporter.service
 
添加如下内容:
 
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target

[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

注意:node_exporter 的运行用户也是 prometheus 用户需要在每台节点上都创建该用户。

启动 node_exporter 服务:
$ systemctl enable node_exporter.service
$ systemctl start node_exporter.service
$ systemctl status node_exporter.service
$ ss -tnl | grep 9100
#访问http://localhost:9100/
curl http://localhost:9100/

访问http://localhost:9100/metrics,可以看到当前node exporter获取到的当前主机的所有监控数据,如下所示:
在这里插入图片描述
每一个监控指标之前都会有一段类似于如下形式的信息:

# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125

其中HELP用于解释当前指标的含义,TYPE则说明当前指标的数据类型。在上面的例子中node_cpu的注释表明当前指标是cpu0上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu的数据类型是计数器(counter),与该指标的实际含义一致。又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。
除了这些以外,在当前页面中根据物理主机系统的不同,你还可能看到如下监控指标:

  1. node_boot_time:系统启动时间
  2. node_cpu:系统CPU使用量
  3. nodedisk*:磁盘IO
  4. nodefilesystem*:文件系统用量
  5. node_load1:系统负载
  6. nodememeory*:内存使用量
  7. nodenetwork*:网络带宽
  8. node_time:当前系统时间
  9. go_*:node exporter中go相关指标
  10. process_*:node exporter自身进程相关运行指标

2,配置 Prometheus 添加监控目标,从Node Exporter收集监控数据

$ cd /usr/local/prometheus
$ vim prometheus.yml 
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'.
    # 搜集node exporter监控数据
    static_configs:
    - targets: ['localhost:9090','localhost:9100'] # 对本机node_exporter 监控

举例新添加的对其它node节点抓取数据
  - job_name: '0.11'
    #重写了全局抓取间隔时间,由15秒重写成5秒。
    scrape_interval: 5s
    static_configs:
    - targets: ['192.168.0.11:9100']

启动 Prometheus 服务:

$ chown -R prometheus.prometheus prometheus/
$ systemctl enable prometheus.service
$ systemctl start prometheus.service
$ systemctl status prometheus.service

注意:要留意启动之前的目录权限更改,否则可能会在启动的时候报错Feb 11 16:08:41 localhost alertmanager: level=error ts=2019-02-11T08:08:41.419390133Z caller=main.go:179 msg=“Unable to create data directory” err=“mkdir data/: permission denied”。
访问 Prometheus WEB 查看我们定义的目标主机:http://192.168.0.10:9090/targets
在这里插入图片描述
其中“1”表示正常,反之“0”则为异常。
在这里插入图片描述
使用PromQL查询监控数据
Prometheus UI是Prometheus内置的一个可视化管理界面,通过Prometheus UI用户能够轻松的了解Prometheus当前的配置,监控任务运行状态等。 通过Graph面板,用户还能直接使用PromQL实时查询监控数据:
在这里插入图片描述
切换到Graph面板,用户可以使用PromQL表达式查询特定监控指标的监控数据。如下所示,查询主机负载变化情况,可以使用关键字node_load1可以查询出Prometheus采集到的主机负载的样本数据,这些样本数据按照时间先后顺序展示,形成了主机负载随时间变化的趋势图表:
在这里插入图片描述
PromQL是Prometheus自定义的一套强大的数据查询语言,除了使用监控指标作为查询关键字以外,还内置了大量的函数,帮助用户进一步对时序数据进行处理。例如使用rate()函数,可以计算在单位时间内样本数据的变化情况即增长率,因此通过该函数我们可以近似的通过CPU使用时间计算CPU的利用率:

rate(node_cpu[2m])

在这里插入图片描述
这时如果要忽略是哪一个CPU的,只需要使用without表达式,将标签CPU去除后聚合数据即可:

avg without(cpu) (rate(node_cpu[2m]))

在这里插入图片描述
那如果需要计算系统CPU的总体使用率,通过排除系统闲置的CPU使用率即可获得:

1 - avg without(cpu) (rate(node_cpu{mode="idle"}[2m]))

在这里插入图片描述
通过PromQL我们可以非常方便的对数据进行查询,过滤,以及聚合,计算等操作。通过这些丰富的表达书语句,监控指标不再是一个单独存在的个体,而是一个个能够表达出正式业务含义的语言。

帮助文档:https://yunlzheng.gitbook.io/prometheus-book/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章