前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在自己的应用里集成grafana

在自己的应用里集成grafana

作者头像
JadePeng
发布2021-09-10 11:26:08
4.8K1
发布2021-09-10 11:26:08
举报
文章被收录于专栏:JadePeng的技术博客

grafana 是一款非常优秀的可视化报表工具,有设计精良的可视化工具,今天来聊一聊如何将grafana集成到自己的应用中。

原理是:

  • grafana允许iframe访问,开启auth.proxy, java 后端鉴权后代理grafana
  • 前端通过iframe访问后端代理过的grafana

grafana配置

要集成,可以选用iframe集成方式,需要配置可以embedding

代码语言:javascript
复制
[security]
allow_embedding = true

另外,还需要考虑认证的问题,可以开启auth.proxy,通过http头传入认证信息:

代码语言:javascript
复制
[security]
allow_embedding = true

[auth.proxy]
# Defaults to false, but set to true to enable this feature
enabled = true
# HTTP Header name that will contain the username or email
header_name = Auth
# HTTP Header property, defaults to `username` but can also be `email`
header_property = username
# Set to `true` to enable auto sign up of users who do not exist in Grafana DB. Defaults to `true`.
auto_sign_up = true
# Define cache time to live in minutes
# If combined with Grafana LDAP integration it is also the sync interval
sync_ttl = 60
# Limit where auth proxy requests come from by configuring a list of IP addresses.
# This can be used to prevent users spoofing the X-WEBAUTH-USER header.
# Example `whitelist = 192.168.1.1, 192.168.1.0/24, 2001::23, 2001::0/120`
whitelist =
# Optionally define more headers to sync other user attributes
# Example `headers = Name:X-WEBAUTH-NAME Role:X-WEBAUTH-ROLE Email:X-WEBAUTH-EMAIL Groups:X-WEBAUTH-GROUPS`
headers =
# Check out docs on this for more details on the below setting
enable_login_token = false
default_theme = light

由于默认是black主题,集成到系统里效果不美观,可以设置默认主题为light。

为了方便外部认证proxy,可以设置下sub_path 和 root_url

代码语言:javascript
复制
[server]
root_url = http://0.0.0.0:3000/grafana
serve_from_sub_path=true

java后端配置

引入httpproxy

代码语言:javascript
复制
        <dependency>
            <groupId>org.mitre.dsmiley.httpproxy</groupId>
            <artifactId>smiley-http-proxy-servlet</artifactId>
            <version>1.11</version>
        </dependency>

添加配置:

代码语言:javascript
复制
proxy:
  grafana:
    servlet_url: /grafana/*
    target_url: http://grafana_url/grafana

添加代理Servlet:

代码语言:javascript
复制
/**
 * 代理Grafana 用做管理面板
 */
public class GrafanaProxyServlet extends ProxyServlet {

    @Override
    protected HttpResponse doExecute(HttpServletRequest servletRequest, HttpServletResponse servletResponse,
                                     HttpRequest proxyRequest) throws IOException {
        String currentUser = SecurityUtils.getCurrentUserLogin().orElse(null);
        if(currentUser == null){
            return null;
        }
		// 设置用户
        proxyRequest.setHeader("Auth", currentUser);
        return super.doExecute(servletRequest, servletResponse, proxyRequest);
    }
}

注册servlet:

代码语言:javascript
复制
@Configuration
public class ProxyServletConfiguration {
    /**
     * 读取配置文件中路由设置
     */
    @Value("${proxy.grafana.servlet_url}")
    private String servlet_url;

    /**
     * 读取配置中代理目标地址
     */
    @Value("${proxy.grafana.target_url}")
    private String target_url;

    @Bean
    public ServletRegistrationBean proxyServletRegistration() {
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new GrafanaProxyServlet(), servlet_url);
        //设置网址以及参数
        Map<String, String> params = ImmutableMap.of("targetUri", target_url, "log", "true");
        registrationBean.setInitParameters(params);
        return registrationBean;
    }
}

前端配置

新增一个vue页面,iframe地址填写后端代理过的grafana面板。

代码语言:javascript
复制
<template>
  <div class="grafana">
    <iframe
      :src="url"
      width="100%"
      height="1000px"
      frameborder="0"></iframe>
  </div>
</template>

<script>
export default {
  data() {
    return {
      url: '/grafana/d/FN0S0R47z/qian-duan-ri-zhi-mai-dian?orgId=1&kiosk&from=now-6h&to=now'
    }
  }
}
</script>

debug的时候,可以配置webpack的proxy:

代码语言:javascript
复制
      '/grafana': {
        target: 'http://172.31.161.36:13000',
        changeOrigin: true,
        headers: {
          'Auth': 'viewer'
        },
        pathRewrite: {
        }
      },

headers 添加Auth认证头。

集成效果:

集成效果
集成效果
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • grafana配置
  • java后端配置
  • 前端配置
相关产品与服务
Grafana 服务
Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档