Prometheus客户端开发:腾讯云CLB
一:简介
随着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的更多相关文章
- 基于腾讯云CLB实现K8S v1.10.1集群高可用+负载均衡
概述: 最近对K8S非常感兴趣,同时对容器的管理等方面非常出色,是一款非常开源,强大的容器管理方案,最后经过1个月的本地实验,最终决定在腾讯云平台搭建属于我们的K8S集群管理平台~ 采购之后已经在本地 ...
- 腾讯云开发微信小程序使用体验
主体内容 代码构成 数据:JSON 配置文件 结构:WXML 模版文件 样式:WXSS 页面样式 交互:JS 脚本逻辑文件 云开发 云数据库 云函数 云存储 WXML 是小程序框架设计的一套标签语言, ...
- 腾讯云TCA开发工程师认证考试
1.关于云硬盘CBS的描述,错误的是哪一项?(B) A.云硬盘提供数据块级别的数据存储,采用三副本的分布式机制,为 CVM 提供数据可靠性保证 B.云硬盘可在同一可用区中自由挂载.卸载;挂载和卸载过程 ...
- 腾讯云负载均衡CLB的那些“独门利器”
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 腾讯人做产品一直是很贴近用户的需求的,腾讯云也不例外.负载均衡器作为公有云上的最基础的网络服务,几乎每家云厂商都会提供,虽然负载均衡 ...
- 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构
1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...
- 腾讯云python网站开发环境搭建
前段时间腾讯云做活动,于是就花了几百大洋买了三年的云服务,准备在上 面安装python web的开发环境,下面将安装过程做一个总结,希望能够帮助大家. 一.使用环境 使用的软件环境为:CentOS ...
- 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM
项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...
- 如何在腾讯云上开发一款O2O书签?
版权声明:本文由潘佳宇原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/187 来源:腾云阁 https://www.qclo ...
- 基于腾讯云的Centos6.2系统搭建Apache+Mysql+PHP开发环境
搭建环境,我肯定需要先购买腾讯云服务器的哦! 然后,我们打开SecureCRT 7.3,这是一款可以连接Linux系统的客户端工具,使用的很方便快捷,要注意的是,若你是Linux系统的就要用22端口, ...
随机推荐
- .net core运用application/x-www-form-urlencoded发起post请求
通常情况下都是使用 application/json发起post请求,但是有的.net 接口只接收 application/x-www-form-urlencoded 例如: { name:" ...
- SD卡学习笔记
最近调试了SD卡,遇到了一些小问题,记录一下,分享一下. 1. SD卡 卡槽旁边的一个小开关 我们平时见过的SD卡都是小的SD卡,可以放在手机上的.现在大多数的开发板上也是小的SD卡的卡槽,插入 ...
- Django+小程序技术打造微信小程序助手 ✌✌
Django+小程序技术打造微信小程序助手 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从零到一的完整项目开发实战过程,项目开发聚焦重要知识点,先原理后实战 ...
- python-犯傻合集
1.题目: 基于文件实现用户登录程序,提示用户输入用户名和密码,检查用户名是否存在,以及用户名密码是否正确 保存密码的文件叫user.txt,内容: | 作分隔符 阶段一: 自己第一次的答案: ...
- Loj10222佳佳的 Fibonacci
Description Analysis 10分:暴力+把m和n输反,你将获得10分的好成绩(Just like me.) 70分:暴力+把m和n输对,你将获得70分的好成绩 100分:矩阵加速 设 ...
- C++简单程序设计
计算机的最基本功能是数据处理 l C++支持的基本数据类型: n 整数.实数.字符.布尔数据 l C++支持的基本运算 n 算术运算.关系运算.逻辑运算.位运算.逗号运算.条件运算 程序要能够 ...
- 模块的 __name__
模块的 __name__ 每个模块都有一个名称,而模块中的语句可以找到它们所处的模块的名称.这对于确定模块是独立运行的还是被导入进来运行的这一特定目的来说大为有用.正如先前所提到的,当模块第一次被导入 ...
- 阿里云 RDS 数据库又发 CPU 近 100% 的“芯脏病”
最近云界发生了2件事,一件是大事,一件是小事,大事是阿里云与微软合作推出了开放应用模型 Open Application Model(OAM),小事是由于微软 SQL Server 在阿里云上水土不服 ...
- 零基础转行web前端,如何高效的去学习web前端
web前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,但学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而且互联网时代不 ...
- js中submit和button的区别
今天写一个js验证 遇到点小坑 记录一下 button-普通按钮,submit-提交按钮. submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了,submit和bu ...