轻量级无 Agent 的自动化运维平台--Spug

介绍

Spug 是一个开源的自动化运维管理平台,由 JavaScript 和 Python 编写,面向中小型企业设计,无需 Agent,非常轻量化。为运维人员提供了自动化部署、配置管理、任务编排、监控告警等一系列强大功能,帮助轻松管理大规模的服务器集群。

Spug 整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等多项功能,为我们提供了全面的运维解决方案。

官网

官网 https://www.spug.cc/

gitee https://gitee.com/openspug/spug

github https://github.com/openspug/spug

官方文档 https://www.spug.cc/docs/about-spug

功能特性

  • 批量执行: 主机命令在线批量执行 通过平台,用户可以轻松对主机上的命令进行批量执行,节省了操作时间和提高了效率。

  • 在线终端: 主机支持浏览器在线终端登录 用户可以方便地通过浏览器登录主机的在线终端,实时操作主机,无需额外的终端软件。

  • 文件管理: 主机文件在线上传下载 支持主机文件的在线上传和下载,便捷地进行文件传输和管理。

  • 任务计划: 灵活的在线任务计划 用户可以灵活设定在线任务计划,定时执行任务,提升工作自动化程度。

  • 发布部署: 支持自定义发布部署流程 用户可根据需求自定义发布部署流程,确保部署过程符合实际需求。

  • 配置中心: 支持 KV、文本、json 等格式的配置 方便用户进行统一配置管理。

  • 监控中心: 支持站点、端口、进程、自定义等监控 满足用户对主机状态的实时监控需求。

  • 报警中心: 支持短信、邮件、钉钉、微信等报警方式,及时通知用户主机状态异常。

  • 优雅美观: 基于 Ant Design 的 UI 界面 整体界面简洁清晰,操作体验良好。

  • 开源免费: 前后端代码完全开源 用户可以自由查看源码并永久免费使用平台。

安装

官方推荐docker compose安装

资源清单文件

version: "3.3"
services:
  db:
    image: mysql:8.0
    container_name: spug-db
    restart: always
    networks:
      - spug-net
    #command: --port 3306 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=spug
      - MYSQL_USER=spug
      - MYSQL_PASSWORD=spug.cc
      - MYSQL_ROOT_PASSWORD=spug.cc
  spug:
    image: openspug/spug-service
    container_name: spug
    privileged: true
    restart: always
    networks:
      - spug-net
    volumes:
      - ./service:/data/spug
      - ./repos:/data/repos
    ports:
      # 如果80端口被占用可替换为其他端口,例如: - "8000:80"
      - "80:80"
    environment:
      - MYSQL_DATABASE=spug
      - MYSQL_USER=spug
      - MYSQL_PASSWORD=spug.cc
      - MYSQL_HOST=db
      - MYSQL_PORT=3306
    depends_on:
      - db
networks:
  spug-net:

启动容器

docker compose up -d

初始化

以下操作会创建一个用户名为 admin 密码为 spug.cc 的管理员账户,可自行替换管理员 账户/密码

docker exec spug init_spug admin spug.cc

访问测试

在浏览器中输入 http://<IP>:80 访问

用户名密码是 上面初始化创建的

例如以上面的初始化为例 用户名为 admin 密码为 spug.cc

功能

首页

可以设置公告和导航快捷方式

仪表盘

可以看到大致的信息

主机管理部分

如果是密钥验证,就上传私钥文件,如果想用密码验证,那就不要上传密钥,在点击验证的时候会要求输入密码

批量执行部分

执行任务可以直接输入对应的脚本,选择对应的主机,然后点击开始执行就好了

点击执行后,会显示执行结果

如果使用 nohup 或 & 启动后台进程页面一直在转圈不会结束怎么办,官方也给出了解决办法

在 批量执行 或 发布配置 等的执行脚本中以 nohup& 的方式启动后台子进程时需要 把命令的标准输出重定向至 /dev/null,例如以下启动 Tomcat 的命令:

cd web/WEB-INF/
nohup ./startup.sh &

把上述命令改为:

cd web/WEB-INF/
nohup ./startup.sh > /dev/null &

也可以在模板中事先定义好,然后通过模板来执行

然后在执行任务的时候添加一下

文件分发

可以是把本地的文件上传到主机,也可以是把主机的文件同步到另一个主机上

上传本地文件就不讲了

这里需要讲下的是把主机的文件同步到另一个主机上

这里数据源的路径一定是目录,而不是文件

执行的结果是,把数据源指定的目录中的文件上传到目标主机的目标路径中,是不上传数据源目录的

计划任务

这个真的好用

创建任务

还可以选择失败后的通知方式

选择主机

设置执行触发器

可以设置普通间隔

也可以设置一次性任务,选择哪个时间点

还可以设置系统的cron

激活任务

刚创建的任务是处于未激活的状态

可以先执行测试,先测试一下看看

会显示执行结果

