一:简介

随着prometheus的使用人群逐渐扩大,官方定义的client exporter虽然能满足我们的大部分需求,但是很多监控还是需要我们自定义开发,以下内容就是基于腾讯云SDK,对腾讯云CLB的流量进行监控(吐槽一下:腾讯云自身的监控项真是少,而且连接数还拿不到数据)。

二:脚本

# coding:utf-8

import argparse
import json
import time

import prometheus_client
from flask import Response, Flask
from ping3 import ping
from prometheus_client import Gauge
from prometheus_client.core import CollectorRegistry
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.monitor.v20180724 import monitor_client, models

app = Flask(__name__)

# 定义一个仓库
REGISTRY = CollectorRegistry(auto_describe=False)

class STATUS():
    # 进流量
    Intraffic = Gauge('clb_intraffic', 'clb in traffic(Mbps)', ['project', 'vip'], registry=REGISTRY)

    # 出流量
    Outtraffic = Gauge('clb_outtraffic', 'clb out traffic(Mbps)', ['project', 'vip'], registry=REGISTRY)

    # 连接数
    # Connum = Gauge('clb_Connum', 'Current number of clb connections', ['project'], registry=REGISTRY)

    # clb 存活性
    ClbStatus = Gauge('clb_status', 'check if clb is available', ['project', 'vip'], registry=REGISTRY)

    def __init__(self):
        self.project = args.project
        self.city = args.city
        self.vip = args.vip
        self.now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time() - 300))

        self.cred = credential.Credential("腾讯云ID", "腾讯云Key")
        self.httpProfile = HttpProfile()
        self.httpProfile.endpoint = "monitor.tencentcloudapi.com"
        self.clientProfile = ClientProfile()
        self.clientProfile.httpProfile = self.httpProfile
        self.client = monitor_client.MonitorClient(self.cred, self.city, self.clientProfile)
        self.req = models.GetMonitorDataRequest()

    def get_info(self, metric):
        params = {"Namespace": "QCE/LB_PUBLIC",
                  "MetricName": metric,
                  "Period": 60,
                  "StartTime": self.now_time,
                  "EndTime": self.now_time,
                  "Instances": [
                      {"Dimensions": [
                          {"Name": "vip", "Value": self.vip}
                      ]
                      }
                  ]
                  }

        self.req.from_json_string(jsonStr=json.dumps(params))

        resp = self.client.GetMonitorData(self.req)

        return resp.to_json_string()

    def filter(self):
        self.Intraffic.labels(self.project, self.vip).set_function(
            lambda: json.loads(self.get_info("Intraffic"))['DataPoints'][0]['Values'][0])

        self.Outtraffic.labels(self.project, self.vip).set_function(
            lambda: json.loads(self.get_info("Outtraffic"))['DataPoints'][0]['Values'][0])

        # self.Outtraffic.labels(self.project).set_function(
        #    lambda: json.loads(self.get_info("Connum"))['DataPoints'][0]['Values'][0])

        self.ClbStatus.labels(self.project, self.vip).set_function(
            lambda: 0 if ping(self.vip, timeout=3) else 10)

@app.route("/metrics")
def Status():
    STATUS().filter()
    return Response(prometheus_client.generate_latest(registry=REGISTRY), mimetype="text/plain")

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.description = 'Get CLB traffic information'
    parser.add_argument("--project", help="web event name", required=True, type=str)
    parser.add_argument("--city", help="clb region", required=True, type=str)
    parser.add_argument("--vip", help="clb public ip", required=True, type=str)
    parser.add_argument("--port", help="flask port", required=True, type=int)
    args = parser.parse_args()

    app.run(host="0.0.0.0", port=args.port)

三:运行

/usr/bin/python36 /data/script/clb-exporter.py --project "项目名" --city "CLB所在地区" --vip "clb的VIP" --port 19992

Prometheus客户端开发:腾讯云CLB的更多相关文章

  1. 基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡

    概述: 最近对K8S非常感兴趣,同时对容器的管理等方面非常出色,是一款非常开源,强大的容器管理方案,最后经过1个月的本地实验,最终决定在腾讯云平台搭建属于我们的K8S集群管理平台~ 采购之后已经在本地 ...

  2. 腾讯云开发微信小程序使用体验

    主体内容 代码构成 数据:JSON 配置文件 结构:WXML 模版文件 样式:WXSS 页面样式 交互:JS 脚本逻辑文件 云开发 云数据库 云函数 云存储 WXML 是小程序框架设计的一套标签语言, ...

  3. 腾讯云TCA开发工程师认证考试

    1.关于云硬盘CBS的描述,错误的是哪一项?(B) A.云硬盘提供数据块级别的数据存储,采用三副本的分布式机制,为 CVM 提供数据可靠性保证 B.云硬盘可在同一可用区中自由挂载.卸载;挂载和卸载过程 ...

  4. 腾讯云负载均衡CLB的那些“独门利器”

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 腾讯人做产品一直是很贴近用户的需求的,腾讯云也不例外.负载均衡器作为公有云上的最基础的网络服务,几乎每家云厂商都会提供,虽然负载均衡 ...

  5. 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构

    1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...

  6. 腾讯云python网站开发环境搭建

    前段时间腾讯云做活动,于是就花了几百大洋买了三年的云服务,准备在上 面安装python web的开发环境,下面将安装过程做一个总结,希望能够帮助大家. 一.使用环境   使用的软件环境为:CentOS ...

  7. 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM

    项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...

  8. 如何在腾讯云上开发一款O2O书签?

    版权声明:本文由潘佳宇原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/187 来源:腾云阁 https://www.qclo ...

  9. 基于腾讯云的Centos6.2系统搭建Apache+Mysql+PHP开发环境

    搭建环境,我肯定需要先购买腾讯云服务器的哦! 然后,我们打开SecureCRT 7.3,这是一款可以连接Linux系统的客户端工具,使用的很方便快捷,要注意的是,若你是Linux系统的就要用22端口, ...

随机推荐

  1. e课表项目第二次冲刺周期第八天

    昨天完成了什么? 昨天,我们组商量讨论了二层界面的设计,添加课程所需要的信息大概有:课程名称.教室.任课教师.上课时间.类型(单周.双周.单双周)以及备注等等.然后,我们通过界面的UI设计,让我们软件 ...

  2. 一个“Hello World”理解JVM运行时数据区

    先上一张JVM体系结构图: 1)运行时数据区:经过编译生成的字节码文件(class文件),由class loader(类加载子系统)加载后交给执行引擎执行.在执行引擎执行的过程中产生的数据会存储在一块 ...

  3. SpringMVC流程源码分析及DispatcherServlet核心源码

    一.源码分析前还是需要一张流程图作为指导,如下: 二.简单介绍以及源码定位 DispatcherServlet其实就是一个HttpServlet,他是HttpServlet的子类,所以它和普通的Htt ...

  4. 使用Prometheus监控SpringBoot应用

    通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用.(本文以SpringBoot 2.1.9.REL ...

  5. Python开发【第三篇】数据类型

    1.数字类型 int 整数 1 2 3 float 浮点数 1.1 0.9 0.99 complex 复数 (2+0j) str 字符串 'hello world' "hello world ...

  6. SpringBoot学习(三)探究Springboot自动装配

    目录 什么是自动装配 何时自动装配 原理分析 注:以下展示的代码springboot的版本为2.0.3版.因源码过长,大家选择展开代码 ㄟ( ▔, ▔ )ㄏ 什么是自动装配 自动装配还是利用了Spri ...

  7. 身为一个 CS专业的留学生,你还在为堆积如山的编程assignment而发愁吗?

    每个人都渴望圆梦,当我们看见梦想在别人身上实现时,总在抱怨幸运之神为何不眷顾自己:其实更多的时候,梦想就在你身边的不远处,只要你迈出正确的步伐. 记得刚入大学时,意气风发.我以全班前几名的优异成绩考入 ...

  8. 对于Serializable的理解

    对于Serializable的理解 Last Edited: Apr 04, 2019 2:53 PM Tags: java 开始 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢 ...

  9. 怎样通过excel录入来批量造数据

    背景: 自动化测试除了验证系统功能外,还能够为测试人员根据测试要求造数据实现测试需要!但是一般的自动化测试,都是在编写脚本的时候,写死在程序里的.所以本文是为了在满足系统操作流程的基础上,根据测试的要 ...

  10. 2019 年容器生态统计报告发布 | 云原生生态周报 Vol. 26

    作者 | 酒祝.天元.元毅.心水.衷源 业界要闻 1.2019 年容器生态统计报告发布  据报告显示,Kubernetes 占据 77% 的容器编排产品份额,Docker 占据 79% 的容器引擎产品 ...