【ElasticSearch】【ES启用安全认证】【ES集群搭建】和【ELK日志集成】
节点:一个运行中的 Elasticsearch 实例称为一个节点。
集群:由一个或者多个拥有相同 cluster.name 配置的节点组成共同承担数据和负载的压力的集群。
索引:保存相关数据的地方,是指向一个或者多个物理分片的逻辑命名空间。
分片:一个分片是一个底层的工作单元,它仅保存了全部数据中的一部分。Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。一个分片可以是主分片或者副本分片,主分片的数目在索引创建时就已经确定了下来。索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。一个主分片最大能够存储 Integer.MAX_VALUE - 128 个文档,但是实际最大值还需要参考你的使用场景。创建索引时指定主分片和副本分片的数量。
主分片 number_of_shards
副本分片 number_of_replicas
PUT /blogs
{
"settings" : {
"number_of_shards" : 3,
"number_of_replicas" : 1
}
}
在运行中的集群上是可以动态调整副本分片数目的,我们可以按需伸缩集群。让我们把副本数从默认的 1 增加到 2 :
PUT /blogs/_settings
{
"number_of_replicas" : 2
}
参考:https://www.jianshu.com/p/7540ebec4096
集群健康状况
GET /_cluster/health
curl -XGET http://localhost:9200/_cluster/health?pretty
{
"cluster_name" : "elasticsearch-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 109,
"active_shards" : 218,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
status:集群状态,分为green、yellow和red。
number_of_nodes/number_of_data_nodes:集群的节点数和数据节点数。
active_primary_shards:集群中所有活跃的主分片数。
active_shards:集群中所有活跃的分片数。
relocating_shards:当前节点迁往其他节点的分片数量,通常为0,当有节点加入或者退出时该值会增加。
initializing_shards:正在初始化的分片。
unassigned_shards:未分配的分片数,通常为0,当有某个节点的副本分片丢失该值就会增加。
number_of_pending_tasks:是指主节点创建索引并分配shards等任务,如果该指标数值一直未减小代表集群存在不稳定因素
active_shards_percent_as_number:集群分片健康度,活跃分片数占总分片数比例。
number_of_pending_tasks:pending task只能由主节点来进行处理,这些任务包括创建索引并将shards分配给节点。
集群状态信息
GET _cluster/stats?pretty
curl -XGET http://localhost:9200/_cluster/stats?pretty
indices.count:索引总数。
indices.shards.total:分片总数。
indices.shards.primaries:主分片数量。
docs.count:文档总数。
store.size_in_bytes:数据总存储容量。
segments.count:段总数。
nodes.count.total:总节点数。
nodes.count.data:数据节点数。
nodes. process. cpu.percent:节点CPU使用率。
fs.total_in_bytes:文件系统使用总容量。
fs.free_in_bytes:文件系统剩余总容量。
节点监控
GET _cluster/stats?pretty
curl -XGET http://localhost:9200/_cluster/stats?pretty
name:节点名。
roles:节点角色。
indices.docs.count:索引文档数。
segments.count:段总数。
jvm.heap_used_percent:内存使用百分比。
thread_pool.{bulk, index, get, search}.{active, queue, rejected}:线程池的一些信息,包括bulk、index、get和search线程池,主要指标有active(激活)线程数,线程queue(队列)数和rejected(拒绝)线程数量。
查看节点信息
GET _cat/nodes?pretty
curl -XGET http://localhost:9299/_cat/nodes?pretty
集群名称:YCXESClusterName
主节点名称:YCXESNodeMaster 192.168.1.35
从节点名称:YCXESNodeSlaveA 192.168.1.36
从节点名称:YCXESNodeSlaveB 192.168.1.37
################
搭建集群
################
1、Elasticsearch
下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-0
安装目录 /ycx/elasticsearch
查看版本:./elasticsearch --version
单节点
#集群名称
cluster.name: YCXESClusterName
#当前节点的名称
node.name: YCXESNodeName
#是不是有资格竞选主节点
node.master: true
#是否存储数据
node.data: true
#数据存档位置
#path.data: /ycx/elasticsearch/master_node/data
#日志存放位置
#path.logs: /ycx/elasticsearch/master_node/logs
#快照数据存放路径
#path.repo: ["/deya/es7134/elasticsearch/backup"]
#设置网关地址
network.host: 0.0.0.0
#节点真实的ip地址
network.publish_host: 192.168.1.30
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
transport.tcp.port: 9300
#候选主节点IP地址
discovery.seed_hosts: ["192.168.1.30:9300"]
#候选主节点名称
cluster.initial_master_nodes: ["YCXESNodeName"]
单节点配置
discovery.type: single-node
集群主节点
# 集群名称必须相同
cluster.name: YCXESClusterName
# 节点名称
node.name: YCXESNodeMaster
# 是否是master节点
node.master: true
# 是否允许该节点存储索引数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 3
# 数据目录
path.data: /ycx/elasticsearch/master_node/data
# 日志目录
path.logs: /ycx/elasticsearch/master_node/logs
# 快照数据存放路径
path.repo: ["/ycx/elasticsearch/backup"]
# 绑定地址
network.host: 0.0.0.0
# http端口
http.port: 9200
# 内部节点之间沟通端口
transport.tcp.port: 9300
# 集群主机列表
discovery.seed_hosts: ["192.168.1.35:9300","192.168.1.36:9300","192.168.1.37:9300"]
# 启动全新的集群时需要此参数,再次重新启动时此参数可免
cluster.initial_master_nodes: ["YCXESNodeMaster"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点,简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 2
# 是否开启跨域访问
http.cors.enabled: true
# 开启跨域访问后的地址限制,*表示无限制
http.cors.allow-origin: "*"
集群从节点A
# 集群名称必须相同
cluster.name: YCXESClusterName
# 节点名称
node.name: YCXESNodeSlaveA
# 是否是master节点
node.master: false
# 是否允许该节点存储索引数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 3
# 数据目录
path.data: /ycx/elasticsearch/slave_node/data
# 日志目录
path.logs: /ycx/elasticsearch/slave_node/logs
# 快照数据存放路径
path.repo: ["/ycx/elasticsearch/backup"]
# 绑定地址
network.host: 0.0.0.0
# http端口
http.port: 9200
# 内部节点之间沟通端口
transport.tcp.port: 9300
# 集群主机列表
discovery.seed_hosts: ["192.168.1.35:9300","192.168.1.36:9300","192.168.1.37:9300"]
# 启动全新的集群时需要此参数,再次重新启动时此参数可免
cluster.initial_master_nodes: ["YCXESNodeMaster"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点,简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 2
# 是否开启跨域访问
http.cors.enabled: true
# 开启跨域访问后的地址限制,*表示无限制
http.cors.allow-origin: "*"
集群从节点B
# 集群名称必须相同
cluster.name: YCXESClusterName
# 节点名称
node.name: YCXESNodeSlaveB
# 是否是master节点
node.master: false
# 是否允许该节点存储索引数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 3
# 数据目录
path.data: /ycx/elasticsearch/slave_node/data
# 日志目录
path.logs: /ycx/elasticsearch/slave_node/logs
# 快照数据存放路径
path.repo: ["/ycx/elasticsearch/backup"]
# 绑定地址
network.host: 0.0.0.0
# http端口
http.port: 9200
# 内部节点之间沟通端口
transport.tcp.port: 9300
# 集群主机列表
discovery.seed_hosts: ["192.168.1.35:9300","192.168.1.36:9300","192.168.1.37:9300"]
# 启动全新的集群时需要此参数,再次重新启动时此参数可免
cluster.initial_master_nodes: ["YCXESNodeMaster"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点,简单点说在集群启动后,至少复活多少个节点以上,那么这个服务才可以被使用,否则不可以被使用,
gateway.recover_after_nodes: 2
# 是否开启跨域访问
http.cors.enabled: true
# 开启跨域访问后的地址限制,*表示无限制
http.cors.allow-origin: "*"
如果想要自动选举
node.master: true
cluster.initial_master_nodes: ["YCXESNodeMaster","YCXESNodeSlaveA","YCXESNodeSlaveB"]
配置内存
修改 jvm.options
-Xms4g
-Xmx4g
内存分配原则
a、物理机器内存一半和31G。
小于31G是分配一半的物理内存,剩下的预留给 OS 和 Lucene
b、Xmx和Xms的大小是相同的。
其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,可以减轻伸缩堆大小带来的压力
不大于32G原因
这里有另外一个原因不分配大内存给Elasticsearch,事实上jvm在内存小于32G的时候会采用一个内存对象指针压缩技术。
在java中,所有的对象都分配在堆上,然后有一个指针引用它。指向这些对象的指针大小通常是CPU的字长的大小,不是32bit就是64bit,
这取决于你的处理器,指针指向了你的值的精确位置。
对于32位系统,你的内存最大可使用4G。对于64系统可以使用更大的内存。但是64位的指针意味着更大的浪费,因为你的指针本身大了。
浪费内存不算,更糟糕的是,更大的指针在主内存和缓存器(例如LLC, L1等)之间移动数据的时候,会占用更多的带宽。
Java 使用一个叫内存指针压缩的技术来解决这个问题。它的指针不再表示对象在内存中的精确位置,而是表示偏移量。
这意味着32位的指针可以引用40亿个对象,而不是40亿个字节。最终,也就是说堆内存长到32G的物理内存,也可以用32bit的指针表示。
一旦你越过那个神奇的30-32G的边界,指针就会切回普通对象的指针,每个对象的指针都变长了,就会使用更多的CPU内存带宽,
也就是说你实际上失去了更多的内存。事实上当内存到达40-50GB的时候,有效内存才相当于使用内存对象指针压缩技术时候的32G内存。
这段描述的意思就是说:即便你有足够的内存,也尽量不要超过32G,因为它浪费了内存,降低了CPU的性能,还要让GC应对大内存。
参考博文:
https://my.oschina.net/kittyMan/blog/387512?p=1
启用安全认证
停止ES后做如下配置
生成CA证书,证书密码:123456。
注意:ES根目录生成 elastic-certificates.p12,然后复制文件到每一个ES集群节点的config目录和logstash的config目录。集群每个节点要使用同一个 elastic-certificates.p12 文件
# ES根产生 elastic-stack-ca.p12
./elasticsearch-certutil ca
# ES根生成 elastic-certificates.p12,然后复制文件到每一个ES集群节点的config目录和logstash的config目录。集群每一个节点都使用相同的证书进行认证
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
配置文件追安全配置,每一个集群节点配置文件都追加
# 启用安全
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.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
将密码存储在Elasticsearch密钥库中
# 如果在创建节点证书时输入了密码,请在每一个集群节点都运行以下命令将密码存储在Elasticsearch密钥库中
./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
启动ES,注意:先停掉所有ES集群结点,然后再启动。否则可能新启动的结点连接到旧集群后无法连接到新集群。
设置ES集群密码密码:内置账号:elastic,密码:es123456,集群只需要执行一次就可以
./elasticsearch-setup-passwords interactive
结果
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana_system]:
Reenter password for [kibana_system]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
安全配置就完成了,访问地址 http://localhost:9200 就会弹出输入账号密码的提示
修改密码
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://localhost:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'
其他注意项:
也可以使用自动生成的随机密码
./elasticsearch-setup-passwords auto
有关 #xpack.security.transport.ssl.client_authentication: required 配置的文章 https://www.elastic.co/guide/en/elasticsearch/reference/7.13/pki-realm.html
设置用户和组
解决 elasticsearch 启动不能是 root 账号异常: can not run elasticsearch as root
# 添加组
groupadd es
# 添加用户到组
useradd es -g es
# 设置密码
passwd es
# 设置所属
chown -R es:es elasticsearch
# 设置权限
chmod -R 777 elasticsearch
# 切换账号
su es
# 查看账号是否创建
id es
# 查看用户所在组
groups es
注意 Elasticsearch 解压目录的上级目录如何有root目录可能会报如下错误
解决办法就是把 Elasticsearch 解压目录的上级到根全变成es用户所属就好了
Could not find or load main class org.elasticsearch.tools.java_version_checker.JavaVersionChecker
启动脚本
#!/bin/bash
export ES_HOME=/ycx/elasticsearch
case $1 in
start)
su es<<!
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;;
stop)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
;;
restart)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
sleep 1
su es<<!
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;;
*)
echo "start|stop|restart"
;;
esac
exit 0
测试节点
curl -u elastic -X GET http://localhost:9200
输入上面配置的密码:es123456
常见错误
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
解决:
vim /etc/security/limits.conf
追加
* soft nofile 65536
* hard nofile 65536
退出重新登录后查看
ulimit -Sn
ulimit -Hn
2、max number of threads [3818] for user [es] is too low, increase to at least [4096]
解决:
vim /etc/security/limits.conf
追加
* soft nproc 4096
* hard nproc 4096
退出重新登录后查看
ulimit -Sn
ulimit -Hn
3、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
vim /etc/sysctl.conf
vm.max_map_count=655360
生效
sysctl -p
4、Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elasticsearch/elasticsearch-6.2.2-1/config/jvm.options
elasticsearch用户没有该文件夹的权限,执行命令
chown -R es:es /ycx/elasticsearch/
5、org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
配置文件添加
ingest.geoip.downloader.enabled: false
6、Could not find or load main class org.elasticsearch.tools.java_version_checker.JavaVersionChecker
原因:es解压目录的父目录有非es所属的目录,一般是root
解决:把从根到es解压目录全变成es所属目录
chown -R es:es /ycx/elasticsearch/
7、[parent] Data too large, data for [<http_request>] would be [1010545440/963.7mb], which is larger than the limit of [986061209/940.3mb], real usage: [1010545440/963.7mb], new bytes reserved: [0/0b], usages [request=426040/416kb, fielddata=0/0b, in_flight_requests=175703236/167.5mb, model_inference=0/0b, eql_sequence=0/0b, accounting=19314380/18.4mb]
编辑 jvm.options 添加
-Xms10g
-Xmx10g
8、This node previously joined a cluster with UUID [si9h45kkQXG78Mum00m7JA] and is now trying to join a different cluster with UUID [4lajnSPCQvyqLvbC_98ocQ]. This is forbidden and usually indicates an incorrect discovery or cluster bootstrapping configuration. Note that the cluster UUID persists across restarts and can only be changed by deleting the contents of the node's data paths [] which will also remove any data held by this node.
ES启动时没有先把所有的ES节点停掉,导致有节点连接到老集群生成了错误UUID。
修复:先停掉所有ES节点,删除所有节点data目录。然后再重新启动所有ES节点
2、Kibana
下载地址:https://www.elastic.co/cn/downloads/past-releases/kibana-7-14-3
安装:解压下载的zip,安装目录 /ycx/kibana
运行:
# Linux
./kibana --allow-root
# Windows
kibana.bat
查看版本:./kibana --allow-root --version
编辑 conf/kibana.yml
# 绑定端口
server.port: 5601
# 绑定地址
server.host: "0.0.0.0"
#Kibana UI访问前缀
#server.basePath: "/kibana"
# 显示的服务名称
server.name: "ycx-kibana"
# elasticsearch 地址
elasticsearch.hosts: ["http://localhost:9200"]
# 中文
i18n.locale: "zh-CN"
启用安全认证
配置文件追加安全配置
elasticsearch.username: "kibana_system"
#elasticsearch.password: "123456"
创建 Kibana 秘钥库
./kibana-keystore create
将 kibana_system 用户的密码添加到 kibana 密钥库
./kibana-keystore add elasticsearch.password
启动脚本
#!/bin/bash
nohup /elk/kibana/bin/kibana --allow-root &
3、Logstash
下载地址:https://www.elastic.co/cn/downloads/past-releases/logstash-7-13-4
安装:解压下载的zip,安装目录 /ycx/logstash
运行:
# Linux
logstash -f ../config/logstash.conf
# Windows
logstash.bat -f ../config/logstash.conf
查看版本:./logstash --version
logstash.conf 配置:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{appName}-%{+YYYY.MM.dd}"
}
}
appName是自定义的变量
<springProperty scope="context" name="appName" source="spring.application.name"/>
启用安全认证
output增加 user, password, ssl_certificate_verification, truststore, truststore_password
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{appName}-%{+YYYY.MM.dd}"
user => "elastic"
password => "es123456"
ssl_certificate_verification => true
truststore => "/ycx/logstash/config/elastic-certificates.p12"
truststore_password => "123456"
}
}
启动脚本
#!/bin/bash
nohup /elk/logstash/bin/logstash -f /elk/logstash/config/logstash.conf &
4、elk 处理日志
添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.2</version>
</dependency>
logback-elk.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" debug="false">
<!-- 服务名称 -->
<springProperty scope="context" name="appName" source="spring.application.name"/>
<!-- 日志索引文件前缀 -->
<springProperty scope="context" name="logstashIndexPrefix" source="logstash.indexPrefix" defaultValue="ycx"/>
<!-- logstash地址 -->
<springProperty scope="context" name="logstashHost" source="logstash.host"/>
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!--控制台的日志输出样式-->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
</appender>
<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${logstashHost}</destination>
<!-- 日志输出编码 -->
<encoder
class="net.logstash.logback.encoder.LogstashEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 特殊处理 -->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<logger name="ycx.**" level="DEBUG"/>
<!-- 开发、默认环境 只输出到控制台 -->
<springProfile name="dev">
<root level="debug">
<appender-ref ref="logstash" />
</root>
</springProfile>
<!-- 测试环境 正式环境 输出info及以上日志 -->
<springProfile name="test,prod">
<root level="debug">
<appender-ref ref="logstash" />
</root>
</springProfile>
</configuration>
yml 文件配置 或在 nacos 中配置
logstash:
host: logstash:5044 #端口是启动logstash时config文件中指定的
logging:
config: classpath:logback-elk.xml
level:
root: error
ycx: info
##########
docker搭建
##########
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4
docker run -d --restart=always -m=32g --name elasticsearch --network deyatech -p 9299:9200 -p 9300:9300 --privileged=true -v /deya/data/elasticsearch/data:/var/lib/elasticsearch -v /deya/data/elk/IKAnalyzer.cfg.xml:/etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml -v /etc/localtime:/etc/localtime -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms4096m -Xmx8192m" docker.elastic.co/elasticsearch/elasticsearch:7.13.4
#安装分词插件 https://github.com/medcl/elasticsearch-analysis-ik
docker exec -it elasticsearch bash
cd /usr/share/elasticsearch/bin
elasticsearch-plugin install https://test.deyatong.com/elasticsearch-analysis-ik-7.13.4.zip
#安装拼音插件 https://github.com/medcl/elasticsearch-analysis-pinyin
docker exec -it elasticsearch bash
cd /usr/share/elasticsearch/bin
elasticsearch-plugin install https://test.deyatong.com/elasticsearch-analysis-pinyin-7.13.4.zip
ELK完整的基础认证
============================================
ES
============================================
nacos 配置添加账户密码
userName: elastic
password: es123456
【停止所有ES节点】
ps -ef | grep elasticsearch
1、生成CA证书:证书密码 123456,生成文件存放在ES的根目录
# 产生 elastic-stack-ca.p12
./elasticsearch-certutil ca
# 生成 elastic-certificates.p12,
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
复制 elastic-certificates.p12 文件到ES集群的【每一个节点】的config目录和logstash的config目录
2、修改配置文件:elasticsearch.yml
# 启用安全
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.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
3、将密码存储在Elasticsearch密钥库中,证书密码:123456
# 如果在创建节点证书时输入了密码,请在【每一个集群节点都运行以下命令】
# 将密码存储在Elasticsearch密钥库中
./elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
4、设置用户和组【每一个集群节点】
cd /ycx
groupadd es
useradd es -g es
passwd es
chown -R es:es elasticsearch
chmod -R 777 elasticsearch
【启动ES集群每一个节点】
cd /ycx/shell
./es.sh start
5、设置ES集群密码密码:内置账号:elastic 密码:es123456,集群只需要【执行一次】就可以
./elasticsearch-setup-passwords interactive
============================================
kibana
============================================
【停止kibana】
1、修改配置文件:kibana.yml
# 绑定端口
server.port: 5601
# 绑定地址
server.host: "localhost"
# 显示的服务名称
server.name: "kibana"
# elasticsearch 地址
elasticsearch.hosts: ["http://localhost:9201"]
# 中文
i18n.locale: "zh-CN"
elasticsearch.username: "kibana_system"
2、创建 Kibana 秘钥库
./kibana-keystore create
3、将 kibana_system 用户的密码添加到 kibana 密钥库 密码:es123456
./kibana-keystore add elasticsearch.password
【启动kibana】
./kibana --allow-root
代理访问kibana
在server内
location /kibana/ {
proxy_pass http://localhost:5601/; # 后缀带/标识绝对目录,不会带/kibana/
}
单独建server
server {
listen 80;
server_name kibana.mydomain.cn;
location / {
proxy_pass http://172.17.0.1:5601/;
}
}
============================================
logstash
============================================
证书密码 123456
修改配置文件:logstash.conf
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5044
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9201"]
index => "%{appName}"
user => "elastic"
password => "es123456"
ssl_certificate_verification => true
truststore => "/ycx/logstash/config/elastic-certificates.p12"
truststore_password => "123456"
}
}
启动 logstash
./logstash -f /ycx/logstash/config/logstash.conf

浙公网安备 33010602011771号