注意:此文档为环境搭建完成后编写,可能存在谬误或者忽略了部分细节,仅供参考。
公司的新产品需要实现监控平台功能,经过调研之后决定基于开源项目夜莺监控平台进行二次开发。
夜莺监控是一款开源云原生观测分析工具,采用 All-in-One 的设计理念,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成。
夜莺有前端和后端两个源码工程。前端基于 React 开发,后端基于 Golang 开发。前端工程仅依赖后端工程,后端工程依赖于 MySQL 和 Redis。
请自行阅读下列文档了解夜莺:
官方简介
夜莺V6文档
本文档简要介绍在个人电脑上搭建夜莺开发环境,使用 Windows 操作系统,前后端 IDE 均使用 VSCode,本文档仅供参考,不要求使用统一的操作系统或 IDE。
由于后端主程序依赖于 MySQL 和 Redis,因此需要事先安装 MySQL 和 Redis。
自行下载 MySQL 安装包:
MySQL 下载地址
下载完成之后自行安装(用户名 root 密码可设置为 1234 ,此账号密码为夜莺后端默认连接配置)。
自行下载 Redis 安装包:
Redis 下载地址
下载完成之后自行安装(不设置密码,夜莺后端连接 Redis 时默认不需要密码)。
后端程序基于 Golang 开发,因此需要安装 Golang 。
自行下载 Golang 并安装:
Golang 下载地址
git clone http://10.106.1.10:8002/somp/nightingale-back.git
注:如果没有权限请联系项目负责人添加。
自行下载并安装:
VSCode 下载地址
在 VSCode 上自行搭建 Golang 开发环境,参考:
VSCode 搭建 Golang 开发环境
使用 VSCode 打开后端源码文件夹,新建 .vscode 目录并在该目录下新建 launch.json 文件,输入下列配置后保存:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "夜莺后端主程序",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "./cmd/center/main.go",
"env": {
"N9E_CONFIGS": "../../etc"
}
}
]
}
注意:添加此配置是为了启动调试之后让程序能正常获取到启动配置文件路径。
进入 VSCode “Run and Debug” 页面直接启动调试即可。
如果运行失败请注意程序的错误输出、检查程序的启动配置文件 “etc/config.toml” 是否配置OK。
启动调试成功之后默认使用 17000 端口作为 HTTP 服务端口。
前端基于 React 开发,需要搭建开发环境,由于需要安装指定版本 Node.js ,因此需要先安装 nvm 。
请自行下载并安装 nvm :
nvm 下载地址
安装指定版本 Node.js 并使用:
nvm install 16.15.0
nvm use 16.15.0
克隆前端代码:
git clone http://10.106.1.10:8002/somp/nightingale-front.git
使用 VSCode 打开前端代码工程,打开 vite.config.ts 配置文件,修改后端服务地址 server.proxy 对应配置:
'/api/n9e-plus': {
target: 'http://127.0.0.1:17000/',
changeOrigin: true,
},
'/api/n9e/proxy': {
target: 'http://127.0.0.1:17000/',
changeOrigin: true,
},
'/api/n9e/datasource': {
target: 'http://127.0.0.1:17000/',
changeOrigin: true,
},
'/api/n9e': {
target: 'http://127.0.0.1:17000/',
changeOrigin: true,
},
打开 VSCode 终端,输入下列命令运行:
npm install
npm run dev
运行成功之后,使用浏览器访问 夜莺默认前端地址 即可,账号为 root 密码为 root.2020 。
至此,前后端程序就都运行起来了。不过还缺了数据采集和数据存储。
Prometheus 用于存储采集到的时序数据。
自行下载并解压 Prometheus 包:
Prometheus 下载地址
在解压后的文件夹下打开命令终端,运行命令启动 Prometheus:
./prometheus.exe --web.enable-remote-write-receiver
Categraf 为夜莺推荐使用的采集器,用于采集数据,自行阅读下列文档进行了解:
Categraf 简介
自行下载并解压 Categraf 包:
Categraf 下载地址
进入解压后的目录,修改 Categraf 配置文件 “conf/config.toml” 文件,修改 [global]
配置(自定义主机名):
hostname = “self-defined-hostname”
修改 [[writers]]
配置(夜莺后端服务保存时序数据 HTTP 接口地址):
url = "http://127.0.0.1:17000/prometheus/v1/write"
修改 [heartbeat]
配置(夜莺后端服务接收心跳消息 HTTP 接口地址):
url = "http://127.0.0.1:17000/v1/n9e/heartbeat"
接下来就可以登录 夜莺默认前端地址 (账号为 root 密码为 root.2020)在本机体验夜莺的相关功能了。
主程序入口:cmd\center\main.go
文件 func main()
函数。
注册 HTTP 接口路由函数:center\router\router.go
文件 func (rt *Router) Config(r *gin.Engine)
函数。
gin 框架处理请求入口函数:pkg\mod\github.com\gin-gonic\[email protected]\gin.go
文件 func (engine *Engine) handleHTTPRequest(c *Context)
函数。
登录接口路由为 /api/n9e/auth/login
,即 loginPost()
函数。
在注册接口路由时使用 rt.auth()
来进行登录认证,使用 rt.user()
来获取用户基本信息,使用 rt.admin()
来判断此接口需要超管权限,使用示例:
pages.GET("/self/profile", rt.auth(), rt.user(), rt.selfProfileGet)