Exporter介绍

简介

在Prometheus的核心组件中,Exporter是重要的组成部分,在实际中监控样本数据的收集都是由Exporter完成的,Prometheus服务器只需要定时从这些Exporter提供的HTTP服务获取数据即可

官方提供了多种常用的Exporter,比如用于对数据库监控的mysqld_exporterredis_exporter等,Exporter本质上是将收集的数据转化为对应的文本格式,并提供HTTP接口,供Prometheus定期采集数据

官网中的Exporter:https://prometheus.io/download/

Exporter类型

  • 直接采集:这一类Exporter直接内置了对Prometheus监控的支持,用于向Prometheus直接提供target数据支持,比如Kubernetes等,都直接内置了用于向Prometheus暴露监控数据的端点

  • 间接采集:原始监控目标并不直接支持Prometheus,需要我们使用Prometheus提供的客户端库编写该监控目标的监控采集数据,用户可以将该程序独立运行,获取指定的各类监控数据值

    • 例如,由于Linux操作系统自身并不能直接支持Prometheus,用户无法从操作系统层面上直接提供对Prometheus的支持,因此单独提供了Node Exporter,还有Mysql Exporter、JMX Exporter、Consul Exporter等

样本数据格式

在Prometheus的监控环境中,所有返回监控样本数据的Exporter程序,均需要遵守Prometheus规范,即基于文本的数据格式,其特点是具有更好的跨平台和可读性

可以使用浏览器,或者通过curl工具来获得采集数据:

  1. [root@server1 ~]# curl 192.168.80.10:9090/metrics
  2. # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
  3. # TYPE go_gc_duration_seconds summary
  4. go_gc_duration_seconds{quantile="0"} 3.4253e-05
  5. go_gc_duration_seconds{quantile="0.25"} 0.000150551
  6. go_gc_duration_seconds{quantile="0.5"} 0.000208105
  7. go_gc_duration_seconds{quantile="0.75"} 0.000256894
  8. go_gc_duration_seconds{quantile="1"} 0.014297876
  9. go_gc_duration_seconds_sum 0.056407074
  10. go_gc_duration_seconds_count 60
  11. # HELP go_goroutines Number of goroutines that currently exist.
  12. # TYPE go_goroutines gauge
  13. go_goroutines 31
  14. # HELP go_info Information about the Go environment.
  15. # TYPE go_info gauge
  16. go_info{version="go1.15.8"} 1
  17. # HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
  18. # TYPE go_memstats_alloc_bytes gauge
  19. go_memstats_alloc_bytes 2.6332512e+07
  20. # HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
  21. # TYPE go_memstats_alloc_bytes_total counter
  22. go_memstats_alloc_bytes_total 2.42916864e+08
  23. # HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
  24. # TYPE go_memstats_buck_hash_sys_bytes gauge
  25. go_memstats_buck_hash_sys_bytes 1.487256e+06
  26. # HELP go_memstats_frees_total Total number of frees.
  27. # TYPE go_memstats_frees_total counter
  28. go_memstats_frees_total 1.683461e+06
  29. # HELP go_memstats_gc_cpu_fraction The fraction of this program's available CPU time used by the GC since the program started.
  30. # TYPE go_memstats_gc_cpu_fraction gauge
  31. go_memstats_gc_cpu_fraction 1.3203577973935512e-05
  32. # HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
  33. # TYPE go_memstats_gc_sys_bytes gauge
  34. go_memstats_gc_sys_bytes 5.906408e+06
  35. # HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
  36. # TYPE go_memstats_heap_alloc_bytes gauge
  37. go_memstats_heap_alloc_bytes 2.6332512e+07
  38. # HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.
  39. # TYPE go_memstats_heap_idle_bytes gauge
  40. go_memstats_heap_idle_bytes 3.8060032e+07
  41. # HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.
  42. # TYPE go_memstats_heap_inuse_bytes gauge
  43. go_memstats_heap_inuse_bytes 2.8229632e+07
  44. # HELP go_memstats_heap_objects Number of allocated objects.
  45. # TYPE go_memstats_heap_objects gauge
  46. go_memstats_heap_objects 97522
  47. # HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.
  48. # TYPE go_memstats_heap_released_bytes gauge
  49. go_memstats_heap_released_bytes 3.7240832e+07
  50. # HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.
  51. # TYPE go_memstats_heap_sys_bytes gauge
  52. go_memstats_heap_sys_bytes 6.6289664e+07
  53. # HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.
  54. # TYPE go_memstats_last_gc_time_seconds gauge
  55. go_memstats_last_gc_time_seconds 1.6462333349352324e+09
  56. ...
  57. ...
  58. ...

