Grafana 日志插件不显示日志面板

Grafana logs plugin doesn't show logs panel

我正在尝试创建一个支持日志面板的 Grafana 插件。我正在关注 directions from their website.

不幸的是,它似乎不起作用。我已将 "logs": true 添加到 plugin.json 并且正在 return 创建一个名为 "time"time 类型字段,一个名为 string 类型的字段 "level",以及一个名为 "content"string 类型的字段,下面是他们的例子。我 return 基本上与示例显示的相同。

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)中,当我加载我的插件时,如果我选择日志面板,我无法在Explore和Dashboard查询界面中获取日志面板它显示数据但不正确:

我还需要做些什么才能使日志面板正常工作吗?说明声称我只需要 return 一个类型为 time 的字段和一个类型为 string 的字段并在 plugin.json 中设置了 "logs": true,但这是行不通的。

到目前为止我能找到的唯一真正的提示是 , which suggests that maybe something about this function in that plugin 会显示数据需要如何格式化,但我不清楚阅读源代码可能是什么以及它与我的有何不同现在正在做。

ETA:看起来 问了类似的问题,但答案并没有说清楚问题是什么,因为在他们的情况下他们似乎 return 是错误类型的结果一共

我找到了部分答案。有必要在 MutableDataFrame 中包含以下内容:

meta: {
  preferredVisualisationType: 'logs',
},

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

预计到达时间:好的,关于为什么视图看起来损坏的其余答案是因为日志可视化如何决定要显示的数据。它是 in the docs,但可能没有像它应该的那样清楚地叫出来。它说:

If a data frame has more than one text field, then Grafana assumes the first field in the data frame to be the actual log line. Any subsequent text fields are treated as detected fields.

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