百木园-与人分享,
就是让自己快乐。

通过Python将监控数据由influxdb写入到MySQL

一.项目背景

我们知道InfluxDB是最受欢迎的时序数据库(TSDB)。InfluxDB具有 持续高并发写入、无更新;数据压缩存储;低查询延时 的特点。从下面这个权威的统计图中,就可以看出InfluxDB的热度。

 InfluxDB可以作为 性能监控、应用程序指标、物联网传感器数据和实时分析等的后端存储。

我们的DB性能监控体系是基于Telegraf+InfluxDB+Grafana组件搭建,如下图所示。

 但是这个体系没有和既有的CMDB打通,例如,不清楚公司目前有多少台数据库实例已部署了监控?是不是有部分实例的监控漏掉了?而目前公司CMDB的信息都保存在了MySQL数据库中,所以,需要先实现 Influxdb 与 MySQL DB 的数据互通互联 。此功能的实现时借助Python完成的。

在此项目中,为便于说明演示,抽象简化后,需求概况为:将InfluxDB中保存的各个服务器的IP查询出来保存到指定的MySQL数据库中。进一步分解任务,因为measurement(表)为disk 存储有 Server host的数据,根据其命名规则,可host逆向拼凑出Server IP数据。

所以,此需求简化为:从InfluxDB的disk【measurement、表】中找出host【tag】对应的value,加工处理后,保存到MySQL。

二.安装运行环境遇到的错误

1.TypeError: Struct() 错误

调试时,报如下错误,查找资料发现,和python版本有关。

错误信息如下:

......
File
\"/usr/lib/python2.7/site-packages/influxdb/client.py\", line 527, in query
expected_response_code
=expected_response_code
File
\"/usr/lib/python2.7/site-packages/influxdb/client.py\", line 361, in request
raw
=False)
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 129, in unpackb
ret
= unpacker._unpack()
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 671, in _unpack
ret[key]
= self._unpack(EX_CONSTRUCT)
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 644, in _unpack
ret.append(self._unpack(EX_CONSTRUCT))
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 671, in _unpack
ret[key]
= self._unpack(EX_CONSTRUCT)
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 644, in _unpack
ret.append(self._unpack(EX_CONSTRUCT))
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 671, in _unpack
ret[key]
= self._unpack(EX_CONSTRUCT)
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 644, in _unpack
ret.append(self._unpack(EX_CONSTRUCT))
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 644, in _unpack
ret.append(self._unpack(EX_CONSTRUCT))
File
\"/usr/lib/python2.7/site-packages/msgpack/fallback.py\", line 697, in _unpack
return self._ext_hook(n, bytes(obj))
File
\"/usr/lib/python2.7/site-packages/influxdb/client.py\", line 1247, in _msgpack_parse_hook
(epoch_s, epoch_ns)
= struct.unpack(\">QI\", data)
TypeError: Struct() argument
1 must be string, not unicode

来源:https://www.cnblogs.com/xuliuzai/p/14721413.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 通过Python将监控数据由influxdb写入到MySQL

相关推荐

  • 暂无文章