在grafana(它使用go模板进行Loki线模板制作)中,我想划分一个字段(毫秒)并得到一个浮点结果.

以下是我想做的:

| logfmt | line_format "{{ .microsec | float64 | div 1000 | printf \"%6.3f\" }}ms"

然而,这显然不起作用,因为div是整数除法函数.

以下方法确实有效(但不划分数字):

| logfmt | line_format "{{ .microsec | float64 | printf \"%8.0f\" }}μs"

如何获得毫秒格式的输出?

编辑:

{{ .microsec | float64 | printf \"%8.0f\" }}μs {{  .microsec | float64 | divf 1000 | printf \"%6.3f\" }}ms?divf
6332μs   0.158ms?divf
22959μs  0.044ms?divf 
7034μs   0.142ms?divf 

推荐答案

Grafana docs.声明:

所有sprig functions个都已添加到Loki 2.3中的模板阶段(以及下面描述的功能).

Float Math Functions还包括一个divf函数来执行浮点除法.

引用text/templates: Pipelines:

可以通过使用管道字符"|"分隔命令序列来"链接"管道.在链式管道中,the result of each command is passed as the last argument of the following command.管道中最终命令的输出是管道的值.

所以当你这么做的时候:

{{ .microsec | float64 | divf 1000 | float64 | printf "%6.3f" }}ms

实际上是把1000除以微秒.显然,你想要的是相反的结果,所以简单地做:

{{ divf .microsec 1000 | printf "%6.3f" }}ms

还要注意的是,在不支持浮点除法的情况下(也就是说没有divf函数),您仍然可以使用整数算术进行除法.

{{ printf "%d.%03d" (div .microsec 1000) (mod .microsec 1000) | float64 }}ms

有关更多详细信息,请参阅How to get a float result from a HELM template division operation?

Go相关问答推荐

Go PQ驱动程序无法使用默认架构进行查询

Python样式生成器实现为通道:过早读取

如何使用 Go 连接到非默认 firestore 数据库?

go aws-lambda 与 terraform 中的 exec 格式错误

仅使用公共 api 对 alexedwards/scs 进行简单测试

Go test "-run -" 标志执行测试更快

如何测试光纤参数

Exchange Web 服务 - 使用 soap xml 请求查找所有未读邮件

使用 LINQ 对内部数组进行排序

golang 上基于标头的版本控制

我突然无法再将我的 GoLang 应用程序部署到 Google AppEngine

从数据库中带有 imageurl 的文件夹中获取图像,并在我的浏览器中用 golang 中的 echo 显示

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

在 Golang 中,如何将接口作为泛型类型与 nil 进行比较?

在 Go 中将十六进制转换为带符号的 Int

如何扩充 ResponseWriter 的 Header() 返回的 map

gopls 为 github.com/Shopify/sarama 返回错误gopls: no packages returned: packages.Load error

Scanner.Buffer - 最大值对自定义拆分没有影响?

Go 赋值涉及到自定义类型的指针

空接口与泛型接口有何不同?