Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/angao/recommender
Recommender monitors prometheus metrics and base on it, provider recommended values container's cpu, mem, disk and network io, and store data in mysql db
https://github.com/angao/recommender
gin golang mysql prometheus xorm
Last synced: about 7 hours ago
JSON representation
Recommender monitors prometheus metrics and base on it, provider recommended values container's cpu, mem, disk and network io, and store data in mysql db
- Host: GitHub
- URL: https://github.com/angao/recommender
- Owner: angao
- License: apache-2.0
- Created: 2018-10-05T05:14:28.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2018-10-17T11:56:58.000Z (about 6 years ago)
- Last Synced: 2024-06-20T06:39:17.073Z (6 months ago)
- Topics: gin, golang, mysql, prometheus, xorm
- Language: Go
- Homepage:
- Size: 1.55 MB
- Stars: 2
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Recommender
**`Recommender` 通过 `Prometheus` 获取应用 `Container` 监控数据(`CPU`,`Memory`,`Disk IO`, `Network IO`),并按照 `Container` 聚合数据,最后持久化到 `MySQL` 数据库。并以 `RESTful` 的方式提供 `HTTP API` 接口。**
## 一、编译部署
1、编译
```bash
make build
```
在 `./bin/` 目录生成可执行二进制文件2、部署
- 创建 MySQL 数据库,如 `recommender`,执行 `deploy/create_tables.sql` 文件创建数据库表
- 如果以二进制部署,直接将二进制 `scp` 到服务器执行即可
- 支持部署到 Kubernetes 集群```bash
# 打包成 image
make docker-build
# 创建 Deployment
kubectl create -f deploy/recommender.deploy.yaml
```## 二、配置
`recommender` 通过配置文件的方式支持可配置,通过 `recommender --config-file="/etc/config.yaml"` 方式配置,详细配置如下:
> 默认使用 `MySQL` 数据库
```yaml
databaseConfig:
# 数据库用户名
username: "root"
# 数据库密码
password: "123456"
# 数据库地址
url: "192.168.99.100"
# 数据库端口
port: 30006
# 数据库名
name: "recommender"
# 连接池,默认为 2
maxIdleConns: 2
# 最大连接数,默认 10
maxOpenConns: 10
prometheusConfig:
# Prometheus 服务地址
address: "http://192.168.19.0:32100"
extraConfig:
# Prometheus 默认查询历史时长,默认 30d
history: "30d"
# 对外 HTTP API 端口,默认 9098
apiPort: 9098
```## 三、`API` 接口
1、创建应用
```
method: POST
url: /api/v1/application
param:
{
"name: "test"
}return
{
"code": 200,
"message": "success"
}
```
2、获取应用
```
获取指定名称应用:
method: GET
url: /api/v1/application/:namereturn
{
"code": 200,
"data": {
"id": 162,
"name": "test",
"created": "2018-10-15T14:02:25+08:00",
"updated": "2018-10-15T14:02:25+08:00",
"deleted": "0001-01-01T00:00:00Z"
},
"message": "success"
}
```3、获取全部应用:
```
method: GET
url: /api/v1/applicationsreturn
{
"code": 200,
"data": [
{
"id": 162,
"name": "web",
"created": "2018-10-15T14:02:25+08:00",
"updated": "2018-10-15T14:02:25+08:00",
"deleted": "0001-01-01T00:00:00Z"
}
],
"message": "success"
}
```
4、删除应用
```
method: DELETE
url: /api/v1/application/:namereturn
{
"code": 200,
"message": "success"
}
```
5、获取指定应用的资源推荐值
```
method: GET
url: /api/v1/resource/:namereturn
{
"code": 200,
"data": {
"id": 162,
"name": "web",
"container_resource": [
{
"id": 23,
"name": "test",
"application_id": 162,
"timeframe_id": 0,
"cpu_limit": 909,
"memory_limit": 844,
"disk_read_io_limit": 923,
"disk_write_io_limit": 978,
"network_receive_io_limit": 959,
"network_transmit_io_limit": 997,
"created": "2018-10-16T10:25:55+08:00",
"updated": "2018-10-16T10:30:15+08:00"
}
]
},
"message": "success"
}
```
6、获取全部应用的资源推荐
```
method: GET
url: /api/v1/resourcesreturn
{
"code": 200,
"data": [
{
"id": 162,
"name": "app-3103947192",
"container_resource": [
{
"id": 23,
"name": "test",
"application_id": 162,
"timeframe_id": 0,
"cpu_limit": 909,
"memory_limit": 844,
"disk_read_io_limit": 923,
"disk_write_io_limit": 978,
"network_receive_io_limit": 959,
"network_transmit_io_limit": 997,
"created": "2018-10-16T10:25:55+08:00",
"updated": "2018-10-16T10:30:15+08:00"
}
]
}
],
"message": "success"
}
```
7、获取指定时间段指定应用资源推荐
```
method: GET
url: /api/v1/resources/timeframe/:name/:appName
name: 指定时间段名称
appName: 指定应用名称return
{
"code": 200,
"data": {
"id": 162,
"name": "web",
"container_resource": [
{
"id": 23,
"name": "test",
"application_id": 162,
"timeframe_id": 0,
"cpu_limit": 909,
"memory_limit": 844,
"disk_read_io_limit": 923,
"disk_write_io_limit": 978,
"network_receive_io_limit": 959,
"network_transmit_io_limit": 997,
"created": "2018-10-16T10:25:55+08:00",
"updated": "2018-10-16T10:30:15+08:00"
}
]
},
"message": "success"
}
```
8、删除指定应用的推荐值
```
method: DELETE
url: /api/v1/resource/:namereturn
{
"code": 200,
"message": "success"
}
```
9、删除指定时间段应用的推荐值
```
method: DELETE
url: /api/v1/resources/timeframe/:namereturn
{
"code": 200,
"message": "success"
}
```
10、创建指定时间段
```
method: POST
url: /api/v1/timeframe
param:
{
"name": "double11",
"start": "2017-11-10 23:00:00", // 开始时间
"end": "2017-11-11 01:00:00", // 结束时间
"status": "on", // status 有 on 和 off 两个状态,只有 on 的状态才会从 Prometheus 拉取数据计算,计算完成后将 on 更新成 off
"description":"" // 描述
}
return
{
"code": 200,
"message": "success"
}
```
11、获取全部指定时间段
```
method: GET
url: /api/v1/timeframesreturn
{
"code": 200,
"data": [
{
"id": 6,
"name": "double11",
"start": "2017-11-10T23:00:00+08:00",
"end": "2017-11-11T01:00:00+08:00",
"status": "off",
"description": "",
"created": "2018-10-15T14:35:24+08:00",
"updated": "2018-10-16T10:28:04+08:00",
"deleted": "0001-01-01T00:00:00Z"
}
],
"message": "success"
}
```
12、获取指定时间段
```
method: GET
url: /api/v1/timeframe/:namereturn
{
"code": 200,
"data": {
"id": 6,
"name": "double11",
"start": "2017-11-10T23:00:00+08:00",
"end": "2017-11-11T01:00:00+08:00",
"status": "off",
"description": "",
"created": "2018-10-15T14:35:24+08:00",
"updated": "2018-10-16T10:28:04+08:00",
"deleted": "0001-01-01T00:00:00Z"
},
"message": "success"
}
```
13、更新指定时间段
```
method: PUT
url: /api/v1/timeframeparam
{
"id": 6,
"name": "double11",
"start": "2017-11-10 23:00:00",
"end": "2017-11-11 01:00:00",
"status": "on",
"description":""
}
return
{
"code": 200,
"message": "success"
}
```
14、删除指定时间段
```
method: DELETE
url: /api/v1/timeframe/:namereturn
{
"code": 200,
"message": "success"
}
```