shell909090/influx-proxy

influxdb设置鉴权后,通过influx-proxy写入数据异常,查询数据正常

nmonz opened this issue · 12 comments

nmonz commented

curl -i -XPOST 'http://localhost:6666/write?db=test&u=aaa&p=123' --data-binary 'cpu_load_short32,host=server01,region=us-west value=0.09 1434255562000040578'
报错如下:
2019/05/08 14:21:58.469542 http.go:225: status: 401
2019/05/08 14:21:58.469610 backends.go:243: unknown error Unknown Error, maybe overloaded.
2019/05/08 14:21:58.800641 file.go:112: read error: unexpected EOF
2019/05/08 14:22:00.012223 http.go:208: write status code: 401
2019/05/08 14:22:00.012443 http.go:215: error response: {"error":"unable to parse authentication credentials"}
是什么原因呢?

当然是backend尚未支持用户名密码。
https://github.com/shell909090/influx-proxy/blob/master/backend/config.go
你可以看到配置里根本不支持用户名密码。
之所以查询正常,是因为查询是解析influxql然后直接发送到backend的。而写入的record都需要打散重组。这个过程中无法带着auth信息。

nmonz commented

@shell909090 那目前这个添加鉴权后,如何处理写入时的问题呢?

最低限度是修改代码。在backend中加入鉴权信息,在消息头中写入鉴权。

nmonz commented

@shell909090 对GO语言不熟,能指导下怎么修改吗?

nmonz commented

首先,修改 https://github.com/shell909090/influx-proxy/blob/master/backend/config.go 文件,在BackendConfig结构中,增加Username和Password。
其次,修改 https://github.com/shell909090/influx-proxy/blob/master/backend/http.go#L192 ,在里面加入鉴权头。
具体鉴权方法请参考 https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization/

nmonz commented

这个是可能的。但是这和我们原始的设计就出现偏差了。我们的原始设计里,多个backend只负责数据存储,因此鉴权是在proxy层完成的。这层鉴权有设计,但是始终没有实现完成。而你的预想模式里,用户名密码会被穿透到后面的backend去。这会导致一些问题,例如如何在多个backend中同步新建用户/修改密码。或者是用户密码在多个backend中不一致导致写入时对时错。
你希望的东西和这个PR非常类似。 #85 你可以等待这个PR进入dev/master,或者直接拉取上游分支自行修改。

nmonz commented

这个不是PR,所以没有diff,看起来不是很清晰。粗看的话,应该就是这个样子。

nmonz commented

在http请求前,先把请求内容dump出来看看?