ELK集群搭建(基础教程)
目录:
服务器准备
集群内各台服务器安装Elasticsearch
安装部署Kafka(注:每个节点都配置,注意ip不同)
安装logstash工具
安装filebeat
ELK收集Nginx的json日志
ELK收集Nginx正常日志和错误日志
ELK收集Tomcat日志
ELK收集docker日志
配置filebeat收集单个docker日志
modules日志收集
使用redis作为缓存收集日志
使用Kafka做缓存收集日志
服务器准备
172.20.26.204 node01
172.20.26.207 node02
172.20.26.208 node03
操作系统版本:CentOS Linux release 7.9.2009 (Core)
#各台服务器安装基础工具软件,系统更新
yum install vim net-tools epel-release wget -y
yum update
#修改每台服务器的hostname
hostnamectl set-hostname node01 #172.20.26.204
hostnamectl set-hostname node02 #172.20.26.207
hostnamectl set-hostname node03 #172.20.26.208
分别在 172.20.26.204、172.20.26.207、172.20.26.208服务器上配置域名映射
[root@node01 ~]# vim /etc/hosts
[root@node02 ~]# vim /etc/hosts
[root@node03 ~]# vim /etc/hosts
172.20.26.204 node01
172.20.26.207 node02
172.20.26.208 node03
关闭selinux、firewalld防火墙
[root@bogon ~]# vim /etc/selinux/config
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# systemctl disable firewalld
一、集群内各台机器安装Elasticsearch
1、下载Elasticsearch的安装包
官方地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
2、Elasticsearch安装(每台机器都执行)
#下载安装包存放在/data/software/目录
[root@node01 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software
[root@node02 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software
[root@node03 /]# mkdir -p /data/software && cd /data/software #创建并进入/data/software
wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.9.0-x86_64.rpm
linux开发java环境可能和elasticsearch java环境冲突,因为 elasticsearch 需要JDK才可以 ,所需需要指定elasticsearch的java环境,给它配置一个特定的java环境运行,下载JDK,然后解压即可。
Elasticsearch 和 JVM 兼容性版本查询地址如下:
https://www.elastic.co/cn/support/matrix#matrix_jvm
版本选择推荐及总结
1、ES 7.x 及之前版本,选择 Java 8
2、ES 8.x 及之后版本,选择 Java 17 或者 Java 18,建议 Java 17,因为对应版本的 Logstash 不支持 Java 18
3、Java 9、Java 10、Java 12 和 Java 13 均为短期版本,不推荐使用
4、M1(Arm) 系列 Mac 用户建议选择 ES 7.8.x 以上版本,因为考虑到 ELK 不同产品自身兼容性,7.8.x以上版本原生支持 Arm 原生 JDK
wget -c https://download.oracle.com/java/17/latest/jdk-17_linux-aarch64_bin.tar.gz
tar -zxf jdk-17_linux-aarch64_bin.tar.gz #各服务器均需安装jdk
下载后可以拷贝到其他服务器的/data/software目录下
#安装
[root@node01 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm
[root@node02 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm
[root@node03 software]# rpm -ivh elasticsearch-8.9.0-x86_64.rpm
警告:elasticsearch-8.9.0-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
1:elasticsearch-0:8.9.0-1 ################################# [100%]
--------------------------- Security autoconfiguration information ------------------------------
Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.
The generated password for the elastic built-in superuser is : 9gVL6ve8ARLwwJibai8Z
If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.
-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
172.20.26.204服务器上的elasticsearch安装完成。其他节点同样操作即可。
HOME: /usr/share/elasticsearch
配置:/etc/elasticsearch
日志:/var/log/elasticsearch/
数据:/data/elasticsearch
配置2:/etc/sysconfig/elasticsearch
#查看elasticsearch配置文件目录
[root@node01 software]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch-plugins.example.yml
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/jvm.options
/etc/elasticsearch/log4j2.properties
/etc/elasticsearch/role_mapping.yml
/etc/elasticsearch/roles.yml
/etc/elasticsearch/users
/etc/elasticsearch/users_roles
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service
#修改 elasticsearch 下的bin/elasticsearch(各服务器均需操作)
#在首行添加
#配置自己的jdk17
vim /usr/share/elasticsearch/bin/elasticsearch
export JAVA_HOME=/data/software/jdk-17.0.8
export PATH=$JAVA_HOME/bin:$PATH
#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/data/software/jdk-17.0.8 /bin/java"
else
为后面es集群设置,每个节点操作如下:
#编辑elasticsearch.yml配置文件
vim /etc/elasticsearch/elasticsearch.yml
grep "^[a-Z]" /etc/elasticsearch/elasticsearch.yml
cluster.name: es_cluster #集群名称,各节点要一致
node.name: node01 #节点名称,同一个集群内所有节点的节点名称不能重复
path.data: /data/elasticsearch #将es的数据存在该目录,注意创建该目录
path.logs: /var/log/elasticsearch #日志目录,会创建以集群名称的一个日志目录 eg:es-app.log
bootstrap.memory_lock: true #内存锁定
network.host: 0.0.0.0 #绑定监听地址
http.port: 9200 #默认端口号
discovery.seed_hosts: ["172.20.26.204", "172.20.26.207","172.20.26.208"]
cluster.initial_master_nodes: ["node01","node02","node03"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
xpack.security.transport.ssl:
http.host: 0.0.0.0
transport.host: 0.0.0.0
vim /etc/systemd/system.conf #每个节点操作一遍
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
保存, 重启系统
#创建es数据存储目录
[root@node01 software]# mkdir -p /data/elasticsearch
[root@node02 software]# mkdir -p /data/elasticsearch
[root@node03 software]# mkdir -p /data/elasticsearch
# 创建证书目录
[root@node01 software]#mkdir -p /etc/elasticsearch/certs
[root@node01 bin]# vim /etc/elasticsearch/jvm.options
#去掉以下注释并顶格,各个节点均需操作
-Xms2g #默认是4g,可以根据自己情况适当调整大小,例如,1g、2g
-Xmx2g #默认是4g,可以根据自己情况适当调整大小,例如,1g、2g
#es因为安全问题拒绝使用root用户启动(各节点均需操作)
解决方法:
1.添加用户组es、创建用户es并设置密码
groupadd es
useradd es -g es -p 1qaz2wsx # -g 指定组 -p 设置密码为1qaz2wsx
2.添加目录拥有权限
更改 elasticsearch文件夹及内部文件的所属用户及组为es,如果是编译安装或者是二进制安装的话,可能只有一个目录。
[root@node01 ~]# find / -name elasticsearch
/etc/sysconfig/elasticsearch
/etc/elasticsearch
/var/lib/elasticsearch
/var/log/elasticsearch
/usr/share/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch
/data/elasticsearch
# -R 处理指定目录以及其子目录下的所有文件权限赋予es用户及es组
chown es:es -R /etc/sysconfig/elasticsearch /etc/elasticsearch /var/lib/elasticsearch /var/log/elasticsearch /usr/share/elasticsearch /data/elasticsearch
解决Elasticsearch集群开启账户密码安全配置自相矛盾的坑
- 生成CA证书
在第一台服务器节点 node01 设置集群多节点通信密钥,使用 elasticsearch-certutil 工具为您的集群生成 CA。
[root@node01 ~]# cd /usr/share/elasticsearch/bin/
[root@node01 bin]# ./elasticsearch-certutil ca
a.出现提示时,接受默认文件名,即 elastic-stack-ca.p12。此文件包含 CA 的公共证书和用于为每个节点签署证书的私钥。
b.输入 CA 的密码。如果不部署到生产环境,您可以选择将密码留空,这里输入的密码为1qaz2wsx
2、配置CA证书
用 ca 证书签发节点证书,为集群中的节点生成证书和私钥。包括在上一步中生成的 elastic-stack-ca.p12 输出文件。
[root@node01 bin]# ./elasticsearch-certutil cert --ca elastic-stack-ca.p12
根据提示
a.输入您的 CA 的密码,请按 Enter。
b.为证书创建密码并接受默认文件名。创建的密码为1qaz2wsx
输出文件是一个名为 elastic-certificates.p12 的密钥库。此文件包含节点证书、节点密钥和 CA 证书。
将生成的证书文件移动到证书目录中(/etc/elasticsearch/certs)
[root@node01 bin]# mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/certs/
3、复制证书到集群
在集群中的每个节点上,将 elastic-certificates.p12 文件复制到 证书目录中/etc/elasticsearch/certs
[root@node01 certs]# scp elastic-certificates.p12 root@172.20.26.207:/etc/elasticsearch/certs/
[root@node01 certs]# scp elastic-certificates.p12 root@172.20.26.208:/etc/elasticsearch/certs/
[root@node01 certs]# chown es:es -R /etc/elasticsearch #各个节点再次给/etc/elasticsearch 赋权给es用户和组
4、修改配置文件(需要注意的是:格式一定要对齐,否则会报错)
vim /etc/elasticsearch/elasticsearch.yml #各个节点打开配置文件进行修改
a.基本集群配置,不启用安全也需要的配置
cluster.name: es_cluster #每个节点一致
node.name: node01 #每个节点不同
b.安全配置
由于在群集的每个节点上使用相同的Elastic-Certificate.p12文件,因此将验证模式设置为证书:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate