I will persist until I succeed
集群创建
集群创建

elk集群搭建

前言

什么是 ELK?
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELKstack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:
处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。
检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展
前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单

elk集群实现规划图

环境规划如下:

elk集群各节点(Ubuntu-18.04.3):
192.168.37.111/24: es-node1.long.com (kibana也装在192.168.37.111上)
192.168.37.112/24: es-node2.long.com
192.168.37.113/24: es-node3.long.com
192.168.37.114/24: logstash-to-es.long.com
192.168.37.115/24: redis.long.com
192.168.37.116/24: logstash-to-redis.long.com
192.168.37.117/24: web1.long.com
192.168.37.118/24: web2.long.com
192.168.37.119/24: web3.long.com

各服务器均做如下环境初始化:
#systemctl disable firewalld
# systemctl disable NetworkManager
#sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config
#echo “* soft nofile 65536” >> /etc/security/limits.conf
#echo “* hard nofile 65536” >> /etc/security/limits.conf
#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#cat /etc/crontab
*/5 * * * * ntpdate time1.aliyun.com &> /dev/null &&hwclock -w” >> /var/spool/cron/root
官网下载elasticsearch的deb包:

安装:
dpkg -i elasticsearch-7.6.1-amd64.deb
准备java环境:
[root@es-node1 /usr/local/src ]#apt install openjdk-8-jdk(简化配置过程,就不使用oracle-jdk解压安装了)
[root@es-node1 /usr/local/src ]#java -version
openjdk version “1.8.0_312”
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~18.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
[root@es-node1 ~ ]#grep “^[a-Z]” /etc/elasticsearch/elasticsearch.yml

cluster.name: long-es-cluster1 #ELK 的集群名称,名称相同即属于是同一个集群
node.name: node1-111 #当前节点在集群内的节点名称
path.data: /elk/data #ES 数据保存目录
path.logs: /elk/logs #ES 日志保存目
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 192.168.37.111 #监听 IP
http.port: 9200 #监听端口
集群中 node 节点发现列表
discovery.seed_hosts: [“192.168.37.111″,”192.168.37.112″,”192.168.37.113”]
集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: [“192.168.37.111″,”192.168.37.112″,”192.168.37.113”]
一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要
显式指定索引库名称,生产环境建议设置为 true,删除索引库的时候必须指定,
否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
http.cors.enabled: true #开启支持跨域访问
http.cors.allow-origin: “*” #指定允许访问范围

[root@es-node1 ~ ]# vim /usr/lib/systemd/system/elasticsearch.service #修改内存
限制
LimitMEMLOCK=infinity #无限制使用内存

#vim /etc/elasticsearch/jvm.options
22 -Xms4g
23 -Xmx4g #最小和最大内存限制,为什么最小和最大设置一样大?
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
官方配置文档最大建议 30G 以内。
es-node2.long.com、es-node3.long.com配置同es-node1.long.com

[root@es-node1 ~ ]#systemctl start elasticsearch.service
[root@es-node1 ~ ]#systemctl status elasticsearch.service
● elasticsearch.service – Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-06-29 23:39:32 CST; 2s ago
Docs: http://www.elastic.co
Main PID: 2565 (java)
Tasks: 57 (limit: 7202)
CGroup: /system.slice/elasticsearch.service
├─2565 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.neg
└─2671 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
Jun 29 23:39:20 es-node1.long.com systemd[1]: Starting Elasticsearch…
Jun 29 23:39:20 es-node1.long.com elasticsearch[2565]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was
Jun 29 23:39:32 es-node1.long.com systemd[1]: Started Elasticsearch.

通过浏览器访问 elasticsearch 服务端口:

安装 elasticsearch 插件之 head:
插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对 elasticsearch 集群的状态监控与管理配置等功能。
[root@es-node1 ~ ]#apt install docker -y
[root@es-node1 ~ ]systemctl start docker && systemctl enable docker
[root@es-node1 ~ ]# docker version

[root@es-node1 ~ ]#docker run -d -p 9100:9100 mobz/elasticsearch-head:5

通过浏览器访问head插件的页面:


鉴于后续步骤较多,logstash及kibanaan安装、配置先省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。后续再详细发布

最后kibana展示的效果如下: