Prometheus 监控目标为什么要自动发现

频繁对Prometheus配置文件进行修改,无疑给运维人员带来很大的负担,还有可能直接变成一个“配置小王子”,即使是配置小王子也会存在人为失误的情况。

Prometheus支持的多种服务发现机制

Prometheus数据源的配置主要分为静态配置和动态发现, 常用的为以下几类:

  • static_configs: 静态服务发现
  • file_sd_configs: 文件服务发现
  • dns_sd_configs: DNS 服务发现
  • kubernetes_sd_configs: Kubernetes 服务发现
  • consul_sd_configs: Consul 服务发现
  • ...

kubernetes 频繁更新的pod,svc,等等资源配置应该是最能体现Prometheus监控目标自动发现服务的好处。

Prometheus基于consul自动发现监控对象

Consul是一个分布式k/v数据库,是当前比较流行的服务注册组件,下面对consul+prometheus自动发现监控目标大致流程做个介绍。

  1. 通过在consul注册服务或注销服务(监控targets)
  2. Prometheus 一直监视(watch)consul服务,当发现consul中符合要求的服务有新变化是更新Prometheus监控对象

Prometheus主要配置prometheus.yml中的scrape_configs以及consul_sd_configs如下:

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: 'consul'
consul_sd_configs:
- server: 'localhost:8500'
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*,prome,.*
action: keep
- source_labels: [__meta_consul_service]
target_label: job

consul_sd_configs的相关relabel通过下面实例来说明。Prometheus安装这边不说明了,到prometheus目录启动即可:

./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9090" --web.enable-admin-api --web.enable-lifecycle &

--web.enable-admin-api 运行通过web方式管理prometheus(删除清空数据等操作)
--web.enable-lifecycle 运行通过web方式重新加载prometheus配置(相当于reload)

我这里懒得配置腾讯云安全组规则了,直接nginx反向代理暴露一个80端口出来,配置如下:

server {
listen 10.135.13.136:80;
server_name p.iloxp.com www.p.iloxp.com;
resolver 8.8.8.8 8.8.4.4 valid=300s; location / {
limit_req zone=allips burst=5 nodelay;
proxy_pass http://127.0.0.1:9090;
} include agent_deny.conf; location ~ /\.ht {
deny all;
} }

启动一个consul服务

consul安装比较简单,下载二进制放在/usr/local/bin/目录下即可使用consul命令启动一个agent,consul 集群需至少启动一个server agent,下面是我单机启动consul server的一个示例:

consul agent -server -bootstrap-expect 1 -data-dir=/data/consul -node=server1 -bind=127.0.0.1 -client=127.0.0.1 -ui & 

consul将默认侦听TCP 8500端口,-ui表示启用web。

我这里懒得配置腾讯云安全组规则了,直接nginx反向代理暴露一个80端口出来,配置如下:

server {
listen 10.135.13.136:80;
server_name c.iloxp.com www.c.iloxp.com;
resolver 8.8.8.8 8.8.4.4 valid=300s; location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8500;
} include agent_deny.conf; location ~ /\.ht {
deny all;
} }

测试整个流程

向consul注册一个服务作为prometheus的监控target

curl -X PUT -d '{"id": "node-10-135-13-136_test","name": "node_exporter","address": "10.135.13.136","port": 9100,"tags": ["prod","prome","node"],"checks": [{"http": "http://10.135.13.136:9100/metrics","interval": "35s"}]}' http://localhost:8500/v1/agent/service/register

检查consul和prometheus是否已有对应target:

这是注册我本机node_exporter的示例,到grafana里面看下是否能获取,上面图片黑色部分能看到consul与prometheus relabel各个配置的对应关系。

按理说是能看到监控数据有中断的图片,由于我刚刚重新注册、注销consul服务的时间间隔太短了,所以看不出来,在grafana下的效果如下:

从consul中注销刚刚注册的node_exporter prometheus 监控目标:

curl -X PUT http://127.0.0.1:8500/v1/agent/service/deregister/node-10-135-13-136
 

Prometheus基于consul自动发现监控对象 https://www.iloxp.com/archive/11/的更多相关文章

  1. zabbix使用自动发现监控esxi的磁盘存储storage

    zabbix使用自动发现监控esxi的磁盘存储storage 在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可 创建模板过程: custom.esxi. ...

  2. zabbix自动发现监控url

    1.在监控客户机上 web_site_code_status.sh: #!/bin/bash UrlFile="/opt/scripts/WEB.txt" IFS=$'\n' we ...

  3. zabbix自动发现监控mysql

    一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...

  4. Prometheus + Consul 自动发现服务监控

    一.Prometheus支持的多种服务发现机制(常用如下) static_configs: 静态服务发现 file_sd_configs: 文件服务发现 dns_sd_configs: DNS 服务发 ...

  5. 使用lld自动发现监控多实例redis

    zabbix 可以通过常见的手段监控到各种服务,通过编写脚本来获取返回值并将获取到的值通过图形来展现出来,包括(系统.服务.业务)层面.可是有些时候在一些不固定的场合监控一些不固定的服务就比较麻烦.例 ...

  6. 使用 zabbix 自动发现监控 MySQL

    介绍 使用 zabbix 的 low-level 自动发现功能完成单主机多端口的监控, 详见low_level_discovery, 整体上监控类似 percona 的 zabbix 监控插件, 不过 ...

  7. zabbix监控自动发现监控tomcat(V1)

    背景说明: 由于zabbix监控使用自带的模版,只能监控主机上只有1个tomcat的场景适合,虽然网上很多朋友都是在每个监控项上面添加一个空格来解决问题.但是个人感觉这种方法还是蛮麻烦的,所以写一篇使 ...

  8. Zabbix自动发现监控Tomcat进程

    1.编辑自动发现脚本 自动发现脚本只支持JSON格式 #!/usr/bin/env python # -*- coding:utf-8 -*- import commands import psuti ...

  9. Sping Cloud hystrix.stream 自动发现-监控

    相关组件安装脚本 [root@java_gateway4 java_tps]# cat cront_install.sh #!/bin/bashyum install jq -ymkdir /home ...

随机推荐

  1. Flink原理(二)——资源

    前言 本文主要是想简要说明Flink在集群部署.任务提交.任务运行过程中资源情况,若表述有误欢迎大伙留言分享,非常感谢! 一.集群部署阶段 集群部署这里指的是Flink standalone模式,因为 ...

  2. HTML&CSS基础-内联和块元素

    HTML&CSS基础-内联和块元素 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html> ...

  3. vue-cli3.0 脚手架搭建项目的过程详解

    1.安装vue-cli 3.0 ? 1 2 3 npm install -g @vue/cli # or yarn global add @vue/cli 安装成功后查看版本:vue -V(大写的V) ...

  4. pip---cannot import name main解决方案

    .先来看下Python不同版本对应的路径 which python3. which python3. .使用update-alternatives --install建立链接 sudo update- ...

  5. IDEA实用教程(八)—— 创建JavaWeb项目

    七. 创建JavaWeb项目 创建工程 1) 第一步 2) 第二步 3) 第三步 如果要修改JavaEE版本,请根据下图所示进行修改 4) 第四步 2. 发布工程 1) 第一步 2) 第二步 3) 第 ...

  6. java基础(13)---集合框架

    一.集合框架 Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被成为容器.在Java中,所有的集合类都位于java.util包下,这些集合类主要是 ...

  7. 《你说对就队》第七次作业:团队项目设计完善&编码

    <你说对就队>第七次作业:团队项目设计完善&编码 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  8. 用python查看网站被百度所有收录网址与标题进行SEO分析

    SEO要是和python数据分析联合在一起,可谓是很好的方法,没事的时候尝试写的分析网站被百度收录的网址和标题. 首先得引入两个py模块,分别是:Beautiful      Souprequests ...

  9. 多线程执行sql报错处理

    pymysql多线程访问数据库报错:Packet sequence number wrong - got 7 expected 2 原文:https://www.cnblogs.com/heiao10 ...

  10. 织梦cms 后台查看会员性别为空

    织梦cms会员注册选择性别为保密时,在后台会员中心查看性别为空的修改方法 第一步:找到dede/templets/member_view.htm,在引号中添加保密就ok 再次修改后的结果