Kibana 7.6.3 源码编译 + 构建踩坑
Posted 清风迅来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kibana 7.6.3 源码编译 + 构建踩坑相关的知识,希望对你有一定的参考价值。
“最近工作上接到个需求,需要对 Kibana 做简单的二次开发,而我也是第一次接触 Kibana,于是记录一下踩过的坑。
环境信息
-
MacOS v10.13.6 + MacBook Pro 15寸 2018款 -
Kibana 7.6.3 + Elastic Search 7.6.1 -
node 10.19.0
注:理论上应该保证 Kibana 和 Elastic 版本完全一致的…… 但毕竟只给了个 warning,而到目前为止没遇到问题
重要提示
1. 请务必保证 kibana 的版本与 elastic 的版本一致。
2. 最好不要使用 root,否则安装依赖的时候会有问题
Step1:准备操作
-
下载 Kibana 7.6.3 源码 -
使用 nvm 切换至对应 node.js 版本
-
安装 kbn:yarn add kbn ---g -
确保 git master 上有 commit 记录,否则:
Step2:编译阶段
yarn kbn bootstrap
在此特别感谢这篇文章kibana7.6.2源码开发编译[1]给与的帮助,以下报错信息的 QA 几乎都参考了此文:
iedriver 问题
原因:网络问题
解决方案:package.json 中删除 iedriver 的依赖。iedriver 主要是用来给 Selenium 作自动化测试用。
chromedriver 问题
原因:网络问题
解决方案:使用 TB 源
yarn config set "chromedriver_cdnurl" "https://npm.taobao.org/mirrors/chromedriver"
puppeteer 问题
Failed to download Chromium r662092! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variabled to skip download.
原因:网络问题
解决方案 1:设置环境变量来阻止下载最新版本的 Chromium
yarn config set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD 1
yarn config set puppeteer_download_host=https://npm.taobao.org/mirrors
geckodriver 问题
原因:网络问题
解决方案:使用 TB 源
yarn config set registry https://registry.npm.taobao.org/
最后,yarn kbn bootstrap
成功~ (不出意外的话)
Step3:构建阶段
yarn build --skip-os-packages ✅
yarn build ❎
业务代码开发完后,准备打包构建,这部分遇到的坑的解决方法都是看官方文档 Building a Kibana distributable[2] + 看运气。
下载 node.js 包超时
// src/dev/build/tasks/nodejs/node_download_info.js
const url = `https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v${version}/${downloadName}`;
// src/dev/build/tasks/nodejs/node_shasums.ts
const url = `https://us-central1-elastic-kibana-184716.cloudfunctions.net/kibana-ci-proxy-cache/dist/v${nodeVersion}/SHASUMS256.txt`;
解决方案:改源码中的下载站点为 nodejs.org
// src/dev/build/tasks/nodejs/node_download_info.js
const url = `https://nodejs.org/dist/v${version}/${downloadName}`;
// src/dev/build/tasks/nodejs/node_shasums.ts
const url = `https://nodejs.org/dist/v${nodeVersion}/SHASUMS256.txt`;
Webpack 打包内存溢出
根据网上相关文章[3] 的说法,这个问题是由于 node 消耗的内存超过了预设值(64位系统:1.4 GB,32位系统:0.7 GB)。
可以通过在 build 命令中加入 --max-old-space-size=4096
参数来调整 node 最大允许使用内存
// package.json
"build": "node --max-old-space-size=4096 scripts/build",
或者 node v8.0 以上可以通过以下命令调整全局设置
export NODE_OPTIONS=--max_old_space_size=4096
如图报错,deb、OS 相关报错
原因:当前操作系统非 Linux,并且执行的命令没有带上 --skip-os-packages
参数
“Packages are built using fpm, dpkg, and rpm. Package building has only been tested on Linux and is not supported on any other platform.
解决方案:老老实实看官方文档别偷懒
yarn build --skip-os-packages
相关参数说明:
成功,但……
总共花了 2330 秒,将近 40 分钟,四舍五入就是一小时…… 时间有点久
构建优化
省去下载 nodejs 步骤
默认情况下,每次 build 都会先清空之前下载好的 nodejs 库,本着能省就省的态度,可以略过这环节
再配合 --skip-node-download 的构建参数,略过下载 nodejs 环节。
yarn build --skip-node-download --skip-os-packages
友情提示:如果 Kibana 版本变动后导致所需 nodejs 版本也变了,此处还是需要改回来,老老实实再下载一份配套的 nodejs
减少构建
观察了一下打包后的文件,除了 linux 版本,还有 windows 和 mac 版的
因为实际生产环境只需要 linux 版本,于是想办法干掉 windows 和 mac 版
-
修改 src/dev/build/lib/config.js, 只打包 Linux 包
-
修改 package.json,去掉 --all-platforms
对比
简单优化后构建耗时 1875 秒,半小时左右,提升了差不多 10 分钟……
理论上还有更多优化空间,下次一定专门研究一下。
踩坑总结
这次 Kibana 7.6.3 二次开发体验下来耗时耗力的坑有两方面确定的原因:
-
编译/构建时的网络问题 -
构建时不熟悉官方文档
前者网络问题通过修改下载源可以解决,但如果不提前了解相关的坑,新接触该项目时仍会一个一个遇到相关问题,花不少时间浪费在了网络超时的等待时间中。
后者主要是体现在构建时偷懒,输入 yarn build
,忽略了官方文档上说明的相关参数,直接莽。其实只要看一眼花个 1 分钟就可以了。
另外不太确定的点是
-
机器硬件性能
之前在网上看到相关文档说建议用性能好的机子去构建项目,原本认为自己机器 18年的 pro 应该没啥问题的,但还是花了半个小时以上... 由于还没有用其他机器构建过,所以不太确定是我机器问题,还是说项目构建代码仍有较大的优化空间。
以上,记录下自己遇到的问题,希望这篇文章对入坑 Kibana 二次开发的小伙伴有帮助。
也感谢阅读到这里,第一次接触 Kibana,如果有错误,欢迎各位大佬拍砖指正~
参考资料
kibana7.6.2源码开发编译: https://www.cnblogs.com/Bud-blog/p/13469086.html
[2]Building a Kibana distributable: https://www.elastic.co/guide/en/kibana/7.x/building-kibana.html
[3]Webpack打包报'javascript heap out of memory'错误: https://www.cnblogs.com/jianxuanbing/p/9331042.html
以上是关于Kibana 7.6.3 源码编译 + 构建踩坑的主要内容,如果未能解决你的问题,请参考以下文章
Qt编译QuaZip的过程和使用踩坑--Win平台和Android平台编译