Exporter介绍
简介
在Prometheus的核心组件中,Exporter是重要的组成部分,在实际中监控样本数据的收集都是由Exporter完成的,Prometheus服务器只需要定时从这些Exporter提供的HTTP服务获取数据即可
官方提供了多种常用的Exporter,比如用于对数据库监控的mysqld_exporter和redis_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工具来获得采集数据:
[root@server1 ~]# curl 192.168.80.10:9090/metrics# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.# TYPE go_gc_duration_seconds summarygo_gc_duration_seconds{quantile="0"} 3.4253e-05go_gc_duration_seconds{quantile="0.25"} 0.000150551go_gc_duration_seconds{quantile="0.5"} 0.000208105go_gc_duration_seconds{quantile="0.75"} 0.000256894go_gc_duration_seconds{quantile="1"} 0.014297876go_gc_duration_seconds_sum 0.056407074go_gc_duration_seconds_count 60# HELP go_goroutines Number of goroutines that currently exist.# TYPE go_goroutines gaugego_goroutines 31# HELP go_info Information about the Go environment.# TYPE go_info gaugego_info{version="go1.15.8"} 1# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.# TYPE go_memstats_alloc_bytes gaugego_memstats_alloc_bytes 2.6332512e+07# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.# TYPE go_memstats_alloc_bytes_total countergo_memstats_alloc_bytes_total 2.42916864e+08# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.# TYPE go_memstats_buck_hash_sys_bytes gaugego_memstats_buck_hash_sys_bytes 1.487256e+06# HELP go_memstats_frees_total Total number of frees.# TYPE go_memstats_frees_total countergo_memstats_frees_total 1.683461e+06# HELP go_memstats_gc_cpu_fraction The fraction of this program's available CPU time used by the GC since the program started.# TYPE go_memstats_gc_cpu_fraction gaugego_memstats_gc_cpu_fraction 1.3203577973935512e-05# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.# TYPE go_memstats_gc_sys_bytes gaugego_memstats_gc_sys_bytes 5.906408e+06# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.# TYPE go_memstats_heap_alloc_bytes gaugego_memstats_heap_alloc_bytes 2.6332512e+07# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.# TYPE go_memstats_heap_idle_bytes gaugego_memstats_heap_idle_bytes 3.8060032e+07# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.# TYPE go_memstats_heap_inuse_bytes gaugego_memstats_heap_inuse_bytes 2.8229632e+07# HELP go_memstats_heap_objects Number of allocated objects.# TYPE go_memstats_heap_objects gaugego_memstats_heap_objects 97522# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.# TYPE go_memstats_heap_released_bytes gaugego_memstats_heap_released_bytes 3.7240832e+07# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.# TYPE go_memstats_heap_sys_bytes gaugego_memstats_heap_sys_bytes 6.6289664e+07# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.# TYPE go_memstats_last_gc_time_seconds gaugego_memstats_last_gc_time_seconds 1.6462333349352324e+09.........
这里挑选出一条进行解释,分为三行:
第一行:# HELP + 指标名称 + 解释
第二行:# TYPE + 指标名称 + 指标类型
第三行:指标名称 + 标签集 +数据值
# HELP go_goroutines Number of goroutines that currently exist.# TYPE go_goroutines gaugego_goroutines 31
Exporter部署
Linux主机监控
配置Node Exporter
Node Exporter端口号为9100
由于Linux操作系统自身并不支持Prometheus,所以Prometheus官方提供了go语言编写的Node Exporter来实现对Linux操作系统主机的监控数据采集
它提供了系统内部几乎所有的标准指标,如cpu、内存、磁盘空间、磁盘I/O、系统负载和网络带宽,另外它还提供了由内核公开的大量额外监控指标,从负载平均到主板温度等
- 下载二进制包,解压缩,创建软链接文件方便访问
[root@server2 ~]# wgethttps://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz[root@server2 ~]# mkdir /data[root@server2 ~]# tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /data/[root@server2 ~]# cd /data/[root@server2 data]# chown -R root:root node_exporter-1.3.1.linux-amd64[root@server2 data]# ln -sv node_exporter-1.3.1.linux-amd64 node_exporter"node_exporter" -> "node_exporter-1.3.1.linux-amd64"
- 启动node_exporter
[root@server2 data]# cd node_exporter[root@server2 node_exporter]# lsLICENSE node_exporter NOTICE[root@server2 node_exporter]# ./node_exporter

- 与Prometheus server集成
当启动node_exporter开始工作时,node_exporter和Prometheus server是没有进行关联的,因此要进行连接
可以在Prometheus server中,找到主机目录,找到主配置文件,使用其中的静态配置功能static_configs来采集node_exporter提供的数据
[root@server1 prometheus]# vim prometheus.ymlscrape_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'.static_configs:- targets: ['localhost:9090']- job_name: 'node_exporter'static_config:- targets: ['192.168.31.20:9100']
- 重启server1上的Prometheus服务,可以关闭服务然后再启动,也可以使用热加载更新配置
- 如果配置成功的话,在Targets中可以看到多出了一个node_exporter,State是UP,一开始是UNKNOWN,需要等待片刻

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

metricts数据采集
点击Graph进行数据采集
- 内存信息采集
[root@server2 ~]# free -btotal used free shared buff/cache availableMem: 1907970048 138973184 1346973696 10018816 422023168 1580412928Swap: 2147479552 0 2147479552



- 磁盘信息采集

- 文件系统采集

- 网络采集

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

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

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

统计一下采集了多少个样本数据
[root@server2 ~]# curl 192.168.31.20:9104/metrics | grep -v "#" | wc -l% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed100 127k 0 127k 0 0 13.0M 0 --:--:-- --:--:-- --:--:-- 13.8M814
居然有814条样本数据,一个mysql就已经监控了这么多,更别说是其他的服务了,这个监控项的数目是远远大于Zabbix的,由此来的牺牲代价是这些样本数据的时间是没有百分百精确的,但是依旧可以看出Prometheus的强大!!!
metricts数据采集
点击Graph进行数据采集
- 查询吞吐量,MySQL客户端应用程序发送的所有查询语句,该计数器都是递增的

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

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

- 查看当前的连接数

- 缓存池使用情况

