一、环境信息以及安装前准备
1、组件介绍
*Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读)
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据(暂时不用)
*Logstash是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景
*ElasticSearch它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
*Kibana是ElasticSearch的用户界面
在实际应用场景下,为了满足大数据实时检索的场景,利用Filebeat去监控日志文件,将Kafka作为Filebeat的输出端,Kafka实时接收到Filebeat后以Logstash作为输出端输出,到Logstash的数据也许还不是我们想要的格式化或者特定业务的数据,这时可以通过Logstash的一些过了插件对数据进行过滤最后达到想要的数据格式以ElasticSearch作为输出端输出,数据到ElasticSearch就可以进行丰富的分布式检索了
2、高级架构
Elastic
的技术架构可以简单,也可以高级,它是很具有扩展性的,最简单的技术架构就是使用Beats
进行数据的收集,Beats
是一种抽象的称呼,具体的可以是使用FileBeat
收集数据源为文件的数据或者使用TopBeat
来收集系统中的监控信息,可以说类似Linux
系统中的TOP
命令,当然还有很多的Beats
的具体实现,再使用logstash
进行数据的转换和导入到Elasticsearch
中,最后使用Kibana
进行数据的操作以及数据的可视化等操作。
当然,在生产环境中,我们的数据可能在不同的地方,例如关系型数据库Postgre
,或者MQ
,再或者Redis
中,我们可以统一使用Logstash
进行数据的转换,同时,也可以根据数据的热度不同将ES
集群架构为一种冷温热架构,利用ES
的多节点,将一天以内的数据称谓热数据,读写频繁,就存放在ES
的热节点中,七天以内的数据称之为温数据,就是偶尔使用的数据存放在温节点中,将极少数会用到的数据存放在冷节点中。
3、本次架构图
4、环境准备
主机角色,配置(内存不要低于8核16G):
5、软件版本下载
官网下载地址,个人建议最好再官网下载,之前在其他网站下载es,一直报错,一直解决不了,在官网上下载下来的就一点问题都没有:(如果下载过慢,建议使用迅雷下载,有会员就更好啦)
elastic https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.rpm
kibana https://artifacts.elastic.co/downloads/kibana/kibana-6.8.0-x86_64.rpm
logstash https://artifacts.elastic.co/downloads/logstash/logstash-6.8.0.rpm
filebeat https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.0-x86_64.rpm
破解的x-pack和license的包下载地址:https://pan.baidu.com/s/1f9plvnhdbeSroOdW2G1YIg 提取码:1v2g
6、安装前提:
所有插件安装之前必须安装jdk1.8,并且需要配置环境变量,这边我就不一一介绍了。
二、ES集群安装配置
2.1、安装
说明:3台机器一起安装
[root@es-node1 config]#rpm -ivh elasticsearch-6.8.0.rpm
2.2、配置elasticsearch
#配置JVM参数,最大不要超过32G,并且留一半内存给操作系统,默认是1g
[root@es-node1 config]# vim jvm.options
-Xms4g
-Xmx4g #配置elastic信息,其他节点需要修改node.name和network.host的值
[root@es-node1 config]# cd /etc/elasticsearch
[root@es-node1 config]# cp elasticsearch.yml elasticsearch.yml-bak
[root@es-node1 config]# vim elasticsearch.yml
[root@es-node1 config]# grep "^[a-z]" elasticsearch.yml
cluster.name: my-es
node.name: node-76
path.data: /data/es #日志收集的目录
path.logs: /var/log/elasticsearch #es自己的日志,如有报错可在这边查看
network.host: 172.9.201.76
http.port: 9200
discovery.zen.ping.unicast.hosts: ["172.9.201.76", "172.9.201.77","172.9.201.78"]
discovery.zen.minimum_master_nodes: 2
设置打开文件描述符、进程数、内存限制
[root@es-node1 config]# vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
* soft memlock unlimited
* hard memlock unlimited
配置内核参数
[root@es-node1 config]# vim /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_syncookies = 1
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_mem= 786432 2097152 3145728
net.ipv4.tcp_rmem= 4096 4096 16777216
net.ipv4.tcp_wmem= 4096 4096 16777216
创建相关目录及授权
[root@es-node1 ~]# mkdir -pv /data/es/
mkdir: 已创建目录 "/data"
mkdir: 已创建目录 "/data/es/"
[root@es-node1 ~]# chown -R elastic:elastic /data/es/
启动elasticsearch,三台机器一起启动
[root@es-node1 ~]# systemctl start elasticsearch
检查服务是否正常:
[elastic@es-node1 elasticsearch]$ netstat -tnlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.9.201.76:9200 0.0.0.0:* LISTEN 2072/java #9200是http协议的RESTful接口
tcp 0 0 172.9.201.76:9300 0.0.0.0:* LISTEN 2072/java #9300是tcp通讯端口,集群间和TCPClient都走的它
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
在浏览器中访问: http://172.9.201.76:9200
name "node-76"
cluster_name "my-es"
cluster_uuid "FhxctUHqTz6eJZCkDuXwPQ"
version
number "6.8.0"
build_flavor "default"
build_type "rpm"
build_hash "65b6179"
build_date "2019-05-15T20:06:13.172855Z"
build_snapshot false
lucene_version "7.7.0"
minimum_wire_compatibility_version "5.6.0"
minimum_index_compatibility_version "5.0.0"
tagline "You Know, for Search"
查看是否是集群:
curl -XGET 'http://172.9.201.76:9200/_cat/nodes' //随意一台es中可执行,也可更换其中的 ip(这里可22或23)
三、安装并配置Kibana
3.1、安装kibana
[root@shtw-kibana01 ~]# rpm -ivh kibana-6.8.0-x86_64.rpm
3.2、配置kibana
说明:虽然我们搭建了三台es的集群,但是我们在kibana.yml的elasticsearch.hosts只能配置一台es的主机,所以我们这边一般配置master这一台。
[root@shtw-kibana01 ~]# cd /etc/kibana
[root@shtw-kibana01 ~]# cp kibana.yml kibana.yml-bak
[root@shtw-kibana01 ~]# vim kibana.yml
server.port: 5601 #监听的端口
server.host: "172.9.201.83" #监听的地址
elasticsearch.hosts: ["http://172.9.201.76:9200"] #elasticsearch访问的URL地址
3.3、启动kibana
[root@shtw-kibana01 ~]# systemctl start kibana
我们可以看到启动后服务监听的地址,访问这个URL:172.9.201.83:5601
kibana主页面,大致意思就是告诉我们kibana可以做哪些事
点击Monitoring标签可以开启监控设置,并且我们的license是basic版本的(即基础版)
3.4、汉化kibana
7.x版本官方自带汉化资源文件(位于kibana目录下的node_modules/x-pack/plugins/translations/translations/
目录,所以我们6.8.0是自带汉化目录的,接下来我们要做的是:
[root@shtw-kibana01 translations]# cd /usr/share/kibana/node_modules/x-pack/plugins/translations
[root@shtw-kibana01 translations]# cp -r translations /usr/share/kibana/src/legacy/core_plugins/kibana
[root@shtw-kibana01 translations]# cd /etc/kibana/kibana.yml #修改配置文件
i18n.locale: "zh-CN" #默认是en
四、安装破解版x-pack
强烈说明:本教程只供交流学习使用,切勿运用到商业用途。如有需要请购买官方正版授权
由于在elasticsearch在6.3版本之后x-pack是默认安装好的,所以不再需要用户自己去安装
1、替换x-pack包,并重启elasticsearch服务
[root@shtw-esnode01 x-pack-core]# cd /usr/share/elasticsearch/modules/x-pack-core
[root@shtw-esnode01 x-pack-core]# cp x-pack-core-6.8.0.jar x-pack-core-6.8.0.jar.20191206.bak
[root@shtw-esnode01 x-pack-core]#rz -y #选择下载在windows桌面上的已经破解好的x-pack-core-6.8.0.jar
2、替换完毕之后需要新增elasticsearch.yml配置
[root@shtw-esnode01 elasticsearch]# cd /etc/elasticsearch
[root@shtw-esnode01 elasticsearch]# vim elasticsearch.yml
xpack.security.enabled: false #新增关闭x-pack的配置文件
重启elasticsearch服务,并把license.json上传到服务器(三台es集群机器都执行如下操作,不然无法破解)
[elastic@es-node1 elasticsearch]$ curl -XPUT -u elastic 'http://172.9.201.76:9200/_xpack/license' -H "Content-Type: application/json" -d @license.json
Enter host password for user 'elastic': #密码为:change
{"acknowledged":true,"license_status":"valid"}
在kibana上查看license
Platinum表示白金版 过期时间为2099 年12月31日,但是我们暂时还不能使用x-pack,因为白金版的x-pack需要SSL进行数据传输,所以我们需要先配置SSL
五、配置SSL并启用x-pack
配置SSL之后,只要在master的es机器上配置用户名密码之后,其他的两台es机器也具有相同的用户名密码,配置步骤如下
1、创建证书
[elastic@es-node1 elasticsearch]$ cd /usr/share/elasticsearch/bin
[elastic@es-node1 bin]$ ./elasticsearch-certgen
2、解压证书
[elastic@es-node1 bin]$ mkdir /tmp/cert
[elastic@es-node1 bin]$ mv cert.zip /tmp/cert/
[elastic@es-node1 bin]$ cd /tmp/cert/
[elastic@es-node1 cert]$ unzip cert.zip
Archive: cert.zip
creating: ca/
inflating: ca/ca.crt
inflating: ca/ca.key
creating: elasticsearch/
inflating: elasticsearch/elasticsearch.crt
inflating: elasticsearch/elasticsearch.key
[elastic@es-node1 cert]$ ll
总用量 8
drwxrwxr-x 2 elastic elastic 34 9月 20 13:47 ca
-rw------- 1 elastic elastic 5157 9月 20 13:47 cert.zip
drwxrwxr-x 2 elastic elastic 56 9月 20 13:47 elasticsearch
[elastic@es-node1 cert]$ mv ca/* /etc/elasticsearch/
[elastic@es-node1 cert]$ mv elasticsearch/* /etc/elasticsearch/
[elastic@es-node1 cert]$ cd /etc/elasticsearch/
[elastic@es-node1 config]$ ll -rct #最后四个
总用量 48
-rw-rw---- 1 elastic elastic 0 9月 19 16:15 users_roles
-rw-rw---- 1 elastic elastic 0 9月 19 16:15 users
-rw-rw---- 1 elastic elastic 197 9月 19 16:15 roles.yml
-rw-rw---- 1 elastic elastic 473 9月 19 16:15 role_mapping.yml
-rw-rw---- 1 elastic elastic 6380 9月 19 16:15 log4j2.properties
-rw-rw---- 1 elastic elastic 2942 9月 19 16:15 jvm.options
-rw-r----- 1 elastic elastic 2853 9月 19 16:15 elasticsearch.yml-bak
-rw-rw---- 1 elastic elastic 207 9月 19 16:20 elasticsearch.keystore
-rw-rw---- 1 elastic elastic 2905 9月 20 13:27 elasticsearch.yml
-rw-rw-r-- 1 elastic elastic 1671 9月 20 13:57 ca.key
-rw-rw-r-- 1 elastic elastic 1200 9月 20 13:57 ca.crt
-rw-rw-r-- 1 elastic elastic 1675 9月 20 13:57 elasticsearch.key
-rw-rw-r-- 1 elastic elastic 1237 9月 20 13:57 elasticsearch.crt
将证书拷贝到其他节点,放入 /etc/elasticsearch 目录下
[elastic@es-node1 config]$ scp *.crt *.key 172.9.201.77:/etc/elasticsearch/
[elastic@es-node1 config]$ scp *.crt *.key 172.9.201.78:/etc/elasticsearch/
3、配置SSL,其他节点相同配置
[elastic@es-node1 config]$ vim elasticsearch.yml
[elastic@es-node1 config]$ tail elasticsearch.yml
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
xpack.security.enabled: true #之前配置为false注意删除或者修改
xpack.security.transport.ssl.enabled: true
xpack.ssl.key: elasticsearch.key
xpack.ssl.certificate: elasticsearch.crt
xpack.ssl.certificate_authorities: ca.crt
重启elasticsearch服务,这个时候发现登录用户还是不行,不要着急,这边还需要配置kibana使用用户名密码登录
4、创建elk的集群的相关用户
注意的是:这边只需要在master的es主机上去创建,因为是master的es主机创建的ssl证书。
[elastic@es-node1 bin]$ cd /usr/share/elasticsearch/bin
[elastic@es-node1 bin]$ ./elasticsearch-setup-passwords -h #查看命令帮助
Sets the passwords for reserved users Commands
--------
auto - Uses randomly generated passwords #主要命令选项,表示系统将使用随机字符串设置密码
interactive - Uses passwords entered by a user #主要命令选项,表示使用用户输入的字符串作为密码 Non-option arguments:
command Option Description
------ -----------
-h, --help show help
-s, --silent show minimal output
-v, --verbose show verbose output
[elastic@es-node1 bin]$ ./elasticsearch-setup-passwords auto #为了演示效果,这里我们使用系统自动创建
Initiating the setup of passwords for reserved users elastic,kibana,logstash_system,beats_system.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y #选择y Changed password for user kibana #kibana角色和密码
PASSWORD kibana = 4VXPRYIVibyAbjugK6Ok Changed password for user logstash_system #logstash角色和密码
PASSWORD logstash_system = 2m4uVdSzDzpt9OEmNin5 Changed password for user beats_system #beast角色和密码
PASSWORD beats_system = O8VOzAaD3fO6bstCGDyQ Changed password for user elastic #elasticsearch角色和密码
PASSWORD elastic = 1TWVMeN8tiBy917thUxq
可以先将以上用户和密码保存下来,具体的用户介绍见最后,这边最好保存在有道云笔记中,方便记录。
配置kibana添加elasticsearch用户认证:
[root@kb-node1 ~]# vim /etc/kibana/kibana.yml
[root@kb-node1 ~]# grep "^elastic" kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "1TWVMeN8tiBy917thUxq" #就是上一步创建的elastic的账号和密码
重启kibana,重启后打开kibana web页面:
可以使用用户名和密码登录了(使用之前创建的用户名和密码登录即可),这里我们选择elastic用户登录
六、安装logstash以及配置
1、安装logstash
[root@shtw-logstash01 ~]# rpm -ivh logstash-6.8.0.rpm
2、配置logstash
[root@shtw-logstash01 logstash]# cd /etc/logstash
[root@shtw-logstash01 logstash]# vim logstash.yml
path.data: /data/logstash #配置数据路径
http.host: "172.9.201.82" #配置主机名
path.logs: /var/log/logstash
3、配置conf文件
说明:这边有一个大坑,如果你不在output中根据if去判断,则所有采集的日志,就会采集到各个index文件中,那样就会所有的index的内容就会是一样的,所以我们根据tags来判断。
[root@shtw-logstash01 conf.d]# cd /etc/logstash/conf.d
[root@shtw-logstash01 conf.d]# vim service_5044.conf
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
#采集filebeat过来的日志
input {
beats {
port => 5044
} file {
path=> [ "/usr/local/tomcat/logs/catalina.out"]
}
} #过滤条件
filter{ if "beats_input_codec_plain_applied" in [tags]{
mutate{
remove_tag => ["beats_input_codec_plain_applied"] #删除beats_input_codec_plain_applied的tags
}
} } #输出到es
output {
if "workflow2" in [tags] { #tags是在filebeat客户端设置的
elasticsearch {
hosts => ["http://10.10.201.76:9200","http://10.10.201.77:9200","http://10.10.201.78:9200"] #输出的3台es集群
index => "workflow2-%{+YYYY.MM.dd}" #index名
user => "elastic" #es的用户名密码
password => "2GyYwGHHHMA7udFTozo4"
}
} else if "simpleworkflow" in [tags] {
elasticsearch {
hosts => ["http://10.10.201.76:9200","http://10.10.201.77:9200","http://10.10.201.78:9200"]
index => "simpleworkflow-%{+YYYY.MM.dd}"
user => "elastic"
password => "2GyYwGHHHMA7udFTozo4"
}
}
stdout { codec => json_lines }
}
注意的是:这边可以创建多个conf文件,每个文件的端口号必须不一致。
启动logstash:
[root@shtw-logstash01 ~]# systemctl start logstash
七、安装filebeat
在需要采集日志的地方安装filebeat
1、安装filebeta
[root@shtw-k2workflow01 ~]# rpm -ivh filebeat-6.8.0-x86_64.rpm
2、配置filebeat
[root@shtw-k2workflow01 ~]# cd /etc/filebeat
[root@shtw-k2workflow01 filebeat]# cp filebeat.yml filebeat.yml-bak
[root@shtw-k2workflow01 filebeat]# vim filebeat.yml
filebeat.inputs: - type: log
enabled: true #默认是false,要改成true的,不然的话,采集不到日志
paths:
- /usr/local/tomcat/logs/catalina.out #日志的路径
#- /var/log/*.log
#- c:\programdata\elasticsearch\logs\* filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false setup.template.settings:
index.number_of_shards: 3 # 用于在logstash中的output中做判断,不然采集的日志都输出到一起去了
tags: ["workflow2"] setup.kibana: output.logstash:
# The Logstash hosts
hosts: ["10.10.201.82:5044"] #传送到logstash的主机,并且对应端口号 processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
3、启动filebeat
[root@shtw-k2workflow01 filebeat]# systemctl start filebeat
等5s中去kibana中去查看索引,如图:
4、创建索引
5、查看采集的日志
搭建完毕,elk的路还是很长的,才走完万里长征第一步。