三、部署node_exporter与普罗米修斯集成
在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,我们需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。
从上面的描述中可以看出Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向Prometheus提供标准格式的监控样本数据即可。
这里为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter。
(1)实验环境
系统 | 主机名 | ip | 实验软件 |
Centos7.4 | prometheus | 192.168.100.202 桥接网卡 | prometheus-2.16.0.linux-amd64.tar.gz influxdb-1.7.8.x86_64.rpm |
Centos7.4 | node | 192.168.100.203 | node_exporter-0.18.1.linux-amd64.tar.gz |
(2)实验步骤
-安装exporter节点
******(1)这里继续上面的步骤,上面已经安装普罗米修斯了,所以这里直接部署节点即可,先做节点的基础配置 [root@Centos7 ~]# hostnamectl set-hostname node [root@Centos7 ~]# su [root@node ~]# systemctl stop firewalld [root@node ~]# setenforce 0 setenforce: SELinux is disabled [root@node ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)上传软件包安装exporter [root@node ~]# ll 总用量 7900 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 8083296 7月 12 11:48 node_exporter-0.18.1.linux-amd64.tar.gz [root@node ~]# tar xf node_exporter-0.18.1.linux-amd64.tar.gz [root@node ~]# mv node_exporter-0.18.1.linux-amd64 /usr/local/exporter ******(3)启动exporter [root@node exporter]# ./node_exporter #在前台启动exporter 。。。。。。 使用Ctrl+C退出 #复制一个node节点终端,进行测试 [root@node ~]# curl 127.0.0.1:9100/metrics #使用这个命令可以看到node_exporter节点暴露出来的数据,这是查看本地的 ******(3)编写启动脚本 [root@node exporter]# cd /usr/lib/systemd/system [root@node system]# vim node_exporter.service #写入 [Unit] Description=node_exporter After=network.target [Service] User=prometheus Group=prometheus ExecStart=/usr/local/exporter/node_exporter --web.listen-address=:20001 --collector.systemd --collector.systemd.unit-whitelist=(sshd|nginx).service --collector.processes --collector.tcpstat [Install] WantedBy=multi-user.target #保存退出 [root@node system]# systemctl daemon-reload #重载系统服务 [root@node system]# useradd prometheus #因为这里的系统脚本是用普罗米修斯用户启动的,所以需要创建 [root@node system]# systemctl start node_exporter #启动 [root@node system]# systemctl status node_exporter #查看状态 ● node_exporter.service - node_exporter Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; disabled; vendor preset: disabled) Active: active (running) since 一 2021-07-12 12:01:03 CST; 8s ago Main PID: 1413 (node_exporter) CGroup: /system.slice/node_exporter.service └─1413 /usr/local/exporter/node_exporter --web.listen-address=:20001 --collector.systemd --collector.systemd.unit-whitelist... 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - systemd" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - tcpstat" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - textfile" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - time" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - timex" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - uname" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - vmstat" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - xfs" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg=" - zfs" source="node_exporter.go:104" 7月 12 12:01:03 node node_exporter[1413]: time="2021-07-12T12:01:03+08:00" level=info msg="Listening on :20001" source="node_e...go:170" Hint: Some lines were ellipsized, use -l to show in full. [root@node system]# netstat -anpt | grep 20001 #查看监听端口,20001是因为在启动文件中指的就是20001 tcp6 0 0 :::20001 :::* LISTEN 1413/node_exporter [root@node system]# systemctl enable node_exporter Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /usr/lib/systemd/system/node_exporter.service.
使用浏览器访问测试
可以看到node节点的信息
每一个监控指标之前都会有一段类似于如下形式的信息: 1. # HELP node_cpu Seconds the cpus spent in each mode. 2. # TYPE node_cpu counter 3. node_cpu{cpu="cpu0",mode="idle"} 362812.7890625 4. # HELP node_load1 1m load average. 5. # TYPE node_load1 gauge 6. node_load1 3.0703125 其中HELP用于解释当前指标的含义,TYPE则说明当前指标的数据类型。在上面的例子中node_cpu的注释表明当前指标是cpu0上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu的数据类型是计数器(counter),与该指标的实际含义一致。又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。 除了这些以外,在当前页面中根据物理主机系统的不同,你还可能看到如下监控指标: • node_boot_time:系统启动时间 • node_cpu:系统CPU使用量 • nodedisk*:磁盘IO • nodefilesystem*:文件系统用量 • node_load1:系统负载 • nodememeory*:内存使用量 • nodenetwork*:网络带宽 • node_time:当前系统时间 • go_*:node exporter中go相关指标 • process_*:node exporter自身进程相关运行指标
-配置普罗米修斯采集node节点信息
******(1)在普罗米修斯机器上修改主配置文件 [root@prometheus ~]# cd /usr/local/prometheus/ [root@prometheus prometheus]# vim prometheus.yml 。。。。。。 21 scrape_configs: 22 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. 23 - job_name: 'prometheus' 24 25 # metrics_path defaults to '/metrics' 26 # scheme defaults to 'http'. 27 28 static_configs: 29 - targets: ['localhost:9090'] 30 - job_name: "node" #增加一段job_name 31 static_configs: 32 - targets: 33 - "192.168.100.203:20001" #指定node节点的20001端口 34 remote_write: 35 - url: "http://localhost:8086/api/v1/prom/write?db=prometheus" 36 37 remote_read: 38 - url: "http://localhost:8086/api/v1/prom/read?db=prometheus" #保存退出 [root@prometheus prometheus]# systemctl restart prometheus #重启服务 [root@prometheus prometheus]# systemctl status prometheus #查看服务状态 ● prometheus.service - prometheus Loaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled) Active: active (running) since 一 2021-07-12 12:08:54 CST; 10s ago Main PID: 1128 (prometheus) CGroup: /system.slice/prometheus.service └─1128 /usr/local/prometheus/prometheus 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.172Z caller=head.go:625 component=tsdb msg="WAL...ment=25 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.184Z caller=head.go:625 component=tsdb msg="WAL...ment=25 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.184Z caller=head.go:625 component=tsdb msg="WAL...ment=25 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.186Z caller=main.go:676 fs_type=XFS_SUPER_MAGIC 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.186Z caller=main.go:677 msg="TSDB started" 7月 12 12:08:55 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:55.186Z caller=main.go:747 msg="Loading configurat...eus.yml 7月 12 12:08:55 prometheus prometheus[1128]: ts=2021-07-12T04:08:55.186Z caller=dedupe.go:112 component=remote level=info remo...=0283ed 7月 12 12:08:55 prometheus prometheus[1128]: ts=2021-07-12T04:08:55.187Z caller=dedupe.go:112 component=remote level=info remo...=0283ed 7月 12 12:08:59 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:59.241Z caller=main.go:775 msg="Completed loading ...eus.yml 7月 12 12:08:59 prometheus prometheus[1128]: level=info ts=2021-07-12T04:08:59.242Z caller=main.go:630 msg="Server is ready to...uests." Hint: Some lines were ellipsized, use -l to show in full.
- 使用浏览器访问普罗米修斯
UP表示成功获取node节点的监控指标
当前在每一个Job中主要使用了静态配置(static_configs)的方式定义监控目标。除了静态配置每一个Job的采集Instance地址以外,Prometheus还支持与DNS、Consul、E2C、Kubernetes等进行集成实现自动发现Instance实例,并从这些Instance上获取监控数据。
除了通过使用“up”表达式查询当前所有Instance的状态以外,还可以通过Prometheus UI中的Targets页面查看当前所有的监控采集任务,以及各个任务下所有实例的状态:
我们也可以访问http://192.168.100.202:9090/targets直接从Prometheus的UI中查看当前所有的任务以及每个任务对应的实例信息。
四、使用PromQL查询监控数据
- Prometheus UI是Prometheus内置的一个可视化管理界面,通过Prometheus UI用户能够轻松的了解Prometheus当前的配置,监控任务运行状态等。 通过Graph面板,用户还能直接使用PromQL实时查询监控数据:
切换到Graph面板,用户可以使用PromQL表达式查询特定监控指标的监控数据。如下所示,查询主机负载变化情况,可以使用关键字node_load1可以查询出Prometheus采集到的主机负载的样本数据,这些样本数据按照时间先后顺序展示,形成了主机负载随时间变化的趋势图表:
PromQL是Prometheus自定义的一套强大的数据查询语言,除了使用监控指标作为查询关键字以为,还内置了大量的函数,帮助用户进一步对时序数据进行处理。例如使用rate()函数,可以计算在单位时间内样本数据的变化情况即增长率,因此通过该函数我们可以近似的通过CPU使用时间计算CPU的利用率:
五、普罗米修斯配合Grafana
******(1)在普罗米修斯主机上安装并启动Grafana [root@prometheus ~]# yum -y install fontconfig freetype* urw-fonts #安装依赖 。。。。。。 完毕! [root@prometheus ~]# ll #上传grafana的rpm包 总用量 163076 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 56363500 7月 12 12:28 grafana-6.1.4-1.x86_64.rpm -rw-r--r-- 1 root root 51010897 7月 10 17:11 influxdb-1.7.8.x86_64.rpm -rw-r--r-- 1 root root 59608515 7月 10 17:01 prometheus-2.16.0.linux-amd64.tar.gz [root@prometheus ~]# yum -y install grafana-6.1.4-1.x86_64.rpm 。。。。。。 完毕! [root@prometheus ~]# systemctl start grafana-server [root@prometheus ~]# netstat -anpt | grep 3000 tcp6 0 0 :::3000 :::* LISTEN 14992/grafana-serve
- (2)在浏览器中打开grafana
- 用户名:admin 密码:admin
在输入1860后会自动跳转的,有一项Unique identifier(uid)那一项如果报错的话,就点击change然后自己随便输入一串字符串就行,不能为空
在导入后就可以看到数据了,但是发现有几个是报错的,这是因为他默认的查询语句是错的,需要自己改,改了之后就可以了