简单说明

在镜像仓库的维护中,有时我们需要根据镜像仓库的使用情况进行及时的告警和扩容,避免镜像仓库容量满载时再进行扩容,这样会造成业务的阻塞。

这里我们使用Python简单写一个实现获取镜像仓库指定项目(也可以配置多个project)的容量使用情况,并且当容量达到设置的阈值,进行企业微信告警。

代码

$ cat alert_harbor_project.py
# -*- coding: utf-8 -*-
# author: yuhaohao
# describe:
# 获取指定镜像仓库的容量配额以及已使用容量
# 当容量利用率或者使用空间达到预定的阈值时, 进行企业微信的告警
import requests
from requests.auth import HTTPBasicAuth
import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def send_wechat_alert(webhook_url, message):
headers = {"Content-Type": "application/json"}
payload = {
"msgtype": "markdown",
"markdown": {
"content": message
}
}
try:
response = requests.post(webhook_url, json=payload, headers=headers)
if response.status_code == 200:
print("告警发送成功")
else:
print(f"告警发送失败: {response.text}")
except Exception as e:
print(f"发送告警异常: {e}") if __name__ == '__main__':
# 配置项
HARBOR_URL = "https://registry.test.com" # 替换成你实际的地址
PROJECT_NAME = "test"
USERNAME = "test" # 替换成实际用户名
PASSWORD = "test" # 替换成实际密码
WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=a18hjhhbjhjhjyuyuhu-a452-8b11b7e677b4" # 替换为企业微信的key # 请求 headers
headers = {
"Accept": "application/json"
} # API: 获取项目信息(包括 quota 使用情况)
url = f"{HARBOR_URL}/api/v2.0/projects/{PROJECT_NAME}/summary" response = requests.get(url, headers=headers, auth=HTTPBasicAuth(USERNAME, PASSWORD), verify=False) if response.status_code == 200:
data = response.json()
quota = data.get("quota", {}).get("hard", {}).get("storage")
used = data.get("quota", {}).get("used", {}).get("storage")
if quota and used:
used_gb = round(used / (1024 ** 3), 2)
quota_gb = round(quota / (1024 ** 3), 2)
availd_gb = round((quota_gb - used_gb), 2)
used_rate = used_gb / quota_gb
print(f"项目 {PROJECT_NAME} 已使用存储: {used_gb} GiB / {quota_gb} GiB")
if used_gb / quota_gb > 0.95 or availd_gb < 400:
message = (
f"### <font color=\"red\">**️ 镜像仓库容量告警**</font>\n"
f"> **Project名称:** {PROJECT_NAME}\n"
f"> **总容量:** {quota_gb}GB\n"
f"> **已用容量:** {used_gb}GB\n"
f"> **剩余容量:** {availd_gb}GB\n"
f"> **容量使用率:** {used_rate:.2%}\n"
f"> **请及时清理镜像或进行扩容!!!**"
)
send_wechat_alert(WEBHOOK_URL, message)
else:
print("未获取到有效的存储配额信息")
else:
print(f"获取失败,状态码: {response.status_code}, 响应: {response.text}")

获取Harbor镜像仓库指定Project的容量使用并进行企业微信告警的更多相关文章

  1. harbor镜像仓库-02-https访问配置

    harbor镜像仓库-02-https访问配置 harbordockerhttps harbor搭建部署参考上一章节 harbor镜像仓库-01-搭建部署 Harbor默认使用http,给harbor ...

  2. harbor镜像仓库-01-搭建部署

    harbor镜像仓库-01-搭建部署 dockerregistryharbor安装部署docker-compose harbor的https配置参考另一章节harbor镜像仓库-02-https访问配 ...

  3. Harbor镜像仓库

    Harbor镜像仓库 作者 刘畅 时间 2020-7-11 微信 目录 1.下载离线安装包 1 2.安装docker 1 3.安装docker-compose 2 4.自签TLS证书 2 4.1.创建 ...

  4. harbor镜像仓库-https访问配置

    1. 证书的生成 在测试或开发环境中,您可以选择使用自签名证书,而不是来自受信任的第三方CA的证书.以下内容将向您展示如何创建自己的CA,并使用您的CA签署服务器证书和客户端证书.   1.1 生成c ...

  5. CentOS部署Harbor镜像仓库

    关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全.标识.管理等方面做了增强,更适合企业使用: 官方网站:https: ...

  6. 企业级 Harbor 镜像仓库

    Harbor是由VMWare公司开源的容器镜像仓库.事实上,Harbor是在Docker Registry上进行了相应 的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基 ...

  7. File类_常见的方法(获取系统根目录与指定目录的容量)

    获取系统根目录 import java.io.File; public class File_ListRoots { public static void main(String[] args) { ...

  8. docker登录没有配置https的harbor镜像仓库

    已经搭建harbor 仓库 ,域名  172.16.1.99 出现问题: 客户端尝试登录 仓库 [root@localhost docker]# docker login 172.16.1.99:80 ...

  9. Docker镜像仓库Harbor搭建及配置

    一.harbor简介 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distribut ...

  10. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

随机推荐

  1. jquery的radio的change事件

    一.用的jquery的radio的change事件:当元素的值发生改变时,会发生 change 事件,radio选择不同name值选项的时候恰巧是值发生改变 表单单选框 <input type= ...

  2. 【Python自动化测试环境管理】tox

    1. tox基本介绍 1.1 tox是什么? tox 是一个用于管理 Python 项目的自动化测试和环境管理工具.它的主要功能是创建虚拟环境并运行项目的测试套件,tox能够让我们在同一个Host上自 ...

  3. 理解Rust引用及其生命周期标识(下)

    在上一篇文章中,我们围绕 "引用必然存在来源" 这一基本概念,介绍了Rust中引用之间的关系,以及生命周期标记的实际意义.我们首先从最简单的单参数方法入手,通过示例说明了返回引用与 ...

  4. Crealens.ai 免费体验GPT-4o 生图+吉卜力风格化

    自己的一张日常照片,能在几秒内变身为一幅充满童话感的吉卜力风插画?90%的人不知道,如今只需一句话,就能在 ChatGPT 里实现"AI 生图"--这就是 GPT-4o 生图功能的 ...

  5. 痞子衡嵌入式:恩智浦i.MX RT1xxx上特色外设XBAR那些事(1)- 初识

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列上的XBAR外设. 得益于 Arm Cortex-M 内核的普及,现如今 MCU 厂商遍地开花,只要能取 ...

  6. BuildAssetBundleOption.DisableWriteTypeTree和粒度问题

  7. MySQL 中 AUTO_INCREMENT 列达到最大值时会发生什么?

    在MySQL中,AUTO_INCREMENT列用于自动生成唯一的数字值,通常用于主键.当AUTO_INCREMENT列达到最大值时,会发生以下几种情况,具体取决于列的数据类型以及MySQL的配置. 对 ...

  8. cglib 代理类 自己equals自己 返回false

    简单的cglib代理示例 普通的 Java 类 package cglib; public class UserService { public void saveUser(String userna ...

  9. 定时任务Cron表达式工具类Cron Util

    依赖 cron-utils的github地址:https://github.com/jmrozanec/cron-utils <dependency> <groupId>com ...

  10. GPFS并行文件系统部署实践

    环境 ubuntu22.04 试用版下载链接 https://www.ibm.com/cn-zh/products/storage-scale 我的版本:Storage_Scale_Developer ...