我们通常可以将Exporter分为两类:
直接采集型:这类Exporter直接内置了相应的应用程序,用于向Prometheus直接提供Target数据支持。这样设计的好处是,可以更好地监控各自系统的内部运行状态,同时也适合更多自定义监控指标的项目实施。例如cAdvisor、Kubernetes等,它们均内置了用于向Prometheus提供监控数据的端点。
间接采集型:原始监控目标并不直接支持Prometheus,需要我们使用Prometheus提供的Client Library编写该监控目标的监控采集程序,用户可以将该程序独立运行,去获取指定的各类监控数据值。例如,由于Linux操作系统自身并不能直接支持Prometheus,用户无法从操作系统层面上直接提供对Prometheus的支持,因此单独提供Node exporter,还有数据库或网站HTTP应用类等Exporter。
Exporter收集的数据值转化成文本内容展示。Prometheus基于文本的格式是面向行的。行由换行符(\n)分隔,最后一行必须以换行符结尾,空行被忽略,以#开始的行通常都是注释内容。这些样本数据集合说明如下:
- 以#HELP开始的行,表示metric的帮助与说明注释,可以包含当前监控指标名称和对应的说明信息。
- 以#TYPE开始的行,表示定义metric类型,可以包含当前监控指标名称和类型,类型有Counter、Gauge、Histogram、Summary和Untyped。
- 以非#开始的行,即监控样本数据。
- 其他一般性注释,方便阅读使用,会被Prometheus忽略。
可以在Prometheus官网https://prometheus.io/docs/instrumenting/exporters/里看到常用的Node/system metrics exporter(official)和MySQL server exporter(official)。在这些Exporter的名称末尾都标示了(official),即官方进行维护的Exporter。我们也可以直接到Prometheus GitHub官网https://github.com/prometheus上获取对应的Exporter最新版本。
YAML是一种类似XML、JSON的标记性语言,其基本语法规则如下:
- 大小写敏感。
- 使用缩进完成层级关系展示。
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要(通常2或4个空格),只需要相同层级左对齐即可。
在Prometheus安装后,官方会提供一个默认的prometheus.yml文件,其中包含global的默认配置内容,主要有以下四个参数:
- scrape_interval,每次数据采集的时间间隔,默认为1秒。
- scrape_timeout,采集请求超时时间,默认为10秒。
- evaluation_interval,执行rules的频率,默认为1秒。
- external_labels,与外部系统通信时添加到任意时间序列或告警用的外部标签。
scrape_configs主要用于配置被采集数据节点操作,每一个采集配置主要有以下几个参数:
- job_name,全局唯一名称。
- scrape_interval,默认等于global内设置的参数值,设置后可以覆盖global中的值。
- scrape_timeout,默认等于global内设置的参数值。
- metrics_path,从targets获取metric的HTTP资源路径,默认是/metrics。
- honor_labels,Prometheus如何处理标签之间的冲突。若设置为"true",则通过保留标签来解决标签冲突进行数据值采集。若设置为"false",则通过重命名来解决标签冲突,以exported_格式采集数据值,例如exported_job形式,默认是"false"。
- scheme,用于请求的协议方式,默认是http。
- params,数据采集访问时HTTP URL设定的请求参数。
- relabel_configs,采集数据重置标签配置。
- metric_relabel_configs,metric重置标签配置。
- sample_limit,对每个被已知样本(sample)数量的每次采集进行限制,如果超过限制,该数据将被视为失败。默认值为0,表示无限制。
对CPU数据进行采集的主要监控指标是node_cpu_seconds_total。node_cpu_seconds_total是一个计数器,即此类metric是Counter类型,用来标识每核CPU各个模式下占用的时间。它的标签(Label)是cpu和mode。
对内存数据的采集涉及与内存相关的所有监控指标,这些数据来源于Linux系统中的/proc/meminfo文件。node_memory_MemTotal_bytes是一个常规的计量器或测量器metric,它是Gauge类型。
对磁盘数据采集的所有监控指标来源于Linux系统中的/proc/diskstats文件。使用node_disk_开始的metric。
与文件系统采集相关的所有metric都以“node_filesystem_”开始,标签使用了3个:device,fstype,mountpoint。所有数据类型均为Gauge。
与网络采集相关的所有metric都以“node_network_”开始,可分为发送和接收两类,标签都使用了device,所有数据类型均为Counter。其中node_network_receive_bytes_total和node_network_transmit_bytes_total两个metric是我们主要关注的监控指标,可以利用它们来计算网络带宽使用情况。
MySQL数据库的性能状态监控内容非常多,但通常必不可少的内容包括查询吞吐量(Query throughput)、查询执行性能(Query execution performance)、连接情况(Connections)和缓冲池使用情况(Buffer pool usage)这四个与基本的性能和资源利用率相关的指标。
MySQL有一个名为Questions的内部计数器,MySQL术语为“服务器状态变量”。对于客户端应用程序发送的所有语句,该计数器都是递增的。对应mysqld_exporter采集后再返回的样本数据中,使用mysql_global_status_questions展示当前的Questions大小。
关于查询执行性能表现方面,可以使用MySQL提供的Slow_queries计数器,每当查询的执行时间超过long_query_time参数指定的秒数时,计数器就会增加。对应mysqld_exporter采集后再返回的样本数据中,使用mysql_global_status_slow_querie。
为了防止MySQL服务器的过载运行,数据库管理员需要根据业务量进行预评估,以便限制客户端连接MySQL的数量。对应mysqld_exporter采集后再返回的样本数据中,使用mysql_global_status_slow_queries。
数据库管理需要查看MySQL当前实例的连接数,即Threads_connected数值,可使用MySQL提供的命令进行查询。对应mysqld_exporter采集后再返回的样本数据中,使用mysql_global_status_slow_querie。
当MySQL默认的存储引擎是InnoDB时,会使用缓冲池来缓存表和索引的数据。即便是初级数据库管理员,在部署MySQL实例时,也会提前预估并在my.cnf文件中配置参数innodb_buffer_pool_size。这是InnoDB最重要的参数,主要作用是缓存innodb表的索引、数据和插入数据,默认值为128M。对应mysqld_exporter中,可以通过mysql_global_status_innodb_buffer_pool_reads查看指标数量。