文档章节

用logstash,elasticSearch,kibana实现数据收集和统计分析工作

二两豆腐
 二两豆腐
发布于 2015/11/28 18:37
字数 1940
阅读 2231
收藏 23

世界上的软件80%是运行在内网的,为了使得运行在客户端的软件有良好的体验,并且得到有用的数据,我们需要对这些系统产生的数据,进行统计和分析,这个过程通常包括数据采集,清洗,建模,分析,报表等。接下来在本篇文章中,将会构建一个基于logstash,elasticSearch,kibana的一套数据收集分析的系统

一、框架概要

logstash实时的从业务日志中数据数据(可以进行响应的过滤),然后把数据输入到redis中,redis只做消息队列不对消息做处理和存储,然后redis会把数据转给elasticSearch,elasticSearch会对数据做存储,索引(基于Lunce),再kibana中建立对elasticSearch的链接,实时的抓取索索引后的数据,这样数据就可以实时的进行展示,通过一些数据组装,查询条件,得到我们想要的结果(可以通过各种方式例如图表,表格,折线图等显示)

接下来的第二章节讲述所需软件以及安装

二、所需软件

Redis(https://www.elastic.co/)

kibana(https://download.elastic.co/kibana/kibana/kibana-4.1.3-linux-x64.tar.gz)

logstash(https://download.elastic.co/logstash/logstash/logstash-2.1.0.zip)

Elasticsearch

https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.1.0/elasticsearch-2.1.0.tar.gz

对于kibana,logstash,Elasticsearch 这三件套,也可以是直接去下载套装(https://www.elastic.co/downloads

把软件包均上传到/opt/tools文件夹下,软件均安装在/opt文件夹下

 

三、安装

软件的安装和运行,最好不要使用root用户,因为里面有些软件,必须要求非root用于才可以正常的运行。

1、 卸载自带的jdk 安装jdk

上传下载的jdk rpm包

安装:

rpm –ivh  
jdk-8u65-linux-x64.rpm

通过命令查看jdk版本是否安装成功,安装完成它会自动的配置环境变量等相关信息

java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

 

2、 安装Redis

安装:

tar xzf redis-3.0.5.tar.gz /opt
$ cd redis-3.0.5
$ make && make install

 

启动

$ src/redis-server

 

出现以上提示,redis启动成功

客户端测试

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

由于安装完成后,redis只能窗口化运行,当关闭server的那个shell窗口以后,服务就中断了,所以需要修改相关配置

Vi redis.conf

 

修改:

daemonize yes 

appendonly yes

 

这样redis可以支持后台运行

其他:
同样,我们可以把Redis作为Linux服务开机启动
这里只提供一种最简单的方式,最好的是通过编写开机启动脚本来做。
如果要开机启动redis,我们需要把redis设置为daemon后台启动(如果不设置为后台启动,则linux启动后图形界面会卡在一个空白的页面),而redis只有1个启动参数,就是redis的配置文件路径。redis的默认配置文件redis.conf位于redis的安装目录下。我们可以把该文件copy到/etc目录下
Shell代码 
1[root@localhost redis-2.6.14]# cp redis.conf /etc/ 
redis的默认配置文件中daemonize参数的值为no,代表为非后台启动,所以我们需要把该参数的值修改为yes。至于其它的参数在这里就不详细说了,具体可以参见:http://blog.csdn.net/htofly/article/details/7686436
修改完daemonize参数之后,redis就能够通过daemon方式启动了,那么下一步就是把redis加入到linux开机启动服务配置中了,具体步骤如下:
使用VI编辑器打开Linux开机启动服务配置文件/etc/rc.local,并在其中加入下面的一行代码:
Shell代码 
2/usr/local/redis-2.6.14/src/redis-server /etc/redis.conf 
编辑完后保存,然后重启系统就OK了。
停止Redis服务:
Shell代码 
src/redis-cli shutdown

 

3、安装elasticsearch

tar zxvf elasticsearch-2.1.0.tar.gz

进入elasticsearch-2.1.0文件夹,需要注意的是,elasticsearch不允许用root账户进行启动、

./bin/elasticsearch

elasticSearch建议用一个专用的用户进行操作,如果用root用户启动的话,会报错,

会报如下错误:

 Don’t run Elasticsearch as root

在以下网址文档中有详细的说明

(https://www.elastic.co/blog/scripting-security)

curl -X GET http://localhost:9200/
打印出以下信息:
{
  "name" : "Witchfire",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.0",
    "build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
    "build_timestamp" : "2015-11-18T22:40:03Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

ElasticSearch安装运行成功

 

 

4、 安装Logstash

cd /opt/tools
unzip logstash-2.1.0.zip
mv logstash-2.1.0 /opt

 

建立服务器启动的配置文件

cd logstash-2.10.0/
mkdir conf log
cd conf
vi server.conf
 
input { stdin { }
         redis{
              type => "redis-input"
              data_type => "list"
              key => "key_count"
         }
 }
output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}

 

//reids地址是127.0.0.1.默认端口是6379 由于我都安装在了本机,所以这个就没有进行再配置,相关配置可以参考以下官网网址:

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html

启动服务端

#bin/logstash -f  conf/server.conf --log logs/stdout &   # "&"为在后台执行
#bin/logstash -f  conf/client.conf --log logs/stdout &   # "&"为在后台执行

5、安装kibana

cd /opt/tools
tar -zxvf kibana-4.1.3-linux-x64.tar.gz -C /opt
cd /opt

 

可以在kibana/conf/文件夹中,修改kibana.yml配置文件,修改 elasticsearch的访问路径为相关的访问路径,默认为:

elasticsearch_url: http://localhost:9200

由于我的elasticearc安装在了本机,这个地址和端口就暂时不做修改了

默认会有.kibana索引,如果没有的话再进行建立

执行命令

curl -XPUT localhost:9200/.kibana

刚开始下载的是kibana 的版本是4.1.3,然后启动的时候报错,

{"name":"Kibana","hostname":"test-dev1","pid":15605,"level":30,"msg":"Found kibana index","time":"2015-11-26T07:49:48.672Z","v":0}
{"name":"Kibana","hostname":"test-dev1","pid":15605,"level":50,"err":{"message":{"root_cause":[{"type":"search_parse_exception","reason":"No mapping found for [buildNum] in order to sort on"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":".kibana","node":"uj6DUqLOSZOWghUpRlegmw","reason":{"type":"search_parse_exception","reason":"No mapping found for [buildNum] in order to sort on"}}]},"name":"Error","stack":"Error: [object Object]\n    at respond (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/transport.js:235:15)\n    at checkRespForFailure (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/transport.js:203:7)\n    at HttpConnector.<anonymous> (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/connectors/http.js:156:7)\n    at IncomingMessage.bound (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/node_modules/lodash-node/modern/internals/baseBind.js:56:17)\n    at IncomingMessage.emit (events.js:117:20)\n    at _stream_readable.js:944:16\n    at process._tickCallback (node.js:442:13)"},"msg":"","time":"2015-11-26T07:49:48.683Z","v":0}
{"name":"Kibana","hostname":"test-dev1","pid":15605,"level":60,"err":{"message":{"root_cause":[{"type":"search_parse_exception","reason":"No mapping found for [buildNum] in order to sort on"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":".kibana","node":"uj6DUqLOSZOWghUpRlegmw","reason":{"type":"search_parse_exception","reason":"No mapping found for [buildNum] in order to sort on"}}]},"name":"Error","stack":"Error: [object Object]\n    at respond (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/transport.js:235:15)\n    at checkRespForFailure (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/transport.js:203:7)\n    at HttpConnector.<anonymous> (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/src/lib/connectors/http.js:156:7)\n    at IncomingMessage.bound (/opt/kibana-4.1.3-linux-x64/src/node_modules/elasticsearch/node_modules/lodash-node/modern/internals/baseBind.js:56:17)\n    at IncomingMessage.emit (events.js:117:20)\n    at _stream_readable.js:944:16\n    at process._tickCallback (node.js:442:13)"},"msg":"","time":"2015-11-26T07:49:48.683Z","v":0}

 

经过搜索得知,原来是版本问题,重新下载了4.3版本。重新启动,正常

启动kibana,默认端口为5601

默认是没有任何日志的,当我们访问nginx的时候,会产生一些访问日志,回头再看kibana,日志将会实时的显示到kibana中,深入的去学习kibana的使用,将会做出来我们想要的数据。

 

 

© 著作权归作者所有

二两豆腐
粉丝 22
博文 103
码字总数 87685
作品 0
朝阳
高级程序员
私信 提问
加载中

评论(6)

二两豆腐
二两豆腐 博主

引用来自“有神璐璐”的评论

请问作者,我要是不适用本地的ip,logstash怎么设置。elasticsearch的配置文件怎么设置,我的是5.4.0版本
不适用?还是不使用,logstash只是负责把日志中的ip解析出来,日志中的ip是根据你nginx中设置的
有神璐璐
有神璐璐
请问作者,我要是不适用本地的ip,logstash怎么设置。elasticsearch的配置文件怎么设置,我的是5.4.0版本
二两豆腐
二两豆腐 博主

引用来自“学习使人上进”的评论

logstash的shipper端如果部署在业务系统机器上,会占用很大的cpu资源,这个问题怎么处理得的呢@二两豆腐
这个看你怎么部署了,也可以不部署到业务系统的机器上,因为业务系统的机器通常不是一台,可以采用同步或者异步的方式把业务系统的日志发送到另外一的一个部署了logstash的机器上。
学习使人上进
学习使人上进
logstash的shipper端如果部署在业务系统机器上,会占用很大的cpu资源,这个问题怎么处理得的呢@二两豆腐
二两豆腐
二两豆腐 博主

引用来自“hj_zack”的评论

logstash 中的 client.conf 里面写什么?
这个是不需要的,只需要一个serever就行了
h
hj_zack
logstash 中的 client.conf 里面写什么?
线上日志集中化可视化管理:ELK

本文来自网易云社区 作者:王贝 为什么推荐ELK: 当线上服务器出了问题,我们要做的最重要的事情是什么?当需要实时监控跟踪服务器的健康情况,我们又要拿什么去分析?大家一定会说,去看日志...

网易云
2018/09/29
0
0
CentOS7.3下ELK日志分析系统集群搭建

Elasticsearch是个基于Lucene实现的开源、分布式、restful的全文本搜索引擎,此外他还是一个分布式实时文档存储,其中每个文档的每个filed均是可被索引的数据,且可被搜索,也是一个带实时分...

wujunqi1996
2018/07/14
0
0
ElasticSearch+kibana+logstash集群部署

ELK原理与介绍   ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用...

若此生无缘
2018/08/22
0
0
小白都会超详细--ELK日志管理平台搭建教程

目录 一、介绍 二、安装JDK 三、安装Elasticsearch 四、安装Logstash 五、安装Kibana 六、Kibana简单使用 系统环境:CentOS Linux release 7.4.1708 (Core) 当前问题状况 开发人员不能登录线...

渣渣辉
2018/07/15
0
0
使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数、执行时间...

eddy_linux
2015/11/13
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
195
7
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部