可以激活任务

激活后会显示待调度

需要手动刷新才能刷新状态

查看结果

查看历史执行记录

监控中心

可以创建 站点检测、端口检测、Ping检测、进程检测和自定义脚本

站点检测

通过 GET 请求指定的 url 匹配返回的状态码来确定站点是否异常,目前200 - 399之间状态码均为正常,否则为异常,默认超时时间为 10 秒。

端口检测

检测指定目标主机的 TCP 端口是否可以正常建立接连。

Ping 检测

使用 Ping 检测目标主机是否存活,默认超时时间为 3 秒。

进程检测

检测指定目标主机的某个进程是否存活。

自定义脚本检测

在指定主机上运行自定义的脚本,通过判断返回的退出状态码是否为 0 来确定是否有异常。脚本执行中输出的内容将作为报警的描述信息,可利用此特性来灵活控制 报警的规则和报警的内容。

执行测试

会返回结果

设置规则

配置说明

  • 监控频率: 每隔多长时间检测一次

  • 报警阈值: 连续指定次数检测失败后才会触发报警,例如:报警阈值设置为3,则表示当出现故障时连续3次检测都为失败的情况才触发报警

  • 报警联系人组: 报警联系人的集合,可以包含一个或多个报警联系人

  • 通道沉默: 相同的检测失败事件在通道沉默周期内只触发一次报警,避免过于频繁重复的报警信息。例如:通道沉默设置为 5 分钟,第一次触发报警后,5分钟内再次触发相同的报警信息则不会发送。

  • 报警方式 目前支持微信、钉钉和邮件三种报警方式,内置开箱即用的微信和邮件报警服务,需要关注下官方的公众号获取调用凭据,将调用凭据配置至系统设置 / 报警服务设置 中的调用凭据中。

    • 微信报警,需要设置报警联系人的微信 Token,获取方式与获取调用凭据相同

    • 钉钉报警,需要设置报警联系人的钉钉机器人 URL,请在钉钉群-安全设置里面添加部署服务器的外网 IP,或者设置关键字 通知

    • 邮件报警,需要设置报警联系人的邮箱地址

这里就不太好了,就一定要设置告警,但是我有的监控其实并不想告警,只是希望获取下对应的信息,就是打开监控中心能够查看到这些监控项的值
所以感觉还有待改进,可以将监控和告警分离开,需要告警的时候再关联

报警中心

可以添加联系人,在添加监控的时候关联起来

系统配置

查看登录日志

设置角色

这里的逻辑是通过角色来设置权限,是没办法给用户单独设置权限的

先创建角色

修改页面的功能权限


添加主机权限

设置允许这个用户操作哪些主机

添加发布权限

这里还有个发布权限

这个就是指定这个用户有哪些环境或者应用的操作权限

新建用户

新建用户,绑定角色

除了页面上对普通用的管理,Spug 还提供了 manage.py user 命令可用于管理员账户的管理操作。

通过命令行的方式操作

创建用户

创建账户使用 manage.py user add 命令,用法示例如下

cd spug/spug_api
source venv/bin/activate
python manage.py user add -u admin -p 123 -n 张三丰 -s

Docker 安装的可以执行如下命令

docker exec spug python3 /data/spug/spug_api/manage.py user add -u admin -p 123 -n 张三丰 -s

以上命令会创建个登录名为 admin 密码为 123 昵称为 张三丰 的管理员账户,注意最后的 -s 参数,如果携带了这个参数意味着该账户为管理员账户, 管理员账户可以不受任何限制的访问所有功能模块。

重置密码

使用 manage.py user reset 命令来重置账户密码,用法示例如下

cd spug/spug_api
source venv/bin/activate
python manage.py user reset -u admin -p abc

Docker 安装的可以执行如下命令

docker exec spug python3 /data/spug/spug_api/manage.py user reset -u admin -p abc

上述操作会重置登录名为 admin 的账户的密码为 abc

启用账户

当页面上登录连续错误数次超过3次后账户自动转为禁用状态,普通用户可以通过 系统管理 / 账户管理 在页面是启用账户即可,但管理员账户需要使用如下命令来启用

cd spug/spug_api
source venv/bin/activate
python manage.py user enable -u admin

Docker 安装的可以执行如下命令

docker exec spug python3 /data/spug/spug_api/manage.py user enable -u admin

Web终端

这个伪终端真的很好用,命令补全,显示排版都非常好,还支持文件管理

用过jumpserver的可能对这个界面就比较熟悉

右上角打开文件管理器


显示文件的基本信息

但是只能下载和删除,无法对文件的权限或者文件名什么的做修改

也可以上传文件

还支持换样式

右上角

总的来说,Spug确实做到了官网介绍的那些点,确实轻量,确实具备了运维的基本需求。值得推荐

posted @ 2024-03-15 13:03  厚礼蝎  阅读(892)  评论(0编辑  收藏  举报