注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此为了能够能够监控到某些东西,如主机的CPU使用率,需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。
为了采集主机的监控样本数据,在主机上安装了一个Node Exporter程序,该程序对外暴露了一个用于获取当前监控样本数据的HTTP访问地址。这样的一个程序称为Exporter,Exporter的实例称为一个Target。Prometheus通过轮询的方式定时从这些Target中获取监控数据样本,并且存储在数据库当中。
Exporter可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向Prometheus提供标准格式的监控样本数据即可。
也可以实现自定义的Exporter程序,符合标准即可。广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:
Exporter来源:社区提供和用户自定义
node_exporter监控Linux 、mysqld_exporter监控MySQL、 windows_exporter监控windows,其他exporter可以访问EXPORTERS AND INTEGRATIONS:Exporters and integrations | Prometheus
Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下表列举一些社区中常用的Exporter:
范围 |
常用Exporter |
数据库 |
MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等 |
硬件 |
Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等 |
消息队列 |
Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等 |
存储 |
Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等 |
HTTP服务 |
Apache Exporter, HAProxy Exporter, Nginx Exporter等 |
API服务 |
AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等 |
日志 |
Fluentd Exporter, Grok Exporter等 |
监控系统 |
Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter等 |
其它 |
Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等 |
除了直接使用社区提供的Exporter程序以外,还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。
从Exporter的运行方式上来讲,可以分为:
以已经使用过的Node Exporter为例,由于操作系统本身并不直接支持Prometheus,同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。因此,用户只能通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。 除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。 这些Exporter程序扮演了一个中间代理人的角色。
为了能够更好的监控系统的内部运行状态,有些开源项目如Kubernetes,ETCD等直接在代码中使用了Prometheus的Client Library,提供了对Prometheus的直接支持。这种方式打破的监控的界限,让应用程序可以直接将内部的运行状态暴露给Prometheus,适合于一些需要更多自定义监控指标需求的项目。
Windows Exporter 由 Prometheus Community 维护,官方地址是:https://github.com/prometheus-community/windows_exporter。是一个采集 Windows 机器指标的采集器。支持 Windows Server 2008R2 以上版本或者 Windows 7 以上版本。Windows Exporter 在发布的是时候提供了两种格式的文件,分别是 *.exe 和 *.msi 。
Windows Exporter 每个版本都提供一个 .msi 安装程序。安装程序将 windows_exporter 设置为 Windows 服务,并在 Windows 防火墙中创建一个异常。在使用的时候可以选择任意一种格式来进行安装。
下载地址:Releases · prometheus-community/windows_exporter · GitHub
或
https://download.csdn.net/download/zhouruifu2015/87579035
查看服务
windows_exporter默认端口是9182,在浏览器输入:localhost:9182即可访问。
这个列表是 Windows Exporter 支持采集的指标,有一些指标是启动后缺省会打开的,有一些是需要手动打开,具体参考:https://github.com/prometheus-community/windows_exporter
使用配置文件启动Exporter,Windows Exporter 支持使用 --config.file 参数来指定一个 YAML 格式的文件作为配置文件来启动,比如: .\windows_exporter.exe --config.file=config.yml .这个配置文件支持配置要采集的内容,日志、等内容。
重启prometheus即可查看已经配置好的exporter
重启后
下载地址https://github.com/prometheus/node_exporter/releases
或
https://download.csdn.net/download/zhouruifu2015/87579035
为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。可以使用Node Exporter。Node Exporter同样采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从Download | Prometheus获取最新的node exporter版本的二进制包。
解压到目录:/usr/local/bin/
服务配置脚本
cat >> /etc/rc.d/init.d/node_exporter <$LOGFILE &"
echo $(pidofproc $PROGNAME) >$LOCKFILE
echo
}
stop() {
echo -n "Shutting down $PROGNAME: "
killproc $PROGNAME
rm -f $LOCKFILE
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $PROGNAME
;;
restart)
stop
start
;;
reload)
echo "Sending SIGHUP to $PROGNAME"
kill -SIGHUP $(pidofproc $PROGNAME)#!/bin/bash
;;
*)
echo "Usage: service node_exporter {start|stop|status|reload|restart}"
exit 1
;;
esac
EOF
添加可执行权限:chmod +x node_exporter
运行node exporter
或
service node_exporter start
绑定端口的方式启动,一个机器上可以运行多个node_exporter
./node_exporter --web.listen-address 127.0.0.1:9100
./node_exporter --web.listen-address 127.0.0.1:9200
./node_exporter --web.listen-address 127.0.0.1:10000
启动成功后,查看端口
netstat -anplt|grep 9100
访问Node Exporter可以看到以下页面
多个node_exporter的状态
如果访问不了页面,查看主机防火墙是否关闭
访问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),与指标反映的实际含义一致。
部分监控指标:
为了能够让Prometheus Server能够从当前node exporter获取到监控数据,这里需要修改Prometheus配置文件。编辑prometheus.yml并在scrape_configs节点下添加以下内容:
绑定完后访问Prometheus web服务
其中“1”表示正常,反之“0”则为异常。
在 Promethues 的监控体系中,社区中一直存在的一个观点是,Metrics 不包含过于私密的信息。所以可以看到大多数的 /metrics 接口都是直接暴露出来的,没什么特别的安全措施。但随着 Prometheus 在生产中的大量应用,安全问题变得更加重要。
为 Prometheus 与监控目标之间的连接启用 TLS。但由于各类 exporter 并不原生支持 TLS 连接,所以通常情况下会选择配合反向代理来完成。这种方式能满足需求,但未免复杂了些。近期 Prometheus 对其安全模型做了修改,从Node Exporter开始到后续其他的组件,都将支持 TLS 和 basic auth, 同时也列出了最新的安全基准(默认情况下都支持 TLS v1.2 及以上)
- job_name: 'node_exporter'
basic_auth:
username: admin
password: ******************
scheme: https
tls_config:
ca_file: node_exporter.crt
insecure_skip_verify: true # 跳过不安全认证
file_sd_configs:
- files
- ‘targets.json’
static_configs:
- targets: ['localhost:9090']
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q