离线部署ELK+kafka日志管理系统【转】
转自
离线部署ELK+kafka日志管理系统 - xiaoxiaozhou - 51CTO技术博客
http://xiaoxiaozhou.blog.51cto.com/4681537/1854684
1、简介
对于日志来说,最常见的需求就是收集、查询、显示,正对应logstash、elasticsearch、kibana的功能。
ELK日志系统在系统中,主要可解决的问题:
基于日志的数据挖掘
问题排查,上线检查
根据关键字查询日志详情
异常数据自动触发消息通知
服务器监控,应用监控,Bug管理
统计分析,比如接口的调用次数、执行时间、成功率等
性能分析,用户行为分析,安全漏洞分析,时间管理
Logstash:
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。与其他监控系统的整合也很方便,可以将数据输出到zabbix、nagios等。还可以把数据统计后输出到graphite,实现统计数据的可视化显示。
logstash对日志的处理逻辑很简单,就是一个pipeline的过程:
inputs >> codecs >> filters>> outputs
agent分布在每一台需要采集数据的节点上,agent只是Logstash承担的一个角色,与此对应的是indexer。agent会分别将各自获取的日志作为输入输出到一个消息代理(例如redis或者kafka),indexer会将消息代理作为输入再输出到ES上,由ES做indexing。其实Logstash在整个过程中只负责输入输出,对Logstash而言并没有agent和index之分。如果日志量小的话完全不需要设置indexer,直接将ES作为agent的输出源。
Elasticsearch:
elasticsearch是基于lucene的开源搜索引擎,主要的特点有
real time
distributed
high availability
document oriented
schema free
restful api
kibana:
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。kibana是根据前台过滤的条件,生成query 发送到elasticsearch,然后根据返回的值重绘页面。
下面盗用一张图来展示整个架构:

