0%

Grafana客制化编译(X86)

1. 环境设置

1.1 需要主要工具

  • git
  • go (本例使用的是:go1.13.5.linux-amd64.tar.gz版本)
    需设置 GOPATH GOROOT
  • node(本例使用的是:node-v12.16.1-linux-x64.tar.gz版本)
    需设置 NODE_HOME
    1
    2
    3
    4
    5
    6
    7
    # 设置环境变量示例,可加入到~/.bashrc等配置中
    export GOROOT=/root/golang/go
    export PATH=$PATH:$GOROOT/bin
    export GOPATH=/root/gopath
    export NODE_HOME=/root/node-v10.17.0-linux-x64
    export PATH=$PATH:$NODE_HOME/bin
    export GOPROXY=https://goproxy.cn,direct

1.2 编译环境安装

1
2
3
4
5
6
7
8
9
10
11
12
# 安装yarn
npm install -g yarn
# 安装dev工具
yum groupinstall "Development Tools"
# 安装编译打包工具
yum install ruby-devel gcc make rpm-build rubygems
# 替换ruby国内源
gem sources -a https://gems.ruby-china.com/
# ruby安装fpm
gem install --no-ri --no-rdoc fpm
# 查看fpm版本
fpm --version

1.3 代码获取

1
2
# 必须把工程下载到 GOPATH 路径下,否则go无法编译
git clone git@github.com:grafana/grafana.git ${GOPATH}/

2. 编译介绍

2.1 前端

1
2
3
4
5
6
7
8
9
10
11
# 安装依赖
yarn install --pure-lockfile
# 或用make命令
# 具体make相关命令都可以查看工程根目录下的Makefile了解细节
make node_modules

# 编译及运行前端,监控代码改动
yarn start

# 单独编译前端
make build-js

2.2 编译后端

1
2
3
4
5
6
7
8
9
10
11
make run # 编译和运行系统,监控代码更改

# 纯后端编译
go run build.go setup
go run build.go build

# 后端运行
go run

# 只编译后端
make build-go

2.3 打包

1
2
3
4
go run build.go pkg-rpm
go run build.go build package
# 基于Makefile,纯打包:
make package

2.4 Docker image 制作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 到工程目录
# 将初始化数据放在./deploy目录下,结构如下:
deploy
├── bin
│ └── linux-amd64
│ ├── grafana-cli
│ ├── grafana-cli.md5
│ ├── grafana-server
│ └── grafana-server.md5
├── init_data
│ ├── grafana.db
│ ├── grafana.ini
│ ├── ldap.toml
│ └── plugins.tar.gz
└── software
├── dockerized-phantomjs.tar.gz
└── phantomjs-2.1.1-linux-x86_64.tar.bz2
# 制作镜像:
# 方法1: Makefile里新增封装函数
make build-docker-granafa
# 方法2(不再使用)
docker build -t my-granafa.1.0:662.2.0.6 .

# 运行测试
docker run -d --name=my-granafa.1.0-test -p 3002:3000 my-granafa.1.0:662.2.0.6

# 假定本地数据文件夹地址 /root/work/grafana/3-data
# 需提前准备好数据(版本包发布时提供)
# 为文件夹赋权
chmod -R 777 /root/work/grafana/data

# 带映射启动,端口自定
docker run -d --name=my-granafa.1.0 -p 3002:3000 -v /root/work/grafana/3-data/grafana.ini:/etc/grafana/grafana.ini -v /root/work/grafana/3-data/grafana.db:/var/lib/grafana/grafana.db -v /root/work/grafana/3-data/logs:/var/log/grafana my-granafa.1.0:662.2.0.6

# 保存镜像到本地
docker save my-granafa.1.0:662.2.0.6 | gzip >my-granafa.1.0-662.2.0.6-docker-x86_64.tar.gz

3. 问题记录

3.1 在前端编译的时候(yarn install –pure-lockfile)会出现如果下错误

1
> _error /root/gotest/src/github.com/grafana/node_modules/phantomjs-prebuilt: Command failed._ > _Exit code: 1_ > _Command: node install.js_ > _Arguments:_ > _Directory: /root/gotest/src/github.com/grafana/node_modules/phantomjs-prebuilt_ > _Output:_ > _PhantomJS not found on PATH_ > _Unexpected platform or architecture: linux/arm64_

原因:在 arm 中不支持 PhantomJS,所以需要在 package.json 中删除
路径: github.com/grafana/package.json
参见:https://github.com/grafana/grafana/issues/14115

3.2 在打包编译的时候出现如下错误

1
2
> _Running "phantomjs" task_ > _Warning: Unable to read "./node_modules/phantomjs-prebuilt/lib/location.js" file (Error code: ENOENT). Use --force to continue._
> _Aborted due to warnings._ > _exit status 3_ > _exit status 1_

删除对应文件下对应的 task github.com/grafana/scripts/grunt/build_task.js

3.3 make run 的时候会出现空间不足的错误提示

1
> [ERRO] Fail to watch directory[no space left on device]
1
2
3
4
# 修改配置文件
vim /usr/lib/sysctl.d/50-default.conf
# 添加以下设置
fs.inotify.max_user_watches = 131072

以上为 X86 环境下客制化编译 Grafana 的介绍

坚持原创技术分享,您的支持将鼓励我继续创作!