当前位置:   article > 正文

Elasticsearch基础2——es配置文件、jvm配置文件、log4j2.properties配置文件详解

es配置文件

一、配置文件详解

  • 配置文件参数非常多,尤其是集群设置,本篇只先了解基础参数使用,涉及集群相关的后面专门讲集群时再学习。

  • 三大核心配置文件:

    • Elasticsearch 有三个重要配置文件需要了解,elasticsearch.yml、jvm.options 和log4j2.properties,默认位于 config 目录下。
    • elasticsearch.yml文件:配置 Elasticsearch。
    • jvm.options文件: 配置 Elasticsearch 依赖的JVM 信息。
    • log4j2.properties文件:配置 Elasticsearch 日志记录中的各个属性。
  • 注意:上述文件位于 config 目录下,这是默认位置。默认位置取决于我们安装Elasticsearch 时是否基于下载的 tar.gz 包或 zip 包,如果是,则配置目录默认位置为Ses home/config。如果用户想自定义配置目录的位置,则可以通过 es_path_conf 环境变量进行更改,如下所示:

在这里插入图片描述

1.1 elasticsearch.yml文件

1.1. 1 基础参数

1.1.1.1 自定义数据/日志目录

配置参数:

  • path.data:数据目录
  • path.logs:日志目录

在这里插入图片描述

1.默认情况下,数据、日志目录都在安装目录下。
在这里插入图片描述
2.我们也可以自定义数据、日志存放位置。使用root用户创建数据、日志存在目录、并修改这两个目录的属主、属组为es用户。

[root@localhost opt]# mkdir -pv /opt/es/data
[root@localhost opt]# mkdir -pv /opt/es/logs
[root@localhost opt]# chown -R es-qingjun:es-qingjun /opt/es/
  • 1
  • 2
  • 3

在这里插入图片描述
3.切换至es用户,再次启动es服务,数据和日志将会写入这两个目录。

[root@localhost es]# su - es-qingjun
[es-qingjun@localhost ~]$ cd /opt/elasticsearch-8.5.2/
#启动es
[es-qingjun@localhost elasticsearch-8.5.2]$ ./bin/elasticsearch -d
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

1.1.1.2 锁定物理内存

配置参数:

  • bootstrap.memory_lock

释义:

  • 锁定物理内存,在es运行后锁定使用的内存大小,锁定大小一般是服务器内存的50%。当系统物理内存空间不足,es不会使用交换分区,避免频繁的交换导致的IOPS升高,属于性能上的优化。
  • 默认是不打开,第一次打开时,会有个报错,需要使用root用户设置一些参数。

报错处理:

  • 需要修改操作系统资源配置文件/etc/security/limits.conf参数:
    • soft参数:代表警告的设定,可以超过这个设定值,但是超过后会有警告。一般soft的值比hard小,也可相等。
    • hard参数:代表严格的设定,不允许超过这个设定的值。
    • nproc参数:是操作系统级别对每个用户创建的进程数的限制。
    • nofile参数:表示 max open file,是每个进程可以打开的文件数的限制。
    • memlock参数:表示 max locked memory,对应用程序来说,可以将内存中一些对程序性能影响较大的数据lock起来,避免非预期的页面回收或者换入/换出引起性能波动。

在这里插入图片描述
1.切换至root用户,修改Linux资源限制配置文件参数。

#添加如下几行,重新连接服务器才能生效。
[root@localhost ~]# vim /etc/security/limits.conf
*  hard nofile 65536
*  soft nofile 65536
*  hard nproc 32000
*  soft nproc 32000
* hard memlock unlimited
* soft memlock unlimited

#取消注释,配置数值。
[root@localhost ~]# vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
#重新读取配置文件。
[root@localhost ~]# /bin/systemctl daemon-reload
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.重新连接服务器才能生效以上配置,切换es用户启动服务。
在这里插入图片描述

1.1.1.3 跨域设置

配置参数:

  • http.cors.enabled: true 【是否开启跨域访问】
  • http.cors.allow-origin: “*” 【开启跨域后,能访问es的地址限制,*号表示无限制】

参数释义:

  • 8.x版本的配置文件中没有该参数,但是在搭建实测过程,官方并没有默认开启,需要我们手动添加启动。
1.1.1.4 其他参数
参数释义
node.name配置ES集群内的节点名称,同一个集群内的节点名称要具备唯一性。
path.work:/path/to/work设置临时文件的存储路径,默认是es根目录下的work文件夹。(老版本)
node.data:true指定该节点是否存储索引数据,默认为true。
node.master:true指定该节点是否有资格被选举成为node,一定要注意只是设置成有资格, 不代表该node一定就是master,默认是true。es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。
node.attr.rack: r1集群个性化调优设置,用于后期集群进行分片分配时的过滤
discovery.seed_hosts当节点启动时,传递一个初始主机列表来执行发现
cluster.initial_master_nodes写入候选主节点的设备地址,来开启服务时就可以被选为主节点
ingest.geoip.downloader.enabled是否开启es启动时更新地图相关的数据库。

1.1.2 集群类

参数释义
cluster.name配置ES集群名称,同一个集群内的所有节点集群名称必须一致。
cluster.routing.allocation.same_shard.host:true防止同一个shard的主副本存在同一个物理机上。
cluster.routing.allocation.node_initial_primaries_recoveries: 4设置一个节点的并发数量,两种情况,第一种是在初始复苏过程中,默认是4个。
cluster.routing.allocation.node_concurrent_recoveries: 4设置一个节点的并发数量的第二种情况,在添加、删除节点及调整时。默认是4个。
discovery.zen.minimum_master_nodes: 1设置一个集群中主节点的数量,当多于三个节点时,该值可在2-4之间。
discovery.zen.ping.timeout: 3s设置ping其他节点时的超时时间,网络比较慢时可将该值设大
discovery.zen.ping.multicast.enabled: false禁止当前节点发现多个集群节点,默认值为true
cluster.fault_detection.leader_check.interval:2s设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒
discovery.cluster_formation_warning_timeout: 30s启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒
cluster.join.timeout: 30s点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒
cluster.publish.timeout: 90s设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒。
luster.routing.allocation.cluster_concurrent_rebalance:32集群内同时启动的数据任务个数,默认是2个。

1.1.3 分片类

参数释义
index.number_of_shards:5设置默认索引分片个数,默认为5片。主分片一经分配则无法更改。
index.number_of_replicas:1设置默认索引副本个数,默认为1个副本。
indices.recovery.max_size_per_sec:0设置数据恢复时限制的带宽,默认0及不限制,代表是无限的。
indices.recovery.concurrent_streams: 5限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。
action.destructive_requires_name: false是否允许通配符删除索引

1.1.4 IP绑定类

参数释义
network.host:192.168.130.140为es实例绑定特定的IP地址。
network.bind_host:192.168.130.140设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。
network.publish_host:192.168.130.140设置其他节点连接此节点的地址,若不设置,则自动获取,值必须是个真实的ip地址,也可以用不配。

1.1.5 端口类

参数释义
http.port:9200设置对外服务的http端口,默认为9200。
transport.tcp.port:9300设置集群节点之间交互的tcp端口,默认是9300。
transport.host: 0.0.0.0允许任何人连接HTTP API

1.1.6 交互类

参数释义
transport.tcp.compress:true设置是否压缩tcp传输时的数据,默认为false,不压缩。
http.max_content_length:100mb设置内容的最大容量,默认100mb
http.enabled:false是否使用http协议对外提供服务,默认为true,开启。
gateway.type: local设置gateway的类型,默认为本地文件系统,也可以设置分布式文件系统、Hadoop的HDFS或者AWS的都可以。
gateway.recover_after_nodes: 3在完全重新启动集群之后阻塞初始恢复,直到启动N个节点为止。
gateway.recover_after_time: 5m设置初始化数据恢复进程的超时时间。默认是5分钟。
gateway.expected_nodes: 2设置该集群中节点的数量,默认为2个,一旦这N个节点启动,就会立即进行数据恢复。

1.1.5 Xpcak安全认证

  • es的安全认证方式有很多,比如http-basic,search guard,shield等,这里主要讲Xpack安全认证功能。
  • Xpack是什么?
    • X-Pack是Elastic Stack扩展功能,提供了多项高级功能,例如安全性,警报,监视,报告,机器学习和许多其他功能。
      在这里插入图片描述
    1. ES6.3之后的版本已经集成一起发布,不需要单独安装,并且基础级安全功能永久免费。
    2. xpack功能有很多,高级功能还是要收费的,这里不展开讲。
      在这里插入图片描述
      在这里插入图片描述
