首页 > 解决方案 > 如何计算IP地址的寿命?

问题描述

现在我修改了 crontab 的 shell,它每 10 分钟运行一次,只有 ip 改变,它写入 influxdb,数据库看起来像:

我可以计算无 NULL 数据的 ELAPSED 时间吗?

> select * from "exec_wanip"
name: exec_wanip
time                host    value
----                ----    -----
1542951090000000000 monitor
1542951140000000000 monitor
1542951150000000000 monitor 118.114.187.199
1542951160000000000 monitor
1542951170000000000 monitor
1542951180000000000 monitor
1542951190000000000 monitor
1542951200000000000 monitor
1542951210000000000 monitor
1542951810000000000 monitor
1542952410000000000 monitor
1542953010000000000 monitor

我通过crontab记录WAN ip,这是influxdb中的数据,ip地址是可变的。

如何计算每个 IP 地址的生命周期?

> select * from exec_wanip
name: exec_wanip
time                host    value
----                ----    -----
1542856250000000000 monitor 118.114.187.208
1542856850000000000 monitor 118.114.187.208
1542857450000000000 monitor 118.114.187.208
1542858050000000000 monitor 118.114.187.208
1542858650000000000 monitor 118.114.187.208
1542859250000000000 monitor 118.114.187.208
1542859850000000000 monitor 118.114.187.208
1542860450000000000 monitor 118.114.187.208
1542861050000000000 monitor 118.114.187.208
1542861650000000000 monitor 118.114.187.208
1542862250000000000 monitor 118.114.187.208
1542862850000000000 monitor 118.114.187.208
1542863450000000000 monitor 118.114.187.208
1542864050000000000 monitor 118.114.187.208
1542864650000000000 monitor 118.114.187.208
1542865250000000000 monitor 118.114.187.208

标签: influxdb

解决方案


您修改后的脚本仍未将 ip 设置为标记。
我的猜测是您实际上将空字符串存储为值 - 而不是 NULL。查询此数据:

SELECT 600*count(value) AS Lifetime_seconds FROM exec_wanip WHERE value<>''

对 WHERE 子句中的值使用过滤通常不利于 InfluxDB 的性能。我建议更改 cron 脚本以将具有这些线路协议行的数据放入您的数据库中:

exec_wanip,host=monitor,ip=118.114.187.208 value=118.114.187.208 exec_wanip,host=monitor,ip=118.114.187.199 value=118.114.187.199 ...

使用 curl POST 或 cli INSERT 等效项。

curl -XPOST " http://localhost:8086/write?db=mydb " --data-binary 'exec_wanip,host=monitor,ip=118.114.187.208 value=118.114.187.208'

curl -XPOST " http://localhost:8086/write?db=mydb " --data-binary 'exec_wanip,host=monitor,ip=118.114.187.199 value=118.114.187.199'

完成此操作后,您将能够使用如下查询计算 ip 寿命:

SELECT 600*count(value) AS Lifetime_seconds FROM exec_wanip GROUP BY ip

根据需要添加 WHERE 子句以进行时间范围选择的查询。注意:这里可以使用任何值,不一定是ip地址,例如'up'/'down'等。


推荐阅读