Kibana 卡在加载屏幕上 [更新 - Nginx 仅提供部分 JS 文件]
Kibana stuck on loading screen [UPDATE - Nginx only serving partial JS file]
Kibana 未正常启动。当我打开控制台时,它似乎是 javascript 资源问题。当我直接打开 js 文件时(在控制台中单击它们的 link),它们似乎不完整并且被突然切断。不确定这是浏览器文件限制还是我的文件以某种方式被截断了?请看下面的图片,向您展示我所看到的。
chrome 中所见的文件。根据 chrome 的加载方式,这是文件的最底部。
我已经重启了 kibana 看看是否能解决问题,运气不好。
我认为浏览器在 js 文件中有最大行数限制。我不确定为什么 kibana 没有缩小 js 文件?它是否以某种开发模式启动?
问题总结
我想我已经发现 kibana 未加载的原因是因为 js 未完全加载,这会将我的问题更改为如何让我的所有 javascript 加载?
更新
我找到了kibana bundles文件夹中的JS文件,发现文件完好无损。这确实是浏览器加载完整文件的问题。我很困惑为什么突然间这些文件太长而无法被浏览器加载?两周前工作正常。仍在尝试弄清楚如何让 chrome 加载文件。
按照@asettouf 的建议,我已经删除(备份)/opt/kibana/optimize
目录中的 bundles
文件夹并再次启动 kibana。这确实 re-generate bundles
文件夹,但文件是相同的,这意味着我仍然有同样的问题。为什么 Kibana 在捆绑缓存文件时没有缩小 js?
我的kibana.yml。我认为将 link 粘贴到它更干净:
返回打开详细日志记录,这是我删除优化文件夹并重新启动的输出。对我来说没有什么特别的错误信息。
/var/log/kibana/kibana.log
出于隐私和安全原因,将主机名替换为 localhost
我认为这是webpack模块没有正确编译JS的错误。但是我对调试它的模块了解不够。
优化文件夹中有问题的文件是:
commons.bundle.js 即 65723 行
kibana.bundle.js 在 108950 行
这些远未优化,文件中的内容未缩小。
curl -v localhost:5601
的结果
直接向 KIBANA JS 资源发出 CURL 请求
我可以确认 curl -ukibanaadmin -v http://localhost/bundles/commons.bundle.js
returns 完整的 108950 行 JS 文件和 curl -ukibanaadmin -v http://actual_kibana_hostname/bundles/commons.bundle.js
returns 与我的浏览器相同的内容(行数)。
根据这些信息,我可以假设这根本不是 Kibana 问题。正如@val 所提到的,它可能是 nginx 中的一个设置,它阻止整个文件被提供,除非被 localhost 访问。
我想我可以排除 Cloudflare,因为当我直接从浏览器访问我的服务器时仍然遇到问题。
感谢到目前为止大家的建议和帮助。越来越接近解决我的问题。我将对 Nginx 及其设置做更多的研究。
NGINX 更新
Nginx 似乎只加载了我的 havascript 文件的前 72kbs。我搜索了所有 nginx 配置文件,但在任何地方都看不到此设置。我添加了
之类的东西
location / {
...
proxy_max_temp_file_size 1m;
...
}
和
location / {
...
sendfile on;
sendfile_max_chunk 1m;
...
}
但我仍然无法覆盖这个只允许加载文件第一部分的奇怪设置。
连接使用 nginx proxy_pass
将端口 80
转发到 kibanas 端口“5601”。我觉得可能有一个设置可以限制通过代理传输文件?只是不知道在哪里可以找到它。
proxypass 连接看起来像:
server {
listen 80;
server_name logs.mydomain.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我的默认 nginx 设置已发布在此处。
/etc/nginx/nginx.conf
我已经尝试添加 sendfile_max_chunk 512k
并将 worker_processes
从 4 更改为 2。任何其他配置都已经存在。我不是最初设置 ELK 堆栈的人。
经过上述更改后,它看起来像这样:
/etc/nginx/nginx.conf
返回错误 - 磁盘 SPACE 更新
这个问题又回来了。当我检查虚拟机运行状况时,我注意到磁盘驱动器已满。 Elasticsearch 每天都会在错误日志中记录一些价值 GBs
的文本。我还没有完全确定为什么弹性搜索会淹没错误日志。
但我认为过度使用磁盘 space 是导致此错误的原因。 Nginx 可能会检测到这一点并切换到最小安全配置,该配置只允许每个文件提供 72kbs 的数据。
当我清除过多的日志时,我停止获取 incmplete js 错误无需重新启动 nginx
或 kibana
.
由于您是通过代理访问 Kibana,因此您需要绕过代理并查看问题是否仍然存在,即比较
的加载时间
// through proxy
curl -v kibana_host/bundles/commons.bundle.js
curl -v kibana_host/bundles/kibana.bundle.js
// bypass proxy
curl -v localhost:5601/bundles/commons.bundle.js
curl -v localhost:5601/bundles/kibana.bundle.js
如果绕过代理时加载时间较短,那么您就知道这不是 Kibana 问题,而是与代理配置方式有关。
更新
由于我们已将其缩小为代理问题,请尝试使用此更新您的 nginx 配置
sendfile_max_chunk 512k
worker_processes 2
更新 2
尝试对您的 nginx 配置进行另一种修改:
proxy_buffering: off;
Kibana 未正常启动。当我打开控制台时,它似乎是 javascript 资源问题。当我直接打开 js 文件时(在控制台中单击它们的 link),它们似乎不完整并且被突然切断。不确定这是浏览器文件限制还是我的文件以某种方式被截断了?请看下面的图片,向您展示我所看到的。
chrome 中所见的文件。根据 chrome 的加载方式,这是文件的最底部。
我已经重启了 kibana 看看是否能解决问题,运气不好。
我认为浏览器在 js 文件中有最大行数限制。我不确定为什么 kibana 没有缩小 js 文件?它是否以某种开发模式启动?
问题总结
我想我已经发现 kibana 未加载的原因是因为 js 未完全加载,这会将我的问题更改为如何让我的所有 javascript 加载?
更新
我找到了kibana bundles文件夹中的JS文件,发现文件完好无损。这确实是浏览器加载完整文件的问题。我很困惑为什么突然间这些文件太长而无法被浏览器加载?两周前工作正常。仍在尝试弄清楚如何让 chrome 加载文件。
按照@asettouf 的建议,我已经删除(备份)/opt/kibana/optimize
目录中的 bundles
文件夹并再次启动 kibana。这确实 re-generate bundles
文件夹,但文件是相同的,这意味着我仍然有同样的问题。为什么 Kibana 在捆绑缓存文件时没有缩小 js?
我的kibana.yml。我认为将 link 粘贴到它更干净:
返回打开详细日志记录,这是我删除优化文件夹并重新启动的输出。对我来说没有什么特别的错误信息。
/var/log/kibana/kibana.log
出于隐私和安全原因,将主机名替换为 localhost
我认为这是webpack模块没有正确编译JS的错误。但是我对调试它的模块了解不够。
优化文件夹中有问题的文件是:
commons.bundle.js 即 65723 行
kibana.bundle.js 在 108950 行
这些远未优化,文件中的内容未缩小。
curl -v localhost:5601
直接向 KIBANA JS 资源发出 CURL 请求
我可以确认 curl -ukibanaadmin -v http://localhost/bundles/commons.bundle.js
returns 完整的 108950 行 JS 文件和 curl -ukibanaadmin -v http://actual_kibana_hostname/bundles/commons.bundle.js
returns 与我的浏览器相同的内容(行数)。
根据这些信息,我可以假设这根本不是 Kibana 问题。正如@val 所提到的,它可能是 nginx 中的一个设置,它阻止整个文件被提供,除非被 localhost 访问。
我想我可以排除 Cloudflare,因为当我直接从浏览器访问我的服务器时仍然遇到问题。
感谢到目前为止大家的建议和帮助。越来越接近解决我的问题。我将对 Nginx 及其设置做更多的研究。
NGINX 更新
Nginx 似乎只加载了我的 havascript 文件的前 72kbs。我搜索了所有 nginx 配置文件,但在任何地方都看不到此设置。我添加了
之类的东西location / {
...
proxy_max_temp_file_size 1m;
...
}
和
location / {
...
sendfile on;
sendfile_max_chunk 1m;
...
}
但我仍然无法覆盖这个只允许加载文件第一部分的奇怪设置。
连接使用 nginx proxy_pass
将端口 80
转发到 kibanas 端口“5601”。我觉得可能有一个设置可以限制通过代理传输文件?只是不知道在哪里可以找到它。
proxypass 连接看起来像:
server {
listen 80;
server_name logs.mydomain.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我的默认 nginx 设置已发布在此处。
/etc/nginx/nginx.conf
我已经尝试添加 sendfile_max_chunk 512k
并将 worker_processes
从 4 更改为 2。任何其他配置都已经存在。我不是最初设置 ELK 堆栈的人。
经过上述更改后,它看起来像这样:
/etc/nginx/nginx.conf
返回错误 - 磁盘 SPACE 更新
这个问题又回来了。当我检查虚拟机运行状况时,我注意到磁盘驱动器已满。 Elasticsearch 每天都会在错误日志中记录一些价值 GBs
的文本。我还没有完全确定为什么弹性搜索会淹没错误日志。
但我认为过度使用磁盘 space 是导致此错误的原因。 Nginx 可能会检测到这一点并切换到最小安全配置,该配置只允许每个文件提供 72kbs 的数据。
当我清除过多的日志时,我停止获取 incmplete js 错误无需重新启动 nginx
或 kibana
.
由于您是通过代理访问 Kibana,因此您需要绕过代理并查看问题是否仍然存在,即比较
的加载时间// through proxy
curl -v kibana_host/bundles/commons.bundle.js
curl -v kibana_host/bundles/kibana.bundle.js
// bypass proxy
curl -v localhost:5601/bundles/commons.bundle.js
curl -v localhost:5601/bundles/kibana.bundle.js
如果绕过代理时加载时间较短,那么您就知道这不是 Kibana 问题,而是与代理配置方式有关。
更新
由于我们已将其缩小为代理问题,请尝试使用此更新您的 nginx 配置
sendfile_max_chunk 512k
worker_processes 2
更新 2
尝试对您的 nginx 配置进行另一种修改:
proxy_buffering: off;