ElasticsearchFluentd与Kibana:开源的日志搜索与可视化方案

Posted ZStack上海云轴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticsearchFluentd与Kibana:开源的日志搜索与可视化方案相关的知识,希望对你有一定的参考价值。

Elasticsearch、Fluentd与Kibana:开源的日志搜索与可视化方案

提供:ZStack社区

前言

ElasticsearchFluentdKibana的组合(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

安装插件

我们需要安装如下几个插件:

  1. out_elasticsearch:该插件将Fluentd的数据流导给Elasticsearch。
  2. outrecordreformer:该插件可以将数据处理成更多格式。

输入以下命令安装插件(第一个apt-get用于安装out_elasticsearch,这会需要服务器上安装过makelibcurl):

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

以上是关于ElasticsearchFluentd与Kibana:开源的日志搜索与可视化方案的主要内容,如果未能解决你的问题,请参考以下文章

ELK 日志采集框架:Kibana安装与配置

C#使用Consul集群进行服务注册与发现

Kibana 图形试玩 | 多突出各原因占比

一线架构师的一些项目管理心得

Elastic Agent 和 Fleet 可以更轻松地将你的系统与 Elastic 集成

Elastic Agent 和 Fleet 可以更轻松地将你的系统与 Elastic 集成