Elasticsearch、Fluentd与Kibana:开源的日志搜索与可视化方案
提供:ZStack社区
前言
Elasticsearch、Fluentd与Kibana的组合(EFK)可以进行日志数据的采集、索引、搜索以及可视化。该组合是商业软件Splunk的替代:Splunk在一开始用的时候也是免费的,但如果数据多了则需要收费。
本文介绍如何用该组合构建你的日志解决方案。
前提条件
- 安装了Ubuntu 14.04的云主机
- 在该主机上具有sudo权限的用户
Elasticsearch的安装配置
安装Java
Elasticsearch需要Java,所以先安装Java。
sudo apt-get update
sudo apt-get install openjdk-7-jre-headless --yes
检查一下Java是否成功安装了:
java -version
输出应该是这个样子:
java version "1.7.0_55"
OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
获取Elasticsearch
下一步,下载Elasticsearch的deb安装包,安装之。
sudo wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.2.deb
sudo dpkg -i elasticsearch-1.2.2.deb
Elasticsearch安全加固
到1.2版本为止,Elasticsearch的动态脚本功能是默认开启的。因为本文将把Kibana仪表盘设置为从公网可以访问,所以为了安全起见最好关闭这个功能。进入/etc/elasticsearch/elasticsearch.yml
文件,在末尾加入如下一行内容:
script.disable_dynamic: true
启动Elasticsearch
运行如下命令运行Elasticsearch:
sudo service elasticsearch start
Kibana的安装配置
获取Kibana
进入你的用户主目录:
cd ~
输入如下命令以下载Kibana:
curl -L https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz | tar xzf -
sudo cp -r kibana-3.1.0 /usr/share/
配置Kibana
我们需要Kibana使用80端口与Elasticsearch进行通讯,而不是默认的9200端口,因此我们需要更改Kibana的配置文件config.js
。
用编辑器打开/usr/share/kibana-3.1.0/config.js
,找到下面这行:
elasticsearch: "http://"+window.location.hostname+":9200",
把它替换成下面这行:
elasticsearch: "http://"+window.location.hostname+":80",
安装配置Nginx(代理服务器)
我们使用Nginx作为代理服务器,让经过身份认证的用户可以从公网访问Kibana的仪表盘。
首先,安装Nginx:
sudo apt-get install nginx --yes
Kibana自带的nginx.conf写得已经比较好,我们只需要做一点点修改即可。
首先,下载安装配置文件:
wget https://assets.digitalocean.com/articles/fluentd/nginx.conf
sudo cp nginx.conf /etc/nginx/sites-available/default
注:该配置文件来源于这个Github仓库。
然后,在编辑器中打开/etc/nginx/sites-available/default
,进行如下修改(主要是server_name、access_log、location三部分):
#
# 针对Elasticsearch + Kibana的Nginx代理配置
#
# 此处将为仪表盘设置密码保护。
# 你也可以考虑为所有路径设置密码。
#
# 浏览器在首次触发访问该路径的ajax请求时,
# 会弹出用户名/密码的输入框。
#
# 如果你使用本功能,请将config.js配置为 http://FQDN:80/
# 取代原来的 http://FQDN:9200
#
server {
listen *:80 ;
server_name localhost;
access_log /var/log/nginx/kibana.log;
location / {
root /usr/share/kibana-3.1.0;
index index.html index.htm;
}
最后,重启nginx:
$ sudo service nginx restart
现在,在浏览器里打开服务器的IP地址或域名,就应该能看到Kibana的仪表盘了:
Fluentd的安装配置
最后是Fluentd的安装。我们将使用Fluetd的软件包版本td-agent,该软件包由Treasure Data维护。
从td-agent软件包安装Fluentd
使用如下命令安装Fluentd:
wget http://packages.treasuredata.com/2/ubuntu/trusty/pool/contrib/t/td-agent/td-agent_2.0.4-0_amd64.deb
sudo dpkg -i td-agent_2.0.4-0_amd64.deb
安装插件
我们需要安装如下几个插件:
- out_elasticsearch:该插件将Fluentd的数据流导给Elasticsearch。
- outrecordreformer:该插件可以将数据处理成更多格式。
输入以下命令安装插件(第一个apt-get用于安装out_elasticsearch,这会需要服务器上安装过make
和libcurl
):
sudo apt-get install make libcurl4-gnutls-dev --yes
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-record-reformer
然后,配置Fluentd以监听syslog并将其发送给Elasticsearch。用编辑器打开/etc/td-agent/td-agent.conf
,在文件开头处添加如下内容:
<source>
type syslog
port 5140
tag system
</source>
<match system.*.*>
type record_reformer
tag elasticsearch
facility ${tag_parts[1]}
severity ${tag_parts[2]}
</match>
<match elasticsearch>
type copy
<store>
type stdout
</store>
<store>
type elasticsearch
logstash_format true
flush_interval 5s #debug
</store>
</match>
启动Fluentd
输入如下命令启动Fluentd:
sudo service td-agent start
将rsyslog流量转发给Fluentd
Ubuntu 14.04自带了rsyslogd。我们需要对它做一些配置,以将syslog事件转发到Fluentd监听的端口(本文使用了5140端口)。
用编辑器打开/etc/rsyslog.conf
(需要sudo
权限),在文件首部添加如下内容:
*.* @127.0.0.1:5140
保存退出,重启rsyslogd:
sudo service rsyslog restart
自定义Kibana仪表盘
Kibana默认的仪表盘只显示了最通用的内容,所以可以考虑做一下自定义。以下展示两种方法。
方法1:使用模板(Template)
Fluentd团队提供了另一个Kibana配置文件,如果使用模板进行自定义的话,那么这个配置文件会比Kibana的默认配置好用。运行如下命令以获取该配置文件:
wget -O default.json https://assets.digitalocean.com/articles/fluentd/default.json
sudo cp default.json /usr/share/kibana-3.1.0/app/dashboards/default.json
注:源文件来自这个GitHub gist。
现在到浏览器里刷新页面,应该看到Kibana现在已经根据syslog的严重等级(severity)和程序模块(facility)显示矩形图,并在一个表格里展示出最近的日志内容。
方法2:手动配置
在浏览器里访问Kibana仪表盘首页:
选择最下面的Blank Dashboard: I’m comfortable configuring on my own(空白模板):
在本页面,点击右侧的+ ADD A ROW(添加行)按钮,会弹出添加新行的配置界面(一个“行”可以包含一个或多个“板块”(panel))。输入一个名称,然后点击Create Row(创建行)按钮,然后点Save(保存)。现在就可以看到新建的行了。
空白行创建后,Kibana在页面左侧会提醒Add panel to empty row(在空白行里添加板块)。点击该按钮,会弹出新建板块的配置界面。在下拉餐单中选择histogram(矩形图)。矩形图是时间图表,详见Kibana文档。
矩形图的配置涉及很多参数,不过我们可以简单的下拉到页面底部,点击Save按钮。如此,新的板块就创建完毕了。
延伸阅读
更多关于Kibana配置的信息,可参阅Kibana文档页。
本文来源自DigitalOcean Community。英文原文:Elasticsearch, Fluentd, and Kibana: Open Source Log Search and Visualization by Kiyoto Tamura
本文由Fluentd投稿。
翻译:lazycai