在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-linux
和aarch64-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]