CENTOS6.5安装日志分析ELK elasticsearch + logstash + redis + kibana
1、日志平台的工作流程 多个独立的agent(Shipper)负责收集不同来源的数据,一个中心agent(Indexer)负责汇总和分析数据,在中心agent前的Broker(使用redis实现)作为缓冲区,中心agent后的ElasticSearch用于存储和搜索数据,前端的Kibana提供丰富的图表展示。 Shipper表示日志收集,使用LogStash收集各种来源的日志数据,可以是系统日志、文件、redis、mq等等; Broker作为远程agent与中心agent之间的缓冲区,使用redis实现,一是可以提高系统的性能,二是可以提高系统的可靠性,当中心agent提取数据失败时,数据保存在redis中,而不至于丢失; 中心agent也是LogStash,从Broker中提取数据,可以执行相关的分析和处理(Filter); ElasticSearch用于存储最终的数据,并提供搜索功能; Kibana提供一个简单、丰富的web界面,数据来自于ElasticSearch,支持各种查询、统计和展示; 2、机器的部署情况 192.168.1.140 # redis 服务器,角色broker 192.168.1.140 # logstash 角色indexer 服务器,集成elasticsearch,kibana,必须有安装web服务 192.168.1.132 # nginx服务器,角色生产服务器,logstash需要收集它的日志 这里选用的软件的版本: 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 -ivhhttp://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 能够访问urlhttp://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分配器,需要手动安装。 1、wget http://www.canonware.com/download/jemalloc/jemalloc-3.2.0.tar.bz2 2、tar jxfjemalloc-3.2.0.tar.bz2(tar.bz2的压缩格式使用tar jxf解压) 3、cdjemalloc-3.2.0 4、./configure 5、make && make install 6、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-serverredis.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 clonehttps://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/ 然后就可以访问了 http://192.168.1.140/bigdesk 先修改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/ 本文转自 憬薇 51CTO博客,原文链接:http://blog.51cto.com/welcomeweb/1684696