将ElasticStack安装到Ubuntu18

大致来说

我很久没有安装Elasticsearch了,因此这次遇到了麻烦,我打算记录下来。

以下是假设的情况。

    • OS

Ubuntu18

ElasticStack

Elasticsearch 6.3.2
Kibana 6.3.2
Logstash 1:6.3.2-1

リポジトリを足して入れる。アップデートしやすい、はず?

执行摘要

    • Javaを入れる場合、openjdk-8-jdk を使う事

openjdk-11-jdkやdefault-jdk(中身はopendjk-11)を利用すると、 logstashのインストール に失敗します。

JAVA_HOME、なくても動くっぽい
リポジトリ追加する方法の方が、安全だしアップデートしやすそう

安装

Java的安装

首先需要安装Java。

    openjdk-11-jdk を入れると、Elasticsearch, Kibana までは問題ないが、logstashを入れる際に /etc/logstash/..にアクセス権がない のようなエラーメッセージで、 apt-get install ができない。

开放式开发工具包(OpenJDK)11的内部看起来像是10.0.1系列,但至少在”通过仓库安装Logstash”方面似乎有问题。我还没有尝试tar.gz版本,所以也有可能没有问题。
根据支持矩阵,Logstash似乎不支持openjdk9及更高版本。非常感谢Jun Ohtani先生的指出!

所以,让我们使用OpenJDK8吧!(这就是我想说的,写这篇文章的原因)

    • https://packages.ubuntu.com/bionic/openjdk-11-jre-headless

 

    https://www.elastic.co/support/matrix#matrix_jvm
$ sudo apt-get install openjdk-8-jdk
$ java -version

安装Elasticsearch

如果在运行apt-get install时出现错误,那应该是没有安装Java。

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo apt-get install apt-transport-https
$ echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
$ sudo apt-get update && sudo apt-get install elasticsearch
$ sudo vi /etc/elasticsearch/elasticsearch.yml
# add configuration
network.host:0.0.0.0
$ sudo systemctl start elasticsearch
$ systemctl status elasticsearch
$ sudo systemctl enable elasticsearch

请确认能够通过 curl “http://localhost:9200/” 访问来进行初步运行确认。
如果启用了 IPv6,有时可能会返回503并无法访问。在这种情况下,可能需要禁用 IPv6 或进行一些调整。

$ sudo vi /etc/sysctl.conf
# add configuration
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
$ sudo sysctl -p
(うまく行かないようなら、reboot)

Kibana的安装

这应该没有什么特别的错误。根据安装后的时间点不同,有可能会返回503错误,如果发生这种情况,请确保elasticsearch已经正常运行。

$ sudo apt-get install kibana
$ sudo vi /etc/kibana/kibana.yml
server.host: "0.0.0.0"
$ sudo systemctl start kibana
$ systemctl status kibana
$ sudo systemctl enable kibana

确认是对 http://localhost:5601/ 等进行访问。

安装Logstash

如果在安装过程中出现错误,请确认是否正在使用openjdk-8-jdk(不要使用openjdk-11或default-jdk)。
如果使用包安装Java,则没有设置JAVA_HOME环境变量,但依然可以运行。

$ sudo apt-get install logstash
$ sudo systemctl start logstash
$ systemctl status logstash
$ sudo systemctl enable logstash

如果要接收syslog的话

如果要接收syslog日志,logstash需要绑定在514/UDP端口上。然而,由于非root用户无法将程序绑定到特权端口,因此在启动后514/UDP的绑定将失败。

[YYYY-MM-DDTHH:MM:SS,NNN][INFO ][logstash.inputs.udp      ] Starting UDP listener {:address=>"0.0.0.0:514"}
[YYYY-MM-DDTHH:MM:SS,NNN][ERROR][logstash.inputs.udp      ] UDP listener died {:exception=>#<SocketError: bind: name or service not known>, :backtrace=>["org/jruby/ext/socket/RubyUDPSocket.java:200:in `bind'", "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-udp-3.3.4/lib/logstash/inputs/udp.rb:116:in `udp_listener'", "/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-udp-3.3.4/lib/logstash/inputs/udp.rb:68:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:409:in `inputworker'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:403:in `block in start_input'"]}
[YYYY-MM-DDTHH:MM:SS,NNN][WARN ][logstash.runner          ] SIGTERM received. Shutting down.

有两种避免策,一是在root目录下运行logstash,二是通过iptables将其转发到另一个端口(如5514/UDP)。

    • logstashをrootで動かす

パッケージの場合、Ubuntuなどの場合は/etc/systemd/system/logstash.service などに起動ユーザが「logstash」とされている。その為、これを User=root などとして、root起動に変更する
logstashがroot権限で動くので、一義的なリスクは増加する可能性あり

iptables

スマートじゃないよね。

结束

目前對Java的未來還不清楚,但目前使用openjdk-8是安全的。如果Logstash可以在openjdk-11上運行,也許可以考慮遷移到該版本。

另外,也许只是偶然在我的环境和时间上无法运行openjdk-11,所以最好先尝试在jdk11上尝试一下。

apt-get remove openjdk-11-jdk openjdk-11-jre ; apt autoremove で消しされる。その後 $ java がエラーになれば、消え去ったはず(ゴミファイルは気にしない)。