1、Exporter介绍

所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下图所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:

从Exporter的来源上来讲,主要分为两类:分别是社区提供的和用户自定义的,分别介绍如下:

(1)、社区提供的

Prometheus社区提供了丰富的Exporter的实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下面列举一些社区中常用的Exporter,如下表所示:

下表是Prometheus常见的Exporter实现

分类

Exporter名称

硬件

Node Exporter、IPMI Exporter、IoT Edison Exporter

存储

HDFS Exporter、Ceph Exporter

HTTP服务

HAProxy Exporter、Nginx Exporter、Apache Exporter

日志

Fluentd Exporter、Grok Exporter

监控系统

Nagios Exporter、SNMP Exporter、Graphite Exporter

消息队列

Kafka Exporter, NSQ Exporter, RabbitMQ Exporter

API服务

GitHub Exporter、Docker Cloud Exporter、AWS ECS Exporter

(2)、用户自定义的

我们除了可以直接使用社区提供的Exporter以外,还可以基于Prometheus提供的Client Library创建适合自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Python 、Go、Java/Scala、Ruby等。同时还有第三方实现的如:Bash、C++、Lua、Node.js、PHP、Rust等。

官方推荐的Exporter列表:https://prometheus.io/docs/instrumenting/exporters/

2、Node exporte介绍

Node exporte主要用于采集被监控主机上的cpu负载,内存的使用情况,网络等数据,并上报数据给Prometheus server。Node_exporter 其实是一个以http_server方式运行在后台,并且持续不断采集 Linux系统中各种操作系统本身相关的监控参数的程序,其采集量是很快很全的,默认的采集项目就远超过了我们的实际需求。

从Prometheus官网https://prometheus.io/download/ 下载node_exporter,这里我们下载的版本是node_exporter-1.5.0.linux-amd64.tar.gz ,下载之后解压缩然后直接运行即可。

node_exporter的安装、运行非常简单,过程如下所示:

[root@localhost ~]# tar zxvf node_exporter-1.5.0.linux-amd64.tar.gz
[root@localhost ~]# mv node_exporter-1.5.0.linux-amd64  /usr/local/node_exporter
[root@localhost ~]# cd  /usr/local/node_exporter
[root@localhost node_exporter]# nohup ./node_exporter &

运行起来以后 我们使用“netstats -tnlp”命令可以来看下 node_exporter进程的状态

node_exporter默认监听在9100端口,要关闭被监控机上的防火墙、selinux等,确保node_exporter可以响应 prometheus_server发过来的HTTP_GET请求,也可以响应其他方式的HTTP_GET请求,最简单的方式,在浏览器打开:http://“node_exporter所在服务器的IP地址”:9100/metrics , 看是否有初始Node Exporter监控指标生成。如下图所示:

可以看出,exporter返回的数据格式如下:

# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="4",mode="idle"} 199147.19
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 0
# HELP node_load15 15m load average.
# TYPE node_load15 gauge
node_load15 0.05
# HELP node_load5 5m load average.
# TYPE node_load5 gauge
node_load5 0.01

其中,HELP用于解释当前指标的含义,TYPE则说明当前指标的数据类型。在上面的例子中node_cpu_seconds_total的注释表明当前指标是cpu4上idle进程占用CPU的总时间,CPU占用时间是一个只增不减的度量指标,从类型中也可以看出node_cpu_seconds_total的数据类型是计数器(counter),与该指标的实际含义一致。又例如node_load1该指标反映了当前主机在最近一分钟以内的负载情况,系统的负载情况会随系统资源的使用而变化,因此node_load1反映的是当前状态,数据可能增加也可能减少,从注释中可以看出当前指标类型为仪表盘(gauge),与指标反映的实际含义一致。

除了这些以外,在当前页面中根据物理主机系统的不同,还可能看到如下监控指标:

  • node_boot_time:系统启动时间
  • node_cpu:系统CPU使用量
  • node_disk :磁盘IO
  • node_filesystem :文件系统用量
  • node_load1:系统负载
  • node_memory :内存使用量
  • node_network :网络带宽
  • nodetime:当前系统时间
  • go:node exporter中go相关指标
  • process_:node exporter自身进程相关运行指标

3、grafana与prometheus实现监控可视化

(1)、Grafana基础知识

Grafana是一个开源的指标监测和可视化工具。官方网站为:https://grafana.com/, 常用于展示基础设施的时序数据和应用程序运行分析。Grafana的dashboard展示非常炫酷,绝对是运维提升可视化监控的一大利器。

数据源(datasource )

数据的存储源,它定义了将用什么方式来查询数据展示在grafana上面,不同的datasource拥有不同的查询语法,grafana支持多种数据源,官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch。

每个数据源的查询语言和能力各不同,我们可以将来自多个数据源的数据组合到一个仪表盘中,但是每个面板都绑定到属于特定组织的特定数据源。

仪表盘(Dashboard )

通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在Grafana中,我们通过Dashboard来组织和管理我们的数据可视化图表。

