当前位置: 首页 > news >正文

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求

在炎凰日常的开发中,对于服务器上的需求,我们基本都是采用云服务。目前我们主要选择的是华为云,华为云的云主机比较稳定,提供的云主机配置也比较多样,非常适合对于不同场景硬件配置的需求,而且在技术支持服务上,响应速度也非常快。

一般来说,我们主要会采购一些包年的云主机,来满足日常的研发和测试。但是同事们也会碰到一些adhoc的需求,比如:对于用户碰到的问题,我们需要在一个实验环境复现它们,我们会临时开几台云主机来模拟客户的环境。

随着炎凰数据的员工越来越多,这样临时创建机器的需求也越来越多。我们发现,华为云的API在功能上非常完整,且华为云的API Explorer是个非常方便的Debug和测试的工具。于是我们通过API快速地开发了Ichiban,这是一个内部创建云主机的工具。

炎凰Ichiban简介

为什么叫Ichiban?因为炎凰有啤酒文化,公司的冰箱中除了饮料,更放满了各种各样的精酿啤酒,我们每周五都会有技术分享会,同时也是一周一度的Happy hour,啤酒+食物无限量供应。所以我觉得Ichiban+烤串是我们炎凰程序员的夏天必备,随时欢迎来炎凰喝啤酒~

首先,Ichiban的登录界面是下图这样。因为我们使用Microsoft Azure AD来管理我们员工的账号,所以我们调用微软的API来进行登录,并记录和管理用户信息。

图片

登录后,就可以看到创建的云主机信息。

图片

从这一层开始,都调用华为云的API来实现,功能上包括了:

创建云主机

云主机开机、关机、重启、远程登录和删除

延长云主机租期

增加硬盘等等

Ichiban 的技术栈

我们使用的是华为云的Python SDK,这里不得不再次称赞华为云的API Explorer,是个能够提供快速开发功能的工具,能够根据你键入的值自动生成代码。

图片

之后也可以使用华为云提供的‘SDK代码示例调试’中调试代码,而且是我们都熟悉的VS Code的风格。截个图,自己体会,常使用VS Code开发的朋友是不是很熟悉?

图片

因为我们使用Python作为开发语言,所以用了 Flask + Gunicorn + Supervisor 来托管Web服务。

Flask 因为本身就是Python编写,所以对Python的契合度就很高,而且是一个轻量级的Web应用框架。

Gunicorn 是作为Flask的WSGI HTTP服务器。它所在的位置通常是在反向代理(如 Nginx)或者负载均衡(如 AWS ELB)和一个web应用(比如 Django 或者 Flask)之间。

这里只要把Flask 的5000端口托管起来即可,配置如下:

图片

Supervisor 的服务进程为supervisord,主要用来在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件。可以在一个配置文件中配置相关参数,包括Supervisord自身的状态。在/etc/supervisord.d/xxxxx.ini 创建子进程,其管理的各个子进程的相关属性。配置文件一般位于/etc/supervisord.conf。

例如:子进程配置/etc/supervisord.d/ichiban.ini

图片

Supervisor 的客户端称为supervisorctl,它提供了一个类shell的接口(即命令行)来使用supervisord服务端提供的功能。通过supervisorctl,用户可以连接到supervisord服务器进程,获得服务器进程控制的子进程的状态,启动和停止子进程,获得正在运行的进程列表。

客户端通过Unix域套接字或者TCP套接字与服务端进行通信,服务器端具有身份凭证认证机制,可以有效提升安全性。当客户端和服务器位于同一台机器上时,客户端与服务器共用同一个配置文件/etc/supervisord.conf,通过不同标签来区分两者的配置。

重启进程时可以运行:

图片

鸿鹄收集来华为云的数据

问题来了。。。

Ichiban的代码我们写好了,功能实现了,解决了开发者使用云主机的问题,但是作为ichiban的管理者,我也碰到了问题,我该如何管理?我如何知道我每月消费了多少费用,以及详细的使用情况?

设想下随着公司同事越来越多,ichiban的使用量必然会增长,费用也会增长。老板问能不能每月或者一个季度对Ichiban做个预算,这时候没有数据的支撑,我们很难拿出数字来做下一次的预算。

这时鸿鹄的价值就凸显出来了,鸿鹄能够帮助我们通过日志文件,非常简单而又清晰地,统计出云主机的开机时间、云主机的数量、进而估算出费用。

Ichiban的日志是调用华为云的API生成的JSON格式的日志文件,然后通过fluentd发送到鸿鹄的平台。(也可以使用Vector作为数据传输工具)。本例中,log的数据类型为JSON,其实,大家可以根据自己的实际情况选择不同的数据类型。鸿鹄不挑数据类型,有什么数据,就接什么类型的数据,就Parse什么类型的数据。

鸿鹄端

