1

我正在尝试创建一个支持日志面板的 Grafana 插件。我正在按照他们网站上的指示进行操作

不幸的是,它似乎不起作用。我已经添加"logs": trueplugin.json正在返回一个time名为"time"的字段、一个名为 的字段string"level"一个string名为的字段"content",并附上他们的示例。我返回的内容与示例显示的内容基本相同。

export class DataSource extends DataSourceApi<MyQuery, MyDataSourceOptions> {
  constructor(instanceSettings: DataSourceInstanceSettings<MyDataSourceOptions>) {
    super(instanceSettings);
  }

  async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse> {
    // Return a constant for each query.
    const data = options.targets.map(target => {
      const query = defaults(target, defaultQuery);
      const frame = new MutableDataFrame({
        refId: query.refId,
        fields: [
          { name: 'time', type: FieldType.time },
          { name: 'level', type: FieldType.string },
          { name: 'content', type: FieldType.string },
        ],
      });
      frame.add({ time: 1615422190000, level: 'warn', content: 'hi' });
      frame.add({ time: 1615422191000, level: 'info', content: 'bye' });
      return frame;
    });

    return { data };
  }

  async testDatasource() {
    // Implement a health check for your data source.
    return {
      status: 'success',
      message: 'Success',
    };
  }
}

然而,在 Grafana(运行最新的稳定版本,7.4.3)中,当我加载我的插件时,如果我选择日志面板,我无法在探索和仪表板查询界面中获取日志面板,它显示数据但不正确:

损坏的 grafana 原木面板

我还需要做些什么来使日志面板正常工作吗?说明声称我只需要返回一个类型time的字段和一个string带有"logs": trueset in的类型的字段plugin.json,但这不起作用。

到目前为止,我能找到的唯一真正的提示是关于 MSSQL plugin 的另一个 SO question,这表明该插件中有关此函数的某些内容可能会显示数据需要如何格式化,但我不清楚阅读源代码是什么可能是这样,它与我现在正在做的事情有什么不同。

ETA:看起来这个问题提出了类似的问题,但答案并没有说明问题是什么,因为在他们的情况下,他们似乎完全返回了错误类型的结果。

4

1 回答 1

1

我想出了部分答案。有必要在 中包含以下内容MutableDataFrame

meta: {
  preferredVisualisationType: 'logs',
},

让它在探索中“激活”。但是,我认为这不是完整的答案,因为问题中描述的仪表板面板中的视图仍然损坏,并且在浏览视图中它有点工作,但默认情况下不会拉出任何字段来显示;必须通过打开日志行并单击眼睛图标来手动打开它们以使字段可见。

ETA:好的,关于为什么视图出现损坏的其余答案是因为日志可视化如何决定要显示哪些数据。它在文档中,但可能没有像应有的那样清楚地指出。它说:

如果一个数据框有多个文本字段,则 Grafana 假定数据框中的第一个字段是实际的日志行。任何后续文本字段都被视为检测到的字段。

所以数据的格式需要一定的方式,特别是第一个字符串字段需要是“消息”来显示。它看起来像上面那样,因为我放了levelbefore content。扭转这些使其按预期工作。

于 2021-03-11T15:45:17.777 回答