在一个Dashboard中,一个最基本的可视化单元为一个Panel(面板),Panel通过如趋势图,热力图的形式展示可视化数据。 并且在Dashboard中每一个Panel是一个完全独立的部分,通过Panel的Query Editor(查询编辑器)我们可以为每一个Panel配置独立的查询数据源以及数据查询方式,例如,如果以Prometheus作为数据源,那在Query Editor中,我们实际上使用的是PromQL,而Panel则会负责从特定的Prometheus中查询出相应的数据,并且将其可视化。由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据。

Grafana通过插件的形式提供了多种Panel的实现,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用户还可通过插件安装更多类型的Panel面板。

除了Panel以外,在Dashboard页面中,我们还可以定义一个Row(行),来组织和管理一组相关的Panel。Grafana还允许用户为Dashboard定义Templating variables(模板参数),从而实现可以与用户动态交互的Dashboard页面。

Grafana还专门为Dashboard提供了一个共享服务。https://grafana.com/dashboards,通过该服务用户可以轻松实现Dashboard的共享,同时我们也能快速的从中找到我们希望的Dashboard实现,并导入到自己的Grafana中。

(2)、Grafana的安装与配置

Grafana的安装非常简单,官方就有软件仓库可以直接使用,也可以通过docker镜像等方式直接本地启动。还可以直接下载rpm包、二进制包进行安装。

大家可以从 https://grafana.com/get 下载Grafana安装包,然后根据需要的系统平台及性能下载即可,官方给出了非常详细的安装方法,例如,要通过rpm包安装在Redhat & Centos平台,可直接执行如下命令:

[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-8.3.3-1.x86_64.rpm
[root@localhost ~]#  yum localinstall grafana-8.3.3-1.x86_64.rpm

安装完毕后,启动grafana,访问 http://your-host:3000 就可以看到登录界面了。默认的用户名和密码都是admin。

本文是在centos7.x版本下进行的安装,安装方法与上面相同,安装完毕后,设置一些服务自启动即可,操作如下:

[root@localhost ~]# systemctl enable grafana-server #开启自启动
[root@localhost ~]# systemctl start grafana-server #启动服务
[root@localhost ~]# systemctl status grafana-server #查看服务是否正常启动

Grafana的配置文件位于/etc/grafana/grafana.ini,一般情况下无需修改配置文件。这样,安装就完成了。非常简单。

(3)、安装grafana插件

grafana提供了很多扩展插件,可通过https://grafana.com/grafana/plugins/查看,如果要和zabbix集成,就需要先安装grafana-zabbix插件,grafana官方已经包含了这个插件,直接使用即可。安装之前可以通过grafana-cli plugins list-remote 命令来查看都有什么插件可以安装。操作如下:

[root@localhost ~]# grafana-cli plugins list-remote|grep zabbix      
id: alexanderzobnin-zabbix-app version: 4.2.4

可以看到,有一个名为alexanderzobnin-zabbix-app的zabbix 插件,接着直接在grafana上安装zabbix插件即可,执行如下命令:

[root@localhost ~]# grafana-cli plugins install alexanderzobnin-zabbix-app

执行这个命令需要grafana服务器能够上网,因为它会从外网下载插件包,安装成功之后会提示我们需要重启grafana 服务,以使插件生效。接着,再安装一个clock-panel插件,这个插件是个时钟插件,可以在dashboard上显示时间用。命令如下:

[root@localhost ~]# grafana-cli plugins install grafana-clock-panel

所有需要的插件安装完成后,执行如下命令重启grafana服务:

[root@localhost ~]# systemctl restart grafana-server
(4)、配置prometheus数据源

Grafana已经默认自带了Prometheus数据源,所以无需安装插件,直接使用即可。这里将添加Prometheus作为数据源,如下图所示,指定数据源类型为Prometheus并且设置Prometheus的访问地址即可:

(5)、获取docker可视化Dashboard

Grafana社区用户分享了大量的Dashboard,可以通过访问 https://grafana.com/dashboards 网站,找到大量可直接使用的Dashboard。推荐几个非常不错的Dashboard,可直接导入Grafana使用。

模板ID

模板用途

1860

Node Exporter Full

9965

Blackbox Exporter 0.14 for Prometheus 监控展示看板

8919

1 Node Exporter for Prometheus Dashboard CN v20201010

10619

Docker Container & Host Metrics

193

Docker monitoring

14841

Docker monitoring

其中,模板ID为https://grafana.com/grafana/dashboards/ID,将上面ID替换为具体的数字即可访问Dashboard。

获取了Dashboard后,就可以导入使用了,Grafana中所有的Dashboard可以通过JSON进行共享,下载并且导入这些JSON文件,就可以直接使用这些已经定义好的Dashboard,可以通过两种方式导入Dashboard,一种是先下载json文件,然后在Grafana中导入,如下图所示:

第二种方式是直接在线导入,如下图所示:

如果导入成功,会自动打开Prometheus 的Dashboard,即可出现炫酷的展示效果。下图是node_export获取的数据截图。

下图是docker状态截图:

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