ELK-开源日志收集分析软件栈

首先,日志能做什么?

  • 系统健康状况监控

  • 查找故障根源

  • 系统瓶颈诊断和调优

  • 追踪安全相关问题

现在,如何采集日志?

互联网大规模、分布式的特性决定了日志的源头越来越分散,产生的速度越来越快,传统的手段和工具(主要是linux grep、awk、wc等命令)显得日益力不从心。市场对新工具的需求已然催生出Splunk这样近百亿美元市值的专业日志分析解决方案供应商。然而,开源才是王道。以下是罗列的一些主流开源日志框架。(本文先整理了ELK的部分,其他开源日志框架介绍后续不定时间更新)

  • ELk(elasticsearch+logstash+kibana)

1.官方主页:https://www.elastic.co/products

2.开源简介:
顾名思义,ELK是三个开源工具ElasticSearch,Logstash,Kibana组合而成的软件栈,其中的核心是开源的分布式搜索引擎Elasticsearch,辅以Logstash灵活多样的日志收集过滤传送功能以及Kibana炫酷的前端展示面板,组合成一套可以媲美商业应用的解决方案。

  • Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。

  • Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。

  • kibana 也是一个开源和免费的工具,他 Kibana 可以为 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

3.架构原理
在需要收集日志的所有服务上部署 logstash ,作为 logstash agent ( logstash shipper )用于监控并过滤收集日志,将过滤后的内容发送到 logstash indexer ,logstash indexer 将日志收集在一起交给全文搜索服务 ElasticSearch ,可以用ElasticSearch 进行自定义搜索通过 Kibana 来结合自定义搜索进行页面展示。架构图如Fig1.1所示:

Fig 1.1 elk.png

4.安装部署

  • JDK安装和配置(略)

  • Logstash安装

下载并安装 Logstash ,安装 logstash 只需将它解压的对应目录即可,例如:/usr/local 下:
<pre># tar -zxf logstash-2.2.2.tar.gz -C /usr/local/ </pre>

安装后运行如下命令:
<pre># cd /usr/local/logstash-2.2.2/bin

logstash -e 'input { stdin { } } output { stdout {} }'

Hello World!

2016-03-07T12:46:12.095Z XiaoMeng-MacMini.local HelloWorld!

</pre>

我们可以看到,我们输入什么内容logstash按照某种格式输出,其中-e参数参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。使用CTRL-C命令可以退出之前运行的Logstash。

使用-e参数在命令行中指定配置是很常用的方式,不过如果需要配置更多设置则需要很长的内容。这种情况,我们首先创建一个简单的配置文件,并且指定logstash使用这个配置文件。 例如:在 logstash 安装目录下创建一个“基本配置”测试文件 logstash-test.conf, 文件内容如下:
<pre># cat logstash-simple.conf
input { stdin { } }
output {
stdout { codec=> rubydebug }
}</pre>

Logstash 使用 input 和 output 定义收集日志时的输入和输出的相关配置,本例中input 定义了一个叫 "stdin" 的 input , output 定义一个叫 "stdout" 的 output 。无论我们输入什么字符, Logstash 都会按照某种格式来返回我们输入的字符,其中 output被定义为 "stdout" 并使用了 codec 参数来指定 logstash 输出格式。
使用logstash的-f参数来读取配置文件,执行如下开始进行测试:
<pre># logstash agent -f logstash_simple.conf Settings: Default pipeline workers: 4
Logstash startup completed
echo "date hello world" //命令行输入
//测试结果
{
"message" => "echo "date hello world"",
"@version" => "1",
"@timestamp" => "2016-03-09T00:47:41.172Z",
"host" => "XiaoMeng-MacMini.local"
}
</pre>

  • Elasticsearch安装和配置

