map $request_time $request_time_nanos {
# Simple case for 0.000
~^0\.000$ 0;
# If 0 before decimal place, must remove leading zeros after it, before adding 6 zeros
~^0\.(?:0*)([^0].*)$ $1000000;
# Otherwise just concatenate the full pre- & post-decimal parts, before adding 6 zeros
~^([^0][^.]*)\.(.*)$ $1$2000000;
}
3条答案
按热度按时间ogq8wdun1#
网络服务器不是一个计算器或统计程序。它的记录功能是提供原始数据,你可以做你的分析。如果你的分析程序是不能转换微秒到秒,你应该货比三家,为其他软件。在任何情况下,这是不现实的期望一个程序的记录功能,以执行单位转换为您。记录的目的不是格式化,但却无法在不影响其核心功能性能的情况下记录所做的工作。
7rtdyuoh2#
如果你使用LogStash(ELK堆栈)这样的报告器,你可以在解析日志时做一些计算。下面是我在Nginx的Logstash过滤器中将秒转换为毫秒的例子:
希望这个有用。
xam8gpfp3#
正如注解中所指出的,
$request_time
已经是以秒为单位,但是可以在nginx配置中完全转换为另一个单位,如下所示。我知道这是一个老问题,但它似乎得到了很多流量,所以也许下面将帮助其他人谁,像我一样,可能想转换为一个不同的单位,在我的情况下纳秒(虽然如果你想毫秒,然后简单地省略6尾随零)。
这对于发送到Elastic
event.duration
字段很有用--为了避免Elastic端的摄取管道或类似操作(要乘以1000000),您可以改为执行一些可怕的正则表达式,如下所示。$request_time
总是用零填充到小数点后3位,这一点很有帮助,所以在常见情况下,您可以添加6个零-但您还必须处理前导零(小数点前后),以确保结果不会以任何前导零结束:转换示例(插入逗号仅为便于阅读):