安装kibana其实并不难, 直接下载解压运行kibana就行了。可惜的是,kibana官方只支持X86的架构,对于树莓派的arm,要想运行kibana,得绕些路子。
后来在论坛讨论这个事,得到这样的一个回复:
以后的kibana版本不再依赖nodegit和ctags了,这两个坑算是没有了…
在N次尝试之后,成功在树莓派上运行起了kibana, EK平台就在树莓派上搭建好了。鉴于全网没有一篇文章写如何在树莓派上运行EK(7.x版本),所以就有了这篇文章,给想要在树莓派上搭建EK的做一些参考。
环境
树莓派4 4GB内存 debian buster aarch64位
kibana 7.4.0 (截止2019-10-22)
下载Kibana
没得说的, 先下载kibana的软件包,下载地址。
然后解压至/opt
1 | tar zxvf kibana-7.4.0-linux-x86_64.tar.gz -C /opt |
配置
Kibana 的配置文件位置为config/kibana.yml, 要运行起来,首先要配置elasticsearch的地址,
我的elasticsearch集群部署在三台树莓派上的,elasticsearch地址配置为任意一台树莓派IP即可,
整个配置项如下:
1 | server.port: 5601 |
其他的配置项可根据注释和需求自行设置
如果不配置xpack.reporting.encryptionKey和xpack.security.encryptionKey,启动时会有警告,
xpack.reporting.encryptionKey设置为任意字符串,xpack.security.encryptionKey设置为任意32位字符串即可.
运行&解决问题
由于是使用的pi这个普通用户运行,运行时需要对/opt/kibana-7.4.0-linux-x86_64这个目录有读写权限,所以先更改这个目录的所有者:
1 | sudo chown -R pi:pi /opt/kibana-7.4.0-linux-x86_64 |
运行:
1 | cd /opt/kibana-7.4.0-linux-x86_64 |
如果一切顺利的话毫无疑问会报错:
原因是kibana自带的node二进制无法在树莓派上的arm平台运行,所以手动下载arm版的node替换掉就行了。
需要下载v10.15.2版本的node.js:
1 | wget https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-x64.tar.xz |
下载之后解压:
1 | tar vxJf https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-arm64.tar.xz |
将解压后的node-v10.15.2-linux-arm64 文件拷贝到kibana目录中相应的位置:
1 | 先删除自带的node: |
再次运行, 毫无疑问,又会报错:
nodegit.node 这个模块报错了,原因同上。解决办法是在树莓派上编译一遍nodegit,得到树莓派能运行的版本。
本着能不手动编译就不手动编译的原则,这里使用npm安装nodegit,
先安装npm:
1 | sudo apt install npm |
然后创建一个临时目录, 在该目录下安装node模块,这里从淘宝的源安装,速度快很多:
1 | mkdir kibana_node_mudules |
安装过程会提示缺少一些依赖,缺什么就安装什么,
依次解决:
1 | sudo apt-get -y install gcc libkrb5-dev |
其中会提示没有libwebp.so.4和libminizip.so.2.5这两个动态库,
首先安装:
1 | sudo apt install libwebp-dev |
然后将这两个软件包中的libwebp.so和libminizip.so分别拷贝一份到系统的/lib目录即可
通过dpkg -L 软件包名来查看安装的软件包的文件路径。
1 | sudo cp /usr/lib/aarch64-linux-gnu/libwebp.so libwebp.so.4 |
不出意外,nodegit很快就会装好,在当前目录下的node_modules下,将安装好的适用于本机的nodegit.node替换掉kibana中的nodegit.node
1 | 先删除kibana自带的nodegit: |
再次启动kibana,nodegit不会报错了,然而…
有了解决nodegit报错的经验,这个很简单了, 依旧在kibana_node_mudules目录下:
1 | npm --registry https://registry.npm.taobao.org install ctags |
安装完成后:
1 | 先删除kibana自带的ctags.node: |
再再次启动kibana,能够启动服务,访问IP:5061能看到Kibana的界面,貌似成功了
但是看一下控制台的信息,发现事情没有那么简单…
headless_shell 报错:
看样子也要找一个适用于arm平台的headless_shell 二进制文件替换掉才行…
通过搜索,找到了以下两篇有用的文章:
三分钟学会如何在函数计算中使用 puppeteer
linux – CentOS 7中的chrome-headless安装路径
看起来要安装puppeteer:
1 | npm --registry https://registry.npm.taobao.org install puppeteer |
关键是这个headless_shell, debian我找遍了也没有找到有关headless_shell的软件包,难道只有编译chromium 的源码了吗?
好不容易将chromium源码下载到树莓派上,准备艰难的编译时,发现在centos下倒是可以安装chrome-headless这个软件包获取到headless_shell文件,
想到centos也有arm64的系统,于是通过关键词 chrome-headless rpm 搜索到了chromium arm64的rpm包,只需解包即可获取到适用于arm64的headless_shell二进制文件
chromium-headless rpm下载,下载aarch64的chromium-headless即可.
使用rpm2cpio解压缩rpm包:
1 | sudo apt install rpm2cpio |
在当前目录下的./usr/lib64/chromium-browser/headless_shell即为我们需要的文件。
老规矩,把文件复制过去,再次启动,咦,不太对劲呀,怎么还是报这样的错?难道启动时被修改了?将这个目录设为只读试试,
启动时直接报错崩溃,没有写入权限直接启动报错,沿着报错信息找,原来在启动时会将x-pack/legacy/plugins/reporting/.chromium/chromium-312d84c-linux.zip这个文件解压至kibana路径的data目录,所以只替换解压后的文件解决不了问题,
只有从源头解决,直接替换掉chromium-312d84c-linux.zip整个文件。打开chromium-312d84c-linux.zip可以看到里面是一个headless_shell-linux目录, 该目录下的文件如下:
1 | . |
其中swiftshader目录下的libEGL.so和libGLESv2.so是安装的puppeteer模块中得到的.
将需要的文件打包、重命名、替换,再次启动, 完全OJBK:
!
后记
在树莓派上运行kibana遇到的主要问题是Kibana自带的一些node模块和已经编译好的headless_shell二进制并不适用于arm架构,所以直接运行会报错退出,
解决办法其实很简单,就是找到对应的适合树莓派的arm平台的二进制文件,替换即可。