Hello,又是小堂,今天开始之前想问大家一个问题,不知道大家是否听说过ELK?或许有小伙伴疑惑:ELK为什么这么耳熟?ELK是什么?ELK有什么用?ELK怎么部署?有木有可以直接复制黏贴就可以完成的???!!!
小编本人在两个月内搜索了N篇文章,内心只想着找到一篇能复制黏贴的快捷部署的企业级别ELK项目文章(基本都是单机、测试),很遗憾的是没能找到,因此萌生了自己搞一篇的想法。假如已对ELK有过了解的童鞋,可以跳过前言,直接跳到实战,直接Ctrl+c Ctrl+v即可部署好企业级别的ELK。
前言
ELK,作为大数据时代的宠儿,是日志分析界中的“扛把子”,饿了么、阿里巴巴、携程、华为、美团……这些公司都在用ELK!所以ELK耳熟能详并非没有原因的。
在实际应用场景中,ELK起到了日志收集、日志归档、日志存储、日志分析的作用。想象一下,一千台服务器中的某个项目挂掉了,如何通过查看日志去找到挂掉的原因?一台一台的服务器远程过去,一台一台的查看不同的日志。想想都觉得累。假若部署了ELK,则可以通过日志分析快速定位问题所在。ELK实际上是一整套的解决方案,由三个开源软件组成:Elasticsearch , Logstash, Kibana。Elasticsearch是实时全文搜索和分析引擎,主要负责日志搜索、分析。Logstash是一个对日志进行搜集、过滤的工具。Kibana可以为 Logstash 和 ElasticSearch 提供web前端显示界面,让日志分析变得方便明了。三者已经能组成一个简单的日志收集过滤分析平台。
Logstash->Elasticsearch->Kibana
上面的架构是最简单的架构,想应用到实际中,这种架构是不足以支持业务运行的。架构仍然需进行优化。由于logstash是JAVA开发,运行时候会占用较大的资源(内存、CPU等),假如每台服务器都安装运行一个logstash,对业务影响也太大了!因此,实际应用中,logstash仅发挥它的日志过滤功能,日志收集将交给filebeat。filebeat是什么?filebeat是一个轻量级日志传输工具,只占用些许的资源,就能做到收集海量的日志。因此,ELK组合中将加入filebeat。
Filebeat->Logstash->Elasticsearch->Kibana
此时的架构已经比较完整啦,但是,企业级别的ELK日志分析平台,怎么能不考虑安全性、稳定性呢?为了提升Elasticsearch消息处理效率、存储容量与防止Elasticsearch宕机日志丢失,所以引入Elasticsearch分布式集群架构。随着业务量增大,由filebeat直接传递logstash可能业务量过大导致数据丢失或宕机,所以引入kafka,达到削峰、异步作用。同时kafka也有保存日志数据,增加一层保险的作用。为了解决kafka宕机可能造成损失,kafka也需要做成集群。分布式集群架构是什么?其实就是加多几台机子,几台机子组成一个集群,几台机子一起工作,肯定比单独一台效率高。而且当其中一台机子坏掉,也有其余的机子顶上去,不会影响业务。kafka是什么?kafka是一种高吞吐量的分布式发布订阅消息系统,在ELK中扮演日志存储、备份、中转的角色,起到数据备份、削峰的作用。因此,ELK组合将做成ELK集群,同时加入kafka角色。
Filebeat->Logstash->Elasticsearch->Kibana
到此为止,整个ELK日志分析平台的架构与相关作用,都已经介绍完毕。接下来就是实战阶段。
实战
先说明下搭建环境与各主机角色。节点选择:广东(VPC网络更安全、SSD磁盘性能高)云主机配置:4核16G(4核8G也支持,但会有延时感)网络选择:VPC虚拟私有云(VPC网络更安全、高效)带宽:5M系统版本:Centos7.6云主机数量:5软件版本:ELK 7.4.0、kafka 2.12-2.6.0
首先,下面为部署elasticsearch的步骤。(亲测可用,从头到尾只用修改ip)
a.步骤1
登陆elasticsearch主节点、数据节点、数据节点。ssh 到master node 192.168.0.6、date node1 192.168.0.4、date node2 192.168.0.5
各个节点都关闭防火墙和SELinux。
各个节点都执行以下命令
service
b.步骤2
三个节点都执行以下的步骤
yum install -y ntpdate
c.步骤3
ntpdate time1.aliyun.com
d.步骤4
yum -y install java-1.8.0-openjdk
e.步骤5
cd /opt/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
f.步骤6
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
g.步骤7
groupadd els
h.步骤8
useradd els -g els -p els
i.步骤9
chown -R els:els /opt/elasticsearch-7.4.0/
j.步骤10
192.168.0.6配置如下:
vi /opt/elasticsearch-7.4.0/config/elasticsearch.yml
##集群名称
cluster.name: ES-Cluster
##节点名称
node.name: ES-node1
主节点
node.master: true
# # 数据节点
node.data: true
# # 确保外网和内网均能访问
network.host: 0.0.0.0
# # http协议,用户外部通讯
http.port: 9200
# # Tcp协议,用于节点间的数据传输
transport.port: 9300
# # 最大节点数量
node.max_local_storage_nodes: 3
# #三个节点
discovery.seed_hosts: ["192.168.0.6:9300", "192.168.0.4:9301", "192.168.0.5:9302"]
# # 确保当前节点是主节点
cluster.initial_master_nodes: ["ES-node1"]
# # 开启xpack
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
192.168.0.4配置如下:
vi /opt/elasticsearch-7.4.0/config/elasticsearch.yml
cluster.name: ES-Cluster
# # 节点名称
node.name: ES-node2
# # 主节点
node.master: false
# # 数据节点
node.data: true
# # 确保外网和内网均能访问
network.host: 0.0.0.0
# # http协议,用户外部通讯
http.port: 9201
# # Tcp协议,用于节点间的数据传输
transport.port: 9301
# # 最大节点数量
node.max_local_storage_nodes: 3
# #三个节点
discovery.seed_hosts: ["192.168.0.6:9300", "192.168.0.4:9301", "192.168.0.5:9302"]
# # 确保当前节点是主节点
cluster.initial_master_nodes: ["ES-node1","ES-node2","ES-node3"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
192.168.0.5配置如下:
vi /opt/elasticsearch-7.4.0/config/elasticsearch.yml
cluster.name: ES-Cluster
# # 节点名称
node.name: ES-node3
# # 主节点
node.master: false
# # 数据节点
node.data: true
# # 确保外网和内网均能访问
network.host: 0.0.0.0
# # http协议,用户外部通讯
http.port: 9202
# # Tcp协议,用于节点间的数据传输
transport.port: 9302
# # 最大节点数量
node.max_local_storage_nodes: 3
# #三个节点
discovery.seed_hosts: ["192.168.0.6:9300", "192.168.0.4:9301", "192.168.0.5:9302"]
# # 确保当前节点是主节点
cluster.initial_master_nodes: ["ES-node1","ES-node2","ES-node3"]
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/elasticsearch-7.4.0/config/elastic-certificates.p12
k.步骤11
echo “vm.max_map_count=655360” >> /etc/sysctl.conf
l.步骤12
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
n.步骤13
生成证书与秘钥,一直回车即可,无需设置密码
cd /opt/elasticsearch-7.4.0/
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert —ca elastic-stack-ca.p12
m.步骤14
mv elastic-certificates.p12 /opt/elasticsearch-7.4.0/config/
mv elastic-stack-ca.p12 /opt/elasticsearch-7.4.0/config/
o.步骤15
scp/opt/elasticsearch-7.4.0/config/elastic-certificates.p12 root@192.168.0.4:/opt/elasticsearch-7.4.0/config/
scp/opt/elasticsearch-7.4.0/config/eelastic-stack-ca.p12 root@192.168.0.4:/opt/elasticsearch-7.4.0/config/
scp/opt/elasticsearch-7.4.0/config/elastic-certificates.p12 root@192.168.0.5:/opt/elasticsearch-7.4.0/config/
scp/opt/elasticsearch-7.4.0/config/eelastic-stack-ca.p12 root@192.168.0.5:/opt/elasticsearch-7.4.0/config/
p.步骤16
为ES内置的用户创建密码,例如elastic账户,即为超级用户
bin/elasticsearch-setup-passwords interactive
q.步骤17
重启三台VM,shutdown -r now
r.步骤18
三台VM都执行以下操作:
su els
cd /opt/elasticsearch-7.4.0/bin/
nohup ./elasticsearch &
集群成功启动
部署完elasticsearch,ELK项目已经完成了四分之一,只需要部署kibana,就可以简单的使用ELK的部分功能啦,以下为部署kibana项目的步骤。(亲测可用)
a.步骤1
登陆kibana节点。ssh 到 192.168.0.6
b.步骤2
cd /opt/
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.0-linux-x86_64.tar.gz
c.步骤3
tai -zxvf kibana-7.4.0-linux-x86_64.tar.gz
d.步骤4
vi /opt/kibana-7.4.0-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.0.6:9200","http://192.168.0.4:9201","http://192.168.0.5:9202"]
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
i18n.locale: "zh-CN"
e.步骤5
chown -R els:els /opt/kibana-7.4.0-linux-x86_64
f.步骤6
su els
cd /opt/kibana-7.4.0-linux-x86_64/bin/
nohup ./kibana &
g.步骤7
测试下kibana与elasticsearch的可用性
打开浏览器,登录http://192.168.0.6:5601/
如果出现登录界面,则说明kibana和elasticsearch都是成功部署。
账号与密码都是elastic。登录成功后可以看到如下界面。
后续
ELK的部署已经完成了一半,由于篇幅问题,ELK的部署暂告一段落,下一篇将继续部署ELK,也就是kafak+logstash+filebeat的组合。下篇将完全部署ELK项目,就可以投入实际工作运营当中啦!