一、日志平台的工做流程
php
多个独立的agent(Shipper)负责收集不一样来源的数据,一个中心agent(Indexer)负责汇总和分析数据,在中心agent前的Broker(使用redis实现)做为缓冲区,中心agent后的ElasticSearch用于存储和搜索数据,前端的Kibana提供丰富的图表展现。html
Shipper表示日志收集,使用LogStash收集各类来源的日志数据,能够是系统日志、文件、redis、mq等等;前端
Broker做为远程agent与中心agent之间的缓冲区,使用redis实现,一是能够提升系统的性能,二是能够提升系统的可靠性,当中心agent提取数据失败时,数据保存在redis中,而不至于丢失;java
中心agent也是LogStash,从Broker中提取数据,能够执行相关的分析和处理(Filter);linux
ElasticSearch用于存储最终的数据,并提供搜索功能;nginx
Kibana提供一个简单、丰富的web界面,数据来自于ElasticSearch,支持各类查询、统计和展现;git
二、机器的部署状况github
192.168.1.140 # redis 服务器,角色broker
192.168.1.140 # logstash 角色 indexer 服务器,集成elasticsearch, kibana,必须有安装web服务
192.168.1.132 # nginx服务器,角色生产服务器,logstash须要收集它的日志 web
这里选用的软件的版本:redis
logstash-1.4.2
elasticsearch-1.4.2
redis-2.6.16
kibana 是logstash内带的
这些软件之间有兼容性问题,请用其余代替版本的同窗注意。
2.1 安装logstash-1.4.2
yum -y install java-1.7.0-openjdk 安装logstash须要jdk的支持
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
tar xzvf logstash-1.4.2.tar.gz -C /app/ && mv /app/logstash-1.4.2 /app/logstash
mkdir -p /app/logstash/conf
注:若是yum出现这样的问题:
须要按照epel
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
测试安装
cd /app/logstash/bin
./logstash -e 'input { stdin { } } output { stdout {} }'
输入“good job”, 若是出现相似下图,说明logstash正常工做
2.2 安装 elasticsearch-1.4.2
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz
tar xzvf elasticsearch-1.4.2.tar.gz -C /app/
cd /app/elasticsearch-1.4.2/config
修改配置文件elasticsearch.yml
discovery.zen.ping.multicast.enabled: false #关闭广播,若是局域网有机器开9300 端口,服务会启动不了
network.host: 192.168.1.140 #指定主机地址,实际上是可选的,可是最好指定由于后面跟kibana集成的时候会报http链接出错(直观体现好像是监听了:::9200 而不是0.0.0.0:9200)
http.cors.allow-origin: "/.*/"
http.cors.enabled: true #这2项都是解决跟kibana集成的问题,错误体现是 你的 elasticsearch 版本太低
启动elasticsearch
cd /app/elasticsearch-1.4.2/bin
./elasticsearch # 配置阶段建议直接启动,日志会输出到stdout,-d 选项表示以daemon的方式启动,若是没有出现error ,表示服务正常启动
测试logstash 跟elasticsearch数据交互
/app/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { host => 192.168.1.140 } }'
输入you know
curl 'http://192.168.1.140:9200/_search?pretty' # 若是有输出且没有出现错误表示服务器交互成功
注:可能出现以下错误信息,我也不知道什么缘由,我没有管 不过不耽误后面的搭建 有谁知道这个是怎么回事 或者怎么解决的请留言 谢谢!!
2.3 安装kibana
cd /app/logstash/vendor
vim kibana/config.js #elasticsearch: "http://"+window.location.hostname+":9200",修改为"http://192.168.1.140:9200"
cp -Rv kibana /var/www/html 拷贝网页的配置
/etc/init.d/httpd start / service httpd start
可以访问url http://192.168.1.140/kibana/index.html 看到这样的画面
2.4安装redis
#tar xzvf redis-2.6.16.tar.gz -C /app
#cd /app/redis-2.6.16 && mkdir conf
#make target=linux26 (报错 可能缺乏一些编译的工具,按照提示,yum安装就好了
若是出现以下报错:
能够执行 make MALLOC=libc
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
缘由:查看redis的源码 src/zmalloc.c能够看到以下代码:
#if defined(USE_TCMALLOC)
#define malloc(size) tc_malloc(size)
#define calloc(count,size) tc_calloc(count,size)
#define realloc(ptr,size) tc_realloc(ptr,size)
#define free(ptr) tc_free(ptr)
#elif defined(USE_JEMALLOC)
#define malloc(size) je_malloc(size)
#define calloc(count,size) je_calloc(count,size)
#define realloc(ptr,size) je_realloc(ptr,size)
#define free(ptr) je_free(ptr)
能够看到源码中首先会判断系统中是否存在tcmalloc内存分配器,若是没有,则使用jemalloc内存分配器,若是连jemalloc分配器也没有找到,就会报错了。
本次现网部署Redis后,由于没有jemalloc分配器,致使碎片率达到了1.59,redis的内存占用率也就是实际内存占用的1.59倍,这个数据量是很是恐怖的,对内存资源是个至关大的损耗。
在现网环境的linux系统中,可能没有预先安装Jemalloc分配器,须要手动安装。
一、wget http://www.canonware.com/download/jemalloc/jemalloc-3.2.0.tar.bz2
二、tar jxf jemalloc-3.2.0.tar.bz2 (tar.bz2的压缩格式使用 tar jxf 解压)
三、cd jemalloc-3.2.0
四、./configure
五、make && make install
六、ldconfig
过程完成后,在切回到redis-2.6.14目录中,从新执行make命令
固然若是不想使用jemalloc分配器,能够强制使用以下命令来安装redis:
make MALLOC=libc (libc是默认的内存分配器,不过通过验证,碎片率是最高的)
经现网验证:
1) 使用libc内存分配器的话,内存碎片率能够达到1.6左右
2) 可是使用jemalloc,碎片率通常在1.1之内
3) 对于tcmalloc,和jemalloc的结果差很少,可是由于redis暂时尚未集成tcmalloc,因此须要另外来安装,过程详见:
http://blog.nosqlfan.com/html/3490.html
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#./src/redis-server redis.conf # daemonize yes 使用默认的配置文件
2.5 集成logstash redis
vim /app/logstash/conf/nginx_acces.conf 写入以下内容
input {
redis {
host => '192.168.1.140' # 我方便测试没有指定password,最好指定password
data_type => 'list'
port => "6379"
key => 'logstash:redis' #自定义
type => 'redis-input' #自定义
}
}
output {
elasticsearch {
host => "192.168.1.140" # 因为redis和elasticsearch在一台机器上因此IP是一个
codec => "json"
protocol => "http" #版本1.0+ 必须指定协议http
}
}
验证配置文件
cd /app/logstash
#bin/logstash -f ./conf/nginx_access.conf -t # 无误后启动
#bin/logstash -f ./conf/nginx_access.conf --verbose # 要检查错误 --debug
启动成功 有警告没有管
2.6 日志接入 另外一台机器 安装logstash 过程 跟上面同样 可是 nginx_access.conf 配置以下
input {
file {
type => "nginx_access"
path => "/var/log/nginx/access.log" 日志的路径
}
}
output {
stdout { codec => rubydebug }
redis {
host => '192.168.1.140' 对接的redisIP
data_type => 'list'
key => 'logstash:redis'
}
}
到此配置告一段落,下面验收成果
刷新nginx日志
而后在132上的logstash可以看到以下
而后在140端可以看到:
重点是访问http://192.168.1.140/kibana/index.html 验收最后的页面
这个是一个简单的格式 已经设计好的 固然能够本身定义了。
定义的方法:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4938039&uid=24940078
点进去之后的界面是这样的:
3 安装插件 安装bigdesk
要想知道整个插件的列表,请访问http://www.elasticsearch.org/guide/reference/modules/plugins/ 插件仍是不少的,我的认为比较值得关注的有如下几个,其余的看你需求,好比你要导入数据固然就得关注river了。
该插件能够查看集群的jvm信息,磁盘IO,索引建立删除信息等,适合查找系统瓶颈,监控集群状态等,能够执行以下命令进行安装,或者访问项目地址:https://github.com/lukas-vlcek/bigdesk
先上一张效果图:
这里我是按照https://github.com/lukas-vlcek/bigdesk
上面的第二种 git clone的方式作的(第一种没成功。。。)
首先确保安装git
yum install -y git
而后将按照上面的命令作:
git clone https://github.com/lukas-vlcek/bigdesk.git
cd bigdesk/
git tag
[... some tags left out for brevity ....]
v2.2.2
v2.2.3
v2.4.0
git checkout v2.4.0
而后将整个bigdesk目录拷贝到http下
cp -ar bigdesk /var/www/html/
而后就能够访问了
先修改host 而后链接 而后会出来一个小图标(成果展现图里的) 点击小图标就能出现监控的选项了。
声明:该文参考了以下几位的博客,可是是我亲自搭建了整个过程,对整个的流程进行了新的把控和优化。
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17291169&id=4898582
http://www.mamicode.com/info-detail-475881.html
http://nkcoder.github.io/blog/20141031/elkr-log-platform-deploy/