首页 > 其他分享 >基于Consul完成腾讯云主机监控

基于Consul完成腾讯云主机监控

时间:2023-06-14 19:45:20浏览次数:33  
标签:err 主机 Consul client CVM 腾讯 consul

基于Consul完成腾讯云主机监控

目录

背景

  • 腾讯云提供tencent-exporter支持获取CVM主机列表及监控信息。但碍于CVM主机过多,使用Tencent-exporter将导致频繁调用腾讯云API,导致额外费用支持。因此在监控CVM云主机使用Consul自动注册监控方式。但Consul在使用中只是一个注册中心,并不会自动获取到腾讯云CVM实例列表,需要自行调用腾讯云API获取CVM实例列表注册至Consul。

构成

  • 监控构成:

NodeExporter + 自开发脚本 + Consul + Prometheus

流程

  1. 获取腾讯云信息存储至数据库

  2. 所有CVM主机通过自主化助手统一部署Node-Exporter

  3. 获取数据库中CVM信息POST至Consul

  4. Prometheus抓取Consul信息

  5. 完成主机自动发现

  • 步骤0和1这里不做展开,主要对步骤2、3、4展开说明
  • 因为Prometheus环境有两套,所以分别部署了两套Conusl,一套测试环境,一套生产环境。根据CVM打标分为dev与prod环境,将归属于不同环境的CVM主机根据标签分别注册至不同环境Consul。

数据POST至Conusl

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/hashicorp/consul/api"
	"log"
	"strings"
)

var (
	instanceid string
	Mapping_Ip string
)

func ConnMysql() (db *sql.DB) {
	// mysql 连接信息
	username := "!!!!"
	password := "!!!!"
	host := "!!!!"
	port := 3306
	Dbname := "!!!!"

	// 连接mysql
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
	db, err := sql.Open("mysql", dsn)
	if err != nil {
		log.Fatal(err)
	}

	return db
}

func ConnConsul(env string) (client *api.Client) {
	// consul 连接信息
	consulAddress := fmt.Sprintf("consul-%s.aaa.com", env)
	// 连接consul
	client, err := api.NewClient(&api.Config{Address: consulAddress})
	if err != nil {
		log.Fatal(err)
	}
	return client
}

func ReadCvmDataForConsul(db *sql.DB, client *api.Client, env string) {
	rows, err := db.Query(fmt.Sprintf("SELECT InstanceId,Mapping_Ip FROM `tencent_cvm` WHERE `Env` = '%s' AND `delete` = '0' AND `InstanceName` NOT LIKE '%%emr%%' AND `instancestatus` = 'Running' ", env))
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()
	dbinstanceid := make(map[string]bool)
	for rows.Next() {
		rows.Scan(&instanceid, &Mapping_Ip)
		Mapping_Ip = strings.Trim(Mapping_Ip, "[]")
		entry := &api.AgentServiceRegistration{
			ID:      instanceid,
			Name:    "tencent-cvm",
			Tags:    []string{"consul-cvm", "test"},
			Port:    9100,
			Address: Mapping_Ip,
		}

		dbinstanceid[instanceid] = true
		// 将ServiceEntry注册到Consul的Agent中
		agent := client.Agent()
		if err := agent.ServiceRegister(entry); err != nil {
			log.Fatal(err)
		}
	}

	// 查询consul services中所有的instance
	services, _, err := client.Catalog().Service("tencent-cvm", "", nil)
	if err != nil {
		log.Fatal(err)
	}

	// 对比consul中存在但数据库不存在的instance,对销毁主机下线监控
	for _, service := range services {
		if !dbinstanceid[service.ServiceID] {
			err = client.Agent().ServiceDeregister(service.ServiceID)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Printf("Service在consul中存在,但是在mysql中已被删除:%s\n", service.ServiceID)
		}
	}

}

func main() {
	db := ConnMysql()
	defer db.Close()

	TencentEnv := []string{"dev", "prod"}
	for _, ch := range TencentEnv {
		client := ConnConsul(ch)
		ReadCvmDataForConsul(db, client, ch)
	}

}

Prometheus抓取Consul注册主机

    - job_name: "consul-tencent-cvm" # 此处考虑未来如果多云?
      scrape_interval: 15s
      consul_sd_configs:
      - server: 'consul.aaa.com:8500'
        refresh_interval: 1m
        services: ["tencent-cvm"]
      relabel_configs:
        - source_labels: [__meta_consul_service_id]
          target_label:  "instanceId"
        - source_labels: [__address__]
          regex: ([^:]+)(?::\d+)?
          replacement: "$1"
          target_label: instance
          action: replace

标签:err,主机,Consul,client,CVM,腾讯,consul
From: https://www.cnblogs.com/tcy1/p/17481192.html

相关文章

  • 配置云主机swap虚拟内存
    配置云主机虚拟内存:ddif=/dev/zeroof=/mnt/swapbs=block_sizecount=number_of_blockddif=/dev/zeroof=/mnt/swapbs=1Mcount=8192mkswap/mnt/swapswapon/mnt/swapvi/etc/fstab/mnt/swapswapswapdefaults00vi/etc/sysctl.confvm.swappiness=60sysctl-p swa......
  • 腾讯云低延时直播系统架构设计与弱网优化实践
    “直播带货”可能是2020年最具代表性的词汇之一,那么传统电商该如何融合直播系统,直播过程如何保障用户的最佳观看体验?本文由腾讯云资深架构师何书照在LiveVideoStack线上分享中的内容整理而成,详解了大规模、低延时电商直播系统架构设计以及电商直播的难点、技术挑战与突破。 文/......
  • RockyLinux9设置静态IP地址和主机名
    Rocky9.2使用体验2022年1月31日,CentOSLinux8支持服务已经正式停止。CentOSLinux7(简称CentOS7)也将于2024年6月30日停止维护。Rocky和Almalinux都可以作为CentOS的替代者,都是完全兼容RHEL的Linux发行版。本文使用vmwareworkstation15安装测试Rocky9.21、官网下载RockyLin......
  • VMware虚拟机和主机传输文件
    原文链接虚拟机为Linux系统使用vm-tools即可。卸载旧工具:vmware-uninstall-tools.pl安装新工具:apt-getinstallopen-vm-tools-desktop重启系统:reboot此时可以使用Ctrl+C、Ctrl+V的方式在主机和Linux虚拟机之间传输文件。虚拟机为Windows系统首先在本机新建一个文件......
  • VMware虚拟机和主机传输文件
    原文链接虚拟机为Linux系统使用vm-tools即可。卸载旧工具:vmware-uninstall-tools.pl安装新工具:apt-getinstallopen-vm-tools-desktop重启系统:reboot此时可以使用Ctrl+C、Ctrl+V的方式在主机和Linux虚拟机之间传输文件。虚拟机为Windows系统首先在本机新建一个文件......
  • HP 288G9 主机安装Esxi6.7报错Shutting down firmware services Using simple offset'
    ShuttingdownfirmwareservicesUsingsimpleoffset'UEFIRTSmappingpolicy找了好多方法都不行,尝试1:添加ignoreHeadless=TRUE参数也没救回我电脑,失败尝试2:BIOS中将PCI64bitResourcesHandling里的Above4GDecoding,找不到失败尝试3:PC主板里有一个设置选项叫CSM兼容性......
  • 解读腾讯极速高清AR-SR的画质改善机制
    正文字数:2004 阅读时长:3分钟本文来自腾讯极速高清团队的投稿,介绍了AR-SR在对压缩后的视频进行后处理,减轻压缩带来的画质损失。欢迎通过[email protected]投稿把你的经验和思考分享给大家。文/腾讯极速高清团队视频是当前网络媒体主要形式和网络带宽资源的主要消耗......
  • 对话腾讯云专家工程师常青,聊一聊全真互联网的“小小”变化
    三年时间,从“懵懂少年”到能从容应对客户需求,拥有更加成熟和成体系的业务线,覆盖更多场景的产品线,不仅有音视频的传输,还有实时消息的通讯,以及视频内容的制作。这背后是腾讯云各个团队之间完美配合的结果。在迈向全真互联网的过程中,有一位朋友感受到了其中一些“小小”变化:追求越来越......
  • 腾讯DNS的缺陷?(人为?)无法解析
    疼讯dns无法解析xiaohongshu.com,小红书(电脑网页现在可以看小红书的)[换openDNS后立即正常]讽刺的是小红书用的服务器还是疼讯云的!!!解析服务如此强大,是否因为过滤审核太多次而误杀了正常网站?   ......
  • 从腾讯“办公三杰”打通,思考如何做产品功能整合
    编辑导语:近日,企业微信、腾讯文档、腾讯会议三大产品实现了打通。而此次功能整合的背后,是用户重叠、用户需求等因素在推动。具体该如何看待此次三大产品之间的功能整合?产品之间若想实现功能整合,又该满足什么条件呢?就在几天前的企业微信2022新品发布会上,企业微信联合腾讯文档、腾讯会......