ELK集群部署
ELK简介、下载
ELK 是 elastic 公司旗下三款产品ElasticSearch、Logstash、Kibana的首字母组合,也即Elastic Stack包含ElasticSearch、Logstash、Kibana、Beats。ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前主流的一种日志系统。
ElasticSearch : 基于 JSON 的分布式的搜索和分析引擎,作为 ELK 的核心,它集中存储数据,
用来搜索、分析、存储日志。它是分布式的,可以横向扩容,可以自动发现,索引自动分片
Logstash : 动态数据收集管道,支持以 TCP/UDP/HTTP 多种方式收集数据(也可以接受 Beats 传输来的数据),
并对数据做进一步丰富或提取字段处理。用来采集日志,把日志解析为json格式交给ElasticSearch
Kibana : 数据可视化组件,将收集的数据进行可视化展示(各种报表、图形化数据),并提供配置、管理 ELK 的界面
Beats :轻量型日志采集器,单一用途的数据传输平台,可以将多台机器的数据发送到 Logstash 或 ElasticSearch
下载ELK组件 elaticsearch kibana logstash filebaet beat
https://www.elastic.co/cn/downloads/past-releases
三台服务器
系统centos7
es主节点/es数据节点/kibana/head 192.168.30.110
es主节点/es数据节点/logstash/ 192.168.30.111
es主节点/es数据节点/filebeat 192.168.30.112
修改个节点名
键入 hostnamectl set-hostname elk01 回车,键入bash 回车 即可及时成效修改
所有节点关闭防火墙
关闭selinux
vi /etc/selinux/config
全部配置系统环境
vim /etc/security/limits.conf 末尾追加
- soft nofile 65536
- hard nofile 131072
- soft nproc 2048
- hard nproc 4096
vim /etc/sysctl.conf 末尾追加
vm.max_map_count=655360
执行sysctl -p
全部安装java环境
tar zxvf jdk-11.0.15_linux-x64_bin.tar.gz -C /usr/local/
环境变量
vi /etc/profile 尾部追加
JAVA_HOME=/usr/local/jdk-11.0.15
PATH==
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin:
J
A
V
A
H
O
M
E
/
j
r
e
/
b
i
n
C
L
A
S
S
P
A
T
H
=
.
:
JAVA_HOME/jre/bin CLASSPATH=.:
JAVAHOME/jre/binCLASSPATH=.:JAVA_HOME/lib/dt.jar:
J
A
V
A
H
O
M
E
/
l
i
b
/
t
o
o
l
s
.
j
a
r
:
JAVA_HOME/lib/tools.jar:
JAVAHOME/lib/tools.jar:JAVA_HOME/jre/lib
ES_JAVA_HOME=/usr/local/jdk-11.0.15
export JAVA_HOME PATH CLASSPATH
source !$ (!$ 特殊的 shell 参数,它扩展为上一个命令中最后一个参数的值。)
java -version 查看版本信息 安装完成
安装node.js
tar xvf node-v14.21.3-linux-x64.tar.xz -C /usr/local/
环境变量
vi /etc/profile 尾部追加
export NODE_HOME=/usr/local/node-v14.21.3-linux-x64
export PATH=
N
O
D
E
H
O
M
E
/
b
i
n
:
NODE_HOME/bin:
NODEHOME/bin:PATH
export NODE_PATH=
N
O
D
E
H
O
M
E
/
l
i
b
/
n
o
d
e
m
o
d
u
l
e
s
:
NODE_HOME/lib/node_modules:
NODEHOME/lib/nodemodules:PATH
安装完成
head插件安装
192.168.30.110
下载head wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip 解压head压缩包
报错找不到unzip 执行yum install -y unzip安装unzip
mv elasticsearch-head-master /opt/head 修改目录名称
cd /op/head目录
先执行下npm config set strict-ssl false 忽略SSL证书验证
再执行 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装cnpm包
否则会报证书验证错误,接下来安装下面的环境
cnpm install -g grunt-cli
cnpm install -g grunt
cnpm install grunt-contrib-clean
cnpm install grunt-contrib-concat
cnpm install grunt-contrib-watch
cnpm install grunt-contrib-connect
cnpm install grunt-contrib-copy
cnpm install grunt-contrib-jasmine
编辑vi /opt/head/Gruntfile.js文件
vim /usr/local/elasticsearch-head/Gruntfile.js
找到connect属性,新增 hostname: ‘0.0.0.0’, 不要忽略尾部的 , 号
nohup /opt/head/grunt server & 后台启动
浏览器输入192.168.30.110:9100
可以看到下图的web界面,因为还没有部署elasticsearch,所有没有任何数据
head做个启动脚本
#!/bin/bash
#chkconfig: 2345 55 24
#description: elasticsearch-head service manager
data="cd /opt/head/ ; nohup npm run start >/dev/null 2>&1 & "
START() {
eval $data
}
STOP() {
ps -ef | grep grunt | grep -v “grep” | awk ‘{print $2}’ | xargs kill -s 9 >/dev/null
}
case “$1” in
start)
START
;;
stop)
STOP
;;
restart)
STOP
sleep 2
START
;;
*)
echo “Usage: elasticsearch-head (|start|stop|restart)”
;;
esac
三台全部创建用户elk:(elk不允许root用户启动)
useradd elk
创建组并加入
useradd elk -g elk
全部安装elasticsearch
tar -xvf elasticsearch-7.15.2-linux-x86_64.tar.gz -C /opt/ && mv /opt/elasticsearch-7.15.2 elasticsearch
mkdir /usr/local/elasticsearch/data
更改目录所有权
chown -R elk:elk /opt/elasticsearch/
配置三台elasticsearch配置
cluster.name: elk # 集群名称,同一集群必须相同
node.name: elastic-1 # 指定节点主机名
node.master: true # 允许成为主节点
node.data: true # 数据节点
path.data: /opt/elasticsearch/data # 数据存放路径
path.logs: /opt/elasticsearch/logs # 日志路径
bootstrap.memory_lock: false # 关闭锁定内存,设置true会报错
network.host: 192.168.30.110 # 监听ip
http.port: 9200 # http端口
transport.tcp.port: 9300 # 设置节点间交互的tcp监听端口,默认是9300
discovery.seed_hosts: [“192.168.30.110”, “192.168.30.111”,“192.168.30.1112”] # 集群地址
cluster.initial_master_nodes: [“192.168.30.110”, “192.168.30.111”,“192.168.30.1112”] #指定master主节点
indices.breaker.total.limit: 90% #设置总断路器限制为JVM堆内存的90%,用于防止内存溢出
其他节点修改节点主机名和监听IP即可
设置初始堆内存
vi jvm.options编辑jvm.options文件,根据服务器实际内存灵活设置
su lke 切换用户,如果没有设置证书密钥,此刻就可以启动集群了
bin目录下 ./elasticsearch 启动 elasticsearch -d后台启动
建议首次以./elasticsearch 查看日志
为elasticsearch做systemd服务
[Unit]
Description=Elasticsearch
Wants=network-online.target
After=network-online.target
[Service]
RuntimeDirectory=elasticsearch
PrivateTmp=true
Environment=ES_HOME=/opt/elasticsearch
Environment=ES_PATH_CONF=/opt/elasticsearch/config
Environment=PID_DIR=/opt/elasticsearch/run
EnvironmentFile=-/etc/sysconfig/elasticsearch
WorkingDirectory=/opt/elasticsearch
User=elk
Group=elk
ExecStart=/opt/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
StandardOutput=journal
StandardError=inherit
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
设置密钥
在elasticsearch.yml文件添加,所有集群环境都添加
#开启xpack
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
#证书配置
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
#跨域访问
http.cors.enabled: true
http.cors.allow-origin: “"
http.cors.allow-headers: "”
进入bin目录下
以下证书密钥都先不要设置密码,一直为空,回车。设置密码集群启动可能报错
生成CA证书
elasticsearch-certutil ca
生成p12秘钥 bin目录下执行
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
执行完成,在/opt/elasticsearch目录会有elastic-certificates.p12 elastic-stack-ca.p12两个文件
如果上面./elasticsearch-certutil cert --ca elastic-stack-ca.p12输入了密码,这里要执行下列操作
elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
不然启动会失败并报错
failed to load SSL configuration xpack.security.transport.ssl,keystore password was incorrect
复制两个P12文件到config/certs目录下,没有则创建,
将两份P12文件分别复制到其他集群服务器config/certs目录下,注意权限。
重启es服务
在bin目录执行
elasticsearch-setup-passwords interactive
为每个用户添加密码,不能为空,需每个都设置
完成后打开192.168.30.110:9200测试,输入刚设置的elastic的密码,用户默认为elastic
显示下列信息
使用head登录,需要在后缀添加上用户和密码访问
http://192.168.30.110:9100/?auth_user=elastic&auth_password=123456