鸿鹄协助管理华为云与炎凰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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java IO,BIO、NIO、AIO

操作系统中的 I/O 以上是 Java 对操作系统的各种 IO 模型的封装,【文件的输入、输出】在文件处理时,其实依赖操作系统层面的 IO 操作实现的。【把磁盘的数据读到内存种】操作系统中的 IO 有 5 种: 阻塞、 非阻塞、【轮询】 异步、 IO复…

NLP From Scratch: 生成名称与字符级RNN

NLP From Scratch: 生成名称与字符级RNN 这是我们关于“NLP From Scratch”的三个教程中的第二个。 在<cite>第一个教程< / intermediate / char_rnn_classification_tutorial ></cite> 中&#xff0c;我们使用了 RNN 将名称分类为来源语言。 这次&#xff…

Java泛型

文章目录 1. 泛型入门1.1 定义简单泛型类1.2 泛型方法1.3 限定类型变量 2. 擦除和转换2.1 类型擦除 3. 类型通配符3.1 通配符上限3.2 通配符下限3.3 例子 4. java的Type4.1 UML总览 1. 泛型入门 泛型的英文名Generic&#xff0c;java5以后&#xff0c;引入参数化类型&#xff…

原型模式——对象的克隆

1、简介 1.1、概述 可以通过一个原型对象克隆出多个一模一样的对象&#xff0c;该模式被称为原型模式。 在使用原型模式时&#xff0c;需要首先创建一个原型对象&#xff0c;再通过复制这个原型对象来创建更多同类型的对象。 1.2、定义 原型模式&#xff08;Prototype Patt…

14.python设计模式【模板方法模式】

内容&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法某特定步骤。 角色&#xff1a; 抽象类&#xff08;AbstractClass&#xff09;&#xff1a;定义抽象的原子操作&#xff08;钩子…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架&#xff0c;超轻量级、高度提炼&#xff0c;一套API优雅支持UDP 、TCP 、WebSocket 三种协议&#xff0c;支持iOS、Android、H5、标准Java平台&#xff0c;服务端基于Netty编写。 工程开源地址是&am…

HTML5前端开发工程师的岗位职责说明(合集)

HTML5前端开发工程师的岗位职责说明1 职责 1、根据产品设计文档和视觉文件&#xff0c;利用HTML5相关技术开发移动平台的web前端页面; 2、基于HTML5.0标准进行页面制作&#xff0c;编写可复用的用户界面组件; 3、持续的优化前端体验和页面响应速度&#xff0c;并保证兼容性和…

【论文阅读】Feature Inference Attack on Shapley Values

摘要 研究背景 近年来&#xff0c;解释性机器学习逐渐成为一个热门的研究领域。解释性机器学习可以帮助我们理解机器学习模型是如何进行预测的&#xff0c;它可以提高模型的可信度和可解释性。Shapley值是一种解释机器学习模型预测结果的方法&#xff0c;它可以计算每个特征对…

了解Unity编辑器之组件篇Scripts(六)

Scripts&#xff1a;有Unity提供的一些脚本插件&#xff08;自己新建的脚本也会出现在里面&#xff09; 一、TMPro&#xff1a;有一些与文字显示和排版相关的脚本 1.TextContainer&#xff08;文本容器&#xff09;&#xff1a;TextContainer 是一个内容框&#xff0c;用于定…

AIGC人工智能辅助开发:提升效率、优化代码、实现智能编程

文章目录 1. 什么是AIGC人工智能辅助开发&#xff1f;2. AIGC的优势和应用场景2.1 提升开发效率2.2 优化代码质量2.3 实现智能编程 3. 如何用好AIGC人工智能辅助开发&#xff1f;3.1 选择合适的AIGC工具3.2 理解AIGC的工作原理3.3 逐步应用AIGC辅助开发3.4 主动参与AIGC的学习和…

AI工程师的崛起:填补AI革命中的空白

在一个拥有大约5000名语言学习模型&#xff08;LLM&#xff09;研究员&#xff0c;但大约有5000万软件工程师的世界中&#xff0c;供应限制决定了一种新型专业人才—AI工程师的迅猛增长。他们的崛起不仅仅是一种预测&#xff0c;更是对科技世界动态变化的必然反应。AI工程师作为…

【Linux】-进程概念及初始fork

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

使用Gradio构建生成式AI应用程序; Stability AI推出Stable Diffusion XL 1.0

&#x1f989; AI新闻 &#x1f680; Stability AI推出最先进的AI工具Stable Diffusion XL 1.0 摘要&#xff1a;Stability AI宣布推出Stable Diffusion XL 1.0&#xff0c;该版本是其迄今为止最先进的AI工具。Stable Diffusion XL 1.0提供更鲜艳、更准确的图片生成&#xff…

Python开发之手动实现一维线性插值

Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一&#xff1a;手动实现线性插值4.使用pandas的插值方法实现要求(推荐)5.案例二&#xff1a;对一组数据进行线性插值和SG滤波处理 前言&#xff1a;主要介绍手动实现一维线性插值以及pandas里面的in…

flink采用thrift读取tablets一个天坑

原先的配置 [INFO] StarRocksSourceBeReader [open Scan params.mem_limit 8589934592 B] [INFO] StarRocksSourceBeReader [open Scan params.query-timeout-s 600 s] [INFO] StarRocksSourceBeReader [open Scan params.keep-alive-min 100 min] [INFO] StarRocksSourceBeRea…

ORCA优化器浅析——QueryToDXL(CDXLLogical+CDXLScalar)主流程

Orca是Pivotal数据管理产品的新查询优化器&#xff0c;包括GPDB和HAWQ。Orca是一个基于Cascades操作时序框架的现代自上而下的查询优化器。虽然许多Cascades优化器与其主机系统紧密耦合&#xff0c;但Orca的一个独特功能是它能够作为独立的优化器在数据库系统之外运行。这种能力…

51:电机(ULN2003D)

1:介绍 我们51单片机使用的是直流电机 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转…

flutter:角标

角标应该非常常见了&#xff0c;以小说app为例&#xff0c;通常会在小说封面的右上角上显示当前未读的章数。 badges 简介 Flutter的badges库是一个用于创建徽章组件的开源库。它提供了简单易用的API&#xff0c;使开发者可以轻松地在Flutter应用程序中添加徽章效果。 官方文…

IDEA 使用 maven 搭建 spring mvc

1. 创建项目 1.1 创建成功之后配置 Spring MVC 1.2 勾选 Spring MVC 2.更改配置文件 2.1 更改web.xml配置 更改为 <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2.2 dispat…

linux查看服务器系统版本命令

有时我们需要在linux服务器上安装DB、Middleware等&#xff0c;为了保证兼容性&#xff0c;我们需要知晓被提供的linux服务器版本是否满足需求&#xff0c;下面就说一说linux查看服务器系统版本命令。 1.cat /etc/redhat-release 适用于&#xff1a;rhel/centos等 2.cat /etc…