将kafka加入到Elk集群

环境交代

架构如图:

1
(目标模块 --->filebeat) --->(kafka --->logstash) --->(es --->kibana)

具体服务器信息如下:

1
2
3
4
172.16.0.207	工作模块+filebeat	CentOS 7.4 64位		阿里云12G
172.31.0.84 kafka+logstash CentOS 7.4 64位 阿里云24G
172.31.0.76 es+es-head+kibana CentOS 7.4 64位 阿里云216G
安全组已经开放了elk相应的端口

首先先执行yum update -y && yum install java-1.8.0-openjdk* -y,在更新的时候不要闲着,在https://www.elastic.co/downloads网站下载所有的elk模块,然后上传到对应的服务器里。

filebeat的部署、配置和启动

filebeat与目标机器安装在一起,它是用6.5.4版本,先从官网上下载rpm包,然后上传到服务器里。

1
2
3
4
#假设已经下载好了filebeat-6.5.4-x86_64.rpm
rpm -ivh filebeat-6.5.4-x86_64.rpm
cd /etc/filebeat
cp filebeat.yml filebeat.yml-default #备份模板配置文件

修改filebeat.yml如下:

1
2
3
4
5
6
7
8
9
10
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/messages #设定日志输入源

output.kafka:
enabled: true
hosts: ["172.31.0.84:9092"] #这里填入kafka的地址和端口
topic: 'system-secure' #指定一个topic

配置文件说明了数据的来源和目的地,使用/etc/init.d/filebeat start -e -c /etc/filebeat/filebeat.yml启动filebeat,然后ps -aux|grep filebeat查看一下进程。而filebeat的日志地址是在/var/log/filebeat目录下。

logstash的部署、配置和启动

logstash是跟kafka在一台服务器里,首先是下载包并且解压缩:

1
2
3
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz
tar -zxvf logstash-6.5.4.tar.gz -C /opt/
cd /opt/logstash-6.5.4/config

新建一个配置文件,叫logstash_kafka2ES.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
input {
kafka{
bootstrap_servers=>"172.31.0.84:9092" #kafka的地址和端口
topics=>"system-secure" #topic要一致
codec=>plain
}
}
output {
elasticsearch {
hosts=>["172.31.0.76:9200"] #es的地址和端口
index=>"system-secure-%{+YYYY-MM}" #规定es使用的索引,按月份分类
}
}

配置文件里规定数据来源是kafka的system-secure这个topic,再修改同目录下的jvm.options

1
2
-Xms512m	#根据自己实际情况来
-Xmx512m #根据自己实际情况来

保存退出,./bin/logstash -f ./config/logstash_kafka2ES.conf &启动之,日志是logstash目录/logs/logstash-plain.log

kafka的配置和启动已经在https://rorschachchan.github.io/2019/01/16/%E6%90%AD%E5%BB%BAKakfa2-11%E4%B8%BAELK%E6%9C%8D%E5%8A%A1/ 里说过了,这里略过。

elasticsearch-6.5.4的部署、配置和启动

登录到es的服务器上,首先先下载安装包并且解压缩:

1
2
3
4
5
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
tar -zxvf elasticsearch-6.5.4.tar.gz -C /opt/
cd elasticsearch-6.5.4/
useradd elk #es不能用root启动,需要新建一个用户
chown -R elk:elk elasticsearch-6.5.4/ #整个文件夹都给elk了

修改一下elasticsearch.yml

1
2
3
4
5
6
7
8
9
#cluster.name: my-application	#由于实验环境是一个es,就没写集群名称
node.name: lcshopelk
path.data: /opt/elasticsearch-6.5.4/data/ #存数据的地方
path.logs: /data/tmp/elklog #存日志的路径
bootstrap.memory_lock: true #为了防止swapping,官方建议设定为true,阿里云的云服务器是没有swap,可以不写
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true #准许es-head
http.cors.allow-origin: "*"

保存之后修改同目录的jvm.options

1
2
-Xms2g	#根据自己实际情况来
-Xmx2g #根据自己实际情况来

这里的配置,官网标准的建议是把50%的可用内存作为Elasticsearch的堆内存,保留剩下的50%。当然它也不会被浪费,Lucene会很乐意利用起余下的内存。查看node下是否开启了Mem_lock的语句是:curl 'localhost:9200/_nodes?filter_path=**.mlockall'

保存完毕,还没完,vim /etc/security/limits.conf,最后两行改成如下:

1
2
3
4
5
* soft nofile 65536
* hard nofile 65536
# allow user 'elk' mlockall
elk soft memlock unlimited
elk hard memlock unlimited

然后切换成elk用户,执行./elasticsearch -d就是后台启动了。

简单的几句es命令:

1
2
3
4
5
curl -XGET http://127.0.0.1:9200/_cat/allocation?v	#查看本机node磁盘容量
curl -XGET http://127.0.0.1:9200/_cat/nodes?v #能查看node的CPU和负载情况
curl -XGET http://127.0.0.1:9200/_aliases #查看所有的索引
curl 'http://localhost:9200/_search?pretty' #查看索引一些细节
curl -XDELETE 'localhost:9200/shoporder-log-2019-02?pretty&pretty' #删除shoporder-log-2019-02这个索引,同时磁盘释放空间

kibana和es-head的部署、配置和启动

es-head是用docker部署的,语句如下:

1
2
#假设docker已经安装好了
docker run --name es-head -p 9100:9100 tobias74/elasticsearch-head:6 #这里必须安装6版本,不然的话,数据不会显示

运行完之后,要进入到容器里修改一下对应的配置文件Gruntfile.js,修改一下connect段落:

1
2
3
4
5
6
7
8
9
10
connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*' #新增加这样一句话
}
}
}

保存文件,docker restart es-head即可。在浏览器里访问外网ip地址:9100,如图:
akb48

Kibana也是用docker部署的,语句如下:

1
2
#假设docker已经安装好了
docker run --name kibana -p 5601:5601 docker.elastic.co/kibana/kibana:6.5.4

运行完之后,要进入到容器里修改一下对应的配置文件kibana.yml

1
2
3
4
5
6
7
8
9
10
11
12
---
# Default Kibana configuration from kibana-docker.

server.name: kibana
server.host: "0.0.0.0" #准许所有人访问
elasticsearch.url: http://es外网IP:9200
xpack.monitoring.ui.container.elasticsearch.enabled: false

# SSL for outgoing requests from the Kibana Server (PEM formatted)
server.ssl.enabled: true
server.ssl.key: /usr/share/kibana/config/mykey.key #这里是https证书
server.ssl.certificate: /usr/share/kibana/config/mycert.crt #这里是https证书

修改完事之后,docker restart kibana,此时进入到kibana容器发现5601的端口并没有与任何的程序相关联,如图:
akb48

其实这是没关系的,可以无视掉。然后在浏览器里访问外网ip地址:5601就可以查看kibana了,先去menagement —>index pattern填入刚刚生成的index,然后在discover页面里选择刚刚生成的index就能看到日志内容了:
akb48

如果kibana在某一天突然出现了”重定向过多”,重启kibana进程可破,但是index都会消失…但愿你永远不会遇到这样的bug情况…

X-pack目前还不支持6.2以上的版本,故此先略。因为没有X-pack,所以再kibana.yml里的elasticsearch.url我们还是写http,有了X-pack就要改成elasticsearch.url: "https://<your_elasticsearch_host>.com:9200"的样子,让es与kibana之间的传输是加密的。

参考资料

https://dzone.com/articles/just-say-no-swapping
https://www.elastic.co/guide/cn/elasticsearch/guide/cn/heap-sizing.html
https://www.elastic.co/guide/cn/kibana/current/settings.html

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------