使用Prometheus/Exporter-Toolkit工具包,可以将自定义exporter快速实现TLS支持的方法
Prometheus以一种拉取式的方式进行指标收集,并且将指标作为程序(Exporter)以Web服务器的形式公开。
出口商通常与HTTP有关,但在收集敏感度量时,可能需要使用TLS以防止内容被偷窥。
在前台设置反向代理并进行TLS支持是一种方法,但如果Exporter本身能够进行TLS通信,那也是许多人会更开心的选择。
Prometheus官方的Exporter大多数都支持TLS。
-
- https://github.com/prometheus/consul_exporter
-
- https://github.com/prometheus/memcached_exporter
-
- https://github.com/prometheus/mysqld_exporter
-
- https://github.com/prometheus/node_exporter
-
- https://github.com/prometheus/haproxy_exporter
-
- https://github.com/prometheus/collectd_exporter
- https://github.com/prometheus/blackbox_exporter
如果查看README,似乎这是使用同一库的。
要使用TLS和/或基本身份验证,您需要使用–web.config.file参数传递一个配置文件。该文件的格式在exporter-toolkit存储库中有描述。
我觉得如果使用相同的机制来支持TLS,可以使用相同的配置文件,这样可以避免重复造轮子,所以决定深入研究一下。
出口工具包
这里提到的库是这个。
该代码库目前正处于WIP和实验阶段。
由于仍在进行中,使用时需要注意。
目前這個程式庫只提供了一個名為 web 的套件。
看一看里面的情况…
-
- kingpinというコマンドライン引数処理のライブラリを使うための便利関数が用意されている
http.Server.ListenAndServe を置き換える関数が用意されており、これだけでTLS対応ができる
ただし引数が違う func ListenAndServe(server *http.Server, tlsConfigPath string, logger log.Logger) error
当查看两个版本之间的差异时,可以感受到其简洁易懂的特点↓
记录器的兼容性 de
第三个参数的Logger有点棘手。
出口工具包(exporter-toolkit)所使用的是 go-kit/log 的日志记录器(Logger)。
如果这个日志记录器能够迅速准备好,那么出口工具包就可以轻松使用。
※go的logger有很多种类啊…(https://github.com/avelino/awesome-go#logging)
go-kit是什么?
这里写着为微服务设计的工具包。
https://pkg.go.dev/github.com/go-kit/kit
auth, circuitbreaker, endpoint, metrics. ratelimit, sd, tracing, transport, util などのパッケージがある。
logもその一つだが、リポジトリが分かれています。
prometheus的官方出口是使用go-kit/log的策略。
(进一步研究发现,通过promlog库可以轻松地使用go-kit/log。https://pkg.go.dev/github.com/prometheus/common/promlog)
怎么样?
偶然手头上的出口是不是 go-kit 的 Logger。这让我思考是否重新编写为 go-kit 或者找到一种能够与之共存的解决方案。
你觉得怎么样?我稍微查了一下,发现了这篇文章。
使用现有的日志记录库绝对不行。
在编写库时,绝对不要使用现有的日志记录库。您的库用户想要使用您提供的功能,而不是您想要使用的日志记录库。
对,没错。
明白之事。
-
- 独自のexpoterをTLS対応するにはexpoter_toolkitを使うのが良さそう
-
- ロギングライブラリはgo-kit/log (またはpromlog)にするのが良い
- exporter_toolkitはExperimentalなので動向に注意