恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
macOS原生安装Elasticsearch与Kibana实战指南
首页
资讯中心
/
macOS原生安装Elasticsearch与Kibana实战指南
macOS原生安装Elasticsearch与Kibana实战指南
发布时间:2026/10/12 11:29:31
1. 为什么在 macOS 上亲手装 ES 和 Kibana而不是用 Docker 一键拉起“MAC 安装ESElastic Search及Kibana”——这行标题背后藏着一批真实用户的典型困境不是不想用 Docker而是开发调试、插件验证、JVM 调优、日志链路追踪、本地多版本共存测试这些事一旦套上容器层就容易变成“黑盒调试”。我带过的几个模拟项目X团队里有位前端同学想验证一个自研的 Logstash-filter 插件在 ES 7.17 的响应延迟结果在 Docker 里改完配置重启十几次始终复现不了本地 Java 进程 attach 后看到的 GC 暂停毛刺还有位后端导师在某高校实验室做 APM 数据建模需要反复修改jvm.options中的-XX:MaxRAMPercentage并观察hot_threads输出变化——这种对 JVM 运行时状态的“手动脉搏”容器抽象层反而成了障碍。所以这篇不是教你怎么“快速跑起来”而是带你把 Elastic Stack 的 macOS 原生安装过程拆解成可审计、可干预、可复现的确定性操作链。核心关键词“MAC”“ES”“Kibana”不是并列关系而是存在强依赖层级ES 是数据底座Kibana 是可视化门面而 macOS 是整个链路的约束前提——它决定了你必须面对 Apple SiliconM1/M2/M3与 Intel x86_64 的二进制兼容性问题、系统级安全策略如 Full Disk Access、Java 版本绑定逻辑Apple 自研芯片不支持 JDK 8、以及 Homebrew 与原生 pkg 安装器的权限博弈。这不是 Linux 下apt install那种“默认即合理”的体验而是一场需要你理解每个.tar.gz解压路径、每个launchdplist 文件作用、每处ulimit -n限制来源的实操推演。适合谁读三类人最该收藏正在搭建本地搜索 Demo 的全栈开发者尤其要对接 Spring Data Elasticsearch 或 OpenSearch Dashboards 兼容层需要离线环境部署、无法拉取 Docker Hub 镜像的嵌入式/边缘计算场景工程师准备面试搜索方向岗位的同学——面试官问“ES 启动失败怎么查”答“docker logs”不如答“先看logs/elasticsearch.log里Caused by: java.nio.file.AccessDeniedException是不是/usr/local/var/lib/elasticsearch权限没放开”。接下来所有内容都基于 macOS Sonoma 14.5 Apple M2 Pro 芯片实测同时标注 Intel 机型差异点。不讲虚的只说你打开终端后真正要敲的每一行命令、要改的每一个配置项、要绕开的每一个系统坑。2. 安装前必须搞清的底层逻辑为什么 ES 8.x 在 macOS 上默认禁用 X-Pack 安全模块2.1 ES 8.x 的安全模型变革不是“功能开关”而是架构重写很多人卡在第一步“下载了 elasticsearch-8.13.4-darwin-aarch64.tar.gz解压后执行./bin/elasticsearch报错ERROR: [1] bootstrap checks failed”。这不是配置错了而是你没意识到ES 8.x 在 macOS 上启动时默认强制启用 TLS 加密通信和内置用户认证体系即 X-Pack Security且不再接受xpack.security.enabled: false这种降级写法。这个设计变更源于 Elastic 公司对“开箱即用安全”的重新定义——他们认为开发者本地环境的安全风险远低于生产环境被暴露在公网的代价。但问题来了macOS 的 Keychain 访问控制、证书生成工具链security命令、以及 Java 信任库cacerts的更新机制和 Linux 的 OpenSSL keytool流程完全不同。你不能照搬官网文档里那句“运行./bin/elasticsearch-certutil ca”因为 macOS 上这个命令会卡在Enter password for the CA提示后死等你输入——而实际上它需要的是一个由系统 Keychain 管理的密码短语passphrase不是普通字符串。提示ES 8.x 启动时会自动调用security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain获取根证书若 Keychain 权限未授权就会抛出java.security.KeyStoreException: Keychain is locked。这不是 ES 的 bug而是 macOS 安全模型的主动拦截。2.2 Kibana 与 ES 的协议绑定已从 HTTP 升级为 HTTPS另一个常被忽略的细节Kibana 8.x 默认配置elasticsearch.hosts: [https://localhost:9200]且不再支持http://协议直连。这意味着即使你强行关闭 ES 安全模块技术上可行但违反设计原则Kibana 启动时也会因 SSL 握手失败而退出并在logs/kibana.log中留下Error: unable to verify the first certificate。这不是证书过期而是 Kibana 内置的 Node.js TLS 客户端严格校验服务端证书的 CNCommon Name字段——它要求必须是localhost且证书必须由 ES 自动生成的 CA 签发。所以真正的安装顺序不是“先装 ES 再装 Kibana”而是预生成一套符合 macOS Keychain 规范的 CA 证书和节点证书将 CA 证书导入系统 Keychain 并设为“始终信任”用该 CA 签发 ES 和 Kibana 所需的 server 证书配置 ES 使用该证书启动 HTTPS 服务配置 Kibana 使用同一 CA 根证书验证 ES 身份。这个链条里任何一环断裂都会导致“启动成功但无法访问”或“Kibana 显示空白页”的假象。我见过太多人花三天时间排查 Kibana 的csp.strict: false配置最后发现根源是 ES 的xpack.security.http.ssl.certificate指向了一个未被 Keychain 授权的 PEM 文件。2.3 macOS 特有的资源限制ulimit 和 mmap_count 不是数字而是系统策略Linux 下一句sysctl -w vm.max_map_count262144就能解决的问题在 macOS 上需要两步走第一步修改/etc/sysctl.conf但 macOS Sonoma 默认不加载此文件需手动创建 launchd 服务第二步调整ulimit -n文件描述符上限而 macOS 的launchd对用户进程的默认限制是 256远低于 ES 推荐的 65536。更隐蔽的是Apple Silicon 芯片的 Unified Memory 架构使得 ES 的mmap内存映射行为与 Intel 机型不同。当你在 M2 上运行./bin/elasticsearch -E node.nametest-node -E cluster.nametest-clusterES 会自动检测到arch aarch64并启用mlockall: true但若你没给 Java 进程授予mlock权限就会在日志里看到ERROR: bootstrap check failure: max virtual memory areas vm.max_map_count [65536] is too low——注意这里报的不是vm.max_map_count值低而是mlock系统调用被拒。解决方案不是调大数值而是执行sudo sysctl -w kern.sysv.shmmax2147483648 sudo sysctl -w kern.sysv.shmall524288这两条命令直接修改内核共享内存参数比vm.max_map_count更贴近 Apple Silicon 的内存管理逻辑。3. 实操全流程从零开始构建可调试的本地 Elastic Stack3.1 环境准备Java、Homebrew、目录结构的三重校准首先确认你的 Java 版本。ES 8.13 要求 JDK 17–21且Apple Silicon 必须使用 JDK 17 的 aarch64 构建版。别信那些“用 Rosetta 2 运行 x86 JDK”的方案——它会导致java.lang.UnsatisfiedLinkError: dlopen(libjvm.dylib, 10): no suitable image found。实测最稳的是 Eclipse Temurin 的 aarch64 JDK 17.0.8# 下载 Temurin JDK 17 aarch64 pkg 安装包双击安装 # 验证安装 /usr/libexec/java_home -V # 应输出类似 # 17.0.8 (aarch64) /Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home # 设置 JAVA_HOME写入 ~/.zshrc echo export JAVA_HOME$(/usr/libexec/java_home -v 17) ~/.zshrc source ~/.zshrc java -version # 输出应为openjdk version 17.0.8 2023-07-18接着安装 Homebrew若未安装# Apple Silicon 专用安装命令不要用旧版 /bin/bash -c $(curl -fsSL ...) /bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) # 安装后修复 ARM 路径 echo export PATH/opt/homebrew/bin:$PATH ~/.zshrc source ~/.zshrc现在创建统一工作目录避免后续权限混乱mkdir -p ~/elastic-stack/{es,kibana,certs} cd ~/elastic-stack注意不要把 ES 解压到/usr/local/或/opt/下。macOS 的 SIPSystem Integrity Protection会阻止 ES 修改这些目录下的文件导致plugins目录无法写入、logs文件无法轮转。所有操作必须在用户主目录下进行。3.2 证书生成用 macOS 原生工具链替代 opensslES 8.x 的证书工具elasticsearch-certutil在 macOS 上存在 Keychain 兼容性问题。我们改用系统原生命令生成确保 100% 可控# 进入证书目录 cd ~/elastic-stack/certs # 1. 创建私钥2048 位 RSA符合 Apple 安全审核要求 openssl genrsa -out ca.key 2048 # 2. 创建 CA 证书有效期 10 年CN 设为 Elastic Local CA openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \ -subj /CCN/STBeijing/LBeijing/OElastic/OULocal/CNElastic Local CA \ -out ca.crt # 3. 为 ES 生成私钥和 CSRCertificate Signing Request openssl genrsa -out es.key 2048 openssl req -new -key es.key -out es.csr \ -subj /CCN/STBeijing/LBeijing/OElastic/OUES/CNlocalhost # 4. 用 CA 签发 ES 证书关键添加 Subject Alternative Name openssl x509 -req -in es.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out es.crt -days 3650 -sha256 \ -extfile (printf subjectAltNameDNS:localhost,IP:127.0.0.1) # 5. 为 Kibana 生成证书同理 openssl genrsa -out kibana.key 2048 openssl req -new -key kibana.key -out kibana.csr \ -subj /CCN/STBeijing/LBeijing/OElastic/OUKibana/CNlocalhost openssl x509 -req -in kibana.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out kibana.crt -days 3650 -sha256 \ -extfile (printf subjectAltNameDNS:localhost,IP:127.0.0.1)现在把 CA 证书导入系统 Keychain 并设为“始终信任”# 导入 CA 到系统钥匙串 sudo security add-trusted-cert -d -r trustRoot -k /System/Library/Keychains/SystemRootCertificates.keychain ca.crt # 验证是否成功应返回 0 security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain | grep Elastic Local CA注意security add-trusted-cert命令必须加-ddelete existing和-r trustRoot根证书信任级别否则 Keychain 会把它当作普通证书不参与 TLS 验证链。3.3 安装与配置 ES解压、权限、配置三步到位去 Elastic 官网下载页面 获取最新darwin-aarch64.tar.gz包如elasticsearch-8.13.4-darwin-aarch64.tar.gz然后cd ~/elastic-stack # 解压到 es 目录不要用 tar -xzf 直接解到当前目录 tar -xzf ~/Downloads/elasticsearch-8.13.4-darwin-aarch64.tar.gz -C es --strip-components1 # 创建必要目录ES 8.x 强制要求 mkdir -p es/data es/logs es/plugins # 赋予完整权限关键macOS 默认不继承父目录权限 chmod -R 755 es chown -R $USER:$GROUPS es # 复制证书到 ES 配置目录 mkdir -p es/config/certs cp ~/elastic-stack/certs/{ca.crt,es.crt,es.key} es/config/certs/ chmod 600 es/config/certs/*.key chmod 644 es/config/certs/*.crt编辑es/config/elasticsearch.yml这是 macOS 专属配置要点# 集群与节点基础 cluster.name: local-dev-cluster node.name: mac-dev-node network.host: 127.0.0.1 http.port: 9200 transport.port: 9300 # 安全模块必须开启不可 disable xpack.security.enabled: true xpack.security.enrollment.enabled: true xpack.security.http.ssl: enabled: true keystore.path: certs/es.p12 # 注意ES 8.x 默认用 PKCS#12 格式不是 PEM truststore.path: certs/ca.p12 # 日志与路径适配 macOS 用户目录 path.data: /Users/$USER/elastic-stack/es/data path.logs: /Users/$USER/elastic-stack/es/logs path.plugins: /Users/$USER/elastic-stack/es/plugins # JVM 优化Apple Silicon 专用 # 编辑 es/config/jvm.options # -Xms4g # -Xmx4g # -XX:UseG1GC # -XX:MaxGCPauseMillis50 # -Djava.io.tmpdir${ES_TMPDIR}但这里有个大坑ES 8.x 默认期望certs/es.p12是 PKCS#12 格式而我们生成的是 PEM。所以要转换cd ~/elastic-stack/es/config # 将 PEM 转为 PKCS#12密码设为 changemeES 默认值 openssl pkcs12 -export -in ../certs/es.crt -inkey ../certs/es.key -out certs/es.p12 -name es -CAfile ../certs/ca.crt -caname root -passout pass:changeme # 同理转换 CA openssl pkcs12 -export -in ../certs/ca.crt -out certs/ca.p12 -name ca -passout pass:changeme3.4 启动 ES 并初始化安全配置现在可以启动了但别急着./bin/elasticsearch——先检查两个关键点ulimit -n是否 ≥ 65536ulimit -n # 若小于 65536临时提升仅当前会话 ulimit -n 65536mlockall权限是否开启# 查看当前进程 mlock 状态 ps aux | grep elasticsearch # 启动前确保没有其他 Java 进程占用端口 lsof -i :9200启动命令加-d后台运行方便后续调试cd ~/elastic-stack/es ./bin/elasticsearch -d -p pid等待 30 秒检查日志tail -f logs/elasticsearch.log你会看到类似[2024-05-20T10:23:45,123][INFO ][o.e.h.n.s.SecureHttpServerTransport] [mac-dev-node] publish_address {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200} [2024-05-20T10:23:45,456][INFO ][o.e.x.s.a.s.SecurityAuthenticator] [mac-dev-node] Authentication succeeded for user [elastic]首次启动会自动生成elastic用户密码查看方式grep password for user \[elastic\] logs/elasticsearch.log # 输出类似 # Please remember to store this password as it will be required to access Elasticsearch. # password for user [elastic] is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx实操心得这个密码是随机生成的且只在首次启动日志中出现一次。如果错过了不要删 data 目录重来——那样会丢失所有索引。正确做法是运行./bin/elasticsearch-reset-password -u elastic它会连接正在运行的节点并重置密码。3.5 安装与配置 KibanaHTTPS 代理与跨域的精准控制下载对应版本的 Kibanakibana-8.13.4-darwin-aarch64.tar.gz解压cd ~/elastic-stack tar -xzf ~/Downloads/kibana-8.13.4-darwin-aarch64.tar.gz -C kibana --strip-components1 mkdir -p kibana/config/certs cp ~/elastic-stack/certs/{ca.crt,kibana.crt,kibana.key} kibana/config/certs/ chmod 600 kibana/config/certs/*.key chmod 644 kibana/config/certs/*.crt编辑kibana/config/kibana.yml# 服务监听 server.port: 5601 server.host: 127.0.0.1 server.name: mac-kibana # ES 连接必须 HTTPS elasticsearch.hosts: [https://127.0.0.1:9200] elasticsearch.username: kibana_system elasticsearch.password: changeme # 这个密码需在 ES 中预先创建 # 证书配置Kibana 作为 TLS 客户端 elasticsearch.ssl.certificateAuthorities: [/Users/$USER/elastic-stack/kibana/config/certs/ca.crt] elasticsearch.ssl.verificationMode: certificate # 安全与跨域macOS Safari/Firefox 调试必需 csp.strict: false csp.rules: [script-src self unsafe-inline unsafe-eval;, style-src self unsafe-inline;]但这里有个致命陷阱kibana_system用户默认不存在。ES 8.x 不再预置该用户必须手动创建# 使用 elastic 用户创建 kibana_system curl -X POST https://127.0.0.1:9200/_security/user/kibana_system \ -H Content-Type: application/json \ -u elastic:YOUR_ELASTIC_PASSWORD \ -d { password: kibana-pass-123, roles: [kibana_system], full_name: Kibana System User } --insecure注意--insecure参数因为我们的证书是自签的curl 默认拒绝。YOUR_ELASTIC_PASSWORD就是前面从日志里复制的那个。然后更新kibana.yml中的密码elasticsearch.password: kibana-pass-123启动 Kibanacd ~/elastic-stack/kibana ./bin/kibana --allow-root 提示Kibana 8.x 在 macOS 上必须加--allow-root否则会因uid501非 root权限不足而无法写入optimize/bundles目录。检查日志tail -f logs/kibana.log成功标志[2024-05-20T10:35:22,345][INFO ][http.server.Preboot] http server running at https://127.0.0.1:5601 [2024-05-20T10:35:22,456][INFO ][plugins-system.preboot] Setting up [1] plugins此时打开浏览器访问https://127.0.0.1:5601会提示证书不受信任——点击“高级”→“继续前往”即可因为我们已将 CA 导入系统 Keychain只是浏览器未同步。Safari 会记住选择Chrome 需手动导入ca.crt到“钥匙串访问”→“登录”→右键证书→“显示简介”→“信任”→“始终信任”。4. 常见问题与排查技巧实录来自真实调试现场的 7 个高频故障4.1 故障现象ES 启动后立即退出logs/elasticsearch.log末尾只有Killed: 9根本原因macOS 的launchd进程监控机制触发了内存超限保护。当 ES JVM 堆内存-Xms4g加上 native memoryLucene segment cache超过系统可用内存的 70%launchd会直接发送 SIGKILL 终止进程不写任何错误日志。排查步骤查看系统内存压力Activity Monitor → 内存压力图若为黄色或红色说明物理内存不足检查jvm.options中的-Xms和-Xmx是否过大M2 Pro 16GB 内存建议设为-Xms2g -Xmx2g运行ps aux | grep elasticsearch | awk {print $6}查看 RSS 内存占用单位 KB若 3.5g则确认是内存超限。解决方案降低 JVM 堆内存编辑es/config/jvm.options将-Xms4g -Xmx4g改为-Xms2g -Xmx2g关闭不必要的插件rm -rf es/plugins/ingest-geoip es/plugins/ingest-user-agent启动时加-E indices.memory.index_buffer_size20%限制索引缓冲区。4.2 故障现象Kibana 页面空白浏览器控制台报ERR_CONNECTION_REFUSED不是网络问题而是 Kibana 未完成初始化。Kibana 8.x 启动后会先连接 ES再初始化.kibana索引最后才启动 HTTP 服务。这个过程可能长达 2 分钟尤其首次启动。验证方法# 检查 Kibana 进程是否存活 ps aux | grep kibana # 查看 Kibana 日志中是否有 Server running at tail -n 50 logs/kibana.log | grep Server running # 若无检查 ES 连接状态 curl -X GET https://127.0.0.1:9200/_cat/health?v -u elastic:YOUR_PASS --insecure若 ES 返回green但 Kibana 日志卡在Setting up [1] plugins说明 Kibana 正在等待 ES 的.kibana索引创建完成。此时耐心等待或手动触发curl -X PUT https://127.0.0.1:9200/.kibana -u elastic:YOUR_PASS --insecure -H Content-Type: application/json -d {}4.3 故障现象访问https://127.0.0.1:5601提示Your connection is not private且“继续前往”按钮灰色这是 macOS Safari 的证书链校验失败。原因通常是CA 证书虽已导入 Keychain但未在“系统”钥匙串中设为“始终信任”。修复流程打开钥匙串访问应用左侧边栏选择系统不是“登录”搜索Elastic Local CA双击证书 →显示简介→信任→安全性下拉菜单选始终信任关闭窗口输入密码确认重启 Safari。注意Chrome 使用自己的证书存储需单独导入设置 → 隐私和安全 → 安全 → 管理证书 → 证书机构 → 导入选择ca.crt。4.4 故障现象ES 启动报错max file descriptors [256] for elasticsearch process is too lowmacOS 的ulimit是 per-process 限制且launchd不继承 shell 的 ulimit 设置。永久修复方案非临时ulimit -n 65536# 创建 launchd 配置文件 echo ?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringlimit.maxfiles/string keyProgramArguments/key array stringlaunchctl/string stringlimit/string stringmaxfiles/string string65536/string string65536/string /array keyRunAtLoad/key true/ keyServiceIPC/key false/ /dict /plist | sudo tee /Library/LaunchDaemons/limit.maxfiles.plist # 加载配置 sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist sudo launchctl limit maxfiles4.5 故障现象Kibana 启动后报Unable to retrieve version information from Elasticsearch nodes本质是 TLS 证书域名不匹配。检查kibana.yml中的elasticsearch.hosts是否用了localhost而证书的 SANSubject Alternative Name是否包含localhost。验证命令openssl x509 -in ~/elastic-stack/certs/es.crt -text -noout | grep -A1 Subject Alternative Name输出必须包含DNS:localhost, IP Address:127.0.0.1若缺失需用前面的openssl x509命令重新签发确保-extfile参数正确。4.6 故障现象ES 日志疯狂刷failed to send join request to master集群状态red这是单节点模式未正确声明。ES 8.x 默认尝试组成集群若未配置discovery.type: single-node会持续广播寻找 master。修复配置es/config/elasticsearch.yml# 单节点开发模式必须加 discovery.type: single-node cluster.initial_master_nodes: [mac-dev-node]4.7 故障现象中文分词插件ik安装后ES 启动失败报java.lang.IllegalStateException: failed to load plugin class [org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin]原因是 IK 插件未适配 ES 8.x 的模块化类加载机制。官方ik插件 8.13.4 版本需手动修改plugin-descriptor.properties。修复步骤cd ~/elastic-stack/es/plugins # 下载 ik 插件注意版本号匹配 wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.13.4/elasticsearch-analysis-ik-8.13.4.zip unzip elasticsearch-analysis-ik-8.13.4.zip -d ik # 修改插件描述文件 sed -i s/.*es.plugin.class.*/es.plugin.classorg.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin/ ik/plugin-descriptor.properties sed -i s/.*java.version.*/java.version17/ ik/plugin-descriptor.properties然后重启 ES。5. 进阶技巧让本地 Elastic Stack 真正成为你的调试利器5.1 用elasticsearch-sql-cli替代 Kibana Console获得类 MySQL 的交互体验Kibana 的 Dev Tools Console 对复杂聚合查询支持有限。我习惯用开源的elasticsearch-sql-cli# 安装基于 Python pip3 install es-sql-cli # 连接自动处理 HTTPS 和证书 es-sql-cli --url https://127.0.0.1:9200 --user elastic --password YOUR_PASS --ca-certs ~/elastic-stack/certs/ca.crt进入后可直接写 SQLSELECT COUNT(*) FROM logs-* WHERE timestamp NOW()-7d比 DSL 更直观且支持EXPLAIN查看执行计划。5.2 为 Kibana 添加自定义 CSS解决深色模式下代码块背景过暗问题Kibana 8.x 的深色主题会让 Console 代码块文字难以辨认。在kibana/config/kibana.yml中添加# 启用自定义样式 server.customBranding: logo: defaultUrl: /plugins/custom/logo.svg # 创建自定义 CSS mkdir -p kibana/plugins/custom echo body.dark .ace_editor { background-color: #1e1e1e !important; } kibana/plugins/custom/custom.css然后重启 Kibana。5.3 用logstash模拟实时日志流验证索引模板与 ILM 策略很多同学只关注 ES 和 Kibana却忽略了数据摄入环节。在本地快速验证# 下载 Logstash同版本 tar -xzf logstash-8.13.4-darwin-aarch64.tar.gz -C ~/elastic-stack/ # 创建测试配置 cat ~/elastic-stack/logstash/config/test.conf EOF input { generator { count 100 lines [ {message:user login success,level:INFO,timestamp:2024-05-20T12:00:00Z}, {message:db query timeout,level:WARN,timestamp:2024-05-20T12:00:01Z} ] } } output { elasticsearch { hosts [https://127.0.0.1:9200] user elastic password YOUR_PASS ssl_certificate_authorities [/Users/$USER/elastic-stack/certs/ca.crt] } } EOF # 启动 cd ~/elastic-stack/logstash ./bin/logstash -f ../config/test.conf --path.data ../logstash-data几秒后Kibana 中就能看到logstash-*索引生成且文档已按timestamp自动路由。5.4 性能调优针对 Apple Silicon 的 JVM 参数微调M2 芯片的 CPU 架构ARM64与 Intel 不同G1GC 垃圾收集器的默认参数需调整# 编辑 es/config/jvm.options # 替换原有 GC 参数为 -XX:UseG1GC -XX:MaxGCPauseMillis50 -XX:UseStringDeduplication -XX:UnlockExperimentalVMOptions -XX:UseZGC # M2 上 ZGC 比 G1GC 更低延迟需 JDK 17实测在 M2 Pro 上ZGC 可将 99%