加了台便宜的云主机,按照文档(https://yanhuang.yuque.com/books/share/b1b27937-e331-40fd-bce1-bd521af4e662/vvv9si)一顿操作,安装好了鸿鹄。那只蓝色鸿鹄的logo就出现了。

在鸿鹄中创建HEI(通过HTTP采集数据)

图片

颁发Ichiban的API Token

图片

Ichiban端

安装Fluentd

图片

配置fluentd的监控数据

图片

修改以下配置

图片

可能需要配置fluentd service的root权限,视监控的文件权限而定

图片

收到数据了,哟吼。。。

图片

华为云使用状况的dashboard展示

通过简单的SQL query,我们就可以实时的统计出,Ichiban的使用情况。

图片

我这里也节选了一些配置的使用情况

图片

数据展示我看到了什么?

华为云使用情况。作为华为云的管理者,我能清晰地了解一段时间中,华为云Adhoc的需求有多少,比如用了多少台云主机,分别用了多少时间。

使用者。从统计上可以找到谁是重度使用者,从使用者中了解需求,从而优化。

费用统计。如上图,我们可以清楚地知道我们每个月华为云的费用组成。不过实话实说,通过临时创建机器这种策略,我们减少了很多不必要的费用。

写在最后

华为云的API和相关工具做的很好,功能也很快就能够实现。但是对于管理者,费用上的管理和运维工作也存在着挑战。不过有了鸿鹄,这一切就变的简单了很多,只要有足够的日志,加上简单的SQL语句,让管理者头疼的问题就迎刃而解。

另外通过实时数据的分析,也能快速找到一些问题,比如我们可以对云主机的开机时间加上告警,假设:张三的一个云主机开了很长一段时间,有可能项目上的需要,也有可能某某忘记关闭了。那通过策略,发出告警(Email或者Webook),对张三进行通知,减少不必要的费用。

我们还有很多东西要做

展望下,我们Ichiban的后续开发还会继续做,把Ichiban、华为云和我们的CICD串联在了一起,通过华为云的API创建出临时的git runner、test runner 等,再通过鸿鹄监控CI/CD,好处:

1、鸿鹄能够帮助troubleshooting CI/CD的问题。

2、将CI/CD的运行状况放在仪表盘中。

3、减少不必要的费用,比如,我们可能某个测试要跑8个小时,有可能在某一小时是Case就中断了,鸿鹄能够提醒我们,我们可以通过手动或者trigger 脚本,对已经没有工作任务的runner进行删除。

一旦数据接入到鸿鹄,数据可玩性的大门就打开了,只要通过简单SQL,就可以发现很多有趣的东西,甚至是你从来没想到过的东西,可能是一个强大功能的启发,也有可能是发现漏洞的检测器。几行SQL就可以把你的数据弄得明明白白。

enjoy 鸿鹄~

大数至简

参考

华为云API :

https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=ECS&api=NovaCreateServers

Supervisor的文档:

https://zhuanlan.zhihu.com/p/424346764

炎凰数据:

http://www.yanhuangdata.com/

相关文章:

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求 在炎凰日常的开发中,对于服务器上的需求,我们基本都是采用云服务。目前我们主要选择的是华为云,华为云的云主机比较稳定,提供的云主机配置也比较多样,非常适合对于不同场景硬件配置的需求&#xff…...

Vite创建Vue+TS项目引入文件路径报错

使用vite搭建vue3脚手架的时候,发现main.ts中引入App.vue编辑器会报错,但是不影响代码运行。 报错信息:TS2307: Cannot find module ‘./App.vue’ or its corresponding type declarations. 翻译过来是找不到模块或者相关的声明类型&#…...

计算机里基本硬件的组成以及硬件协同

文章目录 冯诺依曼体系输入设备输出设备存储器运算器控制器协同工作的流程 冯诺依曼体系 世界上第一台通用计算机,ENIAC,于1946年诞生于美国一所大学。 ENIAC研发的前期,需要工作人员根据提前设计好的指令手动接线,以这种方式输入…...

2023软件设计师中级备考经验分享(文中有资料链接分享)

先摊结论吧,软考中级设计师备考只是备考半个月(期间还摆烂了几天),然而成绩如下: 我自己都没想到会这么好的成绩。。。 上午题:推荐把软考通APP里的历年真题刷3-4遍,直接刷真题,然后…...

Windows 10 中无法最大化任务栏中的程序

方法1:仅选择选项 PC 屏幕 如果您使用双显示器,有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下,因此您看不到任何选项。因此,请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…...

【iOS】KVOKVC原理

1 KVO 键值监听 1.1 KVO简介 KVO的全称是Key-Value Observing,俗称"键值监听",可以用于监听摸个对象属性值得改变。 KVO一般通过以下三个步骤使用: // 1. 添加监听 [self.student1 addObserver:self forKeyPath:"age"…...

当机器人变硬核:探索深度学习中的时间序列预测

收藏自:Wed, 15 Sep 2021 10:32:56 UTC 摘要:时间序列预测是机器学习和深度学习领域的一个重要应用,它可以用于预测未来趋势、分析数据模式和做出决策。本文将介绍一些基本概念和常用方法,并结合具体的案例,展示如何使…...

C# Solidworks二次开发:自动创建虚拟零件及使用注意事项

今天要讲的是关于在solidworks中如何自动创建虚拟零件的功能,也就是solidworks中插入新零件这个功能。 实现这个功能需要使用的API如下所示: InsertNewVirtualPart(swFaceOrPlane1, out swcomp2); 其中这个方法中使…...

vim工具 windows系统使用

vim常用命令: 编辑–>输入: i: 在当前光标所在字符的前面,转为输入模式; 粘贴命令 p p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所…...

Tesseract开源的OCR工具及python pytesseract安装使用

一 、介绍 Tesseract是一款由Google赞助的开源OCR。 pytesseract是python包装器,它为可执行文件提供了pythonic API。 Tesseract 已经有 30 年历史,开始它是惠普实验室的一款专利软件,在2005年后由Google接手并进一步开发和完善。Tesseract支…...

【数理知识】自由度 degree of freedom 及自由度的计算方法

放在最前的一句话:自由度是一个存在于两个学科中的概念,一个是存在于统计学中的自由度,另一个是存在于物理学中的自由度。而我本人需要的是研究物理学中的自由度概念,同时本笔记全篇也是在了解物理学中的自由度。 文章目录 自由度…...

苍穹外卖day09——历史订单模块(用户端)+订单管理模块(管理端)

查询历史订单——需求分析与设计 产品原型 业务规则 分页查询历史订单 可以根据订单状态查询 展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细(商品名称、图片) 接口设计 查询历史订单——代码开…...

正则表达式 —— Grep

文本处理三剑客:Grep、Sed、Awk 这三个工具都是基于对文本的内容进行增删改查的操作,此篇着重介绍grep与正则表达式的应用,以及扩展正则表达式。 正则表达式 什么是正则表达式? 它是由一类特殊字符以及文本字符所编写的一种模式…...

STC12C5A系列单片机片内看门狗的应用

wdt.c #include "wdt.h"void wdt_init(void) {WDT_CONTR 0x24; // 0010 0100 - 1.1377s }void wdt_feed(void) {WDT_CONTR | 0x10; // 喂狗 }wdt.h #ifndef _WDT_H_ #define _WDT_H_#include "stc12c5a60s2.h"// 函数声明 extern void wdt_init(void); …...

C语言指针详解

目录 指针是什么? 指针和指针类型 指针-整数 指针的解引用 野指针 野指针成因 如何规避野指针 指针运算 指针- 整数 指针-指针 指针的关系运算 指针和数组 二级指针 指针数组 指针数组 模拟二维数组 指针是什么? 指针理解的2个要点: 1. 指针是内存中一个…...

RTPS规范v2.5(中文版)

实时发布订阅协议 DDS互操作性有线协议 (DDSI-RTPS) 技术规范 V2.5 (2022-04-01正式发布) https://www.omg.org/spec/DDSI-RTPS/2.5/PDF   目 录 1 范围 8 2 一致性 8 3 规范性参考文献 8 4 术语和定义 9 5 标识 …...

LeetCode102.Binary-Tree-Level-Order-Traversal<二叉树的层序遍历>

题目: 思路: 写过N叉树的层序遍历,(8条消息) LeetCode429.N-Ary-Tree-Level-Order-Traversal<N 叉树的层序遍历>_Eminste的博客-CSDN博客 使用栈保存每一层的结点。然后每次当前层结束。将这一层的值添加进去res中。…...

yolov8系列[五]-项目实战-yolov8模型无人机检测

yolov8系列[五]-项目实战-yolov8模型无人机检测 项目介绍项目展示功能简介代码结构如何启动 开发者模式1. 安装依赖环境2. 启动程序 源代码下载其他 项目介绍 无人机识别项目,无人机搭载nvidia jetson边缘计算板子,进行实时识别。使用yolov8算法,训练了识别无人机的…...

Redis 笔记,基本数据类型、持久化、主从、集群等等问题

标题 😀😀😀创作不易,各位看官点赞收藏. 文章目录 标题Redis 基础笔记1、安装及环境搭建2、Redis 数据类型2.1、String2.2、List2.3、Hash2.4、Set2.5、Zset2.6、BitMap2.7、HyperLogLog2.8、Geospatial2.9、Stream 3、Redis 持久…...

JDK,JRE,JVM三者的关系

JDK(全称 Java Development Kit),Java开发工具包,能独立创建、编译、运行程序。 JDK JRE java开发工具(javac.exe/java.exe/jar.exe) JRE(全称 Java Runtime Environment),能运行…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...

es6+和css3新增的特性有哪些

一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...