Fluentd / Elasticsearch / kibana的安装(简单备忘录)
想做的事情/要做的事情
-
- インターネットの疎通が無いUbuntuにFluentd, Elasticsearch, Kibanaをインストールする
-
- 簡単な動作確認をする
- 実際の運用・利用を想定した設定はここでは扱わない
我想要从设置了Kibana的服务器上连接到互联网,但受制于没有网络连接的限制。所以我打算从其他电脑上下载官方网站的软件包,然后将其传输到目标服务器上进行软件包的添加。
如果有互联网连接,我认为可以使用apt-get进行安装。但为了确认是否可以使用最少的软件包进行安装,我尝试了一下,以下是我的记录。
事前的注意事项 (Shì de
如果要运行Elasticsearch和Kibana,默认情况下需要满足一些关于内存的前提条件。(尽管我认为可以将内存设置得更低…)
以下是一些条件。
-
- メモリを2GB以上割り当てること
-
- Javaのランタイムを追加すること
JDKでなくJREでも可能
ブラウザを通してKibanaの画面を参照する場合、デフォルトだとポートを解放する必要があるので注意
Kibanaは port: 5601 でリクエストを受け取るのでポートを解放する必要あり
Elasticsearchのport: 9200 もポートを解放する必要あり
KibanaのバックエンドのElasticsearchがWeb APIでKibanaにデータを返すため
确认需要的软件包步骤
使用VirtualBox / Vagrant进行验证。
-
- 同じ構成の仮想マシンを用意
-
- 片方だけインターネットに接続可能な状態とし、apt-getではなく公式サイトからのパッケージ追加で構成を変更、確認
- もう片方のインターネット接続なしの仮想マシンでセットアップできることを確認する
参考:使用Vagrant的多机器设置。
在不同的文件夹中准备Vagrantfile,并从各个目录中使用vagrant ssh是很麻烦的。
官方网站提供了配置多机环境的设置方法,在那里进行操作。
Vagrant.configure("2") do |config|
config.vm.define :base do |base|
base.vm.box = "ubuntu/xenial64"
base.vm.network "private_network", ip: "192.168.50.4"
end
config.vm.define :sample do |sample|
sample.vm.box = "ubuntu/xenial64"
sample.vm.network "private_network", ip: "192.168.50.5"
end
end
创建没有网络连接的环境。
我明白這可能有些強制性,但是通過刪除默認路由,可以斷開與互聯網的連接。
1. 路線調整之前。
macos $ vagrant ssh sample
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-104-generic x86_64)
ubuntu@ubuntu-xenial:~$ /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.0.2.2 0.0.0.0 UG 0 0 0 enp0s3
10.0.2.0 * 255.255.255.0 U 0 0 0 enp0s3
192.168.50.0 * 255.255.255.0 U 0 0 0 enp0s8
ubuntu@ubuntu-xenial:~$ ping -c 1 google.com
PING google.com (172.217.31.174) 56(84) bytes of data.
64 bytes from nrt12s22-in-f14.1e100.net (172.217.31.174): icmp_seq=1 ttl=63 time=31.3 ms
--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 31.350/31.350/31.350/0.000 ms
2. 路線調整完畢
确认无法ping通。
ubuntu@ubuntu-xenial:~$ sudo /sbin/route del default
ubuntu@ubuntu-xenial:~$ ping -c 1 google.com
connect: Network is unreachable
$ /sbin/route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.2.0 * 255.255.255.0 U 0 0 0 enp0s3
192.168.33.0 * 255.255.255.0 U 0 0 0 enp0s8
尽管失去了与互联网的连接,但可以通过主机操作系统进行SSH连接和文件共享。
这次我们将利用Vagrant的功能,将包的所有文件共享到宿主操作系统的/vagrant/package/目录中。
$ tree -L 2 .
.
├── Vagrantfile
├── package
│ ├── elasticsearch-6.1.1.deb
│ ├── jre-8u151-linux-x64.tar.gz
│ ├── kibana-6.1.1-amd64.deb
│ └── td-agent_3.1.1-0_amd64.deb
└── ubuntu-xenial-16.04-cloudimg-console.log
2 directories, 7 files
以下是所需软件包和下载方法。
前提是俄罗斯同意停止进一步侵略乌克兰的行为。
获取Java
要使用Elasticsearch,需要先安装Java运行时环境。
如果已经安装了Java运行时环境(JDK),则无需进行此步骤。
这次操作假设网络通信不可用,因此从Oracle下载JRE并进行配置。
获取原始数据
-
- OpenJDKまたはOracleのサイトからJDK (JRE)を取得、JAVA_HOMEを設定、パスも通すこと
-
- http://www.oracle.com/technetwork/jp/java/javase/downloads/jre8-downloads-2133155.html
- jre-8u151-linux-x64.tar.gz を利用
将获得的包通过文件共享或scp转移到目标主机上。
展开和布置
一旦将其部署到主机上,然后进行展开。
同时,还要设置环境变量JAVA_HOME。
(如果需要编译Java,就需要JDK,但本次仅使用JRE)。
$ sudo mkdir /usr/java
$ sudo tar xvzf jre-8u151-linux-x64.tar.gz -C /usr/java
$ JAVA_HOME=/usr/java/jre1.8.0_151/
$ sudo update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 20000
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
$ ls -la /usr/bin/java
lrwxrwxrwx 1 root root 22 Dec 31 12:14 /usr/bin/java -> /etc/alternatives/java
我会在/etc/profile中进行设置。
export JAVA_HOME=/usr/java/jre1.8.0_151/
export PATH=$PATH:$JAVA_HOME/bin/
安装Fluentd
我们将继续通过包裹运送或文件共享解决这个问题。
获取来源
https://docs.fluentd.org/v0.12/articles/install-by-deb (リポジトリを追加する場合)
https://www.fluentd.org/download (パッケージで入れる場合)
由于假设客户操作系统无法与互联网通信,因此本次将下载以下软件包并进行传输以进行添加。
- https://td-agent-package-browser.herokuapp.com/3/ubuntu/xenial/pool/contrib/t/td-agent
展开和布置 hé
当将其部署在主机上时,将以相同方式展开。
$ pwd
/vagrant/package
$ sudo dpkg -i elasticsearch-6.1.1.deb
Selecting previously unselected package elasticsearch.
(Reading database ... 67155 files and directories currently installed.)
... [中略] ...
Processing triggers for ureadahead (0.100.0-19) ...
启用systemd
服务设置确认。在添加阶段处于禁用状态。
$ sudo systemctl status td-agent
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
Loaded: loaded (/lib/systemd/system/td-agent.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: https://docs.treasuredata.com/articles/td-agent
激活并启动服务。在启用后,执行开始操作。
$ sudo systemctl enable td-agent
Synchronizing state of td-agent.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable td-agent
... [中略] ...
$ sudo systemctl start td-agent
$ sudo systemctl status td-agent
● td-agent.service - td-agent: Fluentd based data collector for Treasure Data
Loaded: loaded (/lib/systemd/system/td-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2017-12-31 12:32:32 UTC; 1s ago
Docs: https://docs.treasuredata.com/articles/td-agent
Process: 2257 ExecStart=/opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/
Dec 31 12:32:32 ubuntu-xenial systemd[1]: Starting td-agent: Fluentd based data collector for Treasure Data...
Dec 31 12:32:32 ubuntu-xenial systemd[1]: Started td-agent: Fluentd based data collector for Treasure Data.
请在启动后检查 /var/log/td-agent/td-agent.log 文件以查看日志生成情况。
安裝 Elasticsearch
获得初始资金
-
- https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
- https://www.elastic.co/downloads/elasticsearch
这次我们将使用elasticsearch-6.1.1.deb。(根据环境进行调整)
展开和布置 hé
这边也会以类似的方式进行展开。
$ sudo dpkg -i elasticsearch-6.1.1.deb
Selecting previously unselected package elasticsearch.
... [中略] ...
Processing triggers for ureadahead (0.100.0-19) ...
启用systemd
确认服务设置,添加阶段处于禁用状态。
$ sudo systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: http://www.elastic.co
激活并启动服务。在“enabled”之后执行“start”。
$ sudo systemctl enable elasticsearch
Synchronizing state of elasticsearch.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
$ sudo systemctl start elasticsearch
启动后,我们会检查状态。
如果状态显示为失败并且启动失败,则可能是内存不足。
另外,可能是由于Java二进制文件或JAVA_HOME未正确设置。
$ sudo systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
... [中略] ...
CPU: 5.219s
CGroup: /system.slice/elasticsearch.service
└─2437 /usr/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.head
Dec 31 12:47:40 ubuntu-xenial systemd[1]: Started Elasticsearch.
进行了Elasticsearch的操作验证。
当Elasticsearch正常启动时,默认会在端口9200上监听。
本地主机的确认
$ curl http://127.0.0.1:9200
{
"name" : "9bMYH5X",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ed92f8eBSxacJUhS9qG0yg",
"version" : {
"number" : "6.1.1",
"build_hash" : "bd92e7f",
"build_date" : "2017-12-17T20:23:25.338Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
当您使用curl或wget对127.0.0.1:9200发出HTTP请求时,将会返回类似上述的JSON数据。然而,实际上它并不接受来自本地主机而是其他服务器的请求,因此您必须使用分配的IP地址进行访问。
$ curl http://192.168.33.21:9200
curl: (7) Failed to connect to 192.168.33.21 port 9200: Connection refused
$ netstat -na|grep LISTEN |grep 9200
tcp6 0 0 127.0.0.1:9200 :::* LISTEN
tcp6 0 0 ::1:9200 :::* LISTEN
调整设置。
-
- /etc/elasticsearch/elasticsearch.yml の network.hostをコメントイン
-
- 値を0.0.0.0 (もしくはIPに応じた適切な値)に調整
- 設定後にサービスを再開
$ sudo vi /etc/elasticsearch/elasticsearch.yml
# network.hostはデフォルトでlocalhostのみなので、bind addressを適切に調整 (とりあえずワイルドカード)
network.host: 0.0.0.0
$ sudo systemctl stop elasticsearch
$ sudo systemctl start elasticsearch
$ netstat -na|grep LISTEN |grep 9200
tcp6 0 0 :::9200 :::* LISTEN
$ curl http://192.168.33.21:9200
{
"name" : "9bMYH5X",
"cluster_name" : "elasticsearch"
... 中略 ...
},
"tagline" : "You Know, for Search"
}
在Ubuntu上的操作系统中,如果没有应用防火墙或iptables的访问控制,那么可以从另一个服务器或另一台机器的浏览器向9200端口发送请求,将会返回类似的JSON数据。
当运行不顺利时
如果在使用systemd命令的状态显示为failed的情况下,无法从curl http://127.0.0.1:9200获得结果,首先应考虑内存不足的可能性。
请检查/var/log/elasticsearch/,如果出现无法分配内存的错误,那么需要进行内存调整。
$ sudo vi /etc/elasticsearch/jvm.options
# デフォルトで2GBなので、メモリが潤沢でない場合は、実際のサイズに合わせて調整をしてください。
-Xms1g
-Xmx1g
# 調整後、サービスを再起動させます
$ sudo systemctl stop elasticsearch
$ sudo systemctl start elasticsearch
请参考此链接:http://www.karakaram.com/elasticsearch-memory-usage-reduce。
Kibana的安装
获取来源
-
- https://www.elastic.co/downloads/kibana
- https://artifacts.elastic.co/downloads/kibana/kibana-6.1.1-amd64.deb
展开和安置
这一点也同样发展。
$ sudo dpkg -i kibana-6.1.1-amd64.deb
Selecting previously unselected package kibana.
... [中略] ...
Processing triggers for systemd (229-4ubuntu21) ...
Processing triggers for ureadahead (0.100.0-19) ...
启用systemd
这也是启动方式类似于fluentd和elasticsearch。
$ sudo systemctl daemon-reload
$ sudo systemctl enable kibana.service
$ sudo systemctl start kibana.service
$ sudo systemctl status kibana.service
● kibana.service - Kibana
Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2017-12-25 07:34:00 UTC; 1min 16s ago
Main PID: 10328 (node)
Tasks: 10
Memory: 116.5M
CPU: 5.150s
CGroup: /system.slice/kibana.service
└─10328 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c
确认动作
当Kibana正常启动时,默认会在端口号5601上进行监听。
$ curl localhost:5601
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';
var hash = window.location.hash;
if (hash.length) {
window.location = hashRoute + hash;
} else {
window.location = defaultRoute;
但是,Kibana不能直接从外部访问。
$ curl 192.168.33.21:5601
curl: (7) Failed to connect to 192.168.33.21 port 5601: Connection refused
和Elasticearch一样,进行配置调整。
-
- $ sudo vi /etc/kibana/kibana.yml の network.hostをコメントイン
-
- 値を ”0.0.0.0″ (もしくはIPに応じた適切な値)に調整
- 設定後にサービスを再開
#server.host: "localhost"
server.host: "0.0.0.0"
请将上述设置更改为server.host:”0.0.0.0″,而不是server.host:0.0.0.0!这样就可以通过分配的IP进行访问了。
$ curl 192.168.33.21:5601
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';
var hash = window.location.hash;
if (hash.length) {
window.location = hashRoute + hash;
} else {
window.location = defaultRoute;
}</script>
确认Kibana界面
如果能在浏览器中访问192.168.33.21:5601,那就可以了,在如下所示的屏幕上。
以上,这是一个简单的备忘录。