Skip to content
/ stellar Public

Sparrow is an Intelligent Operations Platform, refered to SPIOP.

License

Notifications You must be signed in to change notification settings

caapap/stellar

Repository files navigation

1. Stellar-v1.0

开发环境

前端

  • 依赖清单
node: v16.x <= v16.15.0
npm: 8.x <= 8.5.5
Linux: centos 7.9

开发环境部署

wget https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.xz
tar xf node-v16.15.0-linux-x64.tar.xz -C /iflytek/server

cat << EOF >>  ~/.bashrc
export PATH=$PATH:/iflytek/server/node-v16.15.0-linux-x64/bin
EOF

source ~/.bashrc

node -v 
npm -v


# 部署依赖
# set npm registry
npm config set registry https://registry.npmmirror.com
npm cache clean --force
npm config get registry

npm install
# 若遇到npm镜像源认证错误,需要删除package-lock.json文件后再执行

编译调试

#1、前端的vite.config.ts的proxy中/api/n9e的地址配置为:target: 'http://127.0.0.1:17000/',
#2、运行webapi: ./n9e webapi -c etc/config.toml
#3、启动本地前端项目:
npm run dev
#4、此时前端项目正常运行了
  • 发布编译包
npm run build

后端

  • 依赖清单
system: CentOS 7.9
go: v1.16.x +
cmake: v3.21.3 +
mysql: v5.7 +
redis: v6.2 +
docker: v1.19.x +

开发环境部署

  • 部署依赖
# install basic dev dependency
yum -y install gcc gcc-c++ make automake autoconf libtool
# install go
wget https://go.dev/dl/go1.22.1.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar xvf go1.22.1.linux-amd64.tar.gz -C /iflytek/server
export PATH=$PATH:/iflytek/server/go/bin && go version
​
# config global varibale gopath by editing /etc/profile
cat << EOF >> /etc/profile          
# go path begin 
export GOROOT=/fun/server/go  #go root path
export GOPATH=/fun/server/gopkg   #go package path
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY='https://goproxy.cn,direct' #go proxy
# go path end
EOF
source /etc/profile  # load the global variable
go env  

# 部署mysql redis存储
yum install mysql-server redis -y

systemctl start mysql
systemctl start redis
systemctl enable mysql
systemctl enable redis
mysql -uroot -p < n9e.sql
# docker部署依赖
docker run --name mysql-8 -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d docker.kxdigit.com/n9e/mysql:8
docker run --name redis-6.2 -p 6379:6379 -d docker.kxdigit.com/n9e/redis:6.2

编译调试

# go下载安装依赖
go mod tidy
# 注入编译好的前端包
cp -r pub .
# 检查配置参数
vim ./etc/config.toml
# 本地编译并运行
make
make run
  • 前端文件注入
# 注入编译好的前端包
cp -r pub .
# 检查配置参数
vim ./etc/config.toml
# 本地编译并运行
make
make run
  • 版本包发布
# 二进制发布
go install github.com/goreleaser/goreleaser@latest
make release

# docker发布
vim build.sh # 修改打包的镜像标签
sh build.sh <tag> # 制作镜像
  • 验证
ss -tlnp|grep 17000 # Check whether sparrow.log has exception logs and whether the port is listening. Normally, the port is listening at 17000

访问方式:http://localhost:17000 or http://<server-ip>:17000

用户名密码: root root.2020

架构介绍

​ Stellar基于夜莺开源版,作为一款 Go 写的监控系统,不仅部署方便,而且整体设计上非常开放和灵活,可以和开源生态上其他软件组合使用,适用于已有监控系统升级或从零搭建监控平台等场景。

  • 采集器:可对接 telegraf、categraf、grafana-agent、datadog-agent、以及各类 exporter;
  • 存储:可对接 prometheus、thanos、m3、victoriametrics 等。

