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

news2024/10/18 7:34:50

系列文章目录

运维监控平台搭建
运维监控平台监控标签
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: 8500
  acl_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 config

import "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 core

import (
	"log"
	"prometheus_import_consul/global"

	"github.com/hashicorp/consul/api"
)

// consul 初始化
func ConsulConnect() (*api.Client, error) {
	config := api.DefaultConfig()
	// 新添加 根据 acl_status 判断是否使用 acl_Token
	if global.Config.Consul.Acl_Status {
		config.Token = global.Config.Consul.Token
		log.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: /probe
    params:
      module: [icmp]
    scrape_interval: 60s
    scrape_timeout: 2s
    consul_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: 60s
    scrape_timeout: 5s
    metrics_path: /probe
    params:
      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: 60s
    scrape_timeout: 5s
    metrics_path: /probe
        params:
      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: icmp
    params:
      module:
      - icmp
    scrape_interval: 60s
    scrape_timeout: 2s
    metrics_path: /probe
    consul_sd_configs:
    - server: 192.168.56.131:8500
      token: "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_check
  	  rules:
    - alert: TCPTimestampsDisabled
      expr: tcp_timestamps != 0
      for: 1m
      labels:
        severity: warning
      annotations:
        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: /probe
    params:
      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: http
  timeout: 5s
  http:
    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/json
      ClientId: xxxxxxxxxx
    body: '{"data": {"signData": "72KFee7x9izEYwvrmOfh/KgzzdjNjf6Ud1Wk19BJZnClY/Q79/rEt9wkspsY/uQYleg9igJ1R5xUTEPWAoRdT111A=="}}'
    fail_if_body_not_matches_regexp: #如果响应体中不包含匹配该正则表达式的内容,则探测被视为失败
      - '30001'

至此,接口监控已完成


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频剪辑和转换gif一体化UI页面【可以解决gif体积过大】

视频剪辑和转换gif一体化UI页面 一,简介 这段代码实现了一个简单的 GUI 应用程序,主要功能包括: 选择视频文件:用户可以通过点击“选择视频”按钮打开文件选择对话框,选择 MP4 格式的视频文件。 转换为 GIF&#xf…

Axure复选框全选反选取消高级交互

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:复选框全选反选取消制作 主要内容:点击复选框,实现列表数据项全选选中、反选和取消选中效果 应用场景:多项选定…

【完-网络安全】Windows防火墙及出入站规则

文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许,入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机,也就是正向shell的操作 出站就是反向shell,主机需要主动连接kali&am…

语音信号去噪 Matlab语音信号去噪,GUI界面。分别添加了正弦噪声和高斯噪声,分别用了巴特沃斯低通滤波器和小波分解去噪。每步处理都可以播放出信号声音。

Matlab语音信号去噪,GUI界面。分别添加了正弦噪声和高斯噪声,分别用了巴特沃斯低通滤波器和小波分解去噪。每步处理都可以播放出信号声音。 具体工作如下: 1、加载语音信号,显示时域频域图; 2、添加正弦噪声&#xff1…

数据结构代码题备考

文章目录 快速排序2011真题2013真题2018真题2016真题 快速排序的划分思想2016快速排序的最优解二路归并排序2011真题 链表备考思路基本功练习 图图的数据定义-邻接矩阵图的数据定义-邻接表2021-邻接矩阵2023-邻接矩阵2021-邻接表2023-邻接表 二叉树常用思路基本功练习前中后序遍…

思想实验思维浅谈

思想实验思维浅谈 思想实验(Thought Experiment)是一种在思想中进行的假想实验,思想实验激发人的想象力和思辨能力,是科学家思考问题的重要工具,通过想象、推理和分析来探索某种理论、假设或概念的可能性和内在逻辑&am…

项目管理软件真的能让敏捷开发变得更简单吗?

敏捷开发是一种以快速交付和适应变化为核心特点的软件开发方法。其特点包括尽早并持续交付、能够驾驭需求变化、版本周期内尽量不加任务、业务与开发协同工作、以人为核心、团队配置敏捷等。 例如,尽早并持续交付可使用的软件,使客户能够更早地体验产品…

涉密网和非涉密网之间企业如何进行安全跨网文件交换?

在数字化时代,企业面临着跨网文件交换的挑战,尤其是涉密网和非涉密网之间的数据传输。这种交换不仅要求高效,更要求安全,以防止数据泄露和网络攻击。以下是一些关键点,帮助企业实现安全跨网文件交换。 应用场景和重要性…

Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)

文章目录 网络连接相关命令pingtelnetcurlwget 网络连接相关命令 ping ping 命令是用于测试网络连接和诊断网络问题的工具。它通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求,并等待回复,以确定目标主机是…

植物大战僵尸杂交版即将新增内容介绍

新BOSS僵尸:埃德加二世 特点:埃德加博士的克隆体,驾驶小型机甲。体型:小于原版僵王的头。血量:120000,是原版僵王复仇的2倍。免疫效果:减速、冰冻、黄油效果,能阻挡子弹。行为模式&…

【顺序表的模拟实现Java】

【顺序表的模拟实现Java】 顺序表的介绍Java代码实现检验代码功能 顺序表的介绍 由于之前在c语言板块写过详细的顺序表介绍,所以这一篇文章主要为Java代码的实现 下面为顺序表介绍的链接,如有需要点击下方链接跳转 c语言顺序表讲解 Java代码实现 pub…

Halcon基础-二维码识别

Halcon基础-二维码识别 1、二维码分类2、代码实现3、运行效果 1、二维码分类 二维码(Quick Response Code,简称 QR Code)是一种矩阵式二维码,能够在水平和垂直方向上存储信息。它们最初由日本的丰田子公司Denso Wave在1994年发明…

单细胞分析Seurat使用相关的10个问题答疑精选!

作为一个刚刚开始进行单细胞转录组分析的菜鸟,R语言底子没有,有时候除了会copy外,如果你让我写个for循环,我只能cross my fingers。。。。 于是我看见了https://satijalab.org/seurat/,Seurat是一个R软件包&#xff0…

基于SpringBoot的课程辅助教学系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

java_跳转控制语句break

案例 1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for break】 public class BreakExercise { //编写一个 main 方法 public static void main(String[] args) { //1-100 以内的数求和,求出 当和 第一次大于 20 的当前数 【for break】 …

基于 C# .NET Framework 开发实现 WebService服务实例详解——一文学懂WebService服务开发技术及应用

目录 1. Web Service 概念介绍 1.1 什么是 Web Service 1.2 SOAP(简单对象访问协议) 1.3 WSDL(Web 服务描述语言) 1.4 应用场景 2. 创建 Web Service 项目 3. 编写 Web Service 代码 3.1 打开 WebService1.asmx.cs 3.2 编…

鸿蒙网络编程系列3-TCP客户端通讯示例

1. TCP简介 TCP协议是传输层最重要的协议,提供了可靠、有序的数据传输,是多个广泛使用的表示层协议的运行基础,相对于UDP来说,TCP需要经过三次握手后才能建立连接,建立连接后才能进行数据传输,所以效率差了…

太速科技-426-基于XC7Z100+TMS320C6678的图像处理板卡

基于XC7Z100TMS320C6678的图像处理板卡 一、板卡概述 板卡基于独立的结构,实现ZYNQ XC7Z100DSP TMS320C6678的多路图像输入输出接口的综合图像处理,包含1路Camera link输入输出、1路HD-SDI输入输出、1路复合视频输入输出、2路光纤等视频接口,…

一文了解微服务与多租户

在当今快速发展的数字化时代,软件架构的选择对于企业的成功至关重要。微服务和多租户作为两种较为热门的架构模式,正逐渐成为企业构建高效、灵活和可扩展软件系统的热门选择。 一、微服务架构 (一)微服务的定义与概念 微服务是一…

HarmonyOS开发(状态管理,页面路由,动画)

官网 https://developer.huawei.com/consumer/cn/ 一、状态管理 在声明式UI中,是以状态驱动视图更新 1.State 状态(State):指驱动视图更新的数据,被装饰器标记的变量 视图(View):基于UI描述渲染得到用户界面 说明 State装饰…