当将 Kibana、Fluentd 和 Elasticsearch 安装在一台 EC2 实例上时的备忘录
做的事情
尝试在一台EC2实例上安装Apache,并通过Fluentd解析访问日志,然后将其传输到Elasticsearch,并在Kibana上进行可视化。
亚马逊云服务
云服务器(EC2)
使用t2.micro实例类型。AMI为Amazon Linux。
安全组
设定入站。
安装软件包
各种各样的更新
无论如何,让我们将软件包更新到最新版本。
$ sudo yum update
Kibana 可视化分析平台
参考にしながら、https://www.elastic.co/guide/en/kibana/current/rpm.htmlを使用してインストールします。
可以通过修改 /etc/kibana/kibana.yml 配置文件中的 server.host 来使 Kibana 可以从外部访问并启动。
此外,由于 Elasticsearch 的 URL 将不再能够通过 localhost 访问,所以需要进行修改。
server.host: "ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com"
...
elasticsearch.url: "http://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:9200"
当设置发生变化时,开始执行。
$ sudo /etc/init.d/kibana start
弹性搜索
参考にしながらインストールします。ドキュメントによると、rpmは用意されていないようですので、tarを解凍してインストールする必要がありそうです。まずはホームディレクトリに展開して使用してみましょう。
由于Amazon Linux只安装了Java7,而Elasticsearch需要Java8,因此需要单独安装Java8。
$ sudo yum install java-1.8.0-openjdk.x86_64
使用alternatives命令将操作系统默认的Java版本切换为Java8。
$ sudo alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
2 /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
Enter to keep the current selection[+], or type selection number: 2
将设置文件设定为~/elasticsearch-5.6.0/config/elasticsearch.yml,在外部进行通信需要修改主机设置如下所示。
由于transport.host不能为localhost,因此需要添加一个固定设置来确保其正常运行。
network.host: ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com
...
transport.host: localhost
通过以下命令启动Elasticsearch,但由于内存不足而无法启动(考虑到t2.micro的限制)。
$ ~/elasticsearch-5.6.0/bin/elasticsearch
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ec2-user/hs_err_pid31308.log
由于没有其他办法,需要修改 ~/elasticsearch-5.6.0/config/jvm.options 文件来设置堆内存。将原本的默认2G改为256MB。
-Xms256m
-Xmx256m
#-Xms2g
#-Xmx2g
把它改成可以运行的。加上 nohup,使其成为守护进程并在注销后继续运行。
$ nohup ~/elasticsearch-5.6.0/bin/elasticsearch &
流畅的日志收集器
在安装之前,请参考https://docs.fluentd.org/v0.12/articles/install-by-rpm。简单快捷地使用一行命令进行安装。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
安装完成后进行操作确认。
如果能够通过浏览器访问以下地址,那就太好了。
-
- Kibana
ttp://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:5601/
Elasticsearch
ttp://ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:9200/
Apache日志传输设置。
安装Apache
$ sudo yum install httpd
因为存储httpd日志的目录的所有者和权限都是root的700,因此需要修改权限以允许apache用户和其所属的组用户进行访问。
$ sudo chown -R apache:apache /var/log/httpd/
$ sudo chmod g+rx /var/log/httpd/
此外,将Fluentd的执行用户(td-agent)加入到apache组中,以便Fluentd能够访问日志。
$ sudo usermod -G apache td-agent
启动httpd。
$ sudo /etc/init.d/httpd start
Fluentd的配置
在 /etc/td-agent/td-agent.conf 文件中追加以下内容。
<source>
@type tail
path /var/log/httpd/access_log
tag apache.access_log
pos_file /var/log/td-agent/httpd-access.log.pos
format apache2
</source>
<match apache.**>
@type copy
<store>
@type stdout
</store>
<store>
@type elasticsearch
host EC2のIPアドレス
port 9200
type_name access_log
logstash_format true
logstash_prefix apache_access
logstash_dateformat %Y%m
</store>
</match>
需要记住,在后面的Kibana配置中将使用这个conf文件中的logstash_prefix。另外,需要安装Elasticsearch插件。
$ sudo td-agent-gem install fluent-plugin-elasticsearch
启动Fluentd并准备完毕。
$ sudo /etc/init.d/td-agent start
使Kibana能够查看图形
访问Apache服务器.
随便用浏览器访问服务器,并下载访问日志。
如果设置正确,Fluentd应该会将解析apache访问日志的数据保存在/var/log/td-agent/td-agent.log中。
Kibana的索引模式设置
在访问一定数量的页面后,现在转而访问Kibana。然后会跳转到Elasticsearch数据源指定的页面,输入apache_access-*作为索引模式。这与Fluentd的conf文件中提到的logstash_prefix相同。输入完成后,点击创建。
做成
我已经可以在Kibana上玩耍了。