环境交代
架构如图:
1
(目标模块 --->filebeat) --->(kafka --->logstash) --->(es --->kibana)
具体服务器信息如下:
1
2
3
4172.16.0.207 工作模块+filebeat CentOS 7.4 64位 阿里云1核2G
172.31.0.84 kafka+logstash CentOS 7.4 64位 阿里云2核4G
172.31.0.76 es+es-head+kibana CentOS 7.4 64位 阿里云2核16G
安全组已经开放了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
10filebeat.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
3wget 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
13input {
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
5wget 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
5curl -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
10connect: {
server: {
options: {
port: 9100,
base: '.',
keepalive: true,
hostname: '*' #新增加这样一句话
}
}
}
保存文件,docker restart es-head
即可。在浏览器里访问外网ip地址:9100
,如图:
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的端口并没有与任何的程序相关联,如图:
其实这是没关系的,可以无视掉。然后在浏览器里访问外网ip地址:5601
就可以查看kibana了,先去menagement
—>index pattern
填入刚刚生成的index,然后在discover
页面里选择刚刚生成的index就能看到日志内容了:
如果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