1.1.5.1 xpack内置用户
用户角色
elastic超级管理员
apm_system为apm创建的用户
kibana为kibana创建的用户
logstash_system为logstash创建的用户
beats_system为beats创建的用户
kiremote_monitoring_userana为 monitoring 创建的用户
1.1.5.2 xpack功能使用
功能名称配置参数适用组件配置文件
图形展示xpack.graph.enabled只适用于kibana组件kibana.yml
报表统计pack.reporting.enabled只适用于kibana组件kibana.yml
报警通知xpack.watcher.enabled只适用于elasticsearch组件elasticsearch.yml
安全认证xpack.security.enabled适用于elk的三个组件各组件配置文件
监控跟踪xpack.monitoring.enabled适用于elk的三个组件各组件配置文件
设备资源分配xpack.ml.enabled适用于elasticsearch和kibana组件kibana.yml、elasticsearch.yml
1.1.5.3 安全功能核心参数
  • es8.x版本默认开启了安全验证功能,有些核心参数需要了解一下。
1.1.5.3.1 开启安全验证功能,密码访问

配置参数:

  • xpack.security.enabled: true,是总开关。
  • xpack.security.enrollment.enabled: false

参数释义:

  • 继6.8版本之后,es是默认开启了密码访问来提高安全性。
  • 关闭则修改成false。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.1.5.3.2 开启ssl证书认证,https访问

配置参数:

  • xpack.security.http.ssl

参数释义

  • enabled:true。【开启,还是关闭】
  • keystore.path:certs/http.p12【密钥存储库文件的存放位置】

老版本额外参数释义:

  • truststore.path:certs/http.p12 【信任存储库文件的存放位置】
  • verification_mode:full /certificate /none
    • full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。
    • certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。
    • none:它不执行服务器证书的验证。

1.关闭状态,http访问。
在这里插入图片描述

在这里插入图片描述
2.开启状态,https访问。
在这里插入图片描述
在这里插入图片描述

1.1.5.3.3 开启传输层认证

配置参数:

  • xpack.security.transport.ssl

参数释义

  • enabled:true。【开启,还是关闭】
  • keystore.path:certs/transport.p12【密钥存储库文件的存放位置】
  • truststore.path:certs/transport.p12 【信任存储库文件的存放位置】
  • verification_mode:full /certificate /none
    • full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。
    • certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。
    • none:它不执行服务器证书的验证。

在这里插入图片描述

1.2 jvm.options文件

  • jvm.option文件是一些程序运行依赖java环境,对这个java环境进行设置参数的配置文件,比如es依赖java环境,这里也就有个jvm文件,一些参数需要了解。

注意事项:

  1. jvm.option文件属高级配置,若需要自定义设置JVM选项,可以通过添加自定义选项文件或设置ES_JAVA_OPTS环境变量来重写默认JVM选项。不要直接修改jvm.option文件本身。
    • 自定义JVM选项文件必须具有后缀options,并包含一个行分隔的JVM参数列表。JVM按字典顺序处理选项文件。
    • JVM选项文件的放置位置取决于安装类型:
      • tar.gz或zip安装:将自定义JVM选项文件添加到config/ivm.optionsd/目录下。
      • Debian或RPM安装:将自定义JVM选项文件添加到/etc/elasticsearch/ivm.options.d/目录下。
      • Docker安装:将挂载自定义JVM选项文件绑定到/usr/share/elasticsearch/config/ivmoptionsd/目录下。

在这里插入图片描述

1.2.1 jvm.option文件参数释义

JVM参数定义标准:

  • 以-开头的是标准JVM选项,JVM规范的选项;
  • 以-X开头的都是非标准的,这种参数并不能保证在所有的JVM上都能实现,而且如果在新版本有什么改动也不会发布通知。
  • 以-XX开头的都是不稳定的并且不推荐在生产环境中使用。这些参数的改动也不会发布通知。
  • 布尔型(Bool)参数选项
    • “-XX:+”,表示打开启用该参数功能。比如-XX:+HeapDumpOnOutOfMemoryError,表示启用HeapDumpOnOutOfMemoryError功能。
    • ”-XX:-" ,表示关闭停用该参数功能。比如-XX:-HeapDumpOnOutOfMemoryError,表示停用HeapDumpOnOutOfMemoryError功能。
  • 数字型参数选项
    • “-XX:参数=数值”,数字可以是 m/M(兆字节),k/K(千字节),g/G(G字节)。
    • 比如-XX:MaxPermSize=64m,表示给永久代最大值设置为64兆。
  • String参数选项
    • “-XX:参数=设定”,通常用来指定一个文件,路径,或者一个命令列表。
    • 比如-XX:HeapDumpPath=./java_pid.hprof,表示设置输出OOM dump文件路径为./java_pid.hprof。
参数名称释义备注学习
-Xms程序启动初始占用内存大小若未配置此参数,则使用默认值。
默认值是服务器物理内存的1/64。
这个1/64值也可以通过MinHeapFreeRatio参数调整。
当空余堆内存小于40%时,JVM就会增大堆直到
-Xmx的最大限制。
重点,必须掌握
-Xmx程序运行期间最大可占用的内存大小若未配置此参数,则使用默认值。
默认值是服务器物理内存的1/4。
这个1/64值也可以通过MinHeapFreeRatio参数调整。
.当空余堆内存大于70%时,JVM会减少堆直到
-Xms的最小限制。
重点,必须掌握
-Xmn新生代大小(jdk 1.4或以上版本)增大新生代后,将会减小老年代大小。
此值对系统性能影响较大。
Sun官方推荐配置为整个堆的3/8。
了解即可
-Xss每个线程的堆栈大小JDK5.0以后每个线程堆栈大小为1M,
以前每个线程堆栈大小为256K,可以带 K, M 或 G单位。
重点,必须掌握
-XX:+UseG1GC手动指定使用 G1 垃圾收集器执行内存回收任务。跟G1垃圾收集器有关。了解即可
-Djava.io.tmpdir=${ES_TMPDIR}JVM临时目录默认就是在es安装家目录下。了解即可
-XX:+HeapDumpOnOutOfMemoryError使用该参数表示,当触发OOM时, 就会自动生成HeapDump文件,方便我们精确定位分析Java内存使用情况。默认输出在存放类文件的根文件夹。重点,必须掌握
-XX:HeapDumpPath=data指定 dump 文件存储路径。配合-XX:+HeapDumpOnOutOfMemoryError使用重点,必须掌握
-XX:+ExitOnOutOfMemoryError使用该参数时,当抛出OutOfMemoryError信息,则JVM将立即退出。属于调优参数配合-XX:+HeapDumpOnOutOfMemoryError使用了解即可
-XX:ErrorFile=logs/hs_err_pid%p.log当JVM出现致命错误时,指定错误日志路径。常规使用了解即可
-XlogGC 日志记录如下图每个逗号为一个定义标签了解即可。

在这里插入图片描述

1.2.1.1 jvm日志配置

配置格式:

  • -Xlog:[what],[output],[decorators][output-options[,…]]]]]
    • 【what部分】:包含标签和日志级别。
    • 【日志级别】:
      • off:关闭。
      • trace:包含trace,debug,info,warning,error所有日志。
      • debug:包含debug,info,warning,error。
      • info:包含info,warning,error。
      • warning:包含warning,error。
      • error:仅包含error。
    • 【output部分】:包含三种输出。
      • stdout: 标准输出。
      • stderr: 标准错误输出。
      • file=filename 输出到文件。
      • 输出到文件可以配置output-options:filecount=50,filesize=100M。表示保留50个文件,每个文件100M。
    • 【decorators部分】:可以使用的标记。
      • 标记含义time 或者 t当前时间,ISO-8601格式utctime 或者 utcUTC时间uptime 或者 u启动到现在经过的时间,精确到毫秒timemillis 或者 tm毫秒时间戳。

示例:
-Xlog:gc* ,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

  • gc* :gc* 等于gc*=info。若没定义日志级别,默认为info级别。
  • gc+age=trace:输出同时包含且仅包含 gc 和 age 这两个标签的trace级别日志。
  • filecount=32,filesize=64m:表示保留32个文件,每个文件64M。

其他示例:

  • -Xlog:gc=info,表示仅包含 gc 一个标签的所有日志,info 级别的都会输出。
  • -Xlog:gc*=info,表示包含 gc 标签的所有日志,info 级别的都会输出,就是上面说的 gc 相关的所有标签。
  • -Xlog:gc+age=debug,表示同时包含且仅包含 gc 和 age 这两个标签的,debug 级别的才会输出。
  • -Xlog:gc*=info,gc+heap=debug,gc+heap+region=debug,同时设置包含且仅包含 gc 和 heap 这两个标签的为 debug,包含且仅包含 gc 和 heap 和 region 这三个标签的设置为 debug ,剩下的包含 gc 标签的日志级别为 info 。

注意事项:

  • 标签如果打错了,就会报错并退出。
  • 如果没有这种标签的组合(或者这个标签不能单独出现),则会报警,但是继续运行。
1.2.1.2 jvm其他参数
参数名称释义备注
-XX:PermSize设置永久代初始值。物理内存的1/64
-XX:MaxPermSize设置永久代最大值物理内存的1/4
-XX:NewRatio新生代(包括Eden和两个Survivor区)与老年代的比值(除去永久代)-XX:NewRatio=4表示新生代与老年代所占比值为1:4,新生代占整个堆栈的1/5,Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
-XX:SurvivorRatioEden区与Survivor区的大小比值设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个新生代的1/10
-XX:LargePageSizeInBytes内存页的大小不可设置过大, 会影响Perm的大小=128m
-XX:+UseFastAccessorMethods原始类型的快速优化/
-XX:+DisableExplicitGC关闭System.gc()/
-XX:MaxTenuringThreshold垃圾最大年龄如果设置为0的话,则新生代对象不经过Survivor区,直接进入老年代。对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象再新生代的存活时间,增加在新生代即被回收的概率,该参数只有在串行GC时才有效。
-XX:+AggressiveOpts加快编译/
-XX:+UseBiasedLocking锁机制的性能改善/
-Xnoclassgc禁用垃圾回收/
-XX:SoftRefLRUPolicyMSPerMB每兆堆空闲空间中SoftReference的存活时间1S
-XX:PretenureSizeThreshold对象超过多大是直接在老年代分配新生代采用Parallel Scavenge GC时无效,另一种直接在老年代分配的情况是大的数组对象,且数组中无外部引用对象。
-XX:TLABWasteTargetPercentTLAB占eden区的百分比1%
-XX:+CollectGen0FirstFullGC时是否先YGCfalse
-XX:+UseParallelGCFull GC采用parallel MSC参考GC参数
-XX:+UseParNewGC设置新生代为并行收集可与CMS收集同时使用,JDK 5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-XX:ParallelGCThreads并行收集器的线程数此值最好配置与处理器数目相等,同样适用于CMS
-XX:+UseParallelOldGC老年代垃圾收集方式为并行收集(Parallel Compacting)JAVA 6出现的参数选项
-XX:MaxGCPauseMillis每次新生代垃圾回收的最长时间(最大暂停时间)如果无法满足此时间,JVM会自动调整新生代大小,以满足此值.
-XX:+UseAdaptiveSizePolicy自动选择新生代区大小和相应的Survivor区比例设置此选项后,并行收集器会自动选择新生代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比公式为1/(1+n)
-XX:+ScavengeBeforeFullGCFull GC前调用YGCtrue
-XX:+UseConcMarkSweepGC使用CMS内存收集测试中配置这个以后, -XX:NewRatio=4的配置失效了,原因不明,所以此时新生代大小最好用-Xmn设置
-XX:+AggressiveHeap试图是使用大量的物理内存长时间大内存使用的优化,能检查计算资源(内存, 处理器数量,至少需要256MB内存
-XX:CMSFullGCsBeforeCompaction多少次后进行内存压缩由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低
-XX:+CMSParallelRemarkEnabled降低标记停顿/
-XX+UseCMSCompactAtFullCollection在FullGC的时候对老年代的压缩CMS是不会移动内存的, 因此这个非常容易产生碎片,导致内存不够用,因此内存的压缩这个时候就会被启用。增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片。
-XX:+UseCMSInitiatingOccupancyOnly使用手动定义初始化定义开始CMS收集禁止hostspot自行触发CMS GC
-XX:CMSInitiatingOccupancyFraction=70使用cms作为垃圾回收使用70%后开始CMS收集该值的设置需要满足以下公式CMSInitiatingOccupancyFraction计算公式
-XX:CMSInitiatingPermOccupancyFraction设置Perm Gen使用到达多少比率时触发92
-XX:+CMSIncrementalMode设置为增量模式用于单CPU情况
-XX:+CMSClassUnloadingEnabled永久代CMS方式GC/
-XX:+PrintGCGC日志输出和-verbose:gc一样
-XX:+PrintGCDetailsGC日志输出日志更加详细
-XX:+PrintGCTimeStamps输出GC的时间戳配合上述PrintGC参数使用,或者写成-XX:+PrintGC:PrintGCTimeStamps类似的
-XX:+PrintGC:PrintGCTimeStamps/可与-XX:+PrintGC -XX:+PrintGCDetails混合使用
-XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停的时间。可与上面混合使用输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中断的执行时间可与上面混合使用,输出形式:Application time: 0.5291524 seconds
-XX:+PrintHeapAtGC打印GC前后的详细堆栈信息/
-Xloggc:filename把相关日志信息记录到文件以便分析与上面几个配合使用
-XX:+PrintClassHistogram在控制台按下Ctrl+Break后,打印类的信息/
-XX:+PrintClassHistogramBeforeFullGCFullGC前打印类信息
-XX:+PrintTLAB查看TLAB空间的使用情况/
XX:+PrintTenuringDistribution查看每次minor GC后新的存活周期的阈值/
-ea开启assert断言/
-Xprof性能诊断/
-Xrunhprof性能诊断/
-XX:+TraceClassLoading打印类加载过程的信息类似 [Loaded java.util.AbstractList$Itr from /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/rt.jar]
-XX:+TraceClassUnloading打印类卸载的过程信息/
Xbootclasspath指定加载不需要校验的类跳过必要的类加载前的校验,能够减少加载时间,但是不安全
-XX:+PrintCompilation打印Hotspot使用JIT 编译的方法名称/

1.2.2 设置jvm大小

1.2.2.1 自定义选项文件设置

  • JVM选项文件必须是以.options为后缀的,并包含以行分隔的JVM参数列表。
  • 最简单的办法就是,查看jvm.options文件里的配置参数,将其复制到jvm.options.d目录下新建的xx.options文件,按照其格式进行修改。

注意事项:

  • “-Xmx2g”:表示应用设置到所有版本。
  • “17:-Xmx2g”:设置应用到17版本。
  • “17-18:-Xmx2g”:设置应用到17到18之间的所有版本。
  • “17-:-Xmx2g”:设置适用于Java 18及更高版本。
  • 若配置文件配置格式错误未识别,es会启动失败。
  • 使用JVM选项文件会覆盖默认设置。

1.修改之前的默认大小。
在这里插入图片描述
2.在jvm.options.d目录下创建一个文件qingjun.options,添加我想自定义的参数,这里就是自定义的JVM内存值,并修改其权限。

[root@localhost jvm.options.d]# vim qingjun.options 
-Xms2g
-Xmx2g

[root@localhost jvm.options.d]# chown es-qingjun:es-qingjun qingjun.options
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

3.重启es,在查看日志,此时就是修改后的大小了。

在这里插入图片描述

1.2.2.2 环境变量设置

1.配置环境变量。

[root@localhost elasticsearch-8.5.2]# tail -n 4 /etc/profile
export PATH=$node_home/bin:$PATH
export es_home=/opt/elasticsearch-8.5.2
export PATH=$es_home/bin:$PATH
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/opt/elasticsearch-8.5.2"
[root@localhost ~]# source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.启动es,验证。

在这里插入图片描述
在这里插入图片描述

1.3 log4j2.properties文件

  • 在es中,是使用 log4j2 来记录日志。我们可以使用 log4j2.properties 文件配置log4j2的相关参数,从而控制es日志的输出方式、配置方法、日志按类型输出到不同的文件中、慢查询日志配置方法等诸多指标。
  • 参数引用极多且复杂,日常使用只需要知道核心参数作用即可。

文件位置:

  • 在es服务安装路径$HOME/config/ log4j2.properties

log4j2是什么?

  • Apache Log4j2 是 Apache 软件基金会下的一个开源的基于 Java 的日志记录工具。Log4j2 是一个 Log4j 1.x 的重写,就是升级版,具备更多特性。
  • 这里面的东西特别多,不展开讲,我们只需要了解它在es中是个什么角色就可以了。

es日志的输出位置配置信息:

  1. ${sys;es.logs.base_path}:解析为日志文件目录地址。
  2. ${sys:es.logs.cluster_name}:解析为群集名称(在默认配置中,用作日志文件名的前缀)。
  3. ${sys:es.logs.node_name}:解析为节点名称(如果显式地设置了节点名称)。
  4. ${sys:file.separator}:将被解析为路径分隔符。
  5. 我们可以在es主配置文件中引用这些属性来确定日志文件的存放位置。如下图所示:
    在这里插入图片描述
    在这里插入图片描述

1.3.1 基本参数

[es-qingjun@localhost config]$ cat log4j2.properties

######## Server JSON ############################

##配置 RollingFile 的appender 属性。
appender.rolling.type = RollingFile  

##集群日志的appender标签名称。
appender.rolling.name = rolling    

##日志输出路径。(重点)
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json  

##使用JSON格式输出。(重点)
appender.rolling.layout.type = ECSJsonLayout   

#Dataset是填充事件的标志。ECSJsonLayout中的dataset字段。在解析日志时,可以使用它更容易地区分不同类型的日志。
appender.rolling.layout.dataset = elasticsearch.server

#将日志滚动输出到/opt/es/logs/qingjun-2023-01-13-1.json.gz文件。日志文件会被压缩处理,i呈递增状态。(重点)
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz

#使用基于时间戳的新增日志滚动策略。(重点)
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy

#按天滚动新增日志。(重点)
appender.rolling.policies.time.interval = 1

#在日期时间上对齐标准,而不是按每 24 小时来新增一次滚动日志文件。
appender.rolling.policies.time.modulate = true

#按日志文件大小的策略来滚动新增日志文件。(重点)
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy

#每生成256MB 的日志文件,就滚动新增日志一次。(重点)
appender.rolling.policies.size.size = 128MB

#每次新增滚动日志时执行删除日志文件动作。(重点)
appender.rolling.strategy.action.type = Delete

#仅当文件匹配时才删除日志文件。
appender.rolling.strategy.action.condition.type = IfFileName

#该配置仅用于删除日志文件。
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*

#只有当日志目录下积累了较多日志时才删除。
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize

#压缩日志的条件是日志文件大小达到2 GB。(重点)
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB


#以下参数官方没有给解释,可忽略直接使用默认就行。
appender.rolling.policies.type = Policies
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

1.3.2 日志滚动策略

appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 128MB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.3.3 日志删除策略

appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.fileIndex = nomax
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、调试报错积累

2.1 调整默认虚拟内存大小

  • 系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。

在这里插入图片描述
1.使用root用户在/etc/sysctl.conf文件添加如下一行,重新读取该文件。

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# sysctl -p /etc/sysctl.conf 
vm.max_map_count = 262144
  • 1
  • 2
  • 3

2.切换至es用户,再次启动服务,解决。
在这里插入图片描述

2.2 调整文件描述符大小

  • es程序组要的最小文件描述符值是65536,但默认值是4096。

在这里插入图片描述
1.查看大小。

  • ulimit -Hn: 是max number of open file descriptors的hard限制
  • ulimit -Sn: 是max number of open file descriptors的soft限制

在这里插入图片描述
2.修改配置文件,添加如下两行,重启登录才能生效,使用bash命令不行。

  • 星号:表示所有用户。
  • hard与soft:表示限制的类型。
  • nofile:表示打开的文件描述符的最大数目。
  • 65536:表示设置的大小。
[root@localhost ~]# tail -n 2 /etc/security/limits.conf 
*  hard nofile 65536
*  soft nofile 65536

#也可以指定特定用户设置,例如:
es-qingjun hard nofile 65536
es-qingjun soft nofile 65536
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
3.切换至es用户,重启服务,解决。

在这里插入图片描述

2.3 UUID不一致

  • 这个问题一般都是出在集群里,但是我这里是单节点会出现这个问题是因为我的uuid发生改变了,直接把这个参数注释掉就可以了。

在这里插入图片描述
1.修改配置文件,注释这个参数,单节点不需要使用。

在这里插入图片描述
2.重启es,解决。

在这里插入图片描述

2.4 进程重复启动

1.es服务已经后台运行,再次启动就会报错。
在这里插入图片描述
2.查看es进程。

在这里插入图片描述

2.5 客户端不信任证书日志刷频

  • 报错是因为es集群配置xpack认证,需要检查各个节点config目录下的elastic-certificates.p12 文件,属主是否是es的运行用户,并且每个节点需要用同一个elastic-certificates.p12文件。

在这里插入图片描述
1.关闭ssl证书。或者重新生成证书。
在这里插入图片描述
2.此时密码访问就是http的了。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/413756
推荐阅读
相关标签
  

闽ICP备14008679号