以上是我查看网上资料最终总结的,感谢各位大神的贡献。
2、测试环境说明
下面通过在测试环境下搭建ELK日志系统来对ELK进行更加深入的认识。
软件环境:
logstash-2.3.3.tar.gz marvel-2.3.3.tar.gzelasticsearch-2.3.3.zip kibana-4.5.1-linux-x64 marvel-agent-2.3.3.zip elasticsearch-head-master.zip license-2.3.3.zip jdk-8u101-linux-x64.tar.gz kafka_2.10-0.10.0.1.tgz zookeeper-3.4.6.tar.gz
服务器和角色:
192.168.1.101 kafka+zookeeper 192.168.1.102 kafka+zookeeper 192.168.1.103 kafka+zookeeper logstash shipper 192.168.1.104 logstash shipper 192.168.1.105 elasticsearch kibana 192.168.1.106 logstash indexer
说明:
本篇分别对上边的物理节点标识为node1—node6,下面都以这种称谓。
Node1和nide2以及node3三台节点上搭建kafka+zookeeper集群,另外node3本身也是一个nginx服务器。
Node4上搭建nginx服务器,和node3一起负责logstash日志数据生产端,把nginx日志传给kafka集群。
日志传输方向:
Nginx日志-->logstash shipper-->kafka+zookeeper-->logstash indexer-->elasticsearch
最后kibana负责展示es收集到的数据
3、 配置java环境
各节点配置jdk1.8的环境
/home/apps # tar -zxvf jdk-8u101-linux-x64.tar.gz /home/apps # ln -sv /home/apps/jdk1..0_101/usr/local/jdk1..0_101 `/usr/local/jdk1..0_101' ->`/home/apps/jdk1.8.0_101'
编辑环境变量文件,注释掉之前的java环境配置,添加下面的内容
/home/apps # vi /etc/profile JAVA_HOME=/usr/local/jdk1..0_101 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH /home/apps #source /etc/profile /home/apps # java -version java version "1.8.0_101" Java(TM) SE Runtime Environment (build1..0_101-b13) Java HotSpot(TM) -Bit Server VM (build25.-b13, mixed mode)
4、搭建kafka+zookeeper集群环境
4.1、node1上安装配置zookeeper
解压包
# tar -xf kafka_2.-0.10.0.1.tgz -C /usr/local # tar -zxf zookeeper-3.4..tar.gz -C /usr/local # cd /usr/local # mv kafka_2.-0.10.0.1/ kafka # mv zookeeper-3.4./ zookeeper
生成zookeeper配置文件
# cd zookeeper/conf # cp zoo_sample.cfg zoo.cfg
编辑配置文件
# vi zoo.cfg dataDir=/usr/local/zookeeper/tmp/zookeeper server.=192.168.1.101:: server.=192.168.1.102:: server.=192.168.1.103:: # cd .. # mkdir -p tmp/zookeeper # echo "" >tmp/zookeeper/myid
4.2、配置node2和node3的zookeeper
依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异
Node2: # echo "" >tmp/zookeeper/myid Node3: # echo "" >tmp/zookeeper/myid
其他配置都一样
4.3、依次启动三个节点的服务
# ./bin/zkServer.sh start conf/zoo.cfg Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED 查看三个节点的状态 Node1: # ./bin/zkServer.sh status JMX enabled by default Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower Node2: # ./bin/zkServer.sh status JMX enabled by default Using config:/usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower Node3: # ./bin/zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader
4.4、配置node1的kafka
# cd ../kafka # vi config/server.properties broker.id= port= host.name=node1 log.dirs=/usr/local/kafka/tmp/kafka-logs num.partitions= zookeeper.connect=192.168.1.101:,192.168.1.102:,192.168.1.103:
4.5、配置Node2和node3的kafka
依照node1的配置配置node2和node3,注意下面的参数三个节点各有差异 Node2: broker.id= host.name=node2 node3: broker.id= host.name=node3 说明: host.name是节点的主机名 依次启动三个节点的kafka # ./bin/kafka-server-start.sh config/server.properties
4.6、创建topic验证集群是否正常
Node1上创建topic /usr/local/kafka# bin/kafka-topics.sh --create --zookeeper 192.168.1.100: --replication-factor --partitions --topic test1 Created topic "test1". Node2上发送消息至kafka(2节点模拟producer) /usr/local/kafka # bin/kafka-console-producer.sh --broker-list 192.168.1.100: --topic test1 hello world Node3显示消息的消费(3节点模拟consumer) /usr/local/kafka # bin/kafka-console-consumer.sh --zookeeper 192.168.1.100: --topic test1 --from-beginning hello world 可以看到在node2节点的输入的信息可以在nide3节点显示,说明集群正常使用。 使用下面的命令可以查看zookeeper服务的端口 # netstat -nlpt | grep -E "2181|2888|3888"
5、配置es和kibana
在node5节点配置es
5.1、创建elasticsearch账户
# groupadd esuser # useradd -d /home/esuser -m esuser # passwd esuser /home/apps # unzip elasticsearch-2.3..zip /home/apps # mv elasticsearch-2.3. /usr/local/elasticsearch
5.2、编辑es配置文件
# cd /usr/local/elasticsearch/
编辑es配置文件
# vi config/elasticsearch.yml
cluster.name: es_cluster
node.name: node5
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
network.host: 192.168.1.105
http.port:
# mkdir data logs
修改目录权限
/home/apps # chown -R esuser:esuser /usr/local/elasticsearch/
切换到esuser用户,启动es服务
/usr/local/elasticsearch> ./bin/elasticsearch
可使用下面命令查看es服务端口情况
# netstat -nlpt | grep -E "9200|9300"
浏览器输入http://192.168.1.105:9200/,显示如下所示信息,说明服务正常
{
"name" : "node5",
"cluster_name" : "es_cluster",
"version" : {
"number" : "2.3.3",
"build_hash" : "218bdf10790eef486ff2c41a3df5cfa32dadcfde",
"build_timestamp" : "2016-05-17T15:40:04Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
5.3、ES插件配置
/home/apps # unzip elasticsearch-head-master.zip # mv elasticsearch-head-master /usr/local/elasticsearch/plugins/head
在浏览器中输入http://192.168.1.105:9200/_plugin/head/,出现如图【ELK&kafka1】所示的画面。

ELK&kafka1
marvel插件的安装
/usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/license-2.3.3.zip -> Installing fromfile:/home/apps/license-2.3..zip... Trying file:/home/apps/license-2.3..zip... Downloading .DONE Verifying file:/home/apps/license-2.3..zipchecksums if available ... NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify) Installed license into/usr/local/elasticsearch/plugins/license /usr/local/elasticsearch # ./bin/plugininstall file:///home/apps/marvel-agent-2.3.3.zip -> Installing fromfile:/home/apps/marvel-agent-2.3..zip... Tryingfile:/home/apps/marvel-agent-2.3..zip ... Downloading ..DONE Verifyingfile:/home/apps/marvel-agent-2.3..zip checksums if available ... NOTE: Unable to verify checksum fordownloaded plugin (unable to find .sha1 or .md5 file to verify) @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional permissions @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * java.lang.RuntimePermission setFactory * javax.net.ssl.SSLPermission setHostnameVerifier Seehttp://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html for descriptions of what these permissionsallow and the associated risks. Continue with installation? [y/N]y Installed marvel-agent into/usr/local/elasticsearch/plugins/marvel-agent
重启es服务
在浏览器中输入http://192.168.1.105:9200/_plugin/head/,出现如图【ELK&kafka2】所示的画面。

ELK&kafka2
5.4、配置kibana
/home/apps # tar -zxvf kibana-4.5.-linux-x64.tar.gz /home/apps # mv kibana-4.5.-linux-x64/usr/local/kibana 编辑kibana配置文件 /home/apps # cd /usr/local/kibana /usr/local/kibana # vi config/kibana.ym server.port: server.host: "192.168.1.105" elasticsearch.url:"http://192.168.1.105:9200" 启动kibana # ./bin/kibana &
在浏览器中输入192.168.1.105:5601,可以【ELK&kafka3】所示的画面。

ELK&kafka3
在Kibana中把marvel插件安装完成(安装过程需要一些时间)
/home/apps # cd /usr/local/kibana/ /usr/local/kibana # ./bin/kibana plugin--install marvel --url file:///home/apps/marvel-2.3.3.tar.gz Installing marvel Attempting to transfer from file:///home/apps/marvel-2.3.3.tar.gz Transferring 1597693bytes.................... Transfer complete Extracting plugin archive Extraction complete Optimizing and caching browser bundles... Plugin installation complete
重启kibana后,访问kibana,可以【ELK&kafka4】所示的画面。

ELK&kafka4
6、Node4日志生产端配置
6.1、 node4节点安装配置nginx
# tar -zxf pcre-8.21.tar.gz -C /usr/local
# tar -zxf nginx-1.2..tar.gz -C /usr/local
# cd pcre-8.21/
# ./configure
# make && make install
# cd nginx-1.2./
# ./configure --with-http_stub_status_module --prefix=/usr/local/nginx
# make && make install
在nginx配置文件中的http {}段添加下面的内容:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" ';
/usr/local/nginx/sbin # ./nginx -s reload
6.2、logstash配置
# tar -zxvf logstash-2.3..tar.gz
# mv logstash-2.3. /usr/local/logstash
配置logstash生产端文件
/usr/local # cd logstash/
/usr/local/logstash # mkdir logs etc
/usr/local/logstash # vi etc/logstash_nginx_shipper.conf
input {
file {
type => "nginx-access"
path => "/usr/local/nginx/logs/access.log"
}
}
output {
stdout { codec => rubydebug }
kafka {
bootstrap_servers => "192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092"
topic_id => "nginx-messages"
compression_type => "snappy"
}
}
说明:
配置文件中的stdout { codec => rubydebug }参数是为了在标准输出显示信息
通过这个文件的配置node4节点可以把nginx产生的日志信息发送到kafka集群
6.3、node3节点生产端的配置
因为node3本身就是一个nginx web服务器,所以只需要一个logstash配置文件就可以了,依照node4节点产生一个相同的文件。
日志消费端配置
依照node4的logstash配置,只不过配置文件不同,node6的配置文件如下所示:
/usr/local/logstash # vi etc/logstash_nginx_indexer.conf
input {
kafka {
zk_connect =>"192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181"
topic_id => "nginx-messages"
codec => plain
reset_beginning => false
consumer_threads =>
decorate_events => true
}
}
output {
#stdout {
# debug => true
# debug_format => json
# }
stdout { codec => rubydebug }
elasticsearch {
hosts => "192.168.1.105:9200"
index =>"nginx-messages-%{+YYYY-MM}"
}
}
7、验证
启动服务加载文件
日志生产端Node4:
/usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_shipper.conf
日志消费端node6:
/usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_indexer.conf
往node4的nginx日志文件中插入数据,可从图【ELK&kafka5】和【ELK&kafka6】看到多了nginx的索引,es中出现数据。

ELK&kafka5

ELK&kafka6
日志生产端Node3:
/usr/local/logstash # ./bin/logstash -f etc/logstash_nginx_shipper.conf
往node3的nginx日志文件中插入数据,可从图【ELK&kafka7】看到es中出现的数据。

ELK&kafka7
在kibana的访问页面首先做配置,建立一个和es里展示的索引相对应的索引名“nginx-mes
sages-*”,如图【ELK&kafka8】否则的话不能创建索引。

ELK&kafka8
可从图【ELK&kafka9】看到kibana中出现的数据。

ELK&kafka9
8、 拓展
接下来还有很多的工作要做,例如环境架构的适用性和高可用、日志的格式化和过滤、kibana图表的分析、索引的清理、ELK系统的优化等等。
9、参考文章
http://lx.wxqrcode.com/index.php/post/101.html
http://blog.csdn.net/dabokele/article/details/51765136
http://blog.csdn.net/ubuntu64fan/article/details/26683941
本文出自 “xiaoxiaozhou” 博客,请务必保留此出处http://xiaoxiaozhou.blog.51cto.com/4681537/1854684
离线部署ELK+kafka日志管理系统【转】的更多相关文章
- ELK + kafka 日志方案
概述 本文介绍使用ELK(elasticsearch.logstash.kibana) + kafka来搭建一个日志系统.主要演示使用spring aop进行日志收集,然后通过kafka将日志发送给l ...
- [原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
- lagstash + elasticsearch + kibana 3 + kafka 日志管理系统部署 02
因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...
- Centos7 之安装Logstash ELK stack 日志管理系统
一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源 ...
- ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群
0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...
- CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任 ...
- ELK+kafka日志收集分析系统
环境: 服务器IP 软件 版本 192.168.0.156 zookeeper+kafka zk:3.4.14 kafka:2.11-2.2.0 192.168.0.42 zookeeper+kaf ...
- 170228、Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用
安装测试环境:Ubuntu 16.04.2 LTS 前言 (1)ELK是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来 ...
- 利用docker部署elk交换机日志分析
今天我们来聊一下利用docker部署elk日志分析系统,这里解析一下elk是啥东西.elk分别是Elasticsearch,Logstash和Kibana的首字母缩写. Elasticsearch是一 ...
随机推荐
- 【JavaScript】table显示问题
table有时显示出问题,解决办法如下: 添加<thead></thead>和<tbody></tbody>在table的外面添加<div> ...
- robot framework 安装
一.安装 Python 2.7 pip 和 setuptools (Python 的套件管理程式,最新版的Python 2.7.13已包含) Robot Framework (此工具本身) wxPyt ...
- 算法08 五大查找之:二叉排序树(BSTree)
上一篇总结了索引查找,这一篇要总结的是二叉排序树(Binary Sort Tree),又称为二叉查找树(Binary Search Tree) ,即BSTree. 构造一棵二叉排序树的目的,其实并不是 ...
- 怎样搭建一个自有域名的 WORDPRESS 博客?
博客搭建并不复杂,只是过程有点繁琐,适合喜欢折腾的人,主要有下面几个步骤: 新建一个博客文件 购买域名(Domain Name) 注册一个主机空间(Web Host) 域名解析(DNSPod) 安装W ...
- Golang的第一个程序-Hello, World !
安装Golang: 1. 下载安装包 https://golang.google.cn/dl/ 我这里使用压缩包,下载后解压到D盘(自定义). 2. 添加环境变量:把解压后的bin目录添加到环境变量中 ...
- 【刷题】洛谷 P3806【模板】点分治1
题目背景 感谢hzwer的点分治互测. 题目描述 给定一棵有n个点的树 询问树上距离为k的点对是否存在. 输入输出格式 输入格式: n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径 接 ...
- HBase多租户机制分析
在HBase1.1.0发布之前,HBase同一集群上的用户.表都是平等的,没有优劣之分.这种’大同’社会看起来完美,实际上有很多问题.最棘手的主要有这么两个,其一是某些业务较其他业务重要,需要在资源有 ...
- ZJOI2018 D1
归途的车上满是悲伤的气息 虽然早就预言到D1会滚粗,但一切都结束之后还是特别难过. 延时15min 50min T1 30pts 1.5h T2 10pts 2.5h T1 50pts 4.5h T3 ...
- 【CF Gym100228】Graph of Inversions
Portal --> qwq(貌似是CodeForces Gym 100228 (ECNA2003) - I) Description 对于长度为 \(n\) 的序列 \(A\) ,定义其逆序图 ...
- hibernate实现数据实体复制保存
hibernate实现数据实体复制保存 2013年12月16日 11:57:22 Hardy008 阅读数:3474 描述:需要将数据的一条记录进行复制保存为一条新记录. 思路:从数据库中取得一条 ...