在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中获取样本数据:

prometheus 监控 sql server Prometheus 监控window进程_prometheus

Exporter来源

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的运行方式

从Exporter的运行方式上来讲,可以分为:

  • 独立使用

以已经使用过的Node Exporter为例,由于操作系统本身并不直接支持Prometheus,同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。因此,用户只能通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。 除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。 这些Exporter程序扮演了一个中间代理人的角色。

  • 集成到应用中

为了能够更好的监控系统的内部运行状态,有些开源项目如Kubernetes,ETCD等直接在代码中使用了Prometheus的Client Library,提供了对Prometheus的直接支持。这种方式打破的监控的界限,让应用程序可以直接将内部的运行状态暴露给Prometheus,适合于一些需要更多自定义监控指标需求的项目。

Windows Exporter

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


prometheus 监控 sql server Prometheus 监控window进程_windows_02

安装

prometheus 监控 sql server Prometheus 监控window进程_windows_03

查看服务

prometheus 监控 sql server Prometheus 监控window进程_exporter_04

访问Windows Exporter监控指标

windows_exporter默认端口是9182,在浏览器输入:localhost:9182即可访问。

prometheus 监控 sql server Prometheus 监控window进程_exporter_05

这个列表是 Windows Exporter 支持采集的指标,有一些指标是启动后缺省会打开的,有一些是需要手动打开,具体参考:https://github.com/prometheus-community/windows_exporter

使用配置文件启动Exporter,Windows Exporter 支持使用 --config.file 参数来指定一个 YAML 格式的文件作为配置文件来启动,比如: .\windows_exporter.exe --config.file=config.yml .这个配置文件支持配置要采集的内容,日志、等内容。

scrape_configs配置windows exporter

prometheus 监控 sql server Prometheus 监控window进程_Windows_06

重启prometheus即可查看已经配置好的exporter

prometheus 监控 sql server Prometheus 监控window进程_Windows_07

重启后

prometheus 监控 sql server Prometheus 监控window进程_prometheus_08

Node Exporter

下载地址https://github.com/prometheus/node_exporter/releases


为了能够采集到主机的运行指标如CPU, 内存,磁盘等信息。可以使用Node Exporter。Node Exporter同样采用Golang编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从Download | Prometheus获取最新的node exporter版本的二进制包。

解压到目录:/usr/local/bin/

prometheus 监控 sql server Prometheus 监控window进程_windows_09

服务配置脚本

cat >> /etc/rc.d/init.d/node_exporter <<EOF
#!/bin/bash
#
# /etc/rc.d/init.d/node_exporter
#
#  Prometheus node exporter
#
#  description: Prometheus node exporter
#  processname: node_exporter

# Source function library.
. /etc/rc.d/init.d/functions

PROGNAME=node_exporter
PROG=/opt/prometheus/$PROGNAME
USER=root
LOGFILE=/var/log/prometheus.log
LOCKFILE=/var/run/$PROGNAME.pid

start() {
    echo -n "Starting $PROGNAME: "
    cd /opt/prometheus/
    daemon --user $USER --pidfile="$LOCKFILE" "$PROG &>$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

prometheus 监控 sql server Prometheus 监控window进程_exporter_10

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

prometheus 监控 sql server Prometheus 监控window进程_windows_11

访问Node Exporter可以看到以下页面

prometheus 监控 sql server Prometheus 监控window进程_exporter_12

多个node_exporter的状态

prometheus 监控 sql server Prometheus 监控window进程_exporter_13

如果访问不了页面,查看主机防火墙是否关闭

prometheus 监控 sql server Prometheus 监控window进程_linux_14

初始Node Exporter监控指标

访问http://localhost:9100/metrics,可以看到当前node exporter获取到的当前主机的所有监控数据,如下所示:

prometheus 监控 sql server Prometheus 监控window进程_linux_15

每一个监控指标之前都会有一段类似于如下形式的信息:

# 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),与指标反映的实际含义一致。

部分监控指标:

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

scrape_configs配置node exporter

为了能够让Prometheus Server能够从当前node exporter获取到监控数据,这里需要修改Prometheus配置文件。编辑prometheus.yml并在scrape_configs节点下添加以下内容:

prometheus 监控 sql server Prometheus 监控window进程_windows_16

绑定完后访问Prometheus web服务

prometheus 监控 sql server Prometheus 监控window进程_prometheus_17

 

prometheus 监控 sql server Prometheus 监控window进程_windows_18

其中“1”表示正常,反之“0”则为异常。

Prometheus 对 Node_Exporter TLS加密认证

在 Promethues 的监控体系中,社区中一直存在的一个观点是,Metrics 不包含过于私密的信息。所以可以看到大多数的 /metrics 接口都是直接暴露出来的,没什么特别的安全措施。但随着 Prometheus 在生产中的大量应用,安全问题变得更加重要。

为 Prometheus 与监控目标之间的连接启用 TLS。但由于各类 exporter 并不原生支持 TLS 连接,所以通常情况下会选择配合反向代理来完成。这种方式能满足需求,但未免复杂了些。近期 Prometheus 对其安全模型做了修改,从Node Exporter开始到后续其他的组件,都将支持 TLS 和 basic auth, 同时也列出了最新的安全基准(默认情况下都支持 TLS v1.2 及以上)

  • 修改下prometheus.yml配置文件
- 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】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


prometheus 监控 sql server Prometheus 监控window进程_exporter_19

关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q