基础组件介绍

  • stellar:平台本体,包含前后端主应用程序

  • mysql:存放配置类别信息,如用户,监控大盘,告警规则等

  • redis:存放访问令牌(JWT Token),心跳信息,如机器列表中CPU、内存、时间偏移、核数、操作系统、CPU架构等

  • nginx:作为反向代理服务器,响应服务静态资源的请求

  • prometheus:作为时序库接收夜莺 remote write 协议的数据

  • categraf:可以采集 OS、MySQL、Redis、Oracle 等常见的监控对象,也准备提供日志采集能力和 trace 接收能力

  • ibex:告警自愈功能依赖的模块,提供一个批量执行命令的通道,可以做到在告警的时候自动去目标机器执行脚本。

项目源码介绍

# 夜莺的目录结构介绍
./
├── LICENSE  //开源协议
├── Makefile  //构建脚本
├── README.md
├── README_en.md
├── alert/ //告警引擎相关逻辑,对 Prometheus、Loki、TDEngine 等数据源做异常数据判断并产生告警事件。
├── center/ //中心端(节点)管理相关,Web 后端的逻辑
├── cli/ //命令行工具,用于 v5 版本升级 v6 版本时的数据迁移
├── cmd/ //项目的可执行文件,即入口包,所有的二进制的 main 函数入口都在这里。
├── conf/ //解析配置文件,配置文件在内存里映射的数据结构
├── doc/ //文档相关
├── docker/ //容器相关的文件,包括 Dockerfile 和 docker-compose 等,数据库的建表 SQL 也在这里。
├── etc/  //配置文件目录,重点关注 config.toml,如果使用了边缘机房的部署方案,还需要关注 edge.toml。
├── fe.sh*
├── go.mod  //项目版本依赖包
├── go.sum
├── integrations/ //集成目录,包含比如 MySQL、Redis、Elasticsearch 等各个监控目标的内置仪表盘、告警规则等。
├── memsto/ //猜测是memory storage,缓存相关
├── models/ //模型定义,数据库操作相关的代码。
├── pkg/ //公开的库代码,可被外部应用程序依赖使用
├── prom/ //Prometheus 相关的代码,对PromQL的支持相关,包括 remote write 写数据以及查询接口的封装。
├── pushgw/ //Pushgateway转发网关 相关的代码,用于接收 remote write 数据、opentsdb 格式的数据、datadog 格式的数据、open-falcon 格式的数据,然后统一做格式转换写入后端存储。
└── storage/  //存储模块,MySQL 和 Redis 的初始化连接相关的代码。

项目主模块代码介绍

# 四大模块
cli  //升级用和主业务无关,先不了解
center //中心节点也就是n9e的完整版包含各种管理和配置,会调用alert和pushgw模块
alert //告警引擎,告警功能的各种代码
pushgw //转发网关,接收各种采集器的数据转发给时序库

代码开发流程

源码评估

源码二次开发案例

  • case
npm run build

> n9e-fe@v6.7.1 build
> tsc && cross-env NODE_OPTIONS=--max-old-space-size=6096 vite build

src/components/PromQueryBuilder/Operations/Operation.tsx:84:22 - error TS2345: Argument of type 'number | null' is not assignable to parameter of type 'VisualQueryOperationParamValue'.
  Type 'null' is not assignable to type 'VisualQueryOperationParamValue'.

84             onChange(val);
                        ~~~
                        
src/pages/traceCpt/Search.tsx:326:72 - error TS2322: Type 'number | null' is not assignable to type 'number | undefined'.
  Type 'null' is not assignable to type 'number | undefined'.

326                       onChange={(num_traces) => setSearch({ ...search, num_traces })}
                                                                           ~~~~~~~~~~

Found 2 errors in 2 files.

Errors  Files
     1  src/components/PromQueryBuilder/Operations/Operation.tsx:84
     1  src/pages/traceCpt/Search.tsx:326

这两个错误都是由于尝试将 null 分配给不接受 null 的类型引起的。在 TypeScript 中,null 和 undefined 是不同的类型,不能互相赋值。

  • 对于第一个错误,你可以通过检查 val 是否为 null 来解决。如果 val 为 null,则不调用 onChange 函数。
  • 对于第二个错误,你可以在设置 num_traces 时检查其是否为 null。如果是 null,则将其设置为 undefined。 以下是修复这两个错误的代码:
