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 summary
go_gc_duration_seconds{quantile="0"} 3.4253e-05
go_gc_duration_seconds{quantile="0.25"} 0.000150551
go_gc_duration_seconds{quantile="0.5"} 0.000208105
go_gc_duration_seconds{quantile="0.75"} 0.000256894
go_gc_duration_seconds{quantile="1"} 0.014297876
go_gc_duration_seconds_sum 0.056407074
go_gc_duration_seconds_count 60
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 31
# HELP go_info Information about the Go environment.
# TYPE go_info gauge
go_info{version="go1.15.8"} 1
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
# TYPE go_memstats_alloc_bytes gauge
go_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 counter
go_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 gauge
go_memstats_buck_hash_sys_bytes 1.487256e+06
# HELP go_memstats_frees_total Total number of frees.
# TYPE go_memstats_frees_total counter
go_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 gauge
go_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 gauge
go_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 gauge
go_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 gauge
go_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 gauge
go_memstats_heap_inuse_bytes 2.8229632e+07
# HELP go_memstats_heap_objects Number of allocated objects.
# TYPE go_memstats_heap_objects gauge
go_memstats_heap_objects 97522
# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.
# TYPE go_memstats_heap_released_bytes gauge
go_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 gauge
go_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 gauge
go_memstats_last_gc_time_seconds 1.6462333349352324e+09
...
...
...
这里挑选出一条进行解释,分为三行:
第一行:# HELP + 指标名称 + 解释
第二行:# TYPE + 指标名称 + 指标类型
第三行:指标名称 + 标签集 +数据值
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 31
Exporter部署
Linux主机监控
配置Node Exporter
Node Exporter端口号为9100
由于Linux操作系统自身并不支持Prometheus,所以Prometheus官方提供了go语言编写的Node Exporter来实现对Linux操作系统主机的监控数据采集
它提供了系统内部几乎所有的标准指标,如cpu、内存、磁盘空间、磁盘I/O、系统负载和网络带宽,另外它还提供了由内核公开的大量额外监控指标,从负载平均到主板温度等
- 下载二进制包,解压缩,创建软链接文件方便访问
[root@server2 ~]# wget
https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_ex
porter-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]# ls
LICENSE 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.yml
scrape_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 -b
total used free shared buff/cache available
Mem: 1907970048 138973184 1346973696 10018816 422023168 1580412928
Swap: 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 -p1
MariaDB [(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_exporter
password=1
[root@server2 mysqld_exporter]# ./mysqld_exporter --config.my-cnf='.mysqld_exporter.cnf'
- 与Prometheus server集成
[root@server1 prometheus]# vim prometheus.yml
scrape_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 Current
Dload Upload Total Spent Left Speed
100 127k 0 127k 0 0 13.0M 0 --:--:-- --:--:-- --:--:-- 13.8M
814
居然有814条样本数据,一个mysql就已经监控了这么多,更别说是其他的服务了,这个监控项的数目是远远大于Zabbix的,由此来的牺牲代价是这些样本数据的时间是没有百分百精确的,但是依旧可以看出Prometheus的强大!!!
metricts数据采集
点击Graph进行数据采集
- 查询吞吐量,MySQL客户端应用程序发送的所有查询语句,该计数器都是递增的
- 查询执行性能,每当查询时间超过预先设定的慢查询时间计数器都会递增
- 查询MySQL最大连接数,防止连接数量过大导致服务器过载运行
- 查看当前的连接数
- 缓存池使用情况