すべてのプロダクト
Search
ドキュメントセンター

:Go 用 ARMS エージェントに必要なネットワーク構成

最終更新日:Dec 30, 2024

Go 用 Application Real-Time Monitoring Service (ARMS) エージェントが想定どおりに動作するようにするには、ARMS エージェントを ARMS サーバーに接続する必要があります。このトピックでは、アプリケーションモニタリングを使用するために有効にする必要があるポート、エンドポイント、および CIDR ブロックについて説明します。

ポート

ポート

説明

8080

このポートは、Application Configuration Management (ACM) によって提供されます。

8848

このポートは、ACM によって提供されます。

9990

このポートは、メタデータレポート用のトレースおよびメタデータエンドポイントによって提供されます。

80

このポートは、トレース、メトリック、および継続的なプロファイリングデータレポート用のトレースおよびメタデータエンドポイント、メトリックエンドポイント、および継続的なプロファイリングエンドポイントによって提供されます。

9092

このポートは、アプリケーション診断用のトレースおよびメタデータエンドポイントによって提供されます。

コンパイル環境

コンパイル環境はインターネットまたは Alibaba Cloud の内部ネットワークに接続されている必要があり、コンパイル環境のセキュリティグループは 8080、8848、9990、80、および 443 ポートへのアウトバウンド TCP 接続を許可している必要があります。

エンドポイント

アプリケーションをアプリケーションモニタリングに接続するには、ARMS と ACM のエンドポイントを有効にする必要があります。次の表に、さまざまなリージョンにおける ARMS と ACM のエンドポイントを示します。アプリケーションが Alibaba Cloud 仮想プライベートクラウド (VPC) にデプロイされている場合、または Express Connect 回線を使用して VPC に接続されている場合は、ARMS と ACM の内部エンドポイントを使用します。アプリケーションがデータセンターまたはサードパーティのクラウドサービスにデプロイされている場合は、ARMS と ACM のパブリックエンドポイントを使用します。

各リージョンの ARMS と ACM のエンドポイントを表示する

リージョン

ARMS パブリックエンドポイント

ARMS 内部エンドポイント (VPC)

中国 (杭州)

  • arms-dc-hz.aliyuncs.com (トレースおよびメタデータ)

  • cn-hangzhou.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-hz-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-hangzhou-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-hz-internal.edas.aliyun.com (ACM)

中国 (上海)

  • arms-dc-sh.aliyuncs.com (トレースおよびメタデータ)

  • cn-shanghai.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shanghai.oss-cn-shanghai.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-sh-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-shanghai-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-sh-internal.edas.aliyun.com (ACM)

中国 (青島)

  • arms-dc-qd.aliyuncs.com (トレースおよびメタデータ)

  • cn-qingdao.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-qingdao.oss-cn-qingdao.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-qd-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-qingdao-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-qingdao.oss-cn-qingdao-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-qd-internal.edas.aliyun.com (ACM)

中国 (北京)

  • arms-dc-bj.aliyuncs.com (トレースおよびメタデータ)

  • cn-beijing.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-beijing.oss-cn-beijing.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-bj-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-beijing-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-beijing.oss-cn-beijing-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-bj-internal.edas.aliyun.com (ACM)

中国 (張家口)

  • arms-dc-zb.aliyuncs.com (トレースおよびメタデータ)

  • cn-zhangjiakou.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-zhangjiakou.oss-cn-zhangjiakou.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-zb-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-zhangjiakou-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-zhangjiakou.oss-cn-zhangjiakou-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-cn-zhangjiakou-internal.edas.aliyun.com (ACM)

中国 (フフホト)

  • dc-cn-huhehaote.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-huhehaote.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-huhehaote.oss-cn-huhehaote.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-cn-huhehaote-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-huhehaote-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-huhehaote.oss-cn-huhehaote-internal.aliyuncs.com (継続的なプロファイリング)

中国 (ウランチャブ)

  • dc-cn-wulanchabu.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-wulanchabu.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-wulanchabu.oss-cn-wulanchabu.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-cn-wulanchabu-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-wulanchabu-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com (継続的なプロファイリング)

中国 (深セン)

  • arms-dc-sz.aliyuncs.com (トレースおよびメタデータ)

  • cn-shenzhen.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-sz-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-shenzhen-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shenzhen.oss-cn-shenzhen-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-sz-internal.edas.aliyun.com (ACM)

中国 (河源)

  • dc-cn-heyuan.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-heyuan.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-heyuan.oss-cn-heyuan.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-cn-heyuan-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-heyuan-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-heyuan.oss-cn-heyuan-internal.aliyuncs.com (継続的なプロファイリング)

中国 (広州)

  • dc-cn-guangzhou.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-guangzhou.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-guangzhou.oss-cn-guangzhou.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-cn-guangzhou-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-guangzhou-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-guangzhou.oss-cn-guangzhou-internal.aliyuncs.com (継続的なプロファイリング)

中国 (成都)

  • dc-cn-chengdu.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-chengdu.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-chengdu.oss-cn-chengdu.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-cn-chengdu-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • cn-chengdu-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-chengdu.oss-cn-chengdu-internal.aliyuncs.com (継続的なプロファイリング)

中国 (香港)

  • arms-dc-hk.aliyuncs.com (トレースおよびメタデータ)

  • cn-hongkong.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-hongkong.oss-cn-hongkong.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-hk-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-hongkong-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-hongkong.oss-cn-hongkong-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-hk-internal.edas.aliyun.com (ACM)

日本 (東京)

  • arms-dc-jp.aliyuncs.com (トレースおよびメタデータ)

  • ap-northeast-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-northeast-1.oss-ap-northeast-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-jp-internal.aliyuncs.com (トレースおよびメタデータ)

  • ap-northeast-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-northeast-1.oss-ap-northeast-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-ap-northeast-1-internal.edas.aliyun.com (ACM)

シンガポール

  • arms-dc-sg.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-sg-internal.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-1.oss-ap-southeast-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-singapore-internal.edas.aliyun.com (ACM)

マレーシア (クアラルンプール)

  • dc-ap-southeast-3.arms.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-3.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-3.oss-ap-southeast-3.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-ap-southeast-3-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-3-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-3.oss-ap-southeast-3-internal.aliyuncs.com (継続的なプロファイリング)

インドネシア (ジャカルタ)

  • arms-dc-indonesia.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-5.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-5.oss-ap-southeast-5.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-indonesia-internal.aliyuncs.com (トレースおよびメタデータ)

  • ap-southeast-5-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-ap-southeast-5.oss-ap-southeast-5-internal.aliyuncs.com (継続的なプロファイリング)

ドイツ (フランクフルト)

  • arms-dc-frankfurt.aliyuncs.com (トレースおよびメタデータ)

  • eu-central-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-eu-central-1.oss-eu-central-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-frankfurt-internal.aliyuncs.com (トレースおよびメタデータ)

  • eu-central-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-eu-central-1.oss-eu-central-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-eu-central-1-internal.edas.aliyun.com (ACM)

英国 (ロンドン)

  • dc-eu-west-1.arms.aliyuncs.com (トレースおよびメタデータ)

  • eu-west-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-eu-west-1.oss-eu-west-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-eu-west-1-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • eu-west-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-eu-west-1.oss-eu-west-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-eu-west-1-internal.edas.aliyun.com (ACM)

米国 (バージニア)

  • dc-us-east-1.arms.aliyuncs.com (トレースおよびメタデータ)

  • us-east-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-us-east-1.oss-us-east-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-us-east-1-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • us-east-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-us-east-1.oss-us-east-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-us-east-1-internal.edas.aliyun.com (ACM)

米国 (シリコンバレー)

  • arms-dc-usw.aliyuncs.com (トレースおよびメタデータ)

  • us-west-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-us-west-1.oss-us-west-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-us-west-1-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • us-west-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-us-west-1.oss-us-west-1-internal.aliyuncs.com (継続的なプロファイリング)

  • arms-dc-usw.aliyuncs.com (ACM)

SAU (リヤド - パートナーリージョン)

  • dc-me-central-1.arms.aliyuncs.com (トレースおよびメタデータ)

  • me-central-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-me-central-1.oss-me-central-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • dc-me-central-1-internal.arms.aliyuncs.com (トレースおよびメタデータ)

  • me-central-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-me-central-1.oss-me-central-1-internal.aliyuncs.com (継続的なプロファイリング)

  • arms-dc-me-central-1.aliyuncs.com (ACM)

中国北部 2 Ali Gov

  • arms-dc-gov.aliyuncs.com (トレースおよびメタデータ)

  • cn-north-2-gov-1.arms.aliyuncs.com (メトリック)

  • 継続的なプロファイリングは商用利用では利用できません

  • acm.aliyun.com (ACM)

  • arms-dc-gov-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-north-2-gov-1-intranet.arms.aliyuncs.com (メトリック)

  • 継続的なプロファイリングは商用利用では利用できません

  • addr-cn-north-2-gov-1-internal.edas.aliyun.com (ACM)