// src/components/PromQueryBuilder/Operations/Operation.tsx
if (val !== null) {
  onChange(val);
}

// src/pages/traceCpt/Search.tsx
onChange={(num_traces) => setSearch({ ...search, num_traces: num_traces === null ? undefined : num_traces })}

参考

API接口(/v1/n9e )

这类接口其实又分成 2 小类:

  • 给 agent 使用,用于 agent 上报心跳信息或者接收监控数据,通常用于内网不加密钥认证
  • 给第三方调用的接口,通常会走密钥认证 这 2 类接口都是走的 BasicAuth 认证,通过配置文件里下面的部分来控制:
[HTTP.APIForAgent]
Enable = true 
# [HTTP.APIForAgent.BasicAuth]
# user001 = "ccc26da7b9aba533cbb263a36c07dcc5"

[HTTP.APIForService]
Enable = true 
[HTTP.APIForService.BasicAuth]
user001 = "ccc26da7b9aba533cbb263a36c07dcc5"
  • 中心端 n9e 接收心跳的接口是 /v1/n9e/heartbeat n9e-edge 接收心跳的接口是 /v1/n9e/edge/heartbeat
  • 接收数据的接口参考:router.go
  • 第三方调用的接口参考:router.go

数据表结构

  • alert_rule 是夜莺平台告警规则的记录表,根据配置中的 PromQL 去查询时序数据库,通过多种条件过滤,最终条件符合后生成告警事件 alert_cur_evernt,参考:table_schema

版本日志

  • feat:支持三平台监控指标统一采集、告警数据统一接入。
  • feat:支持helm chart容器化部署,重新封装ibex模块资源,内置了面板、告警规则、脚本的sql初始化数据库文件
  • feat:支持ansible 自动下发categraf二进制采集器,实现三平台的统一资产管理。
  • feat:支持用户在PC桌面端,利用告警浮窗工具,实时同步对三平台活跃告警进行跟踪、管理。
  • fix:三平台Grafana原生的监控面板格式转换,适配星相Stellar平台。
  • fix:三平台Alertmanger告警规则格式转换,适配星相Stellar平台。
  • fix:更换标题和logo为Stellar,修改登陆界面。
  • fix:去除界面右上角版本号,去除文档入口。
[master 462b662] upgrad version v1.0
 108 files changed, 16072 insertions(+), 17232 deletions(-)
 create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
 create mode 100644 .github/ISSUE_TEMPLATE/config.yml
 create mode 100644 .github/ISSUE_TEMPLATE/enhancement.md
 create mode 100644 .github/PULL_REQUEST_TEMPLATE.md
 rename .github/workflows/{stellar.yml => n9e.yml} (100%)
 create mode 100644 README_en.md
 create mode 100644 center/sso/sync.go
 delete mode 100644 docker/Dockerfile
 mode change 100644 => 100755 docker/build.sh
 delete mode 100644 docker/compose-bridge/etc-ibex/server.conf
 mode change 100644 => 100755 docker/compose-bridge/etc-nightingale/script/notify.py
 delete mode 100644 docker/compose-host-network-metric-log/etc-ibex/server.conf
 delete mode 100644 docker/compose-host-network/etc-ibex/server.conf
 mode change 100644 => 100755 docker/compose-host-network/etc-nightingale/script/notify.py
 delete mode 100644 docker/compose-postgres/ibexetc_pg/server.conf
 delete mode 100644 docker/compose-postgres/n9eetc_pg/ops.yaml
 delete mode 100644 docker/initsql/b-ibex.sql
 mode change 100644 => 100755 etc/script/notify.py
 mode change 100644 => 100755 fe.sh
 create mode 100644 memsto/task_tpl_cache.go
 create mode 100644 pkg/ldapx/user_sync.go

About

Sparrow is an Intelligent Operations Platform, refered to SPIOP.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages