基于farseer-go的开源监控部署平台fops

1、监控部署平台介绍#

fops 是一款包含:Docker 集群管理、自动化部署、调度中心管理(FSchedule2.x)、日志采集、链路追踪、健康检查一体的小型轻量平台

基于 docker 环境进行部署和管理,通过简单的 button click 快速发布您的应用和监控应用的健康状态。

2、功能#

  • 集群管理:实时检查集群所有节点的健康状态。
  • 监控预警:满足预警条件后,将告警信息触达到目地的。(如钉钉、邮件等)
  • 远程终端:提供简易的 linux web ssh。
  • 应用部署:将 Git 仓库的代码、编译打包成 docker 镜像并发布到 DockerSwarm 集群(本地或远程集群)。
  • 健康状态:实时检测应用的运行状态。
  • 日志采集:实时查询 Docker 日志,以及通过 farseer-go 框架接入的应用,提供更精准的日志查询。
  • 调度中心:提供 FSchedule2.0 的任务管理、监控、日志的 Dashboard。
  • 链路追踪:通过 farseer-go 框架接入的链路追踪,提供数据查询。
  • 慢查询:支持 db、Redis、http、es、mq 详细调用报告。
  • 配置中心:提供应用的配置管理(应用可通过 FOPS 拉取配置信息)
  • 访问统计:提供各个链路的性能统计

3、自动化部署#

3.1 在 fops 中心新建你的应用,并配置好 git 仓库#


3.2 配置工作流文件#

工作流文件默认在应用的根目录:.fops/workflows/build.yml, 如:

代码已被折叠,点此展开

3.3 jobs.build.runs-on = steden88/cicd:3.0-npm#

fops 在构建时会启动 jobs.build.runs-on 指定的镜像,后续构建步骤将在该环境中执行。

目前 fops 官方提供:steden88/cicd:3.0-npm 镜像。该镜像基于 alpine:latest,在其中安装了 git、docker 等基础工具

3.4 jobs.build.steps#

为定义的构建步骤,根据该顺序逐个执行。

  • jobs.build.steps.name:自定义的步骤名称
  • jobs.build.steps.uses:使用的 action 名称,规则为:名称 @版本。也可自定义实现 action。
  • jobs.build.steps.with:定义参数,参数由 action 要求定义
  • jobs.build.steps.run:运行 shell 脚本

3.5 Action#

fops 目前为大家提供了 8 个常用的 action 程序:点这里查看

3.5.1 gitProxy: git 代理#

配置通过代理来拉取 git 仓库时,因为我们经常 github 无法访问。则可用这个 action。 需要你自己提供 proxy

3.5.2 checkout: 拉取 git#

如果你在 fops 中定义了依赖仓库,则会同时把这些依赖仓库一同拉取下来。

同时,如果你需要拉取未配置在 fops 的 git。可通过 with 参数来指定仓库地址,如:

      - name: 拉取框架fs
        uses: checkout@v1
        with:
          gitHub: https://github.com/farseer-go/fs.git
          gitBranch: main
          gitUserName: test
          gitUserPwd: 123456
          gitPath: farseer-go/fs

如果你需要拉取多个,则定义多次该 action 即可。

gitPath 用于你希望存储到本地相对路径下的哪个目录。用于后续打包时使用。

3.5.4 setup-go:安装 go#

      - name: 安装go
        uses: setup-go@v1
        with:
          goVersion: go1.22.5 #指定版本
          goDownload: # 自定义下载链接,可不填

3.5.5 run:运行 shell#

通过 run 配置,可自定义要执行的 shell 脚本,

      - name: 编译
        run:
          - rm -rf ./go.work
          - go mod download
          - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o ./fops -ldflags="-w -s" .

3.5.6 setup-npm:安装 npm#

也可搭配 run,在执行完 setup-npm 后,运行 run 定义的 shell 脚本

      - name: 安装npm
        uses: setup-npm@v1
        run: # 安装cnpm
          - npm install -g cnpm --registry=https://registry.npmmirror.com/

3.5.7 dockerBuild:打包镜像#

将根据集群中定义的 docker 配置,对编译完的程序进行打包。

默认情况下,Dockerfile 文件定义在应用的仓库根目录中 如需更改路径,请到应用中心修改

      - name: 打包镜像
        uses: dockerBuild@v1

3.5.8 dockerPush:上传镜像#

上传到集群定义的镜像 hub,将在镜像打包成功后上传。

可以配置 docker 官网 hub 或私有 hub,配置请到集群中修改

      - name: 上传镜像
        uses: dockerPush@v1

3.5.9 dockerswarmUpdateVer:更新镜像#

将镜像部署到当前集群

      - name: 更新镜像
        uses: dockerswarmUpdateVer@v1

如果需要更新到远程集群,可以使用 remoteClusterId 参数:

      - name: 更新镜像
        uses: dockerswarmUpdateVer@v1
        with:
          remoteClusterId: 1

fops 是如何知道远程集群的地址,这需要在远程集群中安装好 fops。同时在本地的集群配置中设置好远程 fops 地址。

4 容器角色#


角色主要是为了应用在集群中运行时,部署的位置限制。

  • manager:只运行到 master 节点
  • worker:只运行到非 master 节点
  • global:所有节点都会运行一个实例。
  • 不限制:任意节点都可以运行