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

news2024/12/23 18:10:47

炎凰对华为云的需求

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

一般来说,我们主要会采购一些包年的云主机,来满足日常的研发和测试。但是同事们也会碰到一些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.coloradmin.cn/o/785983.html

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

相关文章

【前端笔记】本地运行cli项目报错ERR_OSSL_EVP_UNSUPPORTED

报错原因 Node版本>17.x,本地npm run 起项目后会发现终端报错,具体有以下2块关键信息: Error: error:0308010C:digital envelope routines::unsupported和 opensslErrorStack: [ error:03000086:digital envelope routines::initializa…

Jmeter配置起来太繁琐?试试RunnerGo

在用jmeter做性能测试时想看完整一点的测试报告,想配置阶梯模式来压测,想配置不同的接口并发这些都需要安装插件并且影响机器性能,想做自动化测试还得放到jenkins,这些配置起来太繁琐。今天给大家推荐一款测试平台RunnerGo&#x…

可解释的 AI:在transformer中可视化注意力

Visualizing Attention in Transformers | Generative AI (medium.com) 一、说明 在本文中,我们将探讨可视化变压器架构核心区别特征的最流行的工具之一:注意力机制。继续阅读以了解有关BertViz的更多信息,以及如何将此注意力可视化工具整合到…

B074-详情富文本 服务上下架 高级查询 分页 查看详情

目录 服务详情修改优化ProductServiceImplProduct.vue 详情数据-富文本-vue-quill-editor使用步骤测试图片的访问方式富文本集成fastDfs 后台服务上下架(批量)前端开始后端完成ProductControllerProductServiceImplProductMapper 前台展示上架前端开始后…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板3

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

Jmeter 如何并发执行 Python 脚本

目录 1. 前言 2. Python 实现文件上传 3. Jmeter 并发执行 4. 最后 1. 前言 JMeter 是一个开源性能测试工具,它可以帮助我们更轻松地执行性能测试,并使测试结果更加可靠。Python 是一种广泛使用的编程语言,它可以用于开发各种软件和应用…

ResultMap结果集映射

为了解决属性名和字段名不相同的问题 example&#xff1a;MyBatis-CRUD: Mybatis做增删改查 使用resultmap前查询password时为空&#xff0c;因为属性名与字段名不相同 做结果集映射&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!…

自己动手写一个编译器

一、概述 本文将参考《自己动手写编译器这本书》&#xff0c;自己写一个编译器&#xff0c;但是因为本人水平有限。文章中比较晦涩的内容&#xff0c;自己也没弄明白。因此&#xff0c;本文仅在实践层跑一遍流程。具体的原理还需要大家自行探索。 TinyC 编译器可将 TinyC 源程序…

JavaScript 判断先后两个数组增加和减少的元素

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

错误解决:Failed to create Spark client for Spark session

错误解决&#xff1a;Failed to create Spark client for Spark session "Failed to create Spark client for Spark session"的错误通常表示无法为Spark会话创建Spark客户端。这可能是由于以下一些常见问题导致的&#xff1a; Spark配置错误&#xff1a;请检查Spar…

SAMStable-Diffusion集成进化!分割、生成一切!AI绘画新玩法

自SAM「分割一切」模型推出之后&#xff0c;二创潮就开始了&#xff0c;有想法有行动&#xff01;飞桨AI Studio开发者会唱歌的炼丹师就创作出SAM进化版&#xff0c;将SAM、Stable Diffusion集成&#xff0c;实现「分割」、「生成」能力二合一&#xff0c;并部署为应用&#xf…

vue项目入口和个文件之间的关系

vue项目入口和个文件之间的关系 1、代码的执行顺序和引入关系 1、代码的执行顺序和引入关系

新星计划打卡学习:VUE3引入element-plus

目录 1、安装element-plus 2、安装按需导入插件 3、修改配置文件 4、添加页面内容 5、保存并重启项目 1、安装element-plus 官网说要想使用element-plus需要先进行安装&#xff0c;并给出了三种安装方式&#xff0c;我选择了第三种。 报错了&#xff1a; 解决的办法&…

PostgreSQL 设置时区,时间/日期函数汇总

文章目录 前言查看时区修改时区时间/日期操作符和函数时间/日期操作符日期/时间函数&#xff1a;extract&#xff0c;date_part函数支持的field 数据类型格式化函数用于日期/时间格式化的模式&#xff1a; 扩展 前言 本文基于 PostgreSQL 12.6 版本&#xff0c;不同版本的函数…

人才公寓水电表改造解决方案

随着社会经济的不断发展&#xff0c;人才公寓作为吸引和留住人才的重要配套设施&#xff0c;其水电表改造问题越来越受到人们的关注。本文将从以下几个方面探讨人才公寓水电表改造解决方案。 一、现状分析 目前&#xff0c;人才公寓的水电表普遍存在以下几个问题&#xff1a; …

Jenkins从配置到实战(二) - Jenkins如何在多台机器上自动化构建

前言 jenkins除了支持在本机上进行项目构建&#xff0c;还可以将构建任务分发到其他远程服务器上去执行&#xff0c;可以实现在不同平台和架构的机器上来完成项目的自动化构建任务&#xff0c;也能减轻jenkins服务器的压力。本文章就主要介绍下此流程。 准备工作 准备两台机…

2.02 分类功能实现后台实现

三级分类效果图&#xff1a; 一 实现一级分类查询 步骤1&#xff1a;使用逆向工程生成创建实体类和对应的mapper 实体类&#xff1a;Categorymapper: CategoryMapper和CategoryMapper.xml步骤2&#xff1a; import com.one.pojo.Category; import java.util.List; public int…

视频讲解Codeforces Round 887 (Div. 2)(A--C)

文章目录 A. Desorting1、板书2、代码 B. Fibonaccharsis1、板书2、代码 C. Ntarsis Set1、板书2、代码 视频讲解Codeforces Round 887 (Div. 2)&#xff08;A–C&#xff09; A. Desorting 1、板书 2、代码 #include<bits/stdc.h> #define endl \n #define INF 0x3f…

Linux6.13 Docker LNMP项目搭建

文章目录 计算机系统5G云计算第四章 LINUX Docker LNMP项目搭建一、项目环境1.环境描述2.容器ip地址规划3.任务需求 二、部署过程1.部署构建 nginx 镜像2.部署构建 mysql 镜像3.部署构建 php 镜像4.验证测试 计算机系统 5G云计算 第四章 LINUX Docker LNMP项目搭建 一、项目…

功能测试也可以发现数据库相关的性能问题

很多同学认为功能测试和性能测试是严格分开的&#xff0c;功能测试人员无法发现性能问题。其实不是这样的&#xff0c;功能测试人员在验证功能时也可以发现性能问题&#xff1b;一些功能反而在功能测试环境不好验证&#xff0c;需要在性能环境上测试。 今天咱们就说一下测试涉及…