从 vnstat 获取 JSON 格式的每日数据消耗值

从 vnstat 获取 JSON 格式的每日数据消耗值

我想使用以下方法从我的 Ubuntu 机器以 Json 格式检索每日互联网使用情况维恩斯塔特。要在终端中获取每日使用情况,我使用以下命令:

vnstat -d -i wlp2s0

输出将是:

wlp2s0  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
               ,ۋ6�        60 KiB |      27 KiB |      87 KiB |    0.01 kbit/s
               ,ۋ6�    333.00 MiB |  170.16 MiB |  503.16 MiB |   47.71 kbit/s
               ,ۋ6�    626.23 MiB |   39.64 MiB |  665.87 MiB |   63.13 kbit/s
               ,ۋ6�    172.47 MiB |  177.32 MiB |  349.79 MiB |   33.16 kbit/s
               ,ۋ6�     11.88 MiB |    1.66 MiB |   13.54 MiB |    1.28 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�    380.47 MiB |   21.22 MiB |  401.69 MiB |   38.09 kbit/s
               ,ۋ6�    173.32 MiB |   14.71 MiB |  188.03 MiB |   17.83 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�         0 KiB |       0 KiB |       0 KiB |    0.00 kbit/s
               ,ۋ6�     17.49 MiB |    4.33 MiB |   21.82 MiB |    2.07 kbit/s
               ,ۋ6�        70 KiB |      73 KiB |     143 KiB |    0.01 kbit/s
               ,ۋ6�     15.12 MiB |    1.95 MiB |   17.07 MiB |    1.62 kbit/s
               ,ۋ6�     18.45 MiB |    5.86 MiB |   24.31 MiB |    3.55 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        27 MiB |       7 MiB |      34 MiB |

那么如何仅检索estimated 27 MiB | 7 MiB | 34 MiB |上述输出中的总计、rx 和 tx 值Json,格式如下:

{"daily_usage":{"rx":27,"tx":7,"total":34}}

实际上我稍后正尝试将此 json 格式传递给 python 脚本,提前谢谢大家!!

答案1

vnstat有以机器可读格式输出的选项。从man vnstat

--json mode
  Show database content for selected interface or  all  interfaces
  in  json format. All traffic values in the output are in KiB. An
  optional mode parameter can be used for limiting the  output  to
  only  selected  information.   Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.

--xml mode
  Show database content for selected interface or  all  interfaces
  in  xml  format. All traffic values in the output are in KiB. An
  optional mode parameter can be used for limiting the  output  to
  only  selected  information.   Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.

只需vnstat -i wlp2s0 --json d在 Python 中执行并解析它即可获得所需的任何字段。不需要-d,并且将被忽略,因为--json选项接受mode参数。

答案2

@Sjn73,所以,@muru 的想法是正确的。

我唯一想评论的(但目前还不能)是,你可以简单地写:vnstat --json d

这会将mode文档中提到的内容切换为仅限每日。请注意,这是对标志的输入--json,与标志不同-d

Everything  is  shown by default.
  Setting mode to 'h' will output only hours, 'd' days, 'm' months
  and 't' the top 10.

答案3

#!/bin/bash

#get the last line
IN=$(vnstat -d | (tail -n1))
#remove estimated
INR=${IN//estimated}
#convert to array
arrOUT=(${INR//|/ })

#format the output
OUTPUT="{\"daily_usage\":{\"rx\": ${arrOUT[0]}, \"tx\": ${arrOUT[2]}, \"total\": ${arrOUT[4]} }"
OUTPUT2="{\"daily_usage\":{\"rx\": ${arrOUT[0]} ${arrOUT[1]}, \"tx\": ${arrOUT[2]} ${arrOUT[3]}, \"total\": ${arrOUT[4]} ${arrOUT[5]} }"

#pick one
echo $OUTPUT
echo $OUTPUT2
  • 保存到your_script.sh
  • 更改文件权限以使其可执行
  • 运行为bash your_script.sh

相关内容