ELK+Kafka 企业日志收集平台
Posted 大数据从业者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK+Kafka 企业日志收集平台相关的知识,希望对你有一定的参考价值。
背景:
最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项;所以最近将Redis换成了专业的消息信息发布订阅系统Kafka, Kafka的更多介绍大家可以看这里:传送门 ,关于ELK的知识网上有很多的哦, 此篇博客主要是总结一下目前线上这个平台的实施步骤,ELK是怎么跟Kafka结合起来的。好吧,动手!
ELK架构拓扑:
1,使用一台nginx代理访问kibana的请求;
2,两台es组成es集群,并且在两台es上面都安装kibana;(以下对elasticsearch简称es)
3,中间三台服务器就是我的kafka(zookeeper)集群啦; 上面写的消费者/生产者这是kafka(zookeeper)中的概念;
4,最后面的就是一大堆的生产服务器啦,上面使用的是logstash,当然除了logstash也可以使用其他的工具来收集你的应用程序的日志,例如:Flume,Scribe,Rsyslog,Scripts……
角色:
软件选用:
1
2
3
4
5
6
|
elasticsearch-1.7.3.tar.gz #这里需要说明一下,前几天使用了最新的elasticsearch2.0,java-1.8.0报错,目前未找到原因,故这里使用1.7.3版本
Logstash-2.0.0.tar.gz
kibana-4.1.2-linux-x64.tar.gz
以上软件都可以从官网下载:https://www.elastic.co/downloads
java-1.8.0,nginx采用yum安装
|
部署步骤:
1.ES集群安装配置;
2.Logstash客户端配置(直接写入数据到ES集群,写入系统messages日志);
3.Kafka(zookeeper)集群配置;(Logstash写入数据到Kafka消息系统);
4.Kibana部署;
5.Nginx负载均衡Kibana请求;
6.案例:nginx日志收集以及mysql慢日志收集;
7.Kibana报表基本使用;
ES集群安装配置;
es1.example.com:
1.安装java-1.8.0以及依赖包
1
2
|
yum install -y epel-release
yum install -y java-1.8.0 git wget lrzsz
|
2.获取es软件包
1
2
3
|
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
tar -xf elasticsearch-1.7.3.tar.gz -C /usr/local
ln -sv /usr/local/elasticsearch-1.7.3 /usr/local/elasticsearch
|
3.修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@es1 ~]# vim /usr/local/elasticsearch/config/elasticsearch.yml
32 cluster.name: es-cluster #组播的名称地址
40 node.name: "es-node1 " #节点名称,不能和其他节点重复
47 node.master: true #节点能否被选举为master
51 node.data: true #节点是否存储数据
107 index.number_of_shards: 5 #索引分片的个数
111 index.number_of_replicas: 1 #分片的副本个数
145 path.conf: /usr/local/elasticsearch/config/ #配置文件的路径
149 path.data: /data/es/data #数据目录路径
159 path.work: /data/es/worker #工作目录路径
163 path.logs: /usr/local/elasticsearch/logs/ #日志文件路径
167 path.plugins: /data/es/plugins #插件路径
184 bootstrap.mlockall: true #内存不向swap交换
232 http.enabled: true #启用http
|
4.创建相关目录
1
|
mkdir /data/es/{data,worker,plugins} -p
|
5.获取es服务管理脚本
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@es1 ~]# git clone https://github.com/elastic/elasticsearch-servicewrapper.git
[root@es1 ~]# mv elasticsearch-servicewrapper/service /usr/local/elasticsearch/bin/
[root@es1 ~]# /usr/local/elasticsearch/bin/service/elasticsearch install
Detected RHEL or Fedora:
Installing the Elasticsearch daemon..
[root@es1 ~]#
#这时就会在/etc/init.d/目录下安装上es的管理脚本啦
#修改其配置:
[root@es1 ~]#
set.default.ES_HOME=/usr/local/elasticsearch #安装路径
set.default.ES_HEAP_SIZE=1024 #jvm内存大小,根据实际环境调整即可
|
6.启动es ,并检查其服务是否正常
1
2
3
|
[root@es1 ~]# netstat -nlpt | grep -E "9200|"9300
tcp 0 0 0.0.0.0:9200 0.0.0.0:* LISTEN 1684/java
tcp 0 0 0.0.0.0:9300 0.0.0.0:* LISTEN 1684/java
|
访问http://192.168.2.18:9200/ 如果出现以下提示信息说明安装配置完成啦,
7.es1节点好啦,我们直接把目录复制到es2
1
2
3
4
5
6
|
[root@es1 local]# scp -r elasticsearch-1.7.3 192.168.12.19:/usr/local/
[root@es2 local]# ln -sv elasticsearch-1.7.3 elasticsearch
[root@es2 local]# elasticsearch/bin/service/elasticsearch install
#es2只需要修改node.name即可,其他都与es1相同配置
|
8.安装es的管理插件
es官方提供一个用于管理es的插件,可清晰直观看到es集群的状态,以及对集群的操作管理,安装方法如下:
1
|
[root@es1 local]# /usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head
|
安装好之后,访问方式为: http://192.168.2.18:9200/_plugin/head,由于集群中现在暂时没有数据,所以显示为空,
此时,es集群的部署完成。
Logstash客户端安装配置;
在webserve1上面安装Logstassh
1.downloads 软件包 ,这里注意,Logstash是需要依赖java环境的,所以这里还是需要yum install -y java-1.8.0.
1
2
3
4
5
|
[root@webserver1 ~]# wget https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz
[root@webserver1 ~]# tar -xf logstash-2.0.0.tar.gz -C /usr/local
[root@webserver1 ~]# cd /usr/local/
[root@webserver1 local]# ln -sv logstash-2.0.0 logstash
[root@webserver1 local]# mkdir logs etc
|
2.提供logstash管理脚本,其中里面的配置路径可根据实际情况修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#!/bin/bash
#chkconfig: 2345 55 24
#description: logstash service manager
#auto: Maoqiu Guo
FILE=\'/usr/local/logstash/etc/*.conf\' #logstash配置文件
LOGBIN=\'/usr/local/logstash/bin/logstash agent --verbose --config\' #指定logstash配置文件的命令
LOCK=\'/usr/local/logstash/locks\' #用锁文件配合服务启动与关闭
LOGLOG=\'--log /usr/local/logstash/logs/stdou.log\' #日志
START() {
if [ -f $LOCK ];then
echo -e "Logstash is already \\033[32mrunning\\033[0m, do nothing."
else
echo -e "Start logstash service.\\033[32mdone\\033[m"
nohup ${LOGBIN} ${FILE} ${LOGLOG} &
touch $LOCK
fi
}
STOP() {
if [ ! -f $LOCK ];then
echo -e "Logstash is already stop, do nothing."
else
echo -e "Stop logstash serivce \\033[32mdone\\033[m"
rm -rf $LOCK
ps -ef | grep logstash | grep -v "grep" | awk \'{print $2}\' | xargs kill -s 9 >/dev/null
fi
}
STATUS() {
ps aux | grep logstash | grep -v "grep" >/dev/null
if [ -f $LOCK ] && [ $? -eq 0 ]; then
echo -e "Logstash is: \\033[32mrunning\\033[0m..."
else
echo -e "Logstash is: \\033[31mstopped\\033[0m..."
fi
}
TEST(){
${LOGBIN} ${FILE} --configtest
}
case "$1" in
start)
START
;;
stop)
STOP
;;
status)
STATUS
;;
restart)
STOP
sleep 2
START
;;
test)
TEST
;;
*)
echo "Usage: /etc/init.d/logstash (test|start|stop|status|restart)"
;;
esac
|
3.Logstash 向es集群写数据
(1)编写一个logstash配置文件
1
2
3
4
5
6
7
8
9
10
11
|
[root@webserver1 etc]# cat logstash.conf
input { #数据的输入从标准输入
stdin {}
}
output { #数据的输出我们指向了es集群
elasticsearch {
hosts => ["192.168.2.18:9200","192.168.2.19:9200"] #es主机的ip及端口
}
}
[root@webserver1 etc]#
|
(2)检查配置文件是否有语法错
1
2
3
|
[root@webserver1 etc]# /usr/local/logstash/bin/logstash -f logstash.conf --configtest --verbose
|