在ARM64 Linux平台上安装ELK

缘起

这事从一开始就是个坑:因为ELK官方并不提供ARM平台的解决方案。虽然网上能搜到一些曾经在RaspberryPi上安装成功的例子,但都是很老很老的版本,再加上一般ARM平台的配置太低,而ELK对硬件要求还挺高,所以基本没人再搞这种了。

不过因为理财产品N1的配置还可以,于是我就用了两台N1来跑ELK,这里记录一下填坑经验。

系统环境

最近重刷用的系统环境是Armbian的Debian 10,刷机方法见前文。一年多前刚刷的时候用的是4.x内核的旧版ubuntu版本,当时还不支持iSCSI,为此特地跑到Armbian社区去找作者提需求,等了几天作者出新版加上这个才刷的。

之所以需要iSCSI,是因为8GNAND根本不够用来存放ElasticSearch的索引数据,所以我是通过iSCSI连到我的FreeBSD服务器上,当然另一个方法就是通过USB外接一个硬盘。

两台N1,其中一台用来跑ES,另一台用跑LK,简单起见就分别以这两个名字命名。

应用环境

openjdk

两台机器上都需要安装,分别是ElasticSearch和Logstash需要,现在就直接上最新版11了。

sudo apt install openjdk-11-jre

正常情况下安装应该可以很顺利。

nodejs和npm

仅在LK机器上安装,Kibana需要。版本就用默认的10.x即可。

sudo apt install nodejs npm

下载ELK并安装

下载

下载地址如下:

其中ElasticSearch和Logstash下载MacOS/Linux版,Kibana下载Linux 64-bit版。

虽然现在ELK都已经到7.x版了,但因为不熟所以还是用6.x,不同版本的配置还是有一些差异的。在我安装时候6.x的最新版本是6.8.5,不过到了写文章的时候已经是6.8.6了。

安装配置ElasticSearch

首先是对操作系统的调教:

需要修改/etc/sysctl.conf,加上:

vm.max_map_count=262144

再启用配置:

sudo sysctl -p

然后修改/etc/security/limits.conf,加上:

youruser          soft    nproc           4096
youruser          hard    nproc           4096

youruser是你要运行ELK的用户,然后重新登录此用户。

将ElasticSearch解压到~/elasticsearch后,修改如下配置文件:

#修改 ~/elasticsearch/config/jvm.options
# 注释掉下面一句,不知道为什么这个在OpenJDK-11下会报错
# 10-:-XX:UseAVX=2

# 修改~/elasticsearch/config/elasticsearch/yml
# 增加
xpack.ml.enabled: false
# 其它配置根据自己需要来,比如把data路径放到iSCSI target上或外置USB硬盘上

现在就可以用

~/elasticsearch/bin/elasticsearch

启动ES,注意看返回的日志信息有什么错误,正常情况下按照上述配置可以成功启动。

正式使用建议用supervisor加持比较方便。

安装配置Logstash

这是坑最大的地方:因为Logstash不是纯Java应用。

它本身大部分功能是用Ruby写的,运行于JRuby环境,其中部分插件通过JNI使用了二进制库——这个导致了官方包的某些插件在ARM平台无法正常运行(因为内置的二进制包是X86平台版本)。

当然,基本的功能还是可以跑的,因为它已经内置一个JRuby和所需要的GEM包。

不过有时也会有某些问题,比如自带的JRuby中用到的ffi库配置有点问题,会报这么个错误:

logstash load error: ffi/ffi -- java.lang.NullPointerException: null

原因是lib/ruby/stdlib/ffi/platform下的arm-linuxaarch64-linux里缺少platform.conf文件,参考这个修复树莓派的脚本,把其中的arm-linux改为aarch64-linux,然后重build一个JRuby包替换之即可解决这个问题。

我碰到的主要问题是无法使用SSL,因为它使用了原生的netty库,而官方提供的是X86版本,需要自己下载源码编译一个ARM版本替换后才能用,详见旧文:在ARM平台上使用Logstash的SSL加密beats插件

解压到~/logstash,其它的配置根据自己需要来,主要是output配置里注意修改elasticsearch的地址为ES的地址,不是localhost。

启动之:

~/logstash/bin/logstash

同样建议用supervisor加持,注意,配置里需要加上环境变量。

安装配置Kibana

解压到~/kibana,官方的Kibana包解压出来是自带nodejs的,但这个当然是X86版本,所以要删除,让它自动使用系统安装的nodejs。

rm -rf ~/kibana/node

配置方面同样是改一下elasticsearch的地址,然后就可以启动了:

~/kibana/bin/kibana

也建议用supervisor加持。

推送到[go4pro.org]