首页 > 解决方案 > 通过 Grafana 数据源插件的路由进行数据源身份验证

问题描述

我正在尝试为Grafana编写一个自定义数据源插件,该插件将请求 Azure AD 身份验证令牌并将它们与查询一起发送到我的数据库,该数据库将接受令牌并返回对查询的响应。

我注意到 Grafana 的 Azure Monitor 插件通过要求用户输入其客户端 ID、客户端密码和租户 ID 并通过其plugin.json文件的 routes{} 部分使用它来执行相同的操作。

我已遵循此方法,但出现错误:

502 网关错误。

我的文件托管在这里

进行 HTTP 调用的 datasource.js 的基本部分是

query(options) {

    const csl = document.getElementById("csl").value;
    var queries = _.filter(options.targets, item => {
        return item.hide !== true;
      }).map(item => {
        return {
          refId: item.refId,
          intervalMs: options.intervalMs,
          maxDataPoints: options.maxDataPoints,
          format: item.format,
        };
      });
    if (queries.length <= 0) {
      return this.$q.when({data: []});
    }
    return this.backendSrv.datasourceRequest({
        url: `api/datasources/proxy/${this.id}/kusto/query`,
        method: 'POST',
        headers: this.headers,
        data: {
            db: this.database,
            csl: csl,
            from: options.range.from,
            to: options.range.to,
            queries: queries,
        }
    });
}

其中 kusto 是我的 plugin.json 中定义的路由路径。

是什么导致了这个错误?我的 datasource.js 或 plugin.json 有错误吗?错误发生在客户端还是服务器端?

标签: javascriptgrafanagrafana-api

解决方案


首先是Grafana 现在有一个 Kusto(现在重命名为 Azure 数据资源管理器)数据源。所以不确定你是否需要你的插件了。

您的错误的原因是您在 plugin.json 文件中的路由与您正在进行的调用不匹配。您发出的ping 请求是 HTTP GET 但路由匹配 POST 请求。

Grafana 中的错误处理在这里肯定会更好——在日志中你会看到一个错误,上面写着:

http: proxy error: unsupported protocol scheme ""

由于在插件路由中找不到匹配项,URL 字段被设置为空字符串。然后,当 Grafana 中的数据源代理尝试创建要发送到 Azure 的 url 时,它会失败,因为没有指定协议(http 或 https)。

插件路由和身份验证文档:http ://docs.grafana.org/plugins/developing/auth-for-datasources/


推荐阅读