ELK 8.x部署随笔 windows 环境部署
elastic
下载地址
elk下载地址
https://www.elastic.co/cn/downloads/elasticsearch
https://www.elastic.co/cn/downloads/kibana
https://www.elastic.co/cn/downloads/logstash
docker 安装 :
有对应的各自docker官方页面
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.2.2
docker pull docker.elastic.co/kibana/kibana:8.2.2
docker pull docker.elastic.co/logstash/logstash:8.2.2
ES
相关插件
ES8
默认开启了ssl
认证,导致无法访问9200
端口
ES 安装运行
es 运行
cd bin
elasticsearch.bat
#或者 .\elasticsearch.bat
# 出现
[2022-04-18T09:57:50,031][INFO ][o.e.l.LicenseService ] [DESKTOP-ENFLHV7] license [d8cea5fe-fc1c-4c7e-9a7a-8a2bac8c75c1] mode [basic] - valid
[2022-04-18T09:57:50,037][INFO ][o.e.x.s.s.SecurityStatusChangeListener] [DESKTOP-ENFLHV7] Active license is now [BASIC]; Security is disabled
[2022-04-18T09:57:50,052][INFO ][o.e.g.GatewayService ] [DESKTOP-ENFLHV7] recovered [0] indices into cluster_state
[2022-04-18T09:57:50,303][INFO ][o.e.h.AbstractHttpServerTransport] [DESKTOP-ENFLHV7] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}, {[::1]:9200}
[2022-04-18T09:57:50,304][INFO ][o.e.n.Node ] [DESKTOP-ENFLHV7] started
跨域问题:
打开ElasticSearch文件的config目录下的 elasticsearch.yml 配置文件:
添加如下配置后保存:
#开启跨域支持
http.cors.enabled: true
#允许所有人跨域访问
http.cors.allow-origin: "*"
ES8
默认开启了ssl
认证 ,我本地使用也是不关闭 SSl 认证进行的启动与集群测试
ES 第一次启动配置
可以获取到
-
用户名:elastic (默认)
-
password
St0y2I7oZEWYqY0TOxkE
-
30分钟的 token
eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxOTIuMTY4LjAuMTA3OjkyMDAiXSwiZmdyIjoiMTc1YzhlOGFmZTgwYzdmZjJmMjg4ZWQ0NDlmOGQyZmQ0NmU2MjcxZDIwMzdhYTcyYWMwNTRjYzdlMzYzMmFjMCIsImtleSI6ImJzVnJJb0VCdEtqRVZYc1AxNXZGOjVVQmdVQzNfUzBxRWhjTzgwTlhHWEEifQ==
-
重新生成 token
.\bin\elasticsearch-create-enrollment-token -s kibana
-
-
ca 证书
175c8e8afe80c7ff2f288ed449f8d2fd46e6271d2037aa72ac054cc7e3632ac0
-
连接其他es节点
.\bin\elasticsearch-create-enrollment-token -s node
获取到的token
eyJ2ZXIiOiI4LjIuMCIsImFkciI6WyIxOTIuMTY4LjAuMTA3OjkyMDAiXSwiZmdyIjoiMTc1YzhlOGFmZTgwYzdmZjJmMjg4ZWQ0NDlmOGQyZmQ0NmU2MjcxZDIwMzdhYTcyYWMwNTRjYzdlMzYzMmFjMCIsImtleSI6InVXLS1JNEVCdTh3aXVKbzFXTUVsOnp5M21sRDNuU3RHb2JodFJCbFdZZkEifQ==
其他节点通过token加入到集群中的命令 (第一次启动)
bin/elasticsearch --enrollment-token <token>
密码可以通过命令进行重置:
./bin/elasticsearch-reset-password -u elastic
ES 8.X 节点角色
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
参考:https://cloud.tencent.com/developer/article/2009025
es节点配置(8.X之前)
- 主节点
- 数据节点
- 协调节点
- Ingest 节点
- 冷热集群架构
查看节点详情
GET _cat/nodes?v
# 获取到
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 73 72 20 cdfhilmrstw * node-1
node.role ——》 cdfhilmrstw 节点角色(全部角色)
node.roles: [ data, master ]
每个集群都需要以下节点角色
master
data_content
和data_hot
或
data
主节点:负责轻量级集群范围的操作
主节点必须有一个path.data
目录
node.roles: [ master ]
仅投票的主合格节点:只有具有该master
角色的节点才能被标记为具有该 voting_only
角色。
node.roles: [ data, master, voting_only ]
数据内容节点:通常具有较长的数据保留要求,可以快速检索,无论多旧
node.roles: [ data_content ]
热数据节点:保存您最近、最常搜索的时间序列数据。
node.roles: [ data_hot ]
暖数据节点:暖层通常保存最近几周的数据。为了弹性,应将暖层中的索引配置为使用一个或多个副本。
node.roles: [ data_warm ]
冷数据节点:不再需要定期搜索时间序列数据时,可以从暖层移动到冷层,(针对较低的存储成本)
node.roles: [ data_cold ]
ES 集群配置总览
-
第一个 es 服务
-
下载
-
提前配置所需修改的数据
- 或者直接启动都可以
简单配置总览
跨域
geoip 数据库报错(不一定会出现)
集群先关配置# 开启跨域支持 http.cors.enabled: true # 允许所有人跨域访问 http.cors.allow-origin: "*" # 关闭geoip数据库的更新 ingest.geoip.downloader.enabled: false # 设置master cluster.name: esCluster # 节点名称 node.name: node-1 # 端口 http.port: 9200 # 绑定的ip network.host: 0.0.0.0 # 配置节点角色 node.roles: [ master, data ] network.publish_host: 127.0.0.1 # 节点角色 node.roles: [ master, data ] # transport.port: 9300 #默认及为 9300 通信端口 (本地机器,一个机器启动集群需要) # 下面这个配置单机启动后,添加使用 token 关联添加集群节点,则自动配置 # discovery.seed_hosts: ["127.0.0.1:9301", "192.168.0.107:9300"]
-
-
后续 es 服务
基本配置与第一个节点相同
需要更改
转发端口、服务端口(单独一个机器搭建需要)、节点名称# 开启跨域支持 http.cors.enabled: true # 允许所有人跨域访问 http.cors.allow-origin: "*" # 关闭geoip数据库的更新 ingest.geoip.downloader.enabled: false # 绑定的ip network.host: 0.0.0.0 # 设置端口 http.port: 9201 cluster.name: esCluster node.name: node-2 network.publish_host: 127.0.0.1 transport.port: 9301 # 节点角色 node.roles: [ master, data ]
步骤总览
自动生成证书配置
-
启动第一个 es 服务 (可以配置也可以不配置,报错则找对应报错的解决办法)
记录数据
密码
ca证书
连接 kibana 的token (30分钟)先关重置操作
# 重置 kibana token .\bin\elasticsearch-create-enrollment-token -s kibana # 重置 密码 .\bin\elasticsearch-reset-password -u elastic
-
连接其他节点需要使用
# 获取/重置 node token .\bin\elasticsearch-create-enrollment-token -s node
-
注: 所有的命令操作需要在 es 服务启动下进行
-
配置相关数据重启 es
-
启动集群节点
注:需要第一次启动 将 token 更改为 获取 node 节点的 token
bin/elasticsearch --enrollment-token <token>
手动生成证书
参考:https://www.zsjweblog.com/2022/03/09/elasticsearch8-1-0集群搭建/
-
生成 ca 证书
bin/elasticsearch-certutil ca
终端操作
输入生成文件的文件名称 回车则默认
输入 ca 密码 -
ls 查看
看到
ca文件.p12
-
命令
bin/elasticsearch-certutil cert --ca ca文件.p12
终端操作
输入全面生成 ca 时的密码
输入生成 cert 文件的名称
输入 cert 的密码 -
ls 查看 cert.p12文件
-
将生成好的 cert 证书文件放到 config 文件并传到每个节点中
mv cert文件.p12 config/
-
配置 yml 文件
重点:xpack 相关配置
# 开启 x-pack xpack.security.enabled: true # 配置生成的 ca 证书,这里的路径 certs/cert文件.p12 为conf下的路径 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/cert文件.p12 # 这里为添加了密钥 truststore.path: certs/cert文件.p12 # 开启 ssl 认证 xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 xpack.security.enrollment.enabled: true
(若密钥之前没加,后期加上的话)如果需要额外执行密钥的命令,则执行
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
-
重启 es
-
重置集群密码
# 系统随机 bin/elasticsearch-setup-passwords auto # 手动输入 bin/elasticsearch-setup-passwords interactive
ElasticSearch的横向扩展
一个master节点,两个salve节点
首先我们来设置master节点 设置集群名称:esCluster
# 设置master
cluster.name: esCluster
node.name: node-1
http.port: 9200
discovery.seed_hosts: ["127.0.0.1:9200", "127.0.0.1:9201","127.0.0.1:9202"]
# 绑定的ip
network.host: 127.0.0.1
复制两个文件出来,作为 salve 节点
设置 salve 节点 修改yml文件
#设置端口
http.port: 9201
discovery.seed_hosts: ["127.0.0.1:9200", "127.0.0.1:9201","127.0.0.1:9202"]
# 设置master
cluster.name: esCluster
node.name: node-2
# 绑定的ip
network.host: 127.0.0.1
transport.port: 9301 #集群间通信端口号,在同一机器下必须不一样
报错内存不足:
修改jvm启动参数:
-Xms256m
-Xmx256m
yml 配置相对于升级改变的地方 7 => 8 版本变化
transport.port
discovery.seed_hosts
node.roles: [ master, data ]
分词器
ik分词器
https://github.com/medcl/elasticsearch-analysis-ik
-
下载,解压,放到目录 plugins 下
-
重启 es
-
成功标识:出现
loaded plugin [analysis-ik]
-
命令查看:
.\bin\elasticsearch-plugin list
报错:
SSL 认证问题
received plaintext http traffic on an https channel, closing connection Netty4HttpCh
报错提示:received plaintext http traffic on an https channel, closing connection Netty4HttpCh
报错版本: 8.2.0
原因:
ES8
默认开启了ssl
认证,导致无法访问9200
端口
修改
elasticsearch.yml配置:xpack.security.enabled:把true改成false
geoip 数据库问题
exception during geoip databases update
报错提示: exception during geoip databases update
报错版本: 8.2.0
解决办法:
#关闭geoip数据库的更新
ingest.geoip.downloader.enabled: false
ES-head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
-
在运行npm install时,可能会存在Head插件phantomjs权限问题
解决:
npm install -g
开启认证之后 es-head 插件就不能使用了,只能使用 kibana 查看
Kibana
启动
.\bin\kibana.bat
汉化
只需要在配置文件 kibana.yml 中加入
i18n.locale: "zh-CN"
报错
Please upgrade your browser
This Elastic installation has strict security requirements enabled that your current browser does not meet.
报错版本: 8.2.0
解决参考:https://blog.csdn.net/welcomev/article/details/124326439
官方参考:https://www.elastic.co/guide/en/kibana/8.1/Security-production-considerations.html
解决办法:
#关闭安全策略
csp.strict: false
xpack 相关的错误
yml中添加配置 自定义的key
# 注意:参数值至少32位,否则启动会报错提示
xpack.encryptedSavedObjects.encryptionKey: encryptedSavedObjects12345678909876543210
xpack.security.encryptionKey: encryptionKeysecurity12345678909876543210
xpack.reporting.encryptionKey: encryptionKeyreporting12345678909876543210
Logstash
参考:https://zhuanlan.zhihu.com/p/379656548
启动 控制台输入 控制台输出
.\bin\logstash -e 'input { stdin { } } output { stdout {} }'
logstash 连接 es
新建 logstash.conf 文件
input{
tcp{
host => "localhost" # 这里写本机的ip
port => "8080" # 这里是本机开放的TCP端口
mode => "server"
codec => json_lines #接收json格式数据
}
}
output {
if [level] != "ERROR" {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "St0y2I7oZEWYqY0TOxkE"
cacert => "D:\soft\es\8.2.0\logstash-8.2.0\bin\http_ca.crt"
index => "log_%{application_name}_%{+YYYY.MM.dd}" #生成的索引名称log_app名称_年月日 appname通过日志字段传输
}
} else {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "St0y2I7oZEWYqY0TOxkE"
cacert => "D:\soft\es\8.2.0\logstash-8.2.0\bin\http_ca.crt"
index => "log_error_%{application_name}_%{+YYYY.MM.dd}" #生成的索引名称log_error_app名称_年月日 appname通过日志字段传输
}
}
}
注:这里用的是 https 的 es服务路径,es 8 开启权限认证之后更改为了 https
报错:
jdk 问题
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will l
报错版本:8.2.0
解决连接:https://blog.csdn.net/zhezhebie/article/details/105481989
解决方法:修改jvm.options文件配置vim /etc/elasticsearch/jvm.options
,将
-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
连接es问题
window的Logstash连接elasticsearch8出现localhost:9200 failed to respond的解决方案
报错版本:8.2.0
参考:https://blog.csdn.net/weixin_44517314/article/details/124428287
elasticsearch8 开启权限认证之后,es正常启动,logstash启动失败
解决:配置文件需加入elasticsearch8刚初始化的账号密码以及elasticsearch8所用证书
-
将es证书复制到logstash的bin目录 (es证书 http_ca.crt文件)
-
修改正在使用的 .conf 文件
output { elasticsearch { hosts => ["https://localhost:9200"] # 注: 这里为https user => "" password => "" cacert => "本地证书路径" index => "log_%{application_name}_%{+YYYY.MM.dd}" } }
注意: es8.x 的 hosts 需要添加 https://
Logstash报错: Could not index event to Elasticsearch
报错版本:8.2.0
参考:https://blog.csdn.net/qq_25646191/article/details/111860572
错误描述:
Could not index event to Elasticsearch. ........
Invalid index name [log_APPLICATION_NAME_IS_UNDEFINED_2022.06.07], must be lowercase
解决方案:索引名称必须消息,更改业务相关日志生成的相关代码
错误描述:
logstash/logs/logstash-plain.log大量警告:
Validation Faile
d: 1: this action would add [1] total shards, but this cluster currently has [1000]/[1000] maximum shards open
错误原因:默认只允许1000个分片,因为集群分片数不足引起的。
临时解决方案:
kibana -> console 执行
PUT /_cluster/settings
{
"transient": {
"cluster": {
"max_shards_per_node":10000
}
}
}
永久解决方案:
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"max_shards_per_node":10000
}
}
}
测试软件
下载TCP发送数据包软件,进行测试
https://www.hw-group.com/software/hercules-setup-utility
完整的配置文件
input{
tcp{
host => "localhost" # 这里写本机的ip
port => "4560" # 这里是本机开放的TCP端口
mode => "server"
codec => json_lines #接收json格式数据
}
}
output {
if [level] != "ERROR" {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "St0y2I7oZEWYqY0TOxkE"
cacert => "D:\soft\es\8.2.0\logstash-8.2.0\bin\http_ca.crt"
index => "log_%{application_name}_%{+YYYY.MM.dd}" #生成的索引名称log_app名称_年月日 appname通过日志字段传输
}
} else {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "St0y2I7oZEWYqY0TOxkE"
cacert => "D:\soft\es\8.2.0\logstash-8.2.0\bin\http_ca.crt"
index => "log_error_%{application_name}_%{+YYYY.MM.dd}" #生成的索引名称log_error_app名称_年月日 appname通过日志字段传输
}
}
# 完整的本地打印
stdout {}
}
参数解析
input
本机端口 localhost:4200 开发 tcp 输入端口
output
输入到 localhost:9200 es 服务 es配置有用户和密码 (es 有开启认证)【es hosts 此处为 https 请依照实际填写】
cacert 为认证证书存放地址
index 中的 {application_name} 为发送日志端 配置的相关参数
验证配置
.\bin\logstash -f logstash.conf --config.test_and_exit
结果:Using config.test_and_exit mode. Config Validation Result: OK.
启动命令
./bin/logstash -f .\config\logstash.conf --config.reload.automatic
--config.reload.automatic 选项启用动态重载配置功能
博客参考:
es 插件相关
集群搭建参考:
Elasticsearch 8.X 节点角色:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通