结合上文iframe嵌套grafana面板后发现grafana每次仍然需要登录,十分麻烦,如果能够无需登录访问嵌套面板也更有意义。
免登录有两种方案实现:
grafana配置无登录访问
优点:配置简单,缺点是不安全
容器中配置env GF_AUTH_ANONYMOUS_ENABLED=true 即可
通过grafana api_key 来实现访问
通过api_key的方式会比第一种方式更加安全,但配置较为复杂,因为api key访问需要在请求的header 里添加认证,所以我们还需要接入nginx的方式来注入header
1. 添加API Key
grafana dashboard => Configuration => Api Keys => Add Api Key 可设置过期时间
2. 创建并配置nginx
nginx地址为 https://xxx.com #下列配置需要替换为实际自己的地址
nginx主要配置
location /grafana/ {
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods '*';
add_header Access-Control-Allow-Credentials true;
set $auth "";
if ($host ~* "(xxx.com)|(localhost)|(127.0.0.1)")
{
set $auth 'Bearer [[your_api_key]]';
}
if ($request_method = OPTIONS) {
return 200;
}
proxy_ssl_server_name on;
proxy_pass [[your_grafana_url]];
proxy_read_timeout 1800s;
proxy_set_header Authorization $auth;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
[[your_api_key]]替换为你自己的key, https://xxx.com替换为自己的nginx地址,[[your_grafana_url]]替换为自己的grafana地址。如果grafana 地址是http则需要去掉proxy_ssl_server_name on参数跳过ssl验证。
如果访问报错:a frame because it set ‘X-Frame-Options’ to ‘deny’ 或者其他X-Frame-Options错误,需要设置为Allowall,执行curl -I your_grafana_url 可以看到x-frame-options值,可以在nginx中添加配置:
# 清除上游的 X-Frame-Options 头
proxy_hide_header X-Frame-Options;
# 添加 X-Frame-Options 头
add_header X-Frame-Options "ALLOWALL";
3. 配置grafana
配置好nginx后,可以通过https://xxx.com/grafana测试是否成功跳转在进行下一步。
添加grafana配置:root_url及支持子目录静态文件
配置文件添加:
[server]
## 添加为nginx地址 及支持子目录
root_url = https://xxx.com/grafana/
serve_from_sub_path = true
或者环境变量添加:
- name: GF_SERVER_ROOT_URL
value: https://xxx.com/grafana/
- name: GF_SERVER_SERVE_FROM_SUB_PATH
value: "true"