下载 Elasticsearch 后,解压到对应的目录就完成 Elasticsearch 的安装。
<pre># tar -zxf elasticsearch-2.2.0.tar.gz -C /usr/local/</pre>
启动Elasticsearch
<pre># cd /usr/local/elasticsearch-2.2.0/bin
# elasticsearch</pre>
如果使用远程连接的 Linux 的方式并想后台运行 elasticsearch ,可以使用nohup:
<pre># nohup /usr/local/elasticsearch-2.2.0/bin/elasticsearch > nohup &</pre>
查看 elasticsearch 的 9200 端口是否已监听,是则说明 elasticsearch 已成功运行:
<pre># netstat -anp |grep 9200</pre>
接下来我们在 logstash 安装目录下创建一个用于测试 logstash 使用 elasticsearch作为 logstash 的后端的测试文件 logstash_es_simple.conf,该文件中定义了stdout和elasticsearch作为output,这样的“多重输出”即保证输出结果显示到屏幕上,同时也输出到elastisearch中。
<pre># cat logstash_es_simple.conf
input { stdin { } }
output {
elasticsearch {hosts => "localhost" }
stdout { codec=> rubydebug }
}</pre>
执行如下命令:
<pre># logstash agent -f logstash-es-simple.conf
hello logstash//命令行输入
//测试结果
{
"message" => "hello logstash",
"@version" => "1",
"@timestamp" => "2016-03-09T01:15:44.766Z",
"host" => "XiaoMeng-MacMini.local"
}
</pre>
接下来使用 curl 命令发送请求来查看 ES 是否接收到了数据:
<pre># curl 'http://localhost:9200/_search?pretty'
//测试结果
{
"took" : 19,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "logstash-2016.03.09",
"_type" : "logs",
"_id" : "AVNY8afVDB1d7fLqdOmL",
"_score" : 1.0,
"_source" : {
"message" : "hello logstash",
"@version" : "1",
"@timestamp" : "2016-03-09T01:15:44.766Z",
"host" : "XiaoMeng-MacMini.local"
}
} ]
}
}
</pre>
至此,已经成功利用 Elasticsearch 和 Logstash 来收集日志数据了。

  • elasticsearch 插件
    Elasticsearch-kopf 插件可以查询 Elasticsearch 中的数据,安装 elasticsearch-kopf,只要在你安装 Elasticsearch 的目录中执行以下命令即可:
    <pre># cd /usr/local/elasticsearch-2.2.0/bin/
    # plugin install lmenezes/elasticsearch-kopf</pre>

安装完成后在 plugins 目录下可以看到 kopf.在浏览器访问 http://localhost:9200/_plugin/kopf 浏览保存在 Elasticsearch 中的数据,如图Fig1.2所示:

Fig 1.2 plugins.png
  • Kibana安装

下载 kibana 后,解压到对应的目录就完成 kibana 的安装
<pre>tar -zxf kibana-4.4.1-linux-x64.tar.gz -C /usr/local/</pre>
启动kibana
<pre># cd /usr/local/kibana-4.4.1-linux-x64/bin
# kibana</pre>
使用 http://localhost :5601 访问 Kibana ,登录后,首先,配置一个索引,默认, Kibana 的数据被指向 Elasticsearch ,使用默认的 logstash-* 的索引名称,并且是基于时间的,点击“ Create ”即可。如图Fig1.3所示。

Fig 1.3 kibana.png

看到如下界面说明索引创建完成,如图Fig1.4所示。

Fig 1.4 create index.png

点击“ Discover ”,可以搜索和浏览 Elasticsearch 中的数据,默认搜索的是最近 15分钟的数据。可以自定义选择时间。
到此,说明简易的 ELK 平台安装部署已经完成。

  • 配置 logstash 作为 Indexer

将 logstash 配置为索引器,并将 logstash 的日志数据存储到 Elasticsearch ,本范例主要是索引本地系统日志。
<pre># cat /usr/local/logstash-2.2.2/bin/logstash_indexer.conf
input {
file {
type =>"syslog"
path => ["/var/log/messages", "/var/log/syslog" ]
}
syslog {
type =>"syslog"
port =>"5544"
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {hosts => "localhost" }
}
# cd /usr/local/logstash-2.2.2/bin/
# logstash -f logstash_indexer.conf</pre>
使用 echo 命令模拟写入日志,命令执行后看到如图Fig1.5所示的信息:
<pre># echo " 'date' Jay" >> /var/log/messages</pre>
刷新 kibana ,发现最新的测试数据显示到浏览器中,如图Fig1.6所示:

Fig 1.6 刷新kibana.png

到此, ELK 平台部署和基本的测试已完成。

---(to be continued)

说明
1.本文搭建平台为OSX10.10.6;
2.elasticsearch,需要新建普通用户单独执行,不要用root执行;
3.在logstash-2.2.2中配置elasticsearch output时,host参数改为hosts参数。具体可使用--configtest 检测配置文件是否兼容旧版的参数配置;
4.本文所有软件配置均为官方最新版本,版本号对应文件名;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容