Elasticsearch、Fluentd与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

时间: 2024-10-11 11:30:25

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

使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数.执行时间.成功率等 异常数据自动触发消息通知 基于日志的数据挖掘 很多团队在日志方面可能遇到的一些问题有: 开发人员不能登录线上服务器查看详细日志,经过运维周转费时费力 日志数据分散在多个系统,难以查找 日志数据量大,查询速度慢 一个调用会涉及多个系统,难以在这些系统的日志中快速定位数据 数据不够实时 常见的一些重量级的开源

[Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这

CentOS7使用Elasticsearch+ Logstash+kibana快速搭建日志分析平台

CentOS7使用Elasticsearch+ Logstash+kibana快速搭建日志分析平台 介绍: 安装logstash,elasticsearch,kibana三件套,搜索程序一般由索引链及搜索组件组成. 索引链功能的实现需要按照几个独立的步骤依次完成:检索原始内容.根据原始内容来创建对应的文档.对创建的文档进行索引. 搜索组件用于接收用户的查询请求并返回相应结果,一般由用户接口.构建可编程查询语句的方法.查询语句执行引擎及结果展示组件组成. Elasticsearch是个开源分布式搜

利用 log-pilot + elasticsearch + kibana 搭建 kubernetes 日志解决方案

开发者在面对 kubernetes 分布式集群下的日志需求时,常常会感到头疼,既有容器自身特性的原因,也有现有日志采集工具的桎梏,主要包括: 容器本身特性: 采集目标多:容器本身的特性导致采集目标多,需要采集容器内日志.容器 stdout.对于容器内部的文件日志采集,现在并没有一个很好的工具能够去动态发现采集.针对每种数据源都有对应的采集软件,但缺乏一站式的工具. 弹性伸缩难:kubernetes 是分布式的集群,服务.环境的弹性伸缩对于日志采集带来了很大的困难,无法像传统虚拟机环境下那样,事先

使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务

1.使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务 http://www.tuicool.com/articles/BFzye2 2.ElasticSearch+LogStash+Kibana+Redis日志服务的高可用方案 http://www.tuicool.com/articles/EVzEZzn 3.示例 开源实时日志分析ELK平台部署 http://baidu.blog.51cto.com/71938/1676798?utm_source=t

elk/elasticsearch+fluentd+kibana

分布式日志收集系统 日志收集系统采用elasticsearch+fluentd+kibana,用fluentd代替elk社区里的logstash,logstas的插件是最多的,同时logstash的性能和资源消耗太高,经某站大佬压力测试,在环境为2核4g的云计算服务器上,logstash写入qps极限为8000,通过结合易瑞现有询报价系统,同时也是用户3000+的项目产品,logstash负载压力显然承受不住,服务器资源消耗太严重,所以基于以上考虑采用新型日志收集产品fluentd来代替logs

利用 Log-Pilot + Kafka + Elasticsearch + Kibana 搭建 kubernetes日志解决方案

利用 Log-Pilot + Kafka+Elasticsearch + Kibana 搭建 kubernetes日志解决方案 1.前提条件 已有kafka.elk.k8s集群,这3套集群搭建网上资料很多,这里不写,IP规划如下所示: kafka集群 10.6.11.22:9092 10.6.11.23:9092 10.6.11.24:9092 ELK集群 10.6.11.25:9200 10.6.11.26:9200 10.6.11.27:9200 k8s集群 10.6.11.28(maste

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

centos7搭建ELK开源实时日志分析系统

Elasticsearch 是个开源分布式搜索引擎它的特点有分布式零配置自动发现索引自动分片索引副本机制 restful 风格接口多数据源自动搜索负载等. Logstash 是一个完全开源的工具他可以对你的日志进行收集.分析并将其存储供以后使用如搜索. kibana 也是一个开源和免费的工具他 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面可以帮助您汇总.分析和搜索重要数据日志. 日志从客户端到服务端处理后在传递给客户的数据流流向如下