更改Kibana5.x检查Elasticsearch的license状态

本文介绍了一种解决Kibana与不同版本Elasticsearch集群间因license限制无法正常工作的问题的方法。通过修改Kibana的x-pack源码,调整了Elasticsearch集群数据的获取方式,使得Kibana能够识别并显示多个版本的Elasticsearch集群状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于本司多个Elasticsearch集群使用一个kibana集群,本来Elasticsearch集群都是5.x,有一个日志集群需要升级到6.x,升级完之后kibana就不识别Elasticsearch6.x 的basic license(经过测试,kibana6.x不存在问题),这样导致查看不了集群状态,但是又不能把kibana升级到6.x(其他Elasticsearch5.x集群是5.x),无奈只能修改kibana原来来达到目的.

修改kibana x-pack源码

  • 编辑文件

${kibana_home}/plugins/x-pack/plugins/monitoring/server/lib/cluster/get_clusters_from_request.js
  • 修改该文件里面的函数

normalizeClustersData
该方法是kibana获取Elasticsearch集群数据的最后调整的函数,在这里,我们可以调整自己想要的数据,不仅仅是license
  • 调整内容
    	export function normalizeClustersData(clusters) {
    clusters.forEach(cluster => {
    cluster.elasticsearch = {
      cluster_stats: cluster.cluster_stats,
      nodes: cluster.nodes,
      indices: cluster.indices
    };
    cluster.status = calculateOverallStatus([
      cluster.elasticsearch.status,
      cluster.kibana && cluster.kibana.status || null
    ]);
    	//我手动添加的内容
    	cluster.isSupported = true;//突破basic license只能同时在kibana看一个Elasticsearch的限制
    	//我手动添加的内容,修改所有Elasticsearch集群的license内容,使之都有效
    	cluster.license={
    	    "status": "active",
    	    "uid": "dfee2a04-bc89-4f84-bcde-39ce31e3ec5d",
    	    "type": "basic",
    	    "issue_date": "2019-02-21T04:38:03.373Z",
    	    "issue_date_in_millis": 1550723883373,
    	    "expiry_date": "2029-03-23T04:38:03.373Z",
    	    "expiry_date_in_millis": 1553315883373,
    	    "max_nodes": 1000,
    	    "issued_to": "elasticsearch",
    	    "issuer": "elasticsearch",
    	    "start_date_in_millis": -1,
    	    "hkey": "133893e5d3ae10145b0bc9d6600db8bd6ca4a8fe91fd1eac3"
    	};
    delete cluster.cluster_stats;
    delete cluster.nodes;
    delete cluster.indices;
    });
    
    return clusters;
    

}

> 当然我们也能修改其他地方,来达到意想不到的效果

转载于:https://my.oschina.net/u/929672/blog/3013042

[elasticsearch@localhost opt]$ pwd /opt [elasticsearch@localhost opt]$ ll 总用量 4 drwx--x--x. 4 root root 28 3月 1 11:10 containerd drwxr-xr-x. 9 elasticsearch elasticsearch 181 3月 5 23:06 es drwxr-xr-x. 9 elasticsearch elasticsearch 155 3月 6 00:08 es-node1 drwxr-xr-x. 9 elasticsearch elasticsearch 4096 3月 6 00:05 es-node2 drwxr-xr-x. 9 elasticsearch elasticsearch 155 3月 5 22:49 es-node3 drwxr-xr-x. 8 root root 182 3月 6 00:15 kibana [elasticsearch@localhost opt]$ cd kibana/ [elasticsearch@localhost kibana]$ ll 总用量 2952 drwxrwxr-x. 2 root root 175 2月 28 20:21 bin drwxrwxr-x. 2 root root 66 3月 6 00:21 config drwxrwxr-x. 2 root root 6 2月 28 20:20 data -rw-rw-r--. 1 root root 3860 2月 28 20:20 LICENSE.txt drwxrwxr-x. 2 root root 6 2月 28 20:20 logs drwxrwxr-x. 3 root root 23 2月 28 20:20 node drwxrwxr-x. 17 root root 4096 2月 28 20:20 node_modules -rw-rw-r--. 1 root root 3007792 2月 28 20:20 NOTICE.txt -rw-rw-r--. 1 root root 3966 2月 28 20:20 README.txt[elasticsearch@localhost config]$ cat kibana.yml server.port: 5601 server.host: "0.0.0.0" server.publicBaseUrl: "http://10.211.55.3:5601" # 关闭安全相关配置(直接注释或删除) # elasticsearch.username: "kibana_system" # elasticsearch.password: "" # 指向所有 ES 节点的 HTTP 端口 elasticsearch.hosts: ["http://localhost:9201", "http://localhost:9202", "http://localhost:9203"] i18n.locale: "zh-CN"[elasticsearch@localhost config]$ cat /etc/systemd/system/kibana.service [Unit] Description=Kibana Documentation=https://www.elastic.co After=network.target [Service] User=elasticsearch Group=elasticsearch Environment=NODE_OPTIONS=--max-old-space-size=1024 ExecStart=/opt/kibana/bin/kibana Restart=always RestartSec=10 LimitNOFILE=65536 [Install] WantedBy=multi-user.target但是kibana启动失败了:[elasticsearch@localhost config]$ sudo systemctl status kibana [sudo] elasticsearch 的密码: ● kibana.service - Kibana Loaded: loaded (/etc/systemd/system/kibana.service; enabled; preset: disabled) Active: activating (auto-restart) (Result: exit-code) since Thu 2025-03-06 23:11:43 CST; 6s ago Docs: https://www.elastic.co Process: 3378 ExecStart=/opt/kibana/bin/kibana (code=exited, status=1/FAILURE) Main PID: 3378 (code=exited, status=1/FAILURE) CPU: 46ms怎么解决?
03-08
<think>好的,我现在需要帮助用户解决Kibana启动失败的问题。首先,我要仔细分析用户提供的日志和配置信息,找出可能的问题所在。 用户执行了systemctl status kibana,结果显示服务处于激活失败状态,并且自动重启。这说明Kibana在启动过程中遇到了错误,导致进程退出。接下来,我需要根据用户提供的配置文件和系统信息来排查可能的原因。 首先,查看Kibana的配置文件kibana.yml。注意到elasticsearch.hosts配置的是三个节点的HTTP端口:9201、9202、9203。需要确认这些ES节点是否都正常运行,并且监听了对应的端口。用户之前可能设置了多个ES实例,比如es-node1、es-node2、es-node3,每个节点的端口可能不同。如果其中任何一个节点无法访问,Kibana可能无法启动。这时候应该检查ES各节点的状态,比如使用curl http://localhost:9201/_cat/health?v,或者查看ES的日志。 其次,Kibana的服务文件kibana.service中,用户指定了以elasticsearch用户和组运行。需要确认该用户是否有权限访问/opt/kibana目录及其子目录。查看目录权限,发现kibana目录的属主是root,而服务是以elasticsearch用户运行的。例如,/opt/kibana的权限是drwxr-xr-x,属主为root,但子目录如bin、config等的权限是drwxrwxr-x,允许其他用户执行和读取。不过,可能某些文件或目录的权限不足,导致elasticsearch用户无法访问。例如,如果config目录下的kibana.yml文件权限过于严格,可能导致读取失败。需要检查相关文件和目录的权限,必要时使用chown和chmod调整。 第三,检查Kibana的日志文件。用户提到日志目录在/opt/kibana/logs,但默认情况下Kibana可能将日志写入/var/log/kibana,或者需要配置日志路径。如果日志路径不存在或不可写,也会导致启动失败。查看服务文件中是否指定了日志路径,或者kibana.yml中的配置,比如logging.dest。此外,可能由于elasticsearch用户没有写入权限,导致日志无法生成,进而引发错误。需要确保日志目录存在,并且elasticsearch用户有写权限。 接下来,查看环境变量和启动参数。服务文件中设置了NODE_OPTIONS=--max-old-space-size=1024,这限制了Node.js的内存使用。如果Kibana需要更多内存,可能导致崩溃。可以尝试增加这个值,比如设置为2048,看是否有改善。 另外,检查Kibana的版本是否与Elasticsearch版本兼容。版本不匹配是常见的问题,比如Kibana 7.x与ES 8.x可能存在兼容性问题。用户安装的Kibana版本需要与ES的版本一致。可以通过查看安装目录中的README.txt或运行bin/kibana --version来确认版本。 还有,kibana.yml中关闭了安全配置,注释掉了用户名和密码。如果ES集群启用了安全功能(如X-Pack),即使Kibana配置中注释了这些,也可能需要正确配置安全凭证。需要确认ES集群是否启用了安全认证,如果启用了,Kibana必须提供有效的用户名和密码。 另外,检查server.publicBaseUrl的配置是否正确。用户设置为http://10.211.55.3:5601,需要确认该IP是否正确,是否可以从外部访问,以及Kibana是否正确绑定到0.0.0.0。如果IP配置错误,可能导致Kibana无法正常启动。 此外,查看服务启动命令是否正确。服务文件中的ExecStart是/opt/kibana/bin/kibana,而正确的路径可能是/opt/kibana/bin/kibana-server,或者需要指定配置文件路径。不过,根据Kibana的文档,通常bin/kibana是正确的启动脚本,但需要确认该文件是否存在且有执行权限。 可能还需要检查系统资源,如内存和磁盘空间是否充足。使用free -h和df -h查看资源使用情况,如果内存不足,可能导致进程被杀死。 总结可能的问题点并按优先级排查: 1. ES节点是否正常运行,端口是否可访问。 2. Kibana目录和文件的权限是否正确。 3. 内存设置是否足够。 4. 版本兼容性问题。 5. 安全配置是否需要调整。 6. 日志文件权限和路径是否正确。 7. 网络配置是否正确,如IP和端口。 建议用户按照以下步骤进行排查: - 查看Kibana的详细日志,确认具体错误信息。 - 检查ES节点的状态和连通性。 - 检查目录权限,确保elasticsearch用户有足够权限。 - 调整内存设置,增加max-old-space-size。 - 确认版本兼容性。 - 验证网络配置和绑定地址。 如果用户能提供Kibana的日志内容,可以更准确地定位问题。例如,日志中可能会出现连接ES超时、认证失败、文件权限错误等具体信息,从而指导进一步的解决方案。</think>根据提供的配置信息和报错现象,以下是分步排查和解决问题的方案: --- ### **第一步:查看详细错误日志** Kibana启动失败时最直接的线索在日志中,默认日志路径为`/opt/kibana/logs/kibana.log`,执行以下命令: ```bash sudo tail -n 100 /opt/kibana/logs/kibana.log ``` #### **常见日志错误及解决方案:** 1. **无法连接Elasticsearch节点** ```log Unable to retrieve version information from Elasticsearch nodes ``` - **原因**:ES节点未启动、端口错误或网络不通。 - **解决**: - 检查所有ES节点是否运行:`curl http://localhost:9201/_cat/health?v` - 确保`elasticsearch.hosts`配置的端口(9201/9202/9203)与实际ES节点的HTTP端口一致。 2. **权限不足** ```log EACCES: permission denied, open '/opt/kibana/config/kibana.yml' ``` - **原因**:`elasticsearch`用户无权读取配置文件或写入日志目录。 - **解决**: ```bash sudo chown -R elasticsearch:elasticsearch /opt/kibana sudo chmod -R 750 /opt/kibana ``` 3. **内存不足** ```log FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory ``` - **原因**:Node.js内存限制过低(当前配置为`--max-old-space-size=1024`)。 - **解决**: - 修改`kibana.service`中的内存参数为2048: ```ini Environment=NODE_OPTIONS=--max-old-space-size=2048 ``` - 重启服务:`sudo systemctl restart kibana` --- ### **第二步:验证Elasticsearch连通性** 确保所有ES节点已启动且允许Kibana连接: ```bash # 检查每个节点的健康状态 curl http://localhost:9201/_cat/health?v curl http://localhost:9202/_cat/health?v curl http://localhost:9203/_cat/health?v # 如果ES启用了安全认证(如xpack),需在kibana.yml中配置用户名密码: elasticsearch.username: "kibana_system" elasticsearch.password: "your_password" ``` --- ### **第三步:检查目录权限** Kibana目录的属主应为`elasticsearch`用户: ```bash # 修复权限(递归修改属主和权限) sudo chown -R elasticsearch:elasticsearch /opt/kibana sudo find /opt/kibana -type d -exec chmod 750 {} \; sudo find /opt/kibana -type f -exec chmod 640 {} \; ``` --- ### **第四步:验证网络配置** 1. **检查`server.host`和`server.publicBaseUrl`** - `server.host: "0.0.0.0"` 表示允许所有IP访问。 - `server.publicBaseUrl`需配置为浏览器访问的实际地址(如`http://服务器公网IP:5601`)。 2. **防火墙或SELinux拦截** ```bash # 开放5601端口 sudo firewall-cmd --add-port=5601/tcp --permanent sudo firewall-cmd --reload # 临时关闭SELinux(测试用) sudo setenforce 0 ``` --- ### **第五步:版本兼容性检查** 确保KibanaElasticsearch版本**完全一致**(如7.17.3需对应ES 7.17.3): ```bash # 查看Kibana版本 /opt/kibana/bin/kibana --version # 查看Elasticsearch版本 curl http://localhost:9201 ``` --- ### **第六步:重启服务并验证** 完成上述调整后,重启服务并观察状态: ```bash sudo systemctl daemon-reload sudo systemctl restart kibana sudo systemctl status kibana ``` --- ### **附:完整配置建议** 1. **`kibana.yml`关键配置** ```yaml server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9201", "http://localhost:9202", "http://localhost:9203"] i18n.locale: "zh-CN" logging.dest: /opt/kibana/logs/kibana.log # 显式指定日志路径 ``` 2. **`kibana.service`内存优化** ```ini Environment=NODE_OPTIONS=--max-old-space-size=2048 ``` --- 通过以上步骤,90%的Kibana启动问题可被解决。如果问题仍未解决,请提供具体的日志错误片段以便进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值