这里挑选出一条进行解释,分为三行:

第一行:# HELP + 指标名称 + 解释

第二行:# TYPE + 指标名称 + 指标类型

第三行:指标名称 + 标签集 +数据值

  1. # HELP go_goroutines Number of goroutines that currently exist.
  2. # TYPE go_goroutines gauge
  3. go_goroutines 31

Exporter部署

Linux主机监控

配置Node Exporter

Node Exporter端口号为9100

由于Linux操作系统自身并不支持Prometheus,所以Prometheus官方提供了go语言编写的Node Exporter来实现对Linux操作系统主机的监控数据采集

它提供了系统内部几乎所有的标准指标,如cpu、内存、磁盘空间、磁盘I/O、系统负载和网络带宽,另外它还提供了由内核公开的大量额外监控指标,从负载平均到主板温度等

  • 下载二进制包,解压缩,创建软链接文件方便访问
  1. [root@server2 ~]# wget
  2. https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_ex
  3. porter-1.3.1.linux-amd64.tar.gz
  4. [root@server2 ~]# mkdir /data
  5. [root@server2 ~]# tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /data/
  6. [root@server2 ~]# cd /data/
  7. [root@server2 data]# chown -R root:root node_exporter-1.3.1.linux-amd64
  8. [root@server2 data]# ln -sv node_exporter-1.3.1.linux-amd64 node_exporter
  9. "node_exporter" -> "node_exporter-1.3.1.linux-amd64"
  • 启动node_exporter
  1. [root@server2 data]# cd node_exporter
  2. [root@server2 node_exporter]# ls
  3. LICENSE node_exporter NOTICE
  4. [root@server2 node_exporter]# ./node_exporter

Prometheus组件—Export - 图1

  • 与Prometheus server集成

当启动node_exporter开始工作时,node_exporter和Prometheus server是没有进行关联的,因此要进行连接

可以在Prometheus server中,找到主机目录,找到主配置文件,使用其中的静态配置功能static_configs来采集node_exporter提供的数据

  1. [root@server1 prometheus]# vim prometheus.yml
  2. scrape_configs:
  3. # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  4. - job_name: 'prometheus'
  5. # metrics_path defaults to '/metrics'
  6. # scheme defaults to 'http'.
  7. static_configs:
  8. - targets: ['localhost:9090']
  9. - job_name: 'node_exporter'
  10. static_config:
  11. - targets: ['192.168.31.20:9100']
  • 重启server1上的Prometheus服务,可以关闭服务然后再启动,也可以使用热加载更新配置
  • 如果配置成功的话,在Targets中可以看到多出了一个node_exporterState是UP,一开始是UNKNOWN,需要等待片刻

Prometheus组件—Export - 图2

  • 点进去可以看到node_exporter采集到的所有样本数据

Prometheus组件—Export - 图3

metricts数据采集

点击Graph进行数据采集

  • 内存信息采集
  1. [root@server2 ~]# free -b
  2. total used free shared buff/cache available
  3. Mem: 1907970048 138973184 1346973696 10018816 422023168 1580412928
  4. Swap: 2147479552 0 2147479552

Prometheus组件—Export - 图4

Prometheus组件—Export - 图5

Prometheus组件—Export - 图6

  • 磁盘信息采集

Prometheus组件—Export - 图7

  • 文件系统采集

Prometheus组件—Export - 图8

  • 网络采集

Prometheus组件—Export - 图9

MySQL监控

配置Mysqld Exporter

Mysql Exporter端口号为9104

  • 下载二进制包,解压缩,创建软链接文件方便访问
  1. [root@server2 ~]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
  2. [root@server2 ~]# tar -xzvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /data/
  3. [root@server2 ~]# cd /data/
  4. [root@server2 data]# chown root:root mysqld_exporter-0.12.1.linux-amd64 -R
  5. [root@server2 data]# ln -sv mysqld_exporter-0.12.1.linux-amd64 mysqld_exporter
  6. "mysqld_exporter" -> "mysqld_exporter-0.12.1.linux-amd64"
  • 配置MySQL并且创建用户与授权
  1. [root@server2 ~]# yum install mariadb-server.x86_64 -y
  2. [root@server2 ~]# systemctl start mariadb
  3. [root@server2 ~]# mysql_secure_installation
  4. # 设置密码为1
  5. [root@server2 ~]# mysql -uroot -p1
  6. MariaDB [(none)]> create user 'mysqld_exporter'@'%' identified by '1';
  7. MariaDB [(none)]> grant process,replication client,select on *.* to 'mysqld_exporter'@'%';
  8. MariaDB [(none)]> flush privileges
  • 配置数据库认证,并启动服务
  1. [root@server2 ~]# cd /data/mysqld_exporter
  2. [root@server2 mysqld_exporter]# vim .mysqld_exporter.cnf
  3. [client]
  4. user=mysqld_exporter
  5. password=1
  6. [root@server2 mysqld_exporter]# ./mysqld_exporter --config.my-cnf='.mysqld_exporter.cnf'

Prometheus组件—Export - 图10

  • 与Prometheus server集成
  1. [root@server1 prometheus]# vim prometheus.yml
  2. scrape_configs:
  3. - job_name: 'prometheus'
  4. static_configs:
  5. - targets: ['localhost:9090']
  6. # 上一个实验的部分node_exporter
  7. - job_name: 'node_exporter'
  8. static_configs:
  9. - targets: ['192.168.31.20:9100']
  10. # 新加的部分mysqld_exporter
  11. - job_name: 'mysqld_exporter'
  12. scrape_interval: 10s # 设置数据采集的时间间隔,可以覆盖全局配置中的配置
  13. static_configs:
  14. - targets: ['192.168.31.20:9104']
  • 重启server1上的Prometheus服务,可以关闭服务然后再启动,也可以使用热加载更新配置
  • 如果配置成功的话,在Targets中可以看到多出了一个mysqld_exporterState是UP,一开始是UNKNOWN,需要等待片刻

Prometheus组件—Export - 图11

点进去可以看到mysqld_exporter采集到的所有样本数据

Prometheus组件—Export - 图12

统计一下采集了多少个样本数据

  1. [root@server2 ~]# curl 192.168.31.20:9104/metrics | grep -v "#" | wc -l
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 127k 0 127k 0 0 13.0M 0 --:--:-- --:--:-- --:--:-- 13.8M
  5. 814

居然有814条样本数据,一个mysql就已经监控了这么多,更别说是其他的服务了,这个监控项的数目是远远大于Zabbix的,由此来的牺牲代价是这些样本数据的时间是没有百分百精确的,但是依旧可以看出Prometheus的强大!!!

metricts数据采集

点击Graph进行数据采集

  • 查询吞吐量,MySQL客户端应用程序发送的所有查询语句,该计数器都是递增的

Prometheus组件—Export - 图13

  • 查询执行性能,每当查询时间超过预先设定的慢查询时间计数器都会递增

Prometheus组件—Export - 图14

  • 查询MySQL最大连接数,防止连接数量过大导致服务器过载运行

Prometheus组件—Export - 图15

  • 查看当前的连接数

Prometheus组件—Export - 图16

  • 缓存池使用情况

Prometheus组件—Export - 图17