DataKit 代理¶
当 Datakit 无法访问外网时,可在内网部署一个代理将流量发送出来。本文提供俩种实现方式:
- 通过 DataKit 内置的代理服务
- 通过 Nginx 代理服务
Datakit 內置代理¶
內置 Proxy 采集器的配置,参见这里。
进入被代理 DataKit 安装目录下的 conf.d/
目录,配置 datakit.conf
中的代理服务。如下:
[dataway]
urls = ["https://openway.guance.com?token=<YOUR-TOKEN>"]
http_proxy = "http://<PROXY-IP:PROXY-PORT>"
配置好后,重启 DataKit。
测试代理效果¶
测试下代理服务是否正常:
- 通过发送 metrics 到工作空间测试
curl -x <PROXY-IP:PROXY-PORT> -v -X POST https://openway.guance.com/v1/write/metrics?token=<YOUR-TOKEN> -d "proxy_test,name=test c=123i"
如果代理服务器工作正常,工作空间将收到指标数据 proxy_test,name=test c=123i
。
Nginx¶
代理 HTTPS 流量这里 nginx 采用 4 层的透明代理方式,即需要:
- 一台可以访问外网的 nginx 的透明代理服务器
- Datakit 所在的客户机使用 hosts 文件进行域名配置
配置 Nginx
代理服务¶
# 代理 HTTPS
stream {
# resolver 114.114.114.114;
# resolver_timeout 30s;
server {
listen 443;
ssl_preread on;
proxy_connect_timeout 10s;
proxy_pass $ssl_preread_server_name:$server_port;
}
}
http {
...
}
代理 HTTP 流量这里 NGINX 采用 7 层的透明代理方式(如果不需要代理 HTTP 这段可以跳过):
# 代理 HTTP
http {
# resolver 114.114.114.114;
# resolver_timeout 30s;
server {
listen 80;
location / {
proxy_pass http://$http_host$request_uri; # 配置正向代理参数
proxy_set_header Host $http_host; # 解决如果 URL 中带 "." 后 nginx 503 错误
proxy_buffers 256 4k; # 配置缓存大小
proxy_max_temp_file_size 0; # 关闭磁盘缓存读写减少 I/O
proxy_connect_timeout 30; # 代理连接超时时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m; # 配置代理服务器缓存时间
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}
// ... 其它配置
}
加载新配置及测试¶
配置 Datakit
被代理机器上的域名,下面假设 192.168.1.66
是 nginx 透明代理服务器的 IP 地址。
$ sudo vi /etc/hosts
192.168.1.66 static.guance.com
192.168.1.66 openway.guance.com
192.168.1.66 dflux-dial.guance.com
192.168.1.66 static.dataflux.cn
192.168.1.66 openway.dataflux.cn
192.168.1.66 dflux-dial.dataflux.cn
192.168.1.66 zhuyun-static-files-production.oss-cn-hangzhou.aliyuncs.com
在被代理机器上,测试代理是否正常:
curl -uri 'https://openway.guance.com/v1/write/metrics?token=<YOUR-TOKEN>' -Headers @{"param"="value"} -ContentType 'application/x-www-form-urlencoded' -body 'proxy_test_nginx,name=test c=123i' -method 'POST'
注意:PowerShell 有的机器上会报 curl: 请求被中止:未能创建 SSL/TLS 安全通道。
的错误,这是因为服务端证书加密版本号在本地默认不被支持造成的,可以通过命令 [Net.ServicePointManager]::SecurityProtocol
查看支持的协议。如果想要本地支持可以做以下操作:
# 64 bit PowerShell
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
# 32 bit PowerShell
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
关闭 PowerShell 窗口,打开一个新的 PowerShell 窗口,执行以下代码查看支持的协议: