あなたは何をした?
領事サービスディスカバリーを試してみました。
何を見たいと思いましたか?
Docker cuslterの外部で、DockerホストIPアドレスの公開ポートにアクセスするPrometheusサーバー。
代わりに何を見ましたか?
領事サービスディスカバリは、Docker内部ネットワークにあるServiceAddressを使用します。
そのため、Prometheusサーバーはメトリックエンドポイントに到達できません。
領事サービスディスカバリの現在の実装では、アドレスの前にServiceAddressを使用します。
https://github.com/prometheus/prometheus/blob/master/discovery/consul/consul.go#L278
領事はプロメテウスの次の応答に戻ります。
[
{
"Node": "docker1",
"Address": "192.168.2.97", # Host IP
"ServiceID": "docker1:testapp:8080",
"ServiceName": "test",
"ServiceTags": [],
"ServiceAddress": "10.0.0.3", # Container IP
"ServicePort": 32814,
"ServiceEnableTagOverride": false,
"CreateIndex": 9033587,
"ModifyIndex": 9033587
}
]
PrometheusサーバーはDockerクラスターの外部で実行されています。
サーバーは、Docker内部ネットワークにあるServiceAddressに到達できません。
したがって、ServiceAddressの代わりにホストアドレスを使用することを期待しています。
この問題を解決する方法はありますか?
環境
Docker 1.11+執政官と群がる。
登録者はコンテナ情報を領事館に保管します。
# uname -srm
Linux 3.10.0-327.36.2.el7.x86_64 x86_64
# ./prometheus -version
prometheus, version 1.4.1 (branch: master, revision: 2a89e8733f240d3cd57a6520b52c36ac4744ce12)
build user: root<strong i="36">@e685d23d8809</strong>
build date: 20161128-09:59:22
go version: go1.7.3
- job_name: 'consul-test'
metrics_path: '/api/prometheus'
consul_sd_configs:
- server: '127.0.0.1:8500'
datacenter: 'dc1'
services:
- 'testapp'
strace出力
[pid 22676] connect(33, {sa_family=AF_INET, sin_port=htons(32814), sin_addr=inet_addr("10.0.0.3")}, 16) = -1 EINPROGRESS (Operation now in progress)
再ラベル付けを使用して、他のアドレスを取得できます。
@ brian-ブラジルありがとう!!
この問題は、以下のrelabelconfigで解決されました。 :+1:
relabel_configs:
- source_labels: ['__meta_consul_address', '__meta_consul_service_port']
separator: ':'
regex: '(.*)'
target_label: '__address__'
replacement: '$1'
このスレッドは、閉じられた後に最近のアクティビティがないため、自動的にロックされています。 関連するバグについては、新しい問題を開いてください。
最も参考になるコメント
@ brian-ブラジルありがとう!!
この問題は、以下のrelabelconfigで解決されました。 :+1: