简单说明

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

这里我们使用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. nginx 配置go服务反向代理

    nginx 配置 详细请看Nginx 极简教程 server { listen 80; server_name localhost; #charset koi8-r; # nginx访问活动日志 ac ...

  2. markdown设置目录、锚点

    目录 在编辑时正确使用标题,在段首输入[toc]即可 锚点 创建到命名锚记的链接的过程分为两步: 首先是建立一个跳转的连接: [说明文字](#jump) 然后标记要跳转到什么位置,注意id要与之前(# ...

  3. ORACLE数据挖掘之 MSET-SPRT

    虽然是熟悉的Oracle数据库,但关于机器学习.数据挖掘这方面的知识笔者起初也是不了解的,文中MSET相关设置来源于同事提供的sample,在测试过程中边查资料边学习吸收,也因此看到了别样的Oracl ...

  4. 使用命令行控制wireshark对抓包文件进行针对性处理的命令总结

    近日,工作中有开发对抓包文件进行针对性过滤的小程序的需求,兜兜转转踩了很多坑后还是绕回了wireshark. 作为最出名的开源软件之一,wireshark也具有使用命令行进行操作的功能,这就是我们今天 ...

  5. Redis 原理 - String

    String 数据结构 首先我来看下, Redis 中 String 的数据结构: 我们称之为 SDS (Simple Dynamic String) 简单动态字符串 struct sdshdr { ...

  6. BUUCTF---rsa2

    题目 N = 101991809777553253470276751399264740131157682329252673501792154507006158434432009141995367241 ...

  7. mosquitto的基本参数使用

    当使用mosquitto_pub命令时,可以使用多个参数来配置发布行为.以下是mosquitto_pub命令的一些常见参数及其详细说明: -h, --host <hostname>:指定连 ...

  8. MCP技术:渗透测试从自动化到智能化

    在人工智能快速发展的今天,如何让AI更高效地与现实世界交互,成为许多开发者和研究者关注的焦点.MCP(Model Context Protocol)技术作为一种创新的工具集成方案,为AI提供了一种&q ...

  9. win11的go安装

    背靠国外各大金主的go语言,在各种推动下,可谓是新的弄潮儿,但国内虽然各种推销,但从安装到开发再到维护,资料都少之又少,可能被垄断了解释权吧. 因此下面的也只是一个记录而已,是一次仅限于本人本机本阶段 ...

  10. 深入理解Java虚拟机-JAVA内存模型与线程

    Java内存模型(JMM) JMM 的核心概念 主内存与工作内存: 主内存(Main Memory)是所有线程共享的内存区域,存放着所有变量的值 每个线程都有自己的 工作内存(Working Memo ...