中国東部 1 金融

  • arms-dc-hz-finance.aliyuncs.com (トレースおよびメタデータ)

  • cn-hangzhou-finance.arms.aliyuncs.com (メトリック)

  • 継続的プロファイリングサービスはインターネットアクセスを提供していません

  • acm.aliyun.com (ACM)

  • arms-dc-hz-finance-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-hangzhou-finance-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-hangzhou-finance.oss-cn-hzjbp-b-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-hz-internal.jbp.console.aliyun.com (ACM)

中国東部 2 金融

  • arms-dc-sh-finance.aliyuncs.com (トレースおよびメタデータ)

  • cn-shanghai-finance-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shanghai-finance-1.oss-cn-shanghai-finance-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-sh-finance-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-shanghai-finance-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shanghai-finance-1.oss-cn-shanghai-finance-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-cn-shanghai-finance-1-internal.edas.aliyun.com (ACM)

中国南部 1 金融

  • arms-dc-sz-finance.aliyuncs.com (トレースおよびメタデータ)

  • cn-shenzhen-finance-1.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shenzhen-finance-1.oss-cn-shenzhen-finance-1.aliyuncs.com (継続的なプロファイリング)

  • acm.aliyun.com (ACM)

  • arms-dc-sz-finance-internal.aliyuncs.com (トレースおよびメタデータ)

  • cn-shenzhen-finance-1-intranet.arms.aliyuncs.com (メトリック)

  • arms-profiling-cn-shenzhen-finance-1.oss-cn-shenzhen-finance-1-internal.aliyuncs.com (継続的なプロファイリング)

  • addr-sz-internal.jbp.console.aliyun.com (ACM)

Curl コマンドを実行して、アプリケーションがデプロイされているホストが ARMS と ACM のエンドポイントに接続されているかどうかを確認できます。中国 (杭州) リージョンを例に説明します。アプリケーションがデプロイされているホストにログオンし、次のコマンドを実行してネットワーク接続をテストします。

# トレースおよびメタデータのエンドポイントをテストします。HTTP コード 200 は、ネットワークにアクセスできることを示します。
curl -I -w "%{http_code}" http://arms-dc-hz.aliyuncs.com/api/checkHealth
# メタデータのエンドポイントをテストします。HTTP コード 200 は、ネットワークにアクセスできることを示します。
curl -I -w "%{http_code}" http://arms-dc-hz.aliyuncs.com:9990/api/checkHealth

# メトリックのエンドポイントをテストします。HTTP コード 200 は、ネットワークにアクセスできることを示します。
curl -I -w "%{http_code}" http://cn-hangzhou.arms.aliyuncs.com/health/readiness
説明

ACM の内部エンドポイントが提供されていない一部のリージョンでは、パブリックエンドポイントを使用する必要があります。この場合、アプリケーションはインターネットにアクセスできる必要があります。

ARMS CIDR ブロック

アプリケーションが VPC にデプロイされている場合、または Express Connect 回線を使用して VPC に接続されている場合は、ARMS 内部エンドポイントと 100.0.0.0/8 CIDR ブロックを有効にする必要があります。アプリケーションがデータセンターまたはサードパーティのクラウドサービスにデプロイされている場合は、ARMS パブリックエンドポイントが有効になっていることを確認してください。ただし、ARMS はパブリックエンドポイントの CIDR ブロックに関する詳細情報を提供していません。

ACM CIDR ブロック

ARMS エージェントは、構成を取得するために ACM エンジンに接続する必要があります。ACM エンジンの CIDR ブロックは、ACM によって提供される HTTP API とさまざまなリージョンにおける ACM エンドポイントに基づいて取得できます。CIDR ブロックは長期間変更されません。

curl 'acm.aliyun.com:8080/diamond-server/diamond'

次のコマンドを実行して、ファイアウォールが ACM エンジンの CIDR ブロックからのアクセスを許可しているかどうかを確認します。

curl -X GET "http://139.196.XX.XX:8080/diamond-server/config.co?dataId=com.ali.art.logicregion.flow.control.icbu&group=art-control-service" -i

関連する構成をクエリできない場合、ACM エンジンにアクセスできません。

参照

ネットワークの詳細については、ネットワークを参照してください。

