在 grafana(它使用 Go 模板進行 Loki 行模板)中,我想劃分一個欄位(毫秒)并獲得一個浮點結果。
這是我想做的:
| logfmt | line_format "{{ .microsec | float64 | div 1000 | printf \"%6.3f\" }}ms"
但是,這顯然不起作用,因為div它是整數除法函式。
以下確實有效(但不劃分數字):
| logfmt | line_format "{{ .microsec | float64 | printf \"%8.0f\" }}μs"
如何獲得毫秒格式的輸出?
編輯:還有一個divf功能,但檔案說“執行整數除法”。而且我得到了非常奇怪的結果(所以我不確定如何使用它):
{{ .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
uj5u.com熱心網友回復:
Grafana 檔案指出:
Loki 2.3 中的模板階段添加了所有小枝函式(以及下面描述的函式)。
浮點數學函式包括一個divf執行浮點除法的函式。
引自text/templates:管道:
可以通過使用管道字符“|”分隔命令序列來“鏈接”管道。在鏈式管道中,每個命令的結果作為以下命令的最后一個引數傳遞。管道中最終命令的輸出是管道的值。
所以當你這樣做時:
{{ .microsec | float64 | divf 1000 | float64 | printf "%6.3f" }}ms
您實際上是將 1000 除以微秒值。顯然你想要相反的,所以簡單地做:
{{ divf .microsec 1000 | printf "%6.3f" }}ms
另請注意,在不支持浮點除法的情況下(意味著沒有divf函式),您仍然可以使用整數運算來完成。
{{ printf "%d.d" (div .microsec 1000) (mod .microsec 1000) | float64 }}ms
有關更多詳細資訊,請參閱如何從 HELM 模板除法操作中獲取浮點結果?
uj5u.com熱心網友回復:
感謝@icza的幫助,我再次嘗試了“divf”功能,并且以下作業:
{{ divf .microsec 1000 | printf \"%6.3f\" }}ms
在這一點上我仍然不明白為什么以下似乎回傳不正確的結果:
{{ .microsec | float64 | divf 1000 | float64 | printf \"%6.3f\" }}ms
我也不知道在哪里divf可以找到有關的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463926.html
上一篇:根據陣列中的Id組成一個新陣列——Objective-c
下一篇:Gorm和多對多關系
