使用python客户端将点写入influxDB,由于缺少字段而引发错误

2024-10-05 11:38:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将点写入influxDB TSDB,但在写入过程中出现错误:

  File "/home/lab/prometheus-clients-env/lib/python3.5/site-packages/influxdb/client.py", line 271, in request
    raise InfluxDBClientError(response.content, response.status_code)
influxdb.exceptions.InfluxDBClientError: 400: {"error":"partial write: unable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/0,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/7,receiving-interface-name=TenGigE0/0/0/0,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/2,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/8,receiving-interface-name=TenGigE0/0/0/2,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/3,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/9,receiving-interface-name=TenGigE0/0/0/3,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/4,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/11,receiving-interface-name=TenGigE0/0/0/4,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/5,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/18,receiving-interface-name=TenGigE0/0/0/5,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/6,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/10,receiving-interface-name=TenGigE0/0/0/6,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/7,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/19,receiving-interface-name=TenGigE0/0/0/7,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields\nunable to parse 'Cisco-IOS-XR-cdp-oper-cdp,address-type=ipv4,capabilities=R,device-id=ASR9006-LER1,duplex=cdp-dplx-full,interface-name=TenGigE0/0/0/7,ipv4-address=100.8.44.1,node-name=0/0/CPU0,platform=cisco\\ ASR9K\\ Series,port-id=TenGigE0/1/0/7,receiving-interface-name=TenGigE0/0/0/0,system-name=ASR9006-LER1,version=Cisco\\ IOS\\ XR\\ Software\\,\\ Version\\ 6.2.3[Default]': missing fields dropped=0"}

我有以下JSON观点:

^{pr2}$

我有以下代码:

client = InfluxDBClient('server', 8086)
tags = {}
fields = {}
points = []
for key in raw_metric.keys():
  if isinstance(raw_metric[key], int):
    fields[key] = raw_metric[key]
  else:
    tags[key] = raw_metric[key]
  post_data = {"measurement" : 'Cisco-IOS-XR-cdp-oper-cdp',
               "fields" : fields,
               "tags" : tags
            }
  points.append(post_data)
if not client.write_points(points):
  exit(1)

原始度量如下所示:

{'interface-name': 'TenGigE0/0/0/0', 'node-name': '0/0/CPU0', 'version': 'Cisco IOS XR Software, Version 6.2.3[Default]\nCopyright (c) 2017 by Cisco Systems, Inc.', 'port-id': 'TenGigE0/1/0/7', 'address-type': 'ipv4', 'header-version': 2, 'platform': 'cisco ASR9K Series', 'hold-time': 137, 'duplex': 'cdp-dplx-full', 'ipv4-address': '100.8.44.1', 'system-name': 'ASR9006-LER1', 'native-vlan': 0, 'receiving-interface-name': 'TenGigE0/0/0/0', 'device-id': 'ASR9006-LER1', 'capabilities': 'R'}

字段如下所示:

{'hold-time': 137, 'header-version': 2, 'native-vlan': 0}

标记如下所示:

{'interface-name': 'TenGigE0/0/0/0', 'node-name': '0/0/CPU0', 'version': 'Cisco IOS XR Software, Version 6.2.3[Default]\nCopyright (c) 2017 by Cisco Systems, Inc.', 'address-type': 'ipv4', 'receiving-interface-name': 'TenGigE0/0/0/0', 'platform': 'cisco ASR9K Series', 'port-id': 'TenGigE0/1/0/7', 'duplex': 'cdp-dplx-full', 'ipv4-address': '100.8.44.1', 'system-name': 'ASR9006-LER1', 'device-id': 'ASR9006-LER1', 'capabilities': 'R'}

你知道我为什么会出现部分写入错误吗?在


Tags: nameidfieldsaddressversiontypeciscointerface
1条回答
网友
1楼 · 发布于 2024-10-05 11:38:59

Cisco IOS XR Software这样的标记值包含空格。
您必须用双引号将它们包装起来,这样influxdb才能正确地插入。在

INSERT Cisco-IOS-XR-cdp-oper-cdp,version="Cisco IOS XR Software" hold-time=137 ...

尝试在JSON中添加双引号,其中标记值包含空格:

^{pr2}$

注意:据我所知,JSON标准要求用双引号(不是单引号)来包装字段名/值。在

相关问题 更多 >

    热门问题