```cpp // Copyright 2022 The CubeFS Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing // permissions and limitations under the License. package wrapper import ( "context" "fmt" "net/http" "strings" "time" "github.com/cubefs/blobstore/api/clustermgr" "github.com/cubefs/blobstore/common/rpc" "github.com/cubefs/blobstore/common/trace" ) const ( defaultDialTimeout = time.Second * 3 defaultKeepAlive = time.Minute ) // Client defines the clustermgr client interface. // 集群マネージャクライアントインターフェースを定義します。 type Client interface { // GetConfig gets config from clustermgr. // clustermgr から設定を取得します。 GetConfig(ctx context.Context, key string) (clustermgr.Config, error) // PutConfig puts config to clustermgr. // clustermgr に設定を配置します。 PutConfig(ctx context.Context, key string, value string) error // DeleteConfig deletes config from clustermgr. // clustermgr から設定を削除します。 DeleteConfig(ctx context.Context, key string) error // ListConfig lists config from clustermgr. // clustermgr から設定を一覧表示します。 ListConfig(ctx context.Context, prefix string) ([]clustermgr.ListConfig, error) // GetCluster gets cluster from clustermgr. // clustermgr からクラスタを取得します。 GetCluster(ctx context.Context, name string) (*clustermgr.ClusterInfo, error) // PutCluster puts cluster to clustermgr. // clustermgr にクラスタを配置します。 PutCluster(ctx context.Context, cluster *clustermgr.ClusterInfo) error // DeleteCluster deletes cluster from clustermgr. // clustermgr からクラスタを削除します。 DeleteCluster(ctx context.Context, name string) error // ListCluster lists cluster from clustermgr. // clustermgr からクラスタを一覧表示します。 ListCluster(ctx context.Context, prefix string) ([]clustermgr.ListCluster, error) } // Client defines the clustermgr client. // clustermgr クライアントを定義します。 type client struct { conf *clustermgr.Config httpCli *rpc.Client } // New creates clustermgr client. // clustermgr クライアントを作成します。 func New(cfg *clustermgr.Config) (Client, error) { cli := rpc.NewClient(&rpc.Config{ DialTimeout: defaultDialTimeout, KeepAlive: defaultKeepAlive, }) return &client{conf: cfg, httpCli: cli}, nil } func (c *client) GetConfig(ctx context.Context, key string) (clustermgr.Config, error) { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ConfigPrefix, key) req, err := http.NewRequest("GET", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return clustermgr.Config{}, err } var config clustermgr.Config err = c.httpCli.Do(ctx, req, &config) return config, err } func (c *client) PutConfig(ctx context.Context, key string, value string) error { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ConfigPrefix, key) req, err := http.NewRequest("PUT", url, strings.NewReader(value)) if err != nil { span.Errorf("create request failed: %v", err) return err } return c.httpCli.Do(ctx, req, nil) } func (c *client) DeleteConfig(ctx context.Context, key string) error { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ConfigPrefix, key) req, err := http.NewRequest("DELETE", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return err } return c.httpCli.Do(ctx, req, nil) } func (c *client) ListConfig(ctx context.Context, prefix string) ([]clustermgr.ListConfig, error) { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s?prefix=%s", c.conf.Address, clustermgr.ConfigPrefix, prefix) req, err := http.NewRequest("GET", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return nil, err } var configs []clustermgr.ListConfig err = c.httpCli.Do(ctx, req, &configs) return configs, err } func (c *client) GetCluster(ctx context.Context, name string) (*clustermgr.ClusterInfo, error) { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ClusterPrefix, name) req, err := http.NewRequest("GET", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return nil, err } var cluster clustermgr.ClusterInfo err = c.httpCli.Do(ctx, req, &cluster) return &cluster, err } func (c *client) PutCluster(ctx context.Context, cluster *clustermgr.ClusterInfo) error { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ClusterPrefix, cluster.Name) req, err := http.NewRequest("PUT", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return err } return c.httpCli.Do(ctx, req, nil) } func (c *client) DeleteCluster(ctx context.Context, name string) error { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s/%s", c.conf.Address, clustermgr.ClusterPrefix, name) req, err := http.NewRequest("DELETE", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return err } return c.httpCli.Do(ctx, req, nil) } func (c *client) ListCluster(ctx context.Context, prefix string) ([]clustermgr.ListCluster, error) { span := trace.SpanFromContextSafe(ctx) url := fmt.Sprintf("%s%s?prefix=%s", c.conf.Address, clustermgr.ClusterPrefix, prefix) req, err := http.NewRequest("GET", url, nil) if err != nil { span.Errorf("create request failed: %v", err) return nil, err } var clusters []clustermgr.ListCluster err = c.httpCli.Do(ctx, req, &clusters) return clusters, err } ```