Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)

简介: Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)

前言:

Prometheus作为一个监控神器,深受大家的喜爱,那么如何使用它是一个问题,如何用好它又是一个问题了。

本文以centos7操作系统下搭建的Prometheus server为例,讲解基于文件发现新的采集器。

一,

Prometheus的配置文件

第一,

通常的,不管是哪种服务都是有且仅有一个主配置文件,例如MySQL的主配置文件是my.cnf ,各个部署安装教程里也都是所有的配置写到这一个配置文件内。

说到底,这么做也是对的,毕竟一个配置文件便于管理嘛,毕竟根据MySQL服务的特点来说,不到100行的配置文件属实是有点小的。

那么,Prometheus的主配置文件就不同了,如果是仅仅几个服务器的监控,无所谓喽,例如,仅仅监控三台的包含node_exporter的配置文件:

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
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: ["192.168.217.24:9090"]  #本机IP+端口,其它的不用改
      - targets: ["192.168.217.25:9090"] 
      - targets: ["192.168.217.26:9090"] 

那么,问题来了,如果是有上百台的服务器都安装了node_exporter收集器,然后这个Prometheus server要监控它们,是不是就要写几百个      - targets: ["192.168.217.24:9090"] 了?不仅仅是node_exporter收集器,假设这上百个服务器里有几十个MySQL,那么,Prometheus的配置文件是不是还要把几十个mysqld_exporter 写进来?还有其他的需要监控的,比如nginx,那么,又要增加写入多少配置呢?

如此的话,这个配置文件将会非常的臃肿(一般情况下,我们认为一个配置文件的内容不应该超过100行,否则,我们应该认为这个配置是不便于管理的)。

第二,

配置文件修改后生效的问题

一般情况下,任何服务的主配置文件都是和服务的启停脚本绑定的,这意味着如果配置文件修改了,要看到修改后的效果必须要重启服务,Prometheus也是如此(例如,nginx 增加一个反向代理配置,是不是需要重新启动一下nginx服务或者 至少reload一下服务,才可以看到反向代理的效果?)

要不说Prometheus是神器呢,这个问题在普罗米修斯这里不在是问题了。Prometheus贴心的给准备了服务自动发现功能。

文件自动发现概念:

可以通过 watch 一组本地的目标文件来获取抓取目标以及标签信息,这就是基于文件的服务发现方式。

该方式提供了一种更通用的方式来配置静态目标,它读取一组包含零个或多个 <static_config> 列表的文件,对所有定义的文件的变更通过磁盘监视被检测到并立即应用,目标文件可以以 YAML或 JSON 格式,YAML格式的如下:

  1. - targets:
  2. [ - '<host>' ]
  3. labels:
  4. [ <labelname>: <labelvalue> ... ]

三,

如何实现文件自动发现

编辑Prometheus的主配置文件:末尾添加如下:

这里使用了通配符,但也可以使用绝对路径,指定单一文件,这个路径需要绝对存在,

多说一句,在192.168.217.19/20/20/22 这四台服务器都已经安装并启动了node_exporter服务。

cat /usr/local/prometheus/prometheus.yml
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label  to any timeseries scraped from this config.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["192.168.217.22:9090"]  #本机IP+端口,其它的不用改
  - job_name: "node-exporter"
    file_sd_configs: 
      - files: ['/opt/promethes/files-sd/*.yml'] #自定义的文件存放路径和要发现的文件类型
        refresh_interval : 5s #发现文件的刷新时间为5秒,这里是为了更快速的测试到

根据以上配置,需要新建目录如下:

mkdir -p /opt/promethes/files-sd

重启Prometheus服务:

systemctl daemon-reload && systemctl restart prometheus

此时,我们在/opt/promethes/files-sd目录下根据自己的需求新建文件,文件的后缀名必须是前面定义的yml,Prometheus才可以识别到:

注意,标签可以自定义任意的,但最好定义的有一定意义

cat >/opt/promethes/files-sd/node-exporter2.yml <<eof
- targets: ['192.168.217.20:9100']
  labels:
    job: node2
eof

OK,此时的Prometheus server不再需要重启了,可以立刻通过Prometheus的web管理端看到,那么,依法炮制其它三个文件,内容如下:

cat >/opt/promethes/files-sd/node-exporter2.yml <<eof
- targets: ['192.168.217.20:9100']
  labels:
    job: node2
eof
cat >/opt/promethes/files-sd/node-exporter3.yml <<eof
- targets: ['192.168.217.21:9100']
  labels:
    job: node3
eof
cat >/opt/promethes/files-sd/node-exporter4.yml <<eof
- targets: ['192.168.217.21:9100']
  labels:
    job: node4
eof

打开Prometheus的web管理端,查看Status===》Service Discovery,应该是能够看到如下:

 

OK,假设某天节点192.168.217.19损坏了,开不了机了,那么,将其提出Prometheus的监控范围也就非常简单了,把对应节点的配置文件改个名称就好了:

mv node-exporter1.yml node-exporter1.yml-bak

再次回到web管理界面,大概等待5秒(上面定义的刷新时间),可以看到相关的node1的node_exporter已经没有了:

 

总结:

基于文件的服务发现有如下优点:

1,减少主配置文件,防止配置文件过于臃肿

2,通过文件解耦服务,便于服务动态改动,不需要重启Prometheus,如果Prometheus的监控服务非常多的话,避免其它的服务受到因服务重启而造成的影响。

目录
相关文章
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
1035 0
7种比较Linux中文本文件的最佳工具
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
1205 17
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
2273 13
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
520 16
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
414 28
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
294 4
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2520 25
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
3988 12
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
891 19
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename &#39;s/2023/2024/&#39; *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。