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_contentdata_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 集群配置总览

  1. 第一个 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"]
      
  2. 后续 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 ]
    

步骤总览

自动生成证书配置

  1. 启动第一个 es 服务 (可以配置也可以不配置,报错则找对应报错的解决办法)

    记录数据

    密码
    ca证书
    连接 kibana 的token (30分钟)

    先关重置操作

    # 重置 kibana token
    .\bin\elasticsearch-create-enrollment-token -s kibana
    # 重置 密码
    .\bin\elasticsearch-reset-password -u elastic
    
  2. 连接其他节点需要使用

    # 获取/重置 node  token
    .\bin\elasticsearch-create-enrollment-token -s node
    
  3. : 所有的命令操作需要在 es 服务启动下进行

  4. 配置相关数据重启 es

  5. 启动集群节点

    注:需要第一次启动 将 token 更改为 获取 node 节点的 token

    bin/elasticsearch --enrollment-token <token>
    

手动生成证书

参考:https://www.zsjweblog.com/2022/03/09/elasticsearch8-1-0集群搭建/

  1. 生成 ca 证书

    bin/elasticsearch-certutil ca
    

    终端操作

    输入生成文件的文件名称 回车则默认
    输入 ca 密码

  2. ls 查看

    看到 ca文件.p12

  3. 命令

    bin/elasticsearch-certutil cert --ca ca文件.p12
    

    终端操作

    输入全面生成 ca 时的密码
    输入生成 cert 文件的名称
    输入 cert 的密码

  4. ls 查看 cert.p12文件

  5. 将生成好的 cert 证书文件放到 config 文件并传到每个节点中

    mv cert文件.p12 config/
    
  6. 配置 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
    
  7. 重启 es

  8. 重置集群密码

    # 系统随机
    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

  1. 下载,解压,放到目录 plugins 下

  2. 重启 es

  3. 成功标识:出现 loaded plugin [analysis-ik]

  4. 命令查看:

    .\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

官方解决:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/geoip-processor.html#manage-geoip-database-updates

解决办法:

#关闭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

open http://localhost:9100/

  • 在运行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 节点角色:

posted @   青时Pt  阅读(2177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css
点击右上角即可分享
微信分享提示