当前位置: 首页 > news >正文

Prometheus运维监控平台之监控指标注册到consul脚本开发、自定义监控项采集配置调试(三)

系列文章目录

运维监控平台搭建
运维监控平台监控标签
golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本


文章目录

  • 系列文章目录
  • 目的
  • 一、监控指标注册到consul的golang脚本开发
    • 1、修改settings.yaml文件
    • 2、修改config/ocnsul,go文件
    • 3、修改core/consul.go文件
    • 4、脚本演示
      • 4.1、准备整理好的监控指标文件xlsx格式
      • 4.2、注册上述监控指标到consul 中
  • 二、Prometheus使用consul服务发现配置
    • 1.修改prometheus.yml文件
    • 2、telegraf配置自定义监控项
      • 2.1、示例1: 监控内核参数
  • 三、监控接口配置示例


目的

1、在面临多个监控指标时,实现快速的将指标注册到consul中,Prometheus使用consul服务发现实现监控
2、编写脚本实现自定义监控指标
3、自定监控项监控配置调试


提示:以下是本篇文章正文内容,下面案例可供参考

一、监控指标注册到consul的golang脚本开发

在之前就已经发布过golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置脚本。如顶部第三个文章链接。
虽然之前写的脚本已经实现了注册服务器ip、微服务ip和端口、url等到consul中,但是只能适用于无密码、无token的consul
但是现在的运维平台consul是开启了ACL认证的,因此需要对脚本做出部分修改。修改部分如下所示

因为之前在https://blog.csdn.net/weixin_50902636/article/details/139903589文章中已经对该注册脚本进行了分析讲解及使用示例,因此在本篇文章中不做过多描述,只对修改部分示例。同时更新后的脚本已上传至csdn资源中,需要的自行下载即可

1、修改settings.yaml文件

consul:ip: "192.168.56.131"port: 8500acl_status: true                                 #新添加字段,判断是否开启了acl认证token: "a0de7f26-127b-cd67-f01e-477c212d7c48"    #新添加字段,consul开启acl后的认证token。其余字段保持不变service_name:- "Host_Status"- "ICMP"- "Telegraf"- "Service_TCP"- "Service_URL"xlsx:xlsxfile_path: "/export/wxd/prometheus_import_consul/host_monitor_datasource.xlsx"sheet_name:- "hostinfo"- "serviceinfo"- "serviceurlInfo"jsonfile:hostjson_path: "/export/wxd/prometheus_import_consul/jsonfile/host.json"servicejson_path: "/export/wxd/prometheus_import_consul/jsonfile/service.json"serviceurljson_path: "/export/wxd/prometheus_import_consul/jsonfile/serviceUrl.json"

2、修改config/ocnsul,go文件

package configimport "fmt"//连接consul的ip、端口
type Consul struct {IP          string   `yaml:"ip"`Port        int      `yaml:"port"`Acl_Status  bool     `yaml:"acl_status"`  #将yaml文件中新增加的字段 添加到结构体中,用于字段解析初始化Token       string   `yaml:"token"`       #将yaml文件中新增加的字段 添加到结构体中,用于字段解析初始化ServiceName []string `yaml:"service_name"`
}func (c *Consul) URL() string {return fmt.Sprintf("%s:%d", c.IP, c.Port)
}

3、修改core/consul.go文件

package coreimport ("log""prometheus_import_consul/global""github.com/hashicorp/consul/api"
)// consul 初始化
func ConsulConnect() (*api.Client, error) {config := api.DefaultConfig()// 新添加 根据 acl_status 判断是否使用 acl_Tokenif global.Config.Consul.Acl_Status {config.Token = global.Config.Consul.Tokenlog.Printf("consul ACL authentication is enabled. Using token: %s", config.Token)} else {log.Println("consul ACL authentication is disabled. Not using any token.")}config.Address = global.Config.Consul.URL()if client, err := api.NewClient(config); err != nil {return nil, err} else {return client, nil}
}

其余代码不变,如果有需要新增其他类型的监控,在修改代码即可

4、脚本演示

4.1、准备整理好的监控指标文件xlsx格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2、注册上述监控指标到consul 中

代码构建为二进制程序

[root@python2 prometheus_import_consul]# sh scripts/launch.sh build prometheus_consul 
[root@python2 prometheus_import_consul]# cat scripts/nohup.out

在这里插入图片描述
解析xlsx文件中所有sheet页为json文件

[root@python2 prometheus_import_consul]# sh scripts/launch.sh run-execToAllJson prometheus_consul

在这里插入图片描述
在这里插入图片描述
将转换为json格式的文件注册到consul中

[root@python2 prometheus_import_consul]# sh scripts/launch.sh run-all prometheus_consul

在这里插入图片描述
检查consul web中是否已有上述注册信息
在这里插入图片描述
如上图所示,golang脚本已完美的实现监控指标注册功能。具体的脚本功能请自行下载查看

二、Prometheus使用consul服务发现配置

修改prometheus.yml文件,使其监控已经注册到consul中的监控指标

1.修改prometheus.yml文件

文件如下(示例):

  - job_name: "consul-prometheus"consul_sd_configs:- server: '192.168.56.131:8500'token: "a0de7f26-127b-cd67-f01e-477c212d7c48"relabel_configs:- source_labels: ['__meta_consul_service']regex: .*monitor_agent.*action: keep- source_labels: ['__meta_consul_service_address']target_label: ip- source_labels: ['__meta_consul_service_port']target_label: port- job_name: 'Host_Status'metrics_path: /probeparams:module: [icmp]scrape_interval: 60sscrape_timeout: 2sconsul_sd_configs:- server: '192.168.56.131:8500'services: []token: "a0de7f26-127b-cd67-f01e-477c212d7c48"relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Host_Status.*action: keep- source_labels: [__meta_consul_service_address]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.+)action: labelmap- job_name: 'Service_tcp'scrape_interval: 60sscrape_timeout: 5smetrics_path: /probeparams:module: [tcp_connect]consul_sd_configs:- server: '192.168.56.131:8500'services: []token: "a0de7f26-127b-cd67-f01e-477c212d7c48"relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Service_TCP.*action: keep- source_labels: [__address__]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.+)action: labelmap- job_name: 'Service_url'scrape_interval: 60sscrape_timeout: 5smetrics_path: /probeparams:module: [http_2xx]  consul_sd_configs:- server: '192.168.56.131:8500'services: []token: "a0de7f26-127b-cd67-f01e-477c212d7c48"relabel_configs:- source_labels: [__meta_consul_tags]regex: .*Service_URL.*action: keep- source_labels: [__meta_consul_service_metadata_url]target_label: __param_target- target_label: __address__replacement: 192.168.56.131:9115- regex: __meta_consul_service_metadata_(.+)action: labelmap- job_name: icmpparams:module:- icmpscrape_interval: 60sscrape_timeout: 2smetrics_path: /probeconsul_sd_configs:- server: 192.168.56.131:8500token: "a0de7f26-127b-cd67-f01e-477c212d7c48"relabel_configs:- source_labels: [__meta_consul_tags]regex: .*,prometheus-icmp,.* # 扫描对应的组的信息action: keep- source_labels: [__meta_consul_tags]regex: .*,ICMP:([^,]+),.*replacement: '${1}'target_label: __param_target- source_labels: [__param_target]target_label: instance- regex: __meta_consul_service_metadata_(.+)action: labelmap- target_label: __address__replacement: localhost:9115

在这里插入图片描述

2、telegraf配置自定义监控项

2.1、示例1: 监控内核参数

代码如下(示例):

当在https://github.com/influxdata/telegraf/tree/release-1.30/plugins/inputs中不到对应的服务监控配置时,则可以使用自定义监控项的方式实现监控。在github中可以找到大部分开源组件的telegraf的监控配置,粘贴修改后即可使用。

先看结果
在这里插入图片描述
实现过程

需求:需要通过监控telegraf组件实现对10.192.10.14服务器的/etc/sysctl.conf中配置的内核参数进行监控实现过程:1、联想到zabbix监控可以通过agent端编辑相关的conf文件,且conf文件中编写脚本或者其他采集发送,实现某个时刻组件的监控,因此再telegraf/scripts目录下也用同样方式测试是否能实现2、在10.192.10.14机器的/opt/monitor/telegraf/scripts/目录下,增加一个探测的脚本文件check_tcp_timesmaps.sh,并授权执行权限。脚本内容如下#!/bin/bash
# 读取net.ipv4.tcp_timestamps的值value=$(sysctl net.ipv4.tcp_timestamps | awk '{print $3}')
# 输出为InfluxDB格式的指标echo "tcp_timestamps value=$value"  #其中tcp_timestamps为监控项,也就是使用它可以在prometheus的web界面中查看对应的数据,即它就是一个自定义的PromQL.3、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.d/目录下新增类似zabbix中的conf文件,配置如下[[inputs.exec]] #使用telegraf的exec插件,它还有inputs.中间件名 的插件#指定脚本位置commands = ["/opt/monitor/telegraf/scripts/check_tcp_timestamps.sh"]#探测超时时间timeout = "5s"#数据格式,通常为influx类型data_format = "influx"4、在10.192.10.14机器的/opt/monitor/telegraf/etc/telegraf/telegraf.conf主配置文件中,必须添加以下配置.配置Prometheus从Telegraf抓取对应的指标[[outputs.prometheus_client]]listen = ":9273"5、在监控机器中配置对应的yml告警规则增加 /opt/monitor/prometheus/rules/sysctl_tcp_timesamps.yml文件,配置文件如下groups:- name: tcp_timestamps_checkrules:- alert: TCPTimestampsDisabledexpr: tcp_timestamps != 0for: 1mlabels:severity: warningannotations:summary: "TCP Timestamps is not disabled (host {{ $labels.instance }})"description: "net.ipv4.tcp_timestamps is expected to be 0 but is {{ $value }} on {{ $labels.instance }}"

三、监控接口配置示例

将接口以静态服务发现方式添加到prometheus.yml中

- job_name: 'V3getActivityInfo'metrics_path: /probeparams:module: [v3getActivityInfo] #等价于blackbox.yml文件中定义的名称static_configs:- targets: ['https://xxxx/activity/V3/getActivityInfo']labels:servicetype: '活动查询接口V3POST'monitortype: 'business_monitor'relabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: localhost:9115

通过黑盒监控,修改balckbox_exporter.yml文件中添加该接口的请求方式、请求体及返回值

V3getActivityInfo:prober: httptimeout: 5shttp:method: POST  #可以替换为对应的请求方式preferred_ip_protocol: "ip4" #defaults to "ip6"valid_http_versions: ["HTTP/1.1","HTTP/2.0"]valid_status_codes: [200] #defaults to 2xx 如果返回的 HTTP 状态码不在 valid_status_codes 指定的范围内,则会被认为是探测失败headers: #配置post请求的header头Content-Type: application/jsonClientId: xxxxxxxxxxbody: '{"data": {"signData": "72KFee7x9izEYwvrmOfh/KgzzdjNjf6Ud1Wk19BJZnClY/Q79/rEt9wkspsY/uQYleg9igJ1R5xUTEPWAoRdT111A=="}}'fail_if_body_not_matches_regexp: #如果响应体中不包含匹配该正则表达式的内容,则探测被视为失败- '30001'

至此,接口监控已完成


相关文章:

Prometheus运维监控平台之监控指标注册到consul脚本开发、自定义监控项采集配置调试(三)

系列文章目录 运维监控平台搭建 运维监控平台监控标签 golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本 文章目录 系列文章目录目的一、监控指标注册到consul的golang脚本开发1、修改settings.yaml文件2、修改config/ocnsul,go文件3、修改core/consul…...

C语言——数组

1.数组的概念 数组是一组相同类型元素的集合; 数组中可以存放1个或多个元素,但数组元素个数不能为0。 同时数组可以分为一维数组和多维数组,多维数组一般常见 是二维数组。 2.一维数组的创建和初始化 一维数组的创建的基本语法: …...

MySQL-09.DDL-表结构操作-查询修改删除

一.查询 二.修改 三.删除 -- DDL:查看表结构 -- 查看:当前数据库下的表show tables ;-- 查看:查看指定的表结构 desc tb_emp;-- 查看:数据库的建表语句 show create table tb_emp;-- DDL:修改表结构 -- 修改:为表tb…...

WileyNJDv5_Template模板无法编译生成pdf文件

文章目录 问题解决办法结果 问题 使用WileyNJDv5_Template模板时,修改tex文件里的内容,按F6编译后,并没有报错,但是编辑后的pdf文件没有生成,因为看文件夹里的pdf文件日期还是以前的日期,所以是旧版的pdf文…...

亿配芯城(ICGOODFIND)教你外贸(海外)推广电子元器件芯片的专用词语

在电子元器件行业,海外推广是企业拓展市场、提升竞争力的重要手段。而在海外推广过程中,恰当运用专用词语能够准确传达产品信息、吸引客户关注,提升推广效果。本文将详细介绍亿配芯城(ICGOODFIND)电子元器件海外推广中…...

windows和linux的一些使用问题一一记录

文章目录 windows 11 激活wsl文件共享命令互通wslg网络 Hyper-V双系统遇到再记录……… windows 11 激活 然后执行 slmgr /skms kms.03k.org slmgr /atowsl 卡死打开任务管理关闭下就行了 wsl --list -v # 安装的 wsl --list --online #可以安装的wsl -d kali-linux # 启…...

排序算法上——插入,希尔,选择,堆排序

前言: 常见排序方法如下: 本篇将介绍4种排序方法,分别为插入排序,希尔排序,选择排序,堆排序,并分别举例与讲解。 一. 插入排序 1.1 含义与动图分析 插入排序的思想是在有序区间的下一个位置…...

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 (1)、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表,分布在不同的数据库节点上。例如,可以根据某个字段的值进行哈希取模,将数据均匀的分布到不同的节点上。 这样做的好处…...

FFmpeg源码:avformat_new_stream函数分析

一、avformat_new_stream函数的声明 avformat_new_stream函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavformat/avformat.h中: /*** Add a new stream to a media file.** When demuxing, it is called by the dem…...

【java】深入解析Lambda表达式

Lambda表达式是Java 8引入的一项重要特性,它提供了一种简洁的方式来实现函数式编程。Lambda表达式的使用广泛而且灵活,可以简化代码并提高可读性。本篇文章将深入解析Lambda表达式,包括使用场景、基础学习、代码案例、实现方法和注意事项等方…...

Chromium html<img>对应c++接口定义

<img src"tulip.jpg" alt"上海鲜花港 - 郁金香" /> 1、html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "img",constructorNeedsCreateElementF…...

卸载Python

1、查看安装框架位置并删除 Sudo rm -rf /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8 2、查看应用并删除 在 /Applications/Python 3.x 看是否存在&#xff0c;如果存在并删除。 3、删除软连接 ls -l /usr/bin/py* 或 ls -…...

算法剖析:二分查找

文章目录 前言二分查找模板朴素模板左右查找模板 一、二分查找二、 在排序数组中查找元素的第一个和最后一个位置三、搜索插入位置四、x 的平方根五、山脉数组的峰顶索引六、寻找峰值七、寻找旋转排序数组中的最小值八、 点名总结 前言 二分查找是一种高效的查找算法&#xff…...

Invoke 和 InvokeRequired以及他们两个的区别

在.NET中&#xff0c;Invoke和InvokeRequired是Windows Forms编程中用于确保线程安全的关键方法和属性。它们通常用在多线程环境中&#xff0c;以确保UI控件的更新操作在创建控件的线程上执行&#xff0c;避免因跨线程操作导致的异常。 InvokeRequired 属性 InvokeRequired属…...

SpringBoot概览及核心原理

Spring Boot 是由Pivotal 团队设计的全新框架&#xff0c;其目的是用来简化 Spring 应用开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使得开发人员不再需要定义一系列样板化的配置文件&#xff0c;而专注于核心业务开发&#xff0c;项目涉及的一些基础设施则交…...

根据basic auth请求https获取token

根据basic auth请求https获取token 对接第三方接口&#xff0c;给了接口文档&#xff0c;但是没有示例代码&#xff0c;postman一直可请求成功&#xff0c;java就是不行。百思不得其解&#xff0c;最后请求公司大神&#xff0c;得到一套秘籍。 第一步 第二步 Authorization&am…...

【基础版】React缓存路由

前言 项目背景 Reactumireact-router5 需求 用户在某一页面操作后点击跳转到其详情页&#xff0c;返回到列表页还是之前操作过的页面&#xff0c;即把页面缓存下来&#xff08;基础版先处理路由缓存&#xff0c;tab页展示先不处理&#xff09; 实践 在布局页面对页面进行…...

Java基础15-Java高级

十五、Java高级 单元测试、反射、注解、动态代理。 1、单元测试 定义&#xff1a;就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。 1.1 Junit单元测试框架 可以用来对方 法进行测试&#xff0c;它是第三方公司开源出来的(很多开发工具已经集成了Junit框架&…...

selenium工具的几种截屏方法介绍(9)

在使用selenium做自动化的时候&#xff0c;可以对于某些场景截图保存当时的执行情况&#xff0c;方便后续定位问题或者作为一些证据保留现场。 获取元素后将元素截屏 我们获取元素后&#xff0c;使用函数screenshot将元素截屏&#xff0c;参数filename传入完整的png文件名路径…...

【设计模式】深入理解Python中的过滤器模式(Filter Pattern)

深入理解Python中的过滤器模式&#xff08;Filter Pattern&#xff09; 在软件设计中&#xff0c;面对复杂的数据处理需求时&#xff0c;我们常常需要从一组数据中筛选出符合特定条件的子集。**过滤器模式&#xff08;Filter Pattern&#xff09;**是一种能够简化这种操作的设…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...