天天看点

Prometheus监控运维实战五: 任务与实例

本文将对prometheus的任务配置进行详细介绍,阅读本文可以了解到如何通过配置任务获取到需要的实例信息。

任务与实例,是prometheus监控中经常会提到的词汇。在其术语中,每一个提供样本数据的端点称为一个实例(instance),它可以是各种exporter,如node-exporter、mysql-exporter,也可以是你自己开发的一个服务。只要提供符合prometheus要求的数据格式 ,并允许通过http请求获取信息的端点都可称为实例。而对于实例数据的采集,则是通过一个个任务(job)来进行管理,每个job会管理一类相同业务的实例。

在前面部署安装一节中,我们对prometheus的配置文件promehteus.yml进行过介绍,其中scrape_configs模块即是管理job的配置。

如下是prometheus默认配置的job,用于获取prometheus自身的状态信息,这是一个格式最精简的job。

可以在targets页面看到相关的任务实例,其中endpoint项代表该实例的采集地址;state项为实例状态,状态为up表示可正常采集;labels为实例所拥有的标签 ,标签会包含在获取到的所有时间序列中。

Prometheus监控运维实战五: 任务与实例

job_name定义了该job的名称,这会生成一个标签{job="prometheus"},并插入到该任务所有获取指标的标签列中。在prometheus表达式浏览器中查询 {job="prometheus"},可看到与该job相关的指标。

Prometheus监控运维实战五: 任务与实例

此外,job也支持自定义标签的方式。如下所示,将在该job获取的指标中添加{group="dev"}的标签。

配置完成后,重启prometheus可看到标签 已生效。

Prometheus监控运维实战五: 任务与实例

注意:修改job后,只对新获取数据生效,原有数据不会有变化 。

static_configs为静态配置,需要手动在配置文件填写targets的目标信息,格式为域名/ip + 端口号。当有多个目标实例时,书写格式如下 :

prometheus对于监控实例的加载,除了静态配置,还可以使用文件配置的方式。操作方式很简单,只需要在一个文件中填好相关的实例信息,然后在job中加载该文件即可,文件的格式必须是yaml或json格式。

如:

配置job加载该文件

另外,prometheus也支持基于kubernetes、dns或配置中心的服务自动发现方式,这个会在后面的文档做介绍。

scrape_interval和scrape_timeout

scrape_interval代表抓取间隔,scrape_timeout代替抓取的超时时间,它们默认继承来自global全局配置的设置。但如果有特殊需求,也可以对单个job单独定义自己的参数。示例:

注意:scrape_timeout时间不能大于scrape_interval,否则prometheus将会报错。

指定抓取路径,可以不配置,默认为/metrics。

示例:

指定采集使用的协议,http或者https,默认为http。

某些特殊的exporter需要在请求中携带url参数,如blackbox_exporter ,可以通过params进行相关参数配置。

默认情况下,exporter不需要账号密码即可获取到相关的监控数据。在某此安全程度较高的场景下,可能验证通过后才可获取exporter信息,此时可通过basic_auth配置prometheus的获取exporter信息时使用的账密。

用于配置标签重写(relabeling),在拉取(scraping)阶段前,修改target和它的labels。这是job配置中最复杂的部分,但relabeling在实际应用非常有用,值得认真了解。

默认情况下,prometheus加载targets后,都会包含一些默认的标签,其中以__作为前置的标签是在系统内部使用的,因此这些标签不会写入到样本数据中。

Prometheus监控运维实战五: 任务与实例

target的job标签设置为配置文件里的job_name的值;

__address__设置为配置里的targets的值;

而instance标签的值,是重定义标签操作之后__address__的值;

__scheme__和__metrics_path__标签的值,也是从配置里取值的;

relabel_config的完整配置格式 如下 :

其中,相关的action类型有如下几种:

replace: 正则匹配源标签的值用来替换目标标签,如果有replacement,使用replacement替换目标标签;

keep:   如果正则没有匹配到源标签的值,删除该targets ,不进行采集;

drop:   与keep相反,正则匹配到源标签,删除该targets;

labelmap: 正则匹配所有标签名,将匹配的标签值部分做为新标签名,原标签值做为新标签的值;

labeldrop: 正则匹配所有标签名,匹配则移除标签;

labelkeep: 正则匹配所有标签名,不匹配的标签会被移除;

注意:重定义标签并应用后,__开头的标签会被删除;要临时存储值用于下一阶段的处理,使用__tmp开头的标签名,这种标签不会被prometheus使用;

在开始前,我们先配置一个测试job,该job包含两个实例,实例分别包含了两个标签,__machine_hostname和__machine_idc__。

Prometheus监控运维实战五: 任务与实例

replace操作

将__machine_hostname__的值替换到新标签hostname

重启prometheus后,查看target信息如下:

Prometheus监控运维实战五: 任务与实例

如果将上面配置的action改为drop,则结果相反,将删除正则匹配到标签的实例。

keep操作

排除标签值不匹配正则的targets 目标,此处正则匹配__machine_hostname__: 'node-01' 。

查看target信息,发现只保留正则匹配的实例。

Prometheus监控运维实战五: 任务与实例

labelmap操作

重写新的标签hostname和idc,使用原有__machine_hostname__和__machine_idc__标签的值。

查看target信息,可看到重写的新标签。

Prometheus监控运维实战五: 任务与实例

继续阅读