From ae196972a2b57ab743168cc30c79aca49b2c0c3e Mon Sep 17 00:00:00 2001
From: Dmitrii Stepanov <d.stepanov@yadro.com>
Date: Wed, 31 May 2023 12:19:59 +0300
Subject: [PATCH 1/5] [#412] node: Update deps

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
---
 go.mod | 24 ++++++++++++++----------
 go.sum | 50 ++++++++++++++++++++++++++++++++------------------
 2 files changed, 46 insertions(+), 28 deletions(-)

diff --git a/go.mod b/go.mod
index 2c95bd41b..6c49c02b4 100644
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,10 @@ module git.frostfs.info/TrueCloudLab/frostfs-node
 go 1.19
 
 require (
-	git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230519114017-0c67b8fefa41
+	git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230531114046-62edd68f47ac
 	git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230307110621-19a8ef2d02fb
-	git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230519144724-f5b23eb22569
+	git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20230531082742-c97d21411eb6
+	git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230530135122-10482ffbed3b
 	git.frostfs.info/TrueCloudLab/hrw v1.2.0
 	git.frostfs.info/TrueCloudLab/tzhash v1.8.0
 	github.com/cheggaaa/pb v1.0.29
@@ -23,15 +24,14 @@ require (
 	github.com/panjf2000/ants/v2 v2.7.4
 	github.com/paulmach/orb v0.9.2
 	github.com/prometheus/client_golang v1.15.1
-	github.com/prometheus/client_model v0.4.0
 	github.com/spf13/cast v1.5.1
 	github.com/spf13/cobra v1.7.0
 	github.com/spf13/pflag v1.0.5
 	github.com/spf13/viper v1.15.0
 	github.com/stretchr/testify v1.8.3
 	go.etcd.io/bbolt v1.3.7
-	go.opentelemetry.io/otel v1.15.1
-	go.opentelemetry.io/otel/trace v1.15.1
+	go.opentelemetry.io/otel v1.16.0
+	go.opentelemetry.io/otel/trace v1.16.0
 	go.uber.org/zap v1.24.0
 	golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc
 	golang.org/x/sync v0.2.0
@@ -58,6 +58,8 @@ require (
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0-rc.0 // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.3 // indirect
 	github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 // indirect
 	github.com/hashicorp/golang-lru v0.6.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
@@ -83,6 +85,7 @@ require (
 	github.com/nspcc-dev/rfc6979 v0.2.0 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.7 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
+	github.com/prometheus/client_model v0.4.0 // indirect
 	github.com/prometheus/common v0.43.0 // indirect
 	github.com/prometheus/procfs v0.9.0 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
@@ -95,11 +98,12 @@ require (
 	github.com/twmb/murmur3 v1.1.7 // indirect
 	github.com/urfave/cli v1.22.13 // indirect
 	go.mongodb.org/mongo-driver v1.11.6 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 // indirect
-	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 // indirect
-	go.opentelemetry.io/otel/sdk v1.15.1 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 // indirect
+	go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 // indirect
+	go.opentelemetry.io/otel/metric v1.16.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.16.0 // indirect
 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect
 	go.uber.org/atomic v1.11.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
diff --git a/go.sum b/go.sum
index d728851b9..b9b3fde41 100644
--- a/go.sum
+++ b/go.sum
@@ -36,14 +36,16 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230519114017-0c67b8fefa41 h1:xtGsOUX8Rz0hwWIFa148URysWuD4nRHspPNbYAUc1tg=
-git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230519114017-0c67b8fefa41/go.mod h1:6wEpMfSwD5xNtQYYVHWWTHwpYuvyumyntZEzILBIXUo=
+git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230531114046-62edd68f47ac h1:a6/Zc5BejflmguShwbllgJdEehnM9gshkLrLbKQHCU0=
+git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230531114046-62edd68f47ac/go.mod h1:pKJJRLOChW4zDQsAt1e8k/snWKljJtpkiPfxV53ngjI=
 git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230307110621-19a8ef2d02fb h1:S/TrbOOu9qEXZRZ9/Ddw7crnxbBUQLo68PSzQWYrc9M=
 git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230307110621-19a8ef2d02fb/go.mod h1:nkR5gaGeez3Zv2SE7aceP0YwxG2FzIB5cGKpQO2vV2o=
 git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 h1:FxqFDhQYYgpe41qsIHVOcdzSVCB8JNSfPG7Uk4r2oSk=
 git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0/go.mod h1:RUIKZATQLJ+TaYQa60X2fTDwfuhMfm8Ar60bQ5fr+vU=
-git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230519144724-f5b23eb22569 h1:JDySbbi0MyU1fSuew0jNyWwDhrQREetHWJiSzKzXXXI=
-git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230519144724-f5b23eb22569/go.mod h1:0n2gQYkqCgiXkDzk0RLUUxoF2xX79Ke85bAiGV8cBl8=
+git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20230531082742-c97d21411eb6 h1:aGQ6QaAnTerQ5Dq5b2/f9DUQtSqPkZZ/bkMx/HKuLCo=
+git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20230531082742-c97d21411eb6/go.mod h1:W8Nn08/l6aQ7UlIbpF7FsQou7TVpcRD1ZT1KG4TrFhE=
+git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230530135122-10482ffbed3b h1:zxrMDBKALGeEI0SuxNxRlGW/JpZb/2RWywU78L5lLis=
+git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230530135122-10482ffbed3b/go.mod h1:0n2gQYkqCgiXkDzk0RLUUxoF2xX79Ke85bAiGV8cBl8=
 git.frostfs.info/TrueCloudLab/hrw v1.2.0 h1:KvAES7xIqmQBGd2q8KanNosD9+4BhU/zqD5Kt5KSflk=
 git.frostfs.info/TrueCloudLab/hrw v1.2.0/go.mod h1:mq2sbvYfO+BB6iFZwYBkgC0yc6mJNx+qZi4jW918m+Y=
 git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 h1:M2KR3iBj7WpY3hP10IevfIB9MURr4O9mwVfJ+SjT3HA=
@@ -138,6 +140,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
 github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
 github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
@@ -253,6 +256,10 @@ github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
 github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0-rc.0 h1:mdLirNAJBxnGgyB6pjZLcs6ue/6eZGBui6gXspfq4ks=
+github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0-rc.0/go.mod h1:kdXbOySqcQeTxiqglW7aahTmWZy3Pgi6SYL36yvKeyA=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.3 h1:o95KDiV/b1xdkumY5YbLR0/n2+wBxUpgf3HgfKgTyLI=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.3/go.mod h1:hTxjzRcX49ogbTGVJ1sM5mz5s+SSgiGIyL3jjPxl32E=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
 github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.2 h1:gDLXvp5S9izjldquuoAhDzccbskOL6tDC5jMSyx3zxE=
@@ -545,20 +552,22 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
 go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8=
-go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc=
-go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1 h1:XYDQtNzdb2T4uM1pku2m76eSMDJgqhJ+6KzkqgQBALc=
-go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.15.1/go.mod h1:uOTV75+LOzV+ODmL8ahRLWkFA3eQcSC2aAsbxIu4duk=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1 h1:tyoeaUh8REKay72DVYsSEBYV18+fGONe+YYPaOxgLoE=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.15.1/go.mod h1:HUSnrjQQ19KX9ECjpQxufsF+3ioD3zISPMlauTPZu2g=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1 h1:pIfoG5IAZFzp9EUlJzdSkpUwpaUAAnD+Ru1nBLTACIQ=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.15.1/go.mod h1:poNKBqF5+nR/6ke2oGTDjHfksrsHDOHXAl2g4+9ONsY=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1 h1:2PunuO5SbkN5MhCbuHCd3tC6qrcaj+uDAkX/qBU5BAs=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.15.1/go.mod h1:q8+Tha+5LThjeSU8BW93uUC5w5/+DnYHMKBMpRCsui0=
-go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI=
-go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA=
-go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY=
-go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8=
+go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s=
+go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4=
+go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 h1:t4ZwRPU+emrcvM2e9DHd0Fsf0JTPVcbfa/BhTDF03d0=
+go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0/go.mod h1:vLarbg68dH2Wa77g71zmKQqlQ8+8Rq3GRG31uc0WcWI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 h1:cbsD4cUcviQGXdw8+bo5x2wazq10SKz8hEbtCRPcU78=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0/go.mod h1:JgXSGah17croqhJfhByOLVY719k1emAXC8MVhCIJlRs=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 h1:TVQp/bboR4mhZSav+MdgXB8FaRho1RC8UwVn3T0vjVc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0/go.mod h1:I33vtIe0sR96wfrUcilIzLoA3mLHhRmz9S9Te0S3gDo=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 h1:+XWJd3jf75RXJq29mxbuXhCXFDG3S3R4vBUeSI2P7tE=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0/go.mod h1:hqgzBPTf4yONMFgdZvL/bK42R/iinTyVQtiWihs3SZc=
+go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo=
+go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4=
+go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE=
+go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4=
+go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs=
+go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw=
 go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
@@ -668,6 +677,7 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -684,6 +694,7 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
@@ -904,6 +915,7 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
 google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
 google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -933,11 +945,13 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv
 google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
 google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
 google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
 google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
+google.golang.org/grpc/examples v0.0.0-20210424002626-9572fd6faeae/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-- 
2.45.3


From 73639fc3d8951ec975eee75fd4fa11223877177e Mon Sep 17 00:00:00 2001
From: Dmitrii Stepanov <d.stepanov@yadro.com>
Date: Wed, 31 May 2023 12:24:04 +0300
Subject: [PATCH 2/5] [#412] node: Replace tracing package

Use observability module.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
---
 cmd/frostfs-node/config.go                                     | 2 +-
 cmd/frostfs-node/config/tracing/config.go                      | 2 +-
 cmd/frostfs-node/tracing.go                                    | 2 +-
 pkg/local_object_storage/blobovnicza/delete.go                 | 2 +-
 pkg/local_object_storage/blobovnicza/get.go                    | 2 +-
 pkg/local_object_storage/blobstor/blobovniczatree/delete.go    | 2 +-
 pkg/local_object_storage/blobstor/blobovniczatree/exists.go    | 2 +-
 pkg/local_object_storage/blobstor/blobovniczatree/get.go       | 2 +-
 pkg/local_object_storage/blobstor/blobovniczatree/get_range.go | 2 +-
 pkg/local_object_storage/blobstor/blobovniczatree/put.go       | 2 +-
 pkg/local_object_storage/blobstor/delete.go                    | 2 +-
 pkg/local_object_storage/blobstor/exists.go                    | 2 +-
 pkg/local_object_storage/blobstor/fstree/fstree.go             | 2 +-
 pkg/local_object_storage/blobstor/get.go                       | 2 +-
 pkg/local_object_storage/blobstor/get_range.go                 | 2 +-
 pkg/local_object_storage/blobstor/put.go                       | 2 +-
 pkg/local_object_storage/engine/delete.go                      | 2 +-
 pkg/local_object_storage/engine/evacuate.go                    | 2 +-
 pkg/local_object_storage/engine/get.go                         | 2 +-
 pkg/local_object_storage/engine/head.go                        | 2 +-
 pkg/local_object_storage/engine/inhume.go                      | 2 +-
 pkg/local_object_storage/engine/lock.go                        | 2 +-
 pkg/local_object_storage/engine/put.go                         | 2 +-
 pkg/local_object_storage/engine/range.go                       | 2 +-
 pkg/local_object_storage/engine/select.go                      | 2 +-
 pkg/local_object_storage/engine/tree.go                        | 2 +-
 pkg/local_object_storage/engine/writecache.go                  | 2 +-
 pkg/local_object_storage/metabase/delete.go                    | 2 +-
 pkg/local_object_storage/metabase/exists.go                    | 2 +-
 pkg/local_object_storage/metabase/get.go                       | 2 +-
 pkg/local_object_storage/metabase/inhume.go                    | 2 +-
 pkg/local_object_storage/metabase/lock.go                      | 2 +-
 pkg/local_object_storage/metabase/movable.go                   | 2 +-
 pkg/local_object_storage/metabase/put.go                       | 2 +-
 pkg/local_object_storage/metabase/select.go                    | 2 +-
 pkg/local_object_storage/metabase/storage_id.go                | 2 +-
 pkg/local_object_storage/pilorama/boltdb.go                    | 2 +-
 pkg/local_object_storage/shard/control.go                      | 2 +-
 pkg/local_object_storage/shard/count.go                        | 2 +-
 pkg/local_object_storage/shard/delete.go                       | 2 +-
 pkg/local_object_storage/shard/exists.go                       | 2 +-
 pkg/local_object_storage/shard/get.go                          | 2 +-
 pkg/local_object_storage/shard/head.go                         | 2 +-
 pkg/local_object_storage/shard/inhume.go                       | 2 +-
 pkg/local_object_storage/shard/lock.go                         | 2 +-
 pkg/local_object_storage/shard/move.go                         | 2 +-
 pkg/local_object_storage/shard/put.go                          | 2 +-
 pkg/local_object_storage/shard/range.go                        | 2 +-
 pkg/local_object_storage/shard/select.go                       | 2 +-
 pkg/local_object_storage/shard/tree.go                         | 2 +-
 pkg/local_object_storage/shard/writecache.go                   | 2 +-
 pkg/local_object_storage/writecache/delete.go                  | 2 +-
 pkg/local_object_storage/writecache/flush.go                   | 2 +-
 pkg/local_object_storage/writecache/get.go                     | 2 +-
 pkg/local_object_storage/writecache/mode.go                    | 2 +-
 pkg/local_object_storage/writecache/put.go                     | 2 +-
 pkg/services/object/get/local.go                               | 2 +-
 pkg/services/object/get/remote.go                              | 2 +-
 pkg/services/object/get/v2/get_forwarder.go                    | 2 +-
 pkg/services/object/get/v2/get_range_forwarder.go              | 2 +-
 pkg/services/object/get/v2/head_forwarder.go                   | 2 +-
 pkg/services/object/internal/client/client.go                  | 2 +-
 pkg/services/object/put/v2/streamer.go                         | 2 +-
 pkg/services/tree/redirect.go                                  | 2 +-
 pkg/services/tree/replicator.go                                | 2 +-
 65 files changed, 65 insertions(+), 65 deletions(-)

diff --git a/cmd/frostfs-node/config.go b/cmd/frostfs-node/config.go
index 00ade7ce2..f8605c21e 100644
--- a/cmd/frostfs-node/config.go
+++ b/cmd/frostfs-node/config.go
@@ -16,7 +16,6 @@ import (
 	"time"
 
 	netmapV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
 	apiclientconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/apiclient"
 	contractsconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/contracts"
@@ -60,6 +59,7 @@ import (
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/state"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
diff --git a/cmd/frostfs-node/config/tracing/config.go b/cmd/frostfs-node/config/tracing/config.go
index 76572cc31..e846be158 100644
--- a/cmd/frostfs-node/config/tracing/config.go
+++ b/cmd/frostfs-node/config/tracing/config.go
@@ -1,9 +1,9 @@
 package tracing
 
 import (
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/misc"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 )
 
 const (
diff --git a/cmd/frostfs-node/tracing.go b/cmd/frostfs-node/tracing.go
index d963ba866..08dc049da 100644
--- a/cmd/frostfs-node/tracing.go
+++ b/cmd/frostfs-node/tracing.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	tracingconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.uber.org/zap"
 )
 
diff --git a/pkg/local_object_storage/blobovnicza/delete.go b/pkg/local_object_storage/blobovnicza/delete.go
index 29a587cc9..e880815a6 100644
--- a/pkg/local_object_storage/blobovnicza/delete.go
+++ b/pkg/local_object_storage/blobovnicza/delete.go
@@ -3,8 +3,8 @@ package blobovnicza
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.etcd.io/bbolt"
diff --git a/pkg/local_object_storage/blobovnicza/get.go b/pkg/local_object_storage/blobovnicza/get.go
index c1cd19e53..ff29358b0 100644
--- a/pkg/local_object_storage/blobovnicza/get.go
+++ b/pkg/local_object_storage/blobovnicza/get.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"github.com/nspcc-dev/neo-go/pkg/util/slice"
diff --git a/pkg/local_object_storage/blobstor/blobovniczatree/delete.go b/pkg/local_object_storage/blobstor/blobovniczatree/delete.go
index 5aa9062a6..1e38c6ea1 100644
--- a/pkg/local_object_storage/blobstor/blobovniczatree/delete.go
+++ b/pkg/local_object_storage/blobstor/blobovniczatree/delete.go
@@ -5,11 +5,11 @@ import (
 	"encoding/hex"
 	"path/filepath"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobovnicza"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/blobstor/blobovniczatree/exists.go b/pkg/local_object_storage/blobstor/blobovniczatree/exists.go
index e7852612b..3324507cf 100644
--- a/pkg/local_object_storage/blobstor/blobovniczatree/exists.go
+++ b/pkg/local_object_storage/blobstor/blobovniczatree/exists.go
@@ -5,10 +5,10 @@ import (
 	"encoding/hex"
 	"path/filepath"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobovnicza"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 	"go.uber.org/zap"
diff --git a/pkg/local_object_storage/blobstor/blobovniczatree/get.go b/pkg/local_object_storage/blobstor/blobovniczatree/get.go
index 8955eb148..3c8e288d4 100644
--- a/pkg/local_object_storage/blobstor/blobovniczatree/get.go
+++ b/pkg/local_object_storage/blobstor/blobovniczatree/get.go
@@ -6,11 +6,11 @@ import (
 	"fmt"
 	"path/filepath"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobovnicza"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/blobstor/blobovniczatree/get_range.go b/pkg/local_object_storage/blobstor/blobovniczatree/get_range.go
index fb23a9671..6e9620adf 100644
--- a/pkg/local_object_storage/blobstor/blobovniczatree/get_range.go
+++ b/pkg/local_object_storage/blobstor/blobovniczatree/get_range.go
@@ -7,11 +7,11 @@ import (
 	"path/filepath"
 	"strconv"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobovnicza"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/blobstor/blobovniczatree/put.go b/pkg/local_object_storage/blobstor/blobovniczatree/put.go
index 4e1d6621f..95ed15540 100644
--- a/pkg/local_object_storage/blobstor/blobovniczatree/put.go
+++ b/pkg/local_object_storage/blobstor/blobovniczatree/put.go
@@ -5,10 +5,10 @@ import (
 	"errors"
 	"path/filepath"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobovnicza"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.etcd.io/bbolt"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/blobstor/delete.go b/pkg/local_object_storage/blobstor/delete.go
index 377214fb8..f1b14481c 100644
--- a/pkg/local_object_storage/blobstor/delete.go
+++ b/pkg/local_object_storage/blobstor/delete.go
@@ -5,8 +5,8 @@ import (
 	"encoding/hex"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/blobstor/exists.go b/pkg/local_object_storage/blobstor/exists.go
index 3c76764a9..760e7b2a4 100644
--- a/pkg/local_object_storage/blobstor/exists.go
+++ b/pkg/local_object_storage/blobstor/exists.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"encoding/hex"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 	"go.uber.org/zap"
diff --git a/pkg/local_object_storage/blobstor/fstree/fstree.go b/pkg/local_object_storage/blobstor/fstree/fstree.go
index b0879f68e..76487813e 100644
--- a/pkg/local_object_storage/blobstor/fstree/fstree.go
+++ b/pkg/local_object_storage/blobstor/fstree/fstree.go
@@ -12,11 +12,11 @@ import (
 	"strings"
 	"syscall"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/compression"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/blobstor/get.go b/pkg/local_object_storage/blobstor/get.go
index 65bc87c07..eadb990c8 100644
--- a/pkg/local_object_storage/blobstor/get.go
+++ b/pkg/local_object_storage/blobstor/get.go
@@ -5,9 +5,9 @@ import (
 	"encoding/hex"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/blobstor/get_range.go b/pkg/local_object_storage/blobstor/get_range.go
index ff9e72e97..ca4e41f33 100644
--- a/pkg/local_object_storage/blobstor/get_range.go
+++ b/pkg/local_object_storage/blobstor/get_range.go
@@ -6,9 +6,9 @@ import (
 	"errors"
 	"strconv"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/blobstor/put.go b/pkg/local_object_storage/blobstor/put.go
index 2ae7f0fe6..125b445b6 100644
--- a/pkg/local_object_storage/blobstor/put.go
+++ b/pkg/local_object_storage/blobstor/put.go
@@ -4,10 +4,10 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/engine/delete.go b/pkg/local_object_storage/engine/delete.go
index f9b9c9a87..2125fad72 100644
--- a/pkg/local_object_storage/engine/delete.go
+++ b/pkg/local_object_storage/engine/delete.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/evacuate.go b/pkg/local_object_storage/engine/evacuate.go
index b0a7e77b4..c103ede73 100644
--- a/pkg/local_object_storage/engine/evacuate.go
+++ b/pkg/local_object_storage/engine/evacuate.go
@@ -6,13 +6,13 @@ import (
 	"fmt"
 	"sync/atomic"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"git.frostfs.info/TrueCloudLab/hrw"
diff --git a/pkg/local_object_storage/engine/get.go b/pkg/local_object_storage/engine/get.go
index 683b7bde8..d376198ba 100644
--- a/pkg/local_object_storage/engine/get.go
+++ b/pkg/local_object_storage/engine/get.go
@@ -4,10 +4,10 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/head.go b/pkg/local_object_storage/engine/head.go
index 130e76c3d..5da97bab5 100644
--- a/pkg/local_object_storage/engine/head.go
+++ b/pkg/local_object_storage/engine/head.go
@@ -4,10 +4,10 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/inhume.go b/pkg/local_object_storage/engine/inhume.go
index b1204ed99..57ac52751 100644
--- a/pkg/local_object_storage/engine/inhume.go
+++ b/pkg/local_object_storage/engine/inhume.go
@@ -4,10 +4,10 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/lock.go b/pkg/local_object_storage/engine/lock.go
index 4562c1a57..61a5a0dc9 100644
--- a/pkg/local_object_storage/engine/lock.go
+++ b/pkg/local_object_storage/engine/lock.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/engine/put.go b/pkg/local_object_storage/engine/put.go
index 0543f9f15..4ac7f90f9 100644
--- a/pkg/local_object_storage/engine/put.go
+++ b/pkg/local_object_storage/engine/put.go
@@ -4,13 +4,13 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/engine/range.go b/pkg/local_object_storage/engine/range.go
index 3d119ac6f..29ec8b2bc 100644
--- a/pkg/local_object_storage/engine/range.go
+++ b/pkg/local_object_storage/engine/range.go
@@ -5,10 +5,10 @@ import (
 	"errors"
 	"strconv"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/select.go b/pkg/local_object_storage/engine/select.go
index e1039ea23..48d2be674 100644
--- a/pkg/local_object_storage/engine/select.go
+++ b/pkg/local_object_storage/engine/select.go
@@ -3,8 +3,8 @@ package engine
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/engine/tree.go b/pkg/local_object_storage/engine/tree.go
index e7d66094c..6b8f83f31 100644
--- a/pkg/local_object_storage/engine/tree.go
+++ b/pkg/local_object_storage/engine/tree.go
@@ -5,9 +5,9 @@ import (
 	"errors"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cidSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/engine/writecache.go b/pkg/local_object_storage/engine/writecache.go
index 692fa4be5..cd8278272 100644
--- a/pkg/local_object_storage/engine/writecache.go
+++ b/pkg/local_object_storage/engine/writecache.go
@@ -4,11 +4,11 @@ import (
 	"context"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 )
diff --git a/pkg/local_object_storage/metabase/delete.go b/pkg/local_object_storage/metabase/delete.go
index 5340f5d08..6ddf96593 100644
--- a/pkg/local_object_storage/metabase/delete.go
+++ b/pkg/local_object_storage/metabase/delete.go
@@ -6,9 +6,9 @@ import (
 	"errors"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	storagelog "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/log"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/metabase/exists.go b/pkg/local_object_storage/metabase/exists.go
index cfd37b0d2..74faf1634 100644
--- a/pkg/local_object_storage/metabase/exists.go
+++ b/pkg/local_object_storage/metabase/exists.go
@@ -5,8 +5,8 @@ import (
 	"fmt"
 
 	objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/metabase/get.go b/pkg/local_object_storage/metabase/get.go
index e76b9d4a7..2f94c72d0 100644
--- a/pkg/local_object_storage/metabase/get.go
+++ b/pkg/local_object_storage/metabase/get.go
@@ -4,8 +4,8 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/metabase/inhume.go b/pkg/local_object_storage/metabase/inhume.go
index a6887a33b..e4af1d1b9 100644
--- a/pkg/local_object_storage/metabase/inhume.go
+++ b/pkg/local_object_storage/metabase/inhume.go
@@ -6,8 +6,8 @@ import (
 	"errors"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/metabase/lock.go b/pkg/local_object_storage/metabase/lock.go
index 5c3c9720d..2b5fcd775 100644
--- a/pkg/local_object_storage/metabase/lock.go
+++ b/pkg/local_object_storage/metabase/lock.go
@@ -5,8 +5,8 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
diff --git a/pkg/local_object_storage/metabase/movable.go b/pkg/local_object_storage/metabase/movable.go
index 412c46393..033b9c718 100644
--- a/pkg/local_object_storage/metabase/movable.go
+++ b/pkg/local_object_storage/metabase/movable.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.etcd.io/bbolt"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/metabase/put.go b/pkg/local_object_storage/metabase/put.go
index bc6520a05..86830f7da 100644
--- a/pkg/local_object_storage/metabase/put.go
+++ b/pkg/local_object_storage/metabase/put.go
@@ -7,10 +7,10 @@ import (
 	"fmt"
 	gio "io"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	objectCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	storagelog "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/log"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/metabase/select.go b/pkg/local_object_storage/metabase/select.go
index 2ced6c4b7..b6b8f5b10 100644
--- a/pkg/local_object_storage/metabase/select.go
+++ b/pkg/local_object_storage/metabase/select.go
@@ -8,8 +8,8 @@ import (
 	"strings"
 
 	v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/metabase/storage_id.go b/pkg/local_object_storage/metabase/storage_id.go
index 794879a3f..b53010a1e 100644
--- a/pkg/local_object_storage/metabase/storage_id.go
+++ b/pkg/local_object_storage/metabase/storage_id.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"github.com/nspcc-dev/neo-go/pkg/util/slice"
 	"go.etcd.io/bbolt"
diff --git a/pkg/local_object_storage/pilorama/boltdb.go b/pkg/local_object_storage/pilorama/boltdb.go
index 1ecc89cb5..9b62f0649 100644
--- a/pkg/local_object_storage/pilorama/boltdb.go
+++ b/pkg/local_object_storage/pilorama/boltdb.go
@@ -12,10 +12,10 @@ import (
 	"sync"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cidSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"github.com/nspcc-dev/neo-go/pkg/io"
 	"go.etcd.io/bbolt"
diff --git a/pkg/local_object_storage/shard/control.go b/pkg/local_object_storage/shard/control.go
index e8e2bd4d7..84efa1d31 100644
--- a/pkg/local_object_storage/shard/control.go
+++ b/pkg/local_object_storage/shard/control.go
@@ -5,12 +5,12 @@ import (
 	"errors"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.uber.org/zap"
diff --git a/pkg/local_object_storage/shard/count.go b/pkg/local_object_storage/shard/count.go
index b68c2f43e..abed5278e 100644
--- a/pkg/local_object_storage/shard/count.go
+++ b/pkg/local_object_storage/shard/count.go
@@ -3,7 +3,7 @@ package shard
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 )
diff --git a/pkg/local_object_storage/shard/delete.go b/pkg/local_object_storage/shard/delete.go
index 4843314de..2c7e0af27 100644
--- a/pkg/local_object_storage/shard/delete.go
+++ b/pkg/local_object_storage/shard/delete.go
@@ -4,11 +4,11 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/exists.go b/pkg/local_object_storage/shard/exists.go
index 66c61fccc..60809da6a 100644
--- a/pkg/local_object_storage/shard/exists.go
+++ b/pkg/local_object_storage/shard/exists.go
@@ -3,9 +3,9 @@ package shard
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/get.go b/pkg/local_object_storage/shard/get.go
index 5268ac790..589ec53c9 100644
--- a/pkg/local_object_storage/shard/get.go
+++ b/pkg/local_object_storage/shard/get.go
@@ -4,13 +4,13 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/shard/head.go b/pkg/local_object_storage/shard/head.go
index a15cdfdca..a0ec231af 100644
--- a/pkg/local_object_storage/shard/head.go
+++ b/pkg/local_object_storage/shard/head.go
@@ -3,8 +3,8 @@ package shard
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/shard/inhume.go b/pkg/local_object_storage/shard/inhume.go
index 12a2900ac..6a2f9311d 100644
--- a/pkg/local_object_storage/shard/inhume.go
+++ b/pkg/local_object_storage/shard/inhume.go
@@ -5,9 +5,9 @@ import (
 	"errors"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/lock.go b/pkg/local_object_storage/shard/lock.go
index cfbd94c5b..52186cbfd 100644
--- a/pkg/local_object_storage/shard/lock.go
+++ b/pkg/local_object_storage/shard/lock.go
@@ -4,8 +4,8 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/shard/move.go b/pkg/local_object_storage/shard/move.go
index 119910623..9832c9c84 100644
--- a/pkg/local_object_storage/shard/move.go
+++ b/pkg/local_object_storage/shard/move.go
@@ -3,9 +3,9 @@ package shard
 import (
 	"context"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/put.go b/pkg/local_object_storage/shard/put.go
index d7d4ae538..79dc4846e 100644
--- a/pkg/local_object_storage/shard/put.go
+++ b/pkg/local_object_storage/shard/put.go
@@ -4,11 +4,11 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	objectCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/range.go b/pkg/local_object_storage/shard/range.go
index 06aea2f8a..895dc2fe0 100644
--- a/pkg/local_object_storage/shard/range.go
+++ b/pkg/local_object_storage/shard/range.go
@@ -4,11 +4,11 @@ import (
 	"context"
 	"strconv"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/shard/select.go b/pkg/local_object_storage/shard/select.go
index 7f776c18a..2d4d473b4 100644
--- a/pkg/local_object_storage/shard/select.go
+++ b/pkg/local_object_storage/shard/select.go
@@ -4,8 +4,8 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/shard/tree.go b/pkg/local_object_storage/shard/tree.go
index d5b3b67bf..ad89fa633 100644
--- a/pkg/local_object_storage/shard/tree.go
+++ b/pkg/local_object_storage/shard/tree.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"fmt"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cidSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/local_object_storage/shard/writecache.go b/pkg/local_object_storage/shard/writecache.go
index 245eb4c70..7ce279c54 100644
--- a/pkg/local_object_storage/shard/writecache.go
+++ b/pkg/local_object_storage/shard/writecache.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 )
diff --git a/pkg/local_object_storage/writecache/delete.go b/pkg/local_object_storage/writecache/delete.go
index f5a292ed4..796fda623 100644
--- a/pkg/local_object_storage/writecache/delete.go
+++ b/pkg/local_object_storage/writecache/delete.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	storagelog "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/log"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"go.etcd.io/bbolt"
 	"go.opentelemetry.io/otel/attribute"
diff --git a/pkg/local_object_storage/writecache/flush.go b/pkg/local_object_storage/writecache/flush.go
index 767435ebf..da8b3a0fa 100644
--- a/pkg/local_object_storage/writecache/flush.go
+++ b/pkg/local_object_storage/writecache/flush.go
@@ -6,12 +6,12 @@ import (
 	"errors"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	objectCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
 	"github.com/mr-tron/base58"
diff --git a/pkg/local_object_storage/writecache/get.go b/pkg/local_object_storage/writecache/get.go
index f8f6de9b0..aac5759ae 100644
--- a/pkg/local_object_storage/writecache/get.go
+++ b/pkg/local_object_storage/writecache/get.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/local_object_storage/writecache/mode.go b/pkg/local_object_storage/writecache/mode.go
index 7e9373a42..bdbbec7c9 100644
--- a/pkg/local_object_storage/writecache/mode.go
+++ b/pkg/local_object_storage/writecache/mode.go
@@ -5,10 +5,10 @@ import (
 	"fmt"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 )
diff --git a/pkg/local_object_storage/writecache/put.go b/pkg/local_object_storage/writecache/put.go
index 1e99e4a28..61e81ec30 100644
--- a/pkg/local_object_storage/writecache/put.go
+++ b/pkg/local_object_storage/writecache/put.go
@@ -5,9 +5,9 @@ import (
 	"errors"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
 	storagelog "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/log"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.etcd.io/bbolt"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/services/object/get/local.go b/pkg/services/object/get/local.go
index 62dde3281..03ede58cc 100644
--- a/pkg/services/object/get/local.go
+++ b/pkg/services/object/get/local.go
@@ -4,8 +4,8 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.uber.org/zap"
diff --git a/pkg/services/object/get/remote.go b/pkg/services/object/get/remote.go
index 69bdbf271..e3464f941 100644
--- a/pkg/services/object/get/remote.go
+++ b/pkg/services/object/get/remote.go
@@ -4,9 +4,9 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
 	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.uber.org/zap"
diff --git a/pkg/services/object/get/v2/get_forwarder.go b/pkg/services/object/get/v2/get_forwarder.go
index bc27f69a2..580c0b58c 100644
--- a/pkg/services/object/get/v2/get_forwarder.go
+++ b/pkg/services/object/get/v2/get_forwarder.go
@@ -8,7 +8,6 @@ import (
 	"sync"
 
 	objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
 	rpcclient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
@@ -17,6 +16,7 @@ import (
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal"
 	internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal/client"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/services/object/get/v2/get_range_forwarder.go b/pkg/services/object/get/v2/get_range_forwarder.go
index 1137ba33c..7858e2b53 100644
--- a/pkg/services/object/get/v2/get_range_forwarder.go
+++ b/pkg/services/object/get/v2/get_range_forwarder.go
@@ -8,7 +8,6 @@ import (
 	"sync"
 
 	objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
 	rpcclient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
@@ -17,6 +16,7 @@ import (
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal"
 	internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal/client"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/services/object/get/v2/head_forwarder.go b/pkg/services/object/get/v2/head_forwarder.go
index 1b0374aea..fa1506435 100644
--- a/pkg/services/object/get/v2/head_forwarder.go
+++ b/pkg/services/object/get/v2/head_forwarder.go
@@ -6,7 +6,6 @@ import (
 	"sync"
 
 	objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
 	rpcclient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
@@ -15,6 +14,7 @@ import (
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	frostfscrypto "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
 	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
diff --git a/pkg/services/object/internal/client/client.go b/pkg/services/object/internal/client/client.go
index 6beb67476..8214c784d 100644
--- a/pkg/services/object/internal/client/client.go
+++ b/pkg/services/object/internal/client/client.go
@@ -8,8 +8,8 @@ import (
 	"fmt"
 	"io"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	coreclient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
 	apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
diff --git a/pkg/services/object/put/v2/streamer.go b/pkg/services/object/put/v2/streamer.go
index 65531dc66..9c6de4ca8 100644
--- a/pkg/services/object/put/v2/streamer.go
+++ b/pkg/services/object/put/v2/streamer.go
@@ -5,7 +5,6 @@ import (
 	"fmt"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc"
 	rawclient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
 	sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
@@ -16,6 +15,7 @@ import (
 	internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/internal/client"
 	putsvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/put"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/util"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
 )
diff --git a/pkg/services/tree/redirect.go b/pkg/services/tree/redirect.go
index 3de71b554..0afd3439a 100644
--- a/pkg/services/tree/redirect.go
+++ b/pkg/services/tree/redirect.go
@@ -5,8 +5,8 @@ import (
 	"context"
 	"errors"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	netmapSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
 	"go.opentelemetry.io/otel/attribute"
 	"go.opentelemetry.io/otel/trace"
diff --git a/pkg/services/tree/replicator.go b/pkg/services/tree/replicator.go
index 7199dc40e..0ca30273e 100644
--- a/pkg/services/tree/replicator.go
+++ b/pkg/services/tree/replicator.go
@@ -8,9 +8,9 @@ import (
 	"fmt"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
 	cidSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	netmapSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
 	"go.opentelemetry.io/otel/attribute"
-- 
2.45.3


From 95bfbadb8e3fcb90778c74ee35fc1e34095e0152 Mon Sep 17 00:00:00 2001
From: Dmitrii Stepanov <d.stepanov@yadro.com>
Date: Wed, 31 May 2023 12:25:32 +0300
Subject: [PATCH 3/5] [#412] node: Replace metrics package

Use observability module.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
---
 cmd/frostfs-ir/metrics.go      |   2 +-
 cmd/frostfs-node/metrics.go    |   2 +-
 pkg/metrics/desc.go            | 109 ---------------------------------
 pkg/metrics/desc_test.go       |  65 --------------------
 pkg/metrics/engine.go          |  79 ++++++++++--------------
 pkg/metrics/gc.go              |  34 +++++-----
 pkg/metrics/innerring.go       |  23 +++----
 pkg/metrics/node.go            |  15 ++---
 pkg/metrics/object.go          | 100 +++++++++++-------------------
 pkg/metrics/registry.go        |  42 -------------
 pkg/metrics/replicator.go      |  33 +++++-----
 pkg/metrics/state.go           |  15 +++--
 pkg/metrics/treeservice.go     |  25 +++-----
 pkg/metrics/writecache.go      |  64 ++++++++-----------
 scripts/export-metrics/main.go |  13 ++--
 15 files changed, 162 insertions(+), 459 deletions(-)
 delete mode 100644 pkg/metrics/desc.go
 delete mode 100644 pkg/metrics/desc_test.go
 delete mode 100644 pkg/metrics/registry.go

diff --git a/cmd/frostfs-ir/metrics.go b/cmd/frostfs-ir/metrics.go
index 39b432c74..dd982b780 100644
--- a/cmd/frostfs-ir/metrics.go
+++ b/cmd/frostfs-ir/metrics.go
@@ -1,7 +1,7 @@
 package main
 
 import (
-	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 )
 
 func newMetricsComponent() *httpComponent {
diff --git a/cmd/frostfs-node/metrics.go b/cmd/frostfs-node/metrics.go
index cf621086d..19b4af51f 100644
--- a/cmd/frostfs-node/metrics.go
+++ b/cmd/frostfs-node/metrics.go
@@ -2,7 +2,7 @@ package main
 
 import (
 	metricsconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/metrics"
-	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 )
 
 func metricsComponent(c *cfg) (*httpComponent, bool) {
diff --git a/pkg/metrics/desc.go b/pkg/metrics/desc.go
deleted file mode 100644
index 612435b2f..000000000
--- a/pkg/metrics/desc.go
+++ /dev/null
@@ -1,109 +0,0 @@
-package metrics
-
-import (
-	"github.com/prometheus/client_golang/prometheus"
-	dto "github.com/prometheus/client_model/go"
-)
-
-type metric[T prometheus.Collector] struct {
-	value T
-	desc  Description
-}
-
-// Descriptions contains metric description suitable for further processing.
-// The only reason for it to exist is `prometheus.Desc` disallowing field access directly.
-// https://github.com/prometheus/client_golang/pull/326
-// https://github.com/prometheus/client_golang/issues/516
-// https://github.com/prometheus/client_golang/issues/222
-type Description struct {
-	Name           string            `json:"name"`
-	Help           string            `json:"help"`
-	Type           string            `json:"type"`
-	ConstantLabels prometheus.Labels `json:"constant_labels,omitempty"`
-	VariableLabels []string          `json:"variable_labels,omitempty"`
-}
-
-func newGauge(opts prometheus.GaugeOpts) metric[prometheus.Gauge] {
-	return metric[prometheus.Gauge]{
-		value: prometheus.NewGauge(opts),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_GAUGE.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-		},
-	}
-}
-
-func newGaugeVec(opts prometheus.GaugeOpts, labelNames []string) metric[*prometheus.GaugeVec] {
-	return metric[*prometheus.GaugeVec]{
-		value: prometheus.NewGaugeVec(opts, labelNames),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_GAUGE.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-			VariableLabels: labelNames,
-		},
-	}
-}
-
-func newGaugeFunc(opts prometheus.GaugeOpts, f func() float64) metric[prometheus.GaugeFunc] {
-	return metric[prometheus.GaugeFunc]{
-		value: prometheus.NewGaugeFunc(opts, f),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_GAUGE.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-		},
-	}
-}
-
-func newCounter(opts prometheus.CounterOpts) metric[prometheus.Counter] {
-	return metric[prometheus.Counter]{
-		value: prometheus.NewCounter(opts),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_COUNTER.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-		},
-	}
-}
-
-func newCounterVec(opts prometheus.CounterOpts, labels []string) metric[*prometheus.CounterVec] {
-	return metric[*prometheus.CounterVec]{
-		value: prometheus.NewCounterVec(opts, labels),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_COUNTER.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-			VariableLabels: labels,
-		},
-	}
-}
-
-func newHistogramVec(opts prometheus.HistogramOpts, labelNames []string) metric[*prometheus.HistogramVec] {
-	return metric[*prometheus.HistogramVec]{
-		value: prometheus.NewHistogramVec(opts, labelNames),
-		desc: Description{
-			Name:           prometheus.BuildFQName(opts.Namespace, opts.Subsystem, opts.Name),
-			Type:           dto.MetricType_HISTOGRAM.String(),
-			Help:           opts.Help,
-			ConstantLabels: opts.ConstLabels,
-			VariableLabels: labelNames,
-		},
-	}
-}
-
-// DescribeAll returns descriptions for all registered metrics.
-func DescribeAll() ([]Description, error) {
-	registeredDescriptionsMtx.Lock()
-	defer registeredDescriptionsMtx.Unlock()
-
-	ds := make([]Description, len(registeredDescriptions))
-	copy(ds, registeredDescriptions)
-	return ds, nil
-}
diff --git a/pkg/metrics/desc_test.go b/pkg/metrics/desc_test.go
deleted file mode 100644
index 28b5e2132..000000000
--- a/pkg/metrics/desc_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package metrics
-
-import (
-	"strings"
-	"testing"
-
-	"github.com/prometheus/client_golang/prometheus"
-	"github.com/stretchr/testify/require"
-)
-
-func TestDescribeAll(t *testing.T) {
-	const (
-		namespace = "my_ns"
-		subsystem = "mysub"
-	)
-	mustRegister(newCounter(prometheus.CounterOpts{
-		Namespace: namespace,
-		Subsystem: subsystem,
-		Name:      "my_counter",
-	}))
-
-	labels := []string{"label1", "label2"}
-	mustRegister(newGaugeVec(prometheus.GaugeOpts{
-		Namespace: namespace,
-		Subsystem: subsystem,
-		Name:      "my_gauge",
-	}, labels))
-
-	constLabels := prometheus.Labels{
-		"const1": "abc",
-		"const2": "xyz",
-	}
-	mustRegister(newCounter(prometheus.CounterOpts{
-		Namespace:   namespace,
-		Subsystem:   subsystem,
-		Name:        "with_const_labels",
-		ConstLabels: constLabels,
-	}))
-
-	descriptions, err := DescribeAll()
-	require.NoError(t, err)
-
-	seen := make(map[string]bool)
-	for i := range descriptions {
-		if !strings.HasPrefix(descriptions[i].Name, namespace) {
-			continue
-		}
-
-		require.False(t, seen[descriptions[i].Name], "metric %s was seen twice", descriptions[i].Name)
-		seen[descriptions[i].Name] = true
-
-		switch descriptions[i].Name {
-		case prometheus.BuildFQName(namespace, subsystem, "my_counter"):
-			require.True(t, len(descriptions[i].VariableLabels) == 0)
-		case prometheus.BuildFQName(namespace, subsystem, "my_gauge"):
-			require.Equal(t, labels, descriptions[i].VariableLabels)
-		case prometheus.BuildFQName(namespace, subsystem, "with_const_labels"):
-			require.Equal(t, len(constLabels), len(descriptions[i].ConstantLabels))
-			require.Equal(t, constLabels, descriptions[i].ConstantLabels)
-		default:
-			require.FailNow(t, "unexpected metric name: %s", descriptions[i].Name)
-		}
-	}
-	require.Equal(t, 3, len(seen), "not all registered metrics were iterated over")
-}
diff --git a/pkg/metrics/engine.go b/pkg/metrics/engine.go
index 28fc1e028..4e78f4ac2 100644
--- a/pkg/metrics/engine.go
+++ b/pkg/metrics/engine.go
@@ -5,24 +5,25 @@ import (
 	"strings"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
 type (
 	engineMetrics struct {
-		listContainersDuration        metric[prometheus.Counter]
-		estimateContainerSizeDuration metric[prometheus.Counter]
-		deleteDuration                metric[prometheus.Counter]
-		existsDuration                metric[prometheus.Counter]
-		getDuration                   metric[prometheus.Counter]
-		headDuration                  metric[prometheus.Counter]
-		inhumeDuration                metric[prometheus.Counter]
-		putDuration                   metric[prometheus.Counter]
-		rangeDuration                 metric[prometheus.Counter]
-		searchDuration                metric[prometheus.Counter]
-		listObjectsDuration           metric[prometheus.Counter]
-		containerSize                 metric[*prometheus.GaugeVec]
-		payloadSize                   metric[*prometheus.GaugeVec]
+		listContainersDuration        prometheus.Counter
+		estimateContainerSizeDuration prometheus.Counter
+		deleteDuration                prometheus.Counter
+		existsDuration                prometheus.Counter
+		getDuration                   prometheus.Counter
+		headDuration                  prometheus.Counter
+		inhumeDuration                prometheus.Counter
+		putDuration                   prometheus.Counter
+		rangeDuration                 prometheus.Counter
+		searchDuration                prometheus.Counter
+		listObjectsDuration           prometheus.Counter
+		containerSize                 *prometheus.GaugeVec
+		payloadSize                   *prometheus.GaugeVec
 	}
 )
 
@@ -46,8 +47,8 @@ func newEngineMetrics() engineMetrics {
 	}
 }
 
-func newEngineCounter(name, help string) metric[prometheus.Counter] {
-	return newCounter(prometheus.CounterOpts{
+func newEngineCounter(name, help string) prometheus.Counter {
+	return metrics.NewCounter(prometheus.CounterOpts{
 		Namespace: namespace,
 		Subsystem: engineSubsystem,
 		Name:      name,
@@ -55,15 +56,15 @@ func newEngineCounter(name, help string) metric[prometheus.Counter] {
 	})
 }
 
-func newEngineMethodDurationCounter(method string) metric[prometheus.Counter] {
+func newEngineMethodDurationCounter(method string) prometheus.Counter {
 	return newEngineCounter(
 		fmt.Sprintf("%s_duration", method),
 		fmt.Sprintf("Accumulated duration of engine %s operations", strings.ReplaceAll(method, "_", " ")),
 	)
 }
 
-func newEngineGaugeVector(name, help string, labels []string) metric[*prometheus.GaugeVec] {
-	return newGaugeVec(prometheus.GaugeOpts{
+func newEngineGaugeVector(name, help string, labels []string) *prometheus.GaugeVec {
+	return metrics.NewGaugeVec(prometheus.GaugeOpts{
 		Namespace: namespace,
 		Subsystem: engineSubsystem,
 		Name:      name,
@@ -71,70 +72,54 @@ func newEngineGaugeVector(name, help string, labels []string) metric[*prometheus
 	}, labels)
 }
 
-func (m engineMetrics) register() {
-	mustRegister(m.listContainersDuration)
-	mustRegister(m.estimateContainerSizeDuration)
-	mustRegister(m.deleteDuration)
-	mustRegister(m.existsDuration)
-	mustRegister(m.getDuration)
-	mustRegister(m.headDuration)
-	mustRegister(m.inhumeDuration)
-	mustRegister(m.putDuration)
-	mustRegister(m.rangeDuration)
-	mustRegister(m.searchDuration)
-	mustRegister(m.listObjectsDuration)
-	mustRegister(m.containerSize)
-	mustRegister(m.payloadSize)
-}
-
 func (m engineMetrics) AddListContainersDuration(d time.Duration) {
-	m.listObjectsDuration.value.Add(float64(d))
+	m.listObjectsDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddEstimateContainerSizeDuration(d time.Duration) {
-	m.estimateContainerSizeDuration.value.Add(float64(d))
+	m.estimateContainerSizeDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddDeleteDuration(d time.Duration) {
-	m.deleteDuration.value.Add(float64(d))
+	m.deleteDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddExistsDuration(d time.Duration) {
-	m.existsDuration.value.Add(float64(d))
+	m.existsDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddGetDuration(d time.Duration) {
-	m.getDuration.value.Add(float64(d))
+	m.getDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddHeadDuration(d time.Duration) {
-	m.headDuration.value.Add(float64(d))
+	m.headDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddInhumeDuration(d time.Duration) {
-	m.inhumeDuration.value.Add(float64(d))
+	m.inhumeDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddPutDuration(d time.Duration) {
-	m.putDuration.value.Add(float64(d))
+	m.putDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddRangeDuration(d time.Duration) {
-	m.rangeDuration.value.Add(float64(d))
+	m.rangeDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddSearchDuration(d time.Duration) {
-	m.searchDuration.value.Add(float64(d))
+	m.searchDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddListObjectsDuration(d time.Duration) {
-	m.listObjectsDuration.value.Add(float64(d))
+	m.listObjectsDuration.Add(float64(d))
 }
 
 func (m engineMetrics) AddToContainerSize(cnrID string, size int64) {
-	m.containerSize.value.With(prometheus.Labels{containerIDLabelKey: cnrID}).Add(float64(size))
+	m.containerSize.With(prometheus.Labels{containerIDLabelKey: cnrID}).Add(float64(size))
 }
 
 func (m engineMetrics) AddToPayloadCounter(shardID string, size int64) {
-	m.payloadSize.value.With(prometheus.Labels{shardIDLabelKey: shardID}).Add(float64(size))
+	m.payloadSize.With(prometheus.Labels{shardIDLabelKey: shardID}).Add(float64(size))
 }
diff --git a/pkg/metrics/gc.go b/pkg/metrics/gc.go
index c4d5ecb50..2457c0c6b 100644
--- a/pkg/metrics/gc.go
+++ b/pkg/metrics/gc.go
@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -25,40 +26,33 @@ type GCMetrics interface {
 }
 
 type gcMetrics struct {
-	runDuration        metric[*prometheus.CounterVec]
-	deletedCounter     metric[*prometheus.CounterVec]
-	expCollectDuration metric[*prometheus.CounterVec]
-	inhumedCounter     metric[*prometheus.CounterVec]
-}
-
-func (m *gcMetrics) register() {
-	mustRegister(m.runDuration)
-	mustRegister(m.deletedCounter)
-	mustRegister(m.expCollectDuration)
-	mustRegister(m.inhumedCounter)
+	runDuration        *prometheus.CounterVec
+	deletedCounter     *prometheus.CounterVec
+	expCollectDuration *prometheus.CounterVec
+	inhumedCounter     *prometheus.CounterVec
 }
 
 func newGCMetrics() *gcMetrics {
 	return &gcMetrics{
-		runDuration: newCounterVec(prometheus.CounterOpts{
+		runDuration: metrics.NewCounterVec(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: gcSubsystem,
 			Name:      "delete_duration_seconds",
 			Help:      "The total time of GC runs to delete objects from disk",
 		}, []string{gcShardID, gcSuccess}),
-		deletedCounter: newCounterVec(prometheus.CounterOpts{
+		deletedCounter: metrics.NewCounterVec(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: gcSubsystem,
 			Name:      "deleted_objects_count",
 			Help:      "Total count of objects GC deleted or failed to delete from disk",
 		}, []string{gcShardID, gcStatus}),
-		expCollectDuration: newCounterVec(prometheus.CounterOpts{
+		expCollectDuration: metrics.NewCounterVec(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: gcSubsystem,
 			Name:      "marking_duration_seconds",
 			Help:      "The total time of GC runs to mark expired objects as removed",
 		}, []string{gcShardID, gcSuccess, gcObjectType}),
-		inhumedCounter: newCounterVec(prometheus.CounterOpts{
+		inhumedCounter: metrics.NewCounterVec(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: gcSubsystem,
 			Name:      "marked_for_removal_objects_count",
@@ -68,19 +62,19 @@ func newGCMetrics() *gcMetrics {
 }
 
 func (m *gcMetrics) AddRunDuration(shardID string, d time.Duration, success bool) {
-	m.runDuration.value.With(prometheus.Labels{
+	m.runDuration.With(prometheus.Labels{
 		gcShardID: shardID,
 		gcSuccess: fmt.Sprintf("%v", success),
 	}).Add(d.Seconds())
 }
 
 func (m *gcMetrics) AddDeletedCount(shardID string, deleted, failed uint64) {
-	m.deletedCounter.value.With(
+	m.deletedCounter.With(
 		prometheus.Labels{
 			gcShardID: shardID,
 			gcStatus:  gcDeleted,
 		}).Add(float64(deleted))
-	m.deletedCounter.value.With(
+	m.deletedCounter.With(
 		prometheus.Labels{
 			gcShardID: shardID,
 			gcStatus:  gcFailed,
@@ -88,7 +82,7 @@ func (m *gcMetrics) AddDeletedCount(shardID string, deleted, failed uint64) {
 }
 
 func (m *gcMetrics) AddExpiredObjectCollectionDuration(shardID string, d time.Duration, success bool, objectType string) {
-	m.expCollectDuration.value.With(prometheus.Labels{
+	m.expCollectDuration.With(prometheus.Labels{
 		gcShardID:    shardID,
 		gcSuccess:    fmt.Sprintf("%v", success),
 		gcObjectType: objectType,
@@ -96,7 +90,7 @@ func (m *gcMetrics) AddExpiredObjectCollectionDuration(shardID string, d time.Du
 }
 
 func (m *gcMetrics) AddInhumedObjectCount(shardID string, count uint64, objectType string) {
-	m.inhumedCounter.value.With(
+	m.inhumedCounter.With(
 		prometheus.Labels{
 			gcShardID:    shardID,
 			gcObjectType: objectType,
diff --git a/pkg/metrics/innerring.go b/pkg/metrics/innerring.go
index bff9184ec..9d8b76bf9 100644
--- a/pkg/metrics/innerring.go
+++ b/pkg/metrics/innerring.go
@@ -4,6 +4,7 @@ import (
 	"strconv"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -15,27 +16,27 @@ const (
 
 // InnerRingServiceMetrics contains metrics collected by inner ring.
 type InnerRingServiceMetrics struct {
-	epoch         metric[prometheus.Gauge]
-	health        metric[prometheus.Gauge]
-	eventDuration metric[*prometheus.HistogramVec]
+	epoch         prometheus.Gauge
+	health        prometheus.Gauge
+	eventDuration *prometheus.HistogramVec
 }
 
 // NewInnerRingMetrics returns new instance of metrics collectors for inner ring.
 func NewInnerRingMetrics() *InnerRingServiceMetrics {
 	var (
-		epoch = newGauge(prometheus.GaugeOpts{
+		epoch = metrics.NewGauge(prometheus.GaugeOpts{
 			Namespace: namespace,
 			Subsystem: innerRingSubsystem,
 			Name:      "epoch",
 			Help:      "Current epoch as seen by inner-ring node.",
 		})
-		health = newGauge(prometheus.GaugeOpts{
+		health = metrics.NewGauge(prometheus.GaugeOpts{
 			Namespace: namespace,
 			Subsystem: innerRingSubsystem,
 			Name:      "health",
 			Help:      "Current inner-ring node state.",
 		})
-		eventDuration = newHistogramVec(prometheus.HistogramOpts{
+		eventDuration = metrics.NewHistogramVec(prometheus.HistogramOpts{
 			Namespace: namespace,
 			Subsystem: innerRingSubsystem,
 			Name:      "event_duration_seconds",
@@ -43,10 +44,6 @@ func NewInnerRingMetrics() *InnerRingServiceMetrics {
 		}, []string{innerRingLabelType, innerRingLabelSuccess})
 	)
 
-	mustRegister(epoch)
-	mustRegister(health)
-	mustRegister(eventDuration)
-
 	return &InnerRingServiceMetrics{
 		epoch:         epoch,
 		health:        health,
@@ -56,16 +53,16 @@ func NewInnerRingMetrics() *InnerRingServiceMetrics {
 
 // SetEpoch updates epoch metrics.
 func (m InnerRingServiceMetrics) SetEpoch(epoch uint64) {
-	m.epoch.value.Set(float64(epoch))
+	m.epoch.Set(float64(epoch))
 }
 
 // SetHealth updates health metrics.
 func (m InnerRingServiceMetrics) SetHealth(s int32) {
-	m.health.value.Set(float64(s))
+	m.health.Set(float64(s))
 }
 
 func (m InnerRingServiceMetrics) AddEvent(d time.Duration, typ string, success bool) {
-	m.eventDuration.value.With(prometheus.Labels{
+	m.eventDuration.With(prometheus.Labels{
 		innerRingLabelType:    typ,
 		innerRingLabelSuccess: strconv.FormatBool(success),
 	}).Observe(d.Seconds())
diff --git a/pkg/metrics/node.go b/pkg/metrics/node.go
index 526e460c5..8819ba15b 100644
--- a/pkg/metrics/node.go
+++ b/pkg/metrics/node.go
@@ -2,6 +2,7 @@ package metrics
 
 import (
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -15,39 +16,31 @@ type NodeMetrics struct {
 
 	writeCacheMetrics *writeCacheMetrics
 	treeService       *treeServiceMetrics
-	epoch             metric[prometheus.Gauge]
+	epoch             prometheus.Gauge
 	gc                *gcMetrics
 }
 
 func NewNodeMetrics() *NodeMetrics {
 	objectService := newObjectServiceMetrics()
-	objectService.register()
 
 	engine := newEngineMetrics()
-	engine.register()
 
 	state := newStateMetrics()
-	state.register()
 
 	replicator := newReplicatorMetrics()
-	replicator.register()
 
 	treeService := newTreeServiceMetrics()
-	treeService.register()
 
-	epoch := newGauge(prometheus.GaugeOpts{
+	epoch := metrics.NewGauge(prometheus.GaugeOpts{
 		Namespace: namespace,
 		Subsystem: innerRingSubsystem,
 		Name:      "epoch",
 		Help:      "Current epoch as seen by inner-ring node.",
 	})
-	mustRegister(epoch)
 
 	writeCacheMetrics := newWriteCacheMetrics()
-	writeCacheMetrics.register()
 
 	gc := newGCMetrics()
-	gc.register()
 
 	return &NodeMetrics{
 		objectServiceMetrics: objectService,
@@ -63,7 +56,7 @@ func NewNodeMetrics() *NodeMetrics {
 
 // SetEpoch updates epoch metric.
 func (m *NodeMetrics) SetEpoch(epoch uint64) {
-	m.epoch.value.Set(float64(epoch))
+	m.epoch.Set(float64(epoch))
 }
 
 // WriteCache returns WriteCache metrics.
diff --git a/pkg/metrics/object.go b/pkg/metrics/object.go
index 5ec575749..87916414d 100644
--- a/pkg/metrics/object.go
+++ b/pkg/metrics/object.go
@@ -5,6 +5,7 @@ import (
 	"strings"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -12,8 +13,8 @@ const objectSubsystem = "object"
 
 type (
 	methodCount struct {
-		success metric[prometheus.Counter]
-		total   metric[prometheus.Counter]
+		success prometheus.Counter
+		total   prometheus.Counter
 	}
 
 	objectServiceMetrics struct {
@@ -25,19 +26,19 @@ type (
 		rangeCounter     methodCount
 		rangeHashCounter methodCount
 
-		getDuration       metric[prometheus.Counter]
-		putDuration       metric[prometheus.Counter]
-		headDuration      metric[prometheus.Counter]
-		searchDuration    metric[prometheus.Counter]
-		deleteDuration    metric[prometheus.Counter]
-		rangeDuration     metric[prometheus.Counter]
-		rangeHashDuration metric[prometheus.Counter]
+		getDuration       prometheus.Counter
+		putDuration       prometheus.Counter
+		headDuration      prometheus.Counter
+		searchDuration    prometheus.Counter
+		deleteDuration    prometheus.Counter
+		rangeDuration     prometheus.Counter
+		rangeHashDuration prometheus.Counter
 
-		putPayload metric[prometheus.Counter]
-		getPayload metric[prometheus.Counter]
+		putPayload prometheus.Counter
+		getPayload prometheus.Counter
 
-		shardMetrics   metric[*prometheus.GaugeVec]
-		shardsReadonly metric[*prometheus.GaugeVec]
+		shardMetrics   *prometheus.GaugeVec
+		shardsReadonly *prometheus.GaugeVec
 	}
 )
 
@@ -49,13 +50,13 @@ const (
 
 func newObjectMethodCallCounter(name string) methodCount {
 	return methodCount{
-		success: newCounter(prometheus.CounterOpts{
+		success: metrics.NewCounter(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: objectSubsystem,
 			Name:      fmt.Sprintf("%s_req_count_success", name),
 			Help:      fmt.Sprintf("The number of successful %s requests processed", name),
 		}),
-		total: newCounter(prometheus.CounterOpts{
+		total: metrics.NewCounter(prometheus.CounterOpts{
 			Namespace: namespace,
 			Subsystem: objectSubsystem,
 			Name:      fmt.Sprintf("%s_req_count", name),
@@ -64,15 +65,10 @@ func newObjectMethodCallCounter(name string) methodCount {
 	}
 }
 
-func (m methodCount) mustRegister() {
-	mustRegister(m.success)
-	mustRegister(m.total)
-}
-
 func (m methodCount) Inc(success bool) {
-	m.total.value.Inc()
+	m.total.Inc()
 	if success {
-		m.success.value.Inc()
+		m.success.Inc()
 	}
 }
 
@@ -99,8 +95,8 @@ func newObjectServiceMetrics() objectServiceMetrics {
 	}
 }
 
-func newObjectMethodPayloadCounter(method string) metric[prometheus.Counter] {
-	return newCounter(prometheus.CounterOpts{
+func newObjectMethodPayloadCounter(method string) prometheus.Counter {
+	return metrics.NewCounter(prometheus.CounterOpts{
 		Namespace: namespace,
 		Subsystem: objectSubsystem,
 		Name:      fmt.Sprintf("%s_payload", method),
@@ -108,8 +104,8 @@ func newObjectMethodPayloadCounter(method string) metric[prometheus.Counter] {
 	})
 }
 
-func newObjectMethodDurationCounter(method string) metric[prometheus.Counter] {
-	return newCounter(prometheus.CounterOpts{
+func newObjectMethodDurationCounter(method string) prometheus.Counter {
+	return metrics.NewCounter(prometheus.CounterOpts{
 		Namespace: namespace,
 		Subsystem: objectSubsystem,
 		Name:      fmt.Sprintf("%s_req_duration", method),
@@ -117,8 +113,8 @@ func newObjectMethodDurationCounter(method string) metric[prometheus.Counter] {
 	})
 }
 
-func newObjectGaugeVector(name, help string, labels []string) metric[*prometheus.GaugeVec] {
-	return newGaugeVec(prometheus.GaugeOpts{
+func newObjectGaugeVector(name, help string, labels []string) *prometheus.GaugeVec {
+	return metrics.NewGaugeVec(prometheus.GaugeOpts{
 		Namespace: namespace,
 		Subsystem: objectSubsystem,
 		Name:      name,
@@ -126,30 +122,6 @@ func newObjectGaugeVector(name, help string, labels []string) metric[*prometheus
 	}, labels)
 }
 
-func (m objectServiceMetrics) register() {
-	m.getCounter.mustRegister()
-	m.putCounter.mustRegister()
-	m.headCounter.mustRegister()
-	m.searchCounter.mustRegister()
-	m.deleteCounter.mustRegister()
-	m.rangeCounter.mustRegister()
-	m.rangeHashCounter.mustRegister()
-
-	mustRegister(m.getDuration)
-	mustRegister(m.putDuration)
-	mustRegister(m.headDuration)
-	mustRegister(m.searchDuration)
-	mustRegister(m.deleteDuration)
-	mustRegister(m.rangeDuration)
-	mustRegister(m.rangeHashDuration)
-
-	mustRegister(m.putPayload)
-	mustRegister(m.getPayload)
-
-	mustRegister(m.shardMetrics)
-	mustRegister(m.shardsReadonly)
-}
-
 func (m objectServiceMetrics) IncGetReqCounter(success bool) {
 	m.getCounter.Inc(success)
 }
@@ -179,43 +151,43 @@ func (m objectServiceMetrics) IncRangeHashReqCounter(success bool) {
 }
 
 func (m objectServiceMetrics) AddGetReqDuration(d time.Duration) {
-	m.getDuration.value.Add(float64(d))
+	m.getDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddPutReqDuration(d time.Duration) {
-	m.putDuration.value.Add(float64(d))
+	m.putDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddHeadReqDuration(d time.Duration) {
-	m.headDuration.value.Add(float64(d))
+	m.headDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddSearchReqDuration(d time.Duration) {
-	m.searchDuration.value.Add(float64(d))
+	m.searchDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddDeleteReqDuration(d time.Duration) {
-	m.deleteDuration.value.Add(float64(d))
+	m.deleteDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddRangeReqDuration(d time.Duration) {
-	m.rangeDuration.value.Add(float64(d))
+	m.rangeDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddRangeHashReqDuration(d time.Duration) {
-	m.rangeHashDuration.value.Add(float64(d))
+	m.rangeHashDuration.Add(float64(d))
 }
 
 func (m objectServiceMetrics) AddPutPayload(ln int) {
-	m.putPayload.value.Add(float64(ln))
+	m.putPayload.Add(float64(ln))
 }
 
 func (m objectServiceMetrics) AddGetPayload(ln int) {
-	m.getPayload.value.Add(float64(ln))
+	m.getPayload.Add(float64(ln))
 }
 
 func (m objectServiceMetrics) AddToObjectCounter(shardID, objectType string, delta int) {
-	m.shardMetrics.value.With(
+	m.shardMetrics.With(
 		prometheus.Labels{
 			shardIDLabelKey:     shardID,
 			counterTypeLabelKey: objectType,
@@ -224,7 +196,7 @@ func (m objectServiceMetrics) AddToObjectCounter(shardID, objectType string, del
 }
 
 func (m objectServiceMetrics) SetObjectCounter(shardID, objectType string, v uint64) {
-	m.shardMetrics.value.With(
+	m.shardMetrics.With(
 		prometheus.Labels{
 			shardIDLabelKey:     shardID,
 			counterTypeLabelKey: objectType,
@@ -237,7 +209,7 @@ func (m objectServiceMetrics) SetReadonly(shardID string, readonly bool) {
 	if readonly {
 		flag = 1
 	}
-	m.shardsReadonly.value.With(
+	m.shardsReadonly.With(
 		prometheus.Labels{
 			shardIDLabelKey: shardID,
 		},
diff --git a/pkg/metrics/registry.go b/pkg/metrics/registry.go
deleted file mode 100644
index eef613d04..000000000
--- a/pkg/metrics/registry.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package metrics
-
-import (
-	"net/http"
-	"sync"
-
-	"github.com/prometheus/client_golang/prometheus"
-	"github.com/prometheus/client_golang/prometheus/collectors"
-	"github.com/prometheus/client_golang/prometheus/promhttp"
-)
-
-// Handler returns an http.Handler for the local registry.
-func Handler() http.Handler {
-	promhttp.Handler()
-	return promhttp.InstrumentMetricHandler(
-		registry,
-		promhttp.HandlerFor(registry, promhttp.HandlerOpts{}))
-}
-
-var (
-	registry = prometheus.NewRegistry()
-	// registeredDescriptionsMtx protects collectors slice.
-	// It should not be acessed concurrently, but we can easily forget this in future, thus this mutex.
-	registeredDescriptionsMtx sync.Mutex
-	registeredDescriptions    []Description
-)
-
-func init() {
-	registry.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}))
-	registry.MustRegister(collectors.NewGoCollector())
-}
-
-func mustRegister[T prometheus.Collector](cs ...metric[T]) {
-	for i := range cs {
-		registry.MustRegister(cs[i].value)
-	}
-	registeredDescriptionsMtx.Lock()
-	for i := range cs {
-		registeredDescriptions = append(registeredDescriptions, cs[i].desc)
-	}
-	registeredDescriptionsMtx.Unlock()
-}
diff --git a/pkg/metrics/replicator.go b/pkg/metrics/replicator.go
index 55f736c66..0deafe916 100644
--- a/pkg/metrics/replicator.go
+++ b/pkg/metrics/replicator.go
@@ -1,29 +1,32 @@
 package metrics
 
-import "github.com/prometheus/client_golang/prometheus"
+import (
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
+	"github.com/prometheus/client_golang/prometheus"
+)
 
 const replicatorSubsystem = "replicator"
 
 type replicatorMetrics struct {
-	inFlightRequests           metric[prometheus.Gauge]
-	processedObjects           metric[prometheus.Counter]
-	totalReplicatedPayloadSize metric[prometheus.Counter]
+	inFlightRequests           prometheus.Gauge
+	processedObjects           prometheus.Counter
+	totalReplicatedPayloadSize prometheus.Counter
 }
 
 func (m replicatorMetrics) IncInFlightRequest() {
-	m.inFlightRequests.value.Inc()
+	m.inFlightRequests.Inc()
 }
 
 func (m replicatorMetrics) DecInFlightRequest() {
-	m.inFlightRequests.value.Dec()
+	m.inFlightRequests.Dec()
 }
 
 func (m replicatorMetrics) IncProcessedObjects() {
-	m.processedObjects.value.Inc()
+	m.processedObjects.Inc()
 }
 
 func (m replicatorMetrics) AddPayloadSize(size int64) {
-	m.totalReplicatedPayloadSize.value.Add(float64(size))
+	m.totalReplicatedPayloadSize.Add(float64(size))
 }
 
 func newReplicatorMetrics() replicatorMetrics {
@@ -34,14 +37,8 @@ func newReplicatorMetrics() replicatorMetrics {
 	}
 }
 
-func (m replicatorMetrics) register() {
-	mustRegister(m.inFlightRequests)
-	mustRegister(m.processedObjects)
-	mustRegister(m.totalReplicatedPayloadSize)
-}
-
-func newReplicatorCounter(name, help string) metric[prometheus.Counter] {
-	return newCounter(prometheus.CounterOpts{
+func newReplicatorCounter(name, help string) prometheus.Counter {
+	return metrics.NewCounter(prometheus.CounterOpts{
 		Namespace: namespace,
 		Subsystem: replicatorSubsystem,
 		Name:      name,
@@ -49,8 +46,8 @@ func newReplicatorCounter(name, help string) metric[prometheus.Counter] {
 	})
 }
 
-func newReplicatorGauge(name, help string) metric[prometheus.Gauge] {
-	return newGauge(prometheus.GaugeOpts{
+func newReplicatorGauge(name, help string) prometheus.Gauge {
+	return metrics.NewGauge(prometheus.GaugeOpts{
 		Namespace: namespace,
 		Subsystem: replicatorSubsystem,
 		Name:      name,
diff --git a/pkg/metrics/state.go b/pkg/metrics/state.go
index dce0402cd..893849911 100644
--- a/pkg/metrics/state.go
+++ b/pkg/metrics/state.go
@@ -1,16 +1,19 @@
 package metrics
 
-import "github.com/prometheus/client_golang/prometheus"
+import (
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
+	"github.com/prometheus/client_golang/prometheus"
+)
 
 const stateSubsystem = "state"
 
 type stateMetrics struct {
-	healthCheck metric[prometheus.Gauge]
+	healthCheck prometheus.Gauge
 }
 
 func newStateMetrics() stateMetrics {
 	return stateMetrics{
-		healthCheck: newGauge(prometheus.GaugeOpts{
+		healthCheck: metrics.NewGauge(prometheus.GaugeOpts{
 			Namespace: namespace,
 			Subsystem: stateSubsystem,
 			Name:      "health",
@@ -19,10 +22,6 @@ func newStateMetrics() stateMetrics {
 	}
 }
 
-func (m stateMetrics) register() {
-	mustRegister(m.healthCheck)
-}
-
 func (m stateMetrics) SetHealth(s int32) {
-	m.healthCheck.value.Set(float64(s))
+	m.healthCheck.Set(float64(s))
 }
diff --git a/pkg/metrics/treeservice.go b/pkg/metrics/treeservice.go
index 135f6e6d2..903ef3496 100644
--- a/pkg/metrics/treeservice.go
+++ b/pkg/metrics/treeservice.go
@@ -4,33 +4,34 @@ import (
 	"fmt"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
 const treeServiceLabelSuccess = "success"
 
 type treeServiceMetrics struct {
-	replicateTaskDuration metric[*prometheus.HistogramVec]
-	replicateWaitDuration metric[*prometheus.HistogramVec]
-	syncOpDuration        metric[*prometheus.HistogramVec]
+	replicateTaskDuration *prometheus.HistogramVec
+	replicateWaitDuration *prometheus.HistogramVec
+	syncOpDuration        *prometheus.HistogramVec
 }
 
 func newTreeServiceMetrics() *treeServiceMetrics {
 	const treeServiceSubsystem = "treeservice"
 	return &treeServiceMetrics{
-		replicateTaskDuration: newHistogramVec(prometheus.HistogramOpts{
+		replicateTaskDuration: metrics.NewHistogramVec(prometheus.HistogramOpts{
 			Namespace: namespace,
 			Subsystem: treeServiceSubsystem,
 			Name:      "replicate_task_duration_seconds",
 			Help:      "Duration of individual replication tasks executed as part of replication loops",
 		}, []string{treeServiceLabelSuccess}),
-		replicateWaitDuration: newHistogramVec(prometheus.HistogramOpts{
+		replicateWaitDuration: metrics.NewHistogramVec(prometheus.HistogramOpts{
 			Namespace: namespace,
 			Subsystem: treeServiceSubsystem,
 			Name:      "replicate_wait_duration_seconds",
 			Help:      "Duration of overall waiting time for replication loops",
 		}, []string{treeServiceLabelSuccess}),
-		syncOpDuration: newHistogramVec(prometheus.HistogramOpts{
+		syncOpDuration: metrics.NewHistogramVec(prometheus.HistogramOpts{
 			Namespace: namespace,
 			Subsystem: treeServiceSubsystem,
 			Name:      "sync_duration_seconds",
@@ -39,26 +40,20 @@ func newTreeServiceMetrics() *treeServiceMetrics {
 	}
 }
 
-func (m *treeServiceMetrics) register() {
-	mustRegister(m.replicateTaskDuration)
-	mustRegister(m.replicateWaitDuration)
-	mustRegister(m.syncOpDuration)
-}
-
 func (m *treeServiceMetrics) AddReplicateTaskDuration(d time.Duration, success bool) {
-	m.replicateTaskDuration.value.With(prometheus.Labels{
+	m.replicateTaskDuration.With(prometheus.Labels{
 		treeServiceLabelSuccess: fmt.Sprintf("%v", success),
 	}).Observe(d.Seconds())
 }
 
 func (m *treeServiceMetrics) AddReplicateWaitDuration(d time.Duration, success bool) {
-	m.replicateWaitDuration.value.With(prometheus.Labels{
+	m.replicateWaitDuration.With(prometheus.Labels{
 		treeServiceLabelSuccess: fmt.Sprintf("%v", success),
 	}).Observe(d.Seconds())
 }
 
 func (m *treeServiceMetrics) AddSyncDuration(d time.Duration, success bool) {
-	m.syncOpDuration.value.With(prometheus.Labels{
+	m.syncOpDuration.With(prometheus.Labels{
 		treeServiceLabelSuccess: fmt.Sprintf("%v", success),
 	}).Observe(d.Seconds())
 }
diff --git a/pkg/metrics/writecache.go b/pkg/metrics/writecache.go
index 74c330842..3c56aa2ba 100644
--- a/pkg/metrics/writecache.go
+++ b/pkg/metrics/writecache.go
@@ -5,6 +5,7 @@ import (
 	"sync"
 	"time"
 
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
@@ -37,18 +38,18 @@ type WriteCacheMetrics interface {
 }
 
 type writeCacheMetrics struct {
-	getDuration    metric[*prometheus.HistogramVec]
-	putDuration    metric[*prometheus.HistogramVec]
-	deleteDuration metric[*prometheus.HistogramVec]
+	getDuration    *prometheus.HistogramVec
+	putDuration    *prometheus.HistogramVec
+	deleteDuration *prometheus.HistogramVec
 
-	flushCounter metric[*prometheus.CounterVec]
-	evictCounter metric[*prometheus.CounterVec]
+	flushCounter *prometheus.CounterVec
+	evictCounter *prometheus.CounterVec
 
-	actualCount metric[*prometheus.GaugeVec]
+	actualCount *prometheus.GaugeVec
 
-	estimatedSize metric[*prometheus.GaugeVec]
+	estimatedSize *prometheus.GaugeVec
 
-	modeMetrics map[shardIDMode]metric[prometheus.GaugeFunc]
+	modeMetrics map[shardIDMode]prometheus.GaugeFunc
 	modeValues  map[string]string
 	modeMtx     sync.RWMutex
 }
@@ -63,46 +64,46 @@ func newWriteCacheMetrics() *writeCacheMetrics {
 		actualCount:    newWCGaugeVec("actual_objects_count", "Actual objects count in writecache", []string{wcShardID, wcStorage}),
 		estimatedSize:  newWCGaugeVec("estimated_size_bytes", "Estimated writecache size", []string{wcShardID, wcStorage}),
 		modeMtx:        sync.RWMutex{},
-		modeMetrics:    make(map[shardIDMode]metric[prometheus.GaugeFunc]),
+		modeMetrics:    make(map[shardIDMode]prometheus.GaugeFunc),
 		modeValues:     make(map[string]string),
 	}
 }
 
 func (m *writeCacheMetrics) AddGetDuration(shardID string, success bool, d time.Duration, storageType string) {
-	setWriteCacheDuration(m.getDuration.value, shardID, success, d, storageType)
+	setWriteCacheDuration(m.getDuration, shardID, success, d, storageType)
 }
 
 func (m *writeCacheMetrics) AddDeleteDuration(shardID string, success bool, d time.Duration, storageType string) {
-	setWriteCacheDuration(m.deleteDuration.value, shardID, success, d, storageType)
+	setWriteCacheDuration(m.deleteDuration, shardID, success, d, storageType)
 }
 
 func (m *writeCacheMetrics) AddPutDuration(shardID string, success bool, d time.Duration, storageType string) {
-	setWriteCacheDuration(m.putDuration.value, shardID, success, d, storageType)
+	setWriteCacheDuration(m.putDuration, shardID, success, d, storageType)
 }
 
 func (m *writeCacheMetrics) IncActualCount(shardID string, storageType string) {
-	m.actualCount.value.With(prometheus.Labels{
+	m.actualCount.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcStorage: storageType,
 	}).Inc()
 }
 
 func (m *writeCacheMetrics) DecActualCount(shardID string, storageType string) {
-	m.actualCount.value.With(prometheus.Labels{
+	m.actualCount.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcStorage: storageType,
 	}).Dec()
 }
 
 func (m *writeCacheMetrics) SetActualCount(shardID string, count uint64, storageType string) {
-	m.actualCount.value.With(prometheus.Labels{
+	m.actualCount.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcStorage: storageType,
 	}).Set(float64(count))
 }
 
 func (m *writeCacheMetrics) SetEstimateSize(shardID string, size uint64, storageType string) {
-	m.estimatedSize.value.With(prometheus.Labels{
+	m.estimatedSize.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcStorage: storageType,
 	}).Set(float64(size))
@@ -121,7 +122,7 @@ func (m *writeCacheMetrics) SetMode(shardID string, mode string) {
 		return
 	}
 
-	metric := newGaugeFunc(
+	metric := metrics.NewGaugeFunc(
 		prometheus.GaugeOpts{
 			Namespace: namespace,
 			Subsystem: wcSubsystem,
@@ -141,12 +142,11 @@ func (m *writeCacheMetrics) SetMode(shardID string, mode string) {
 			}
 			return 0
 		})
-	mustRegister(metric)
 	m.modeMetrics[key] = metric
 }
 
 func (m *writeCacheMetrics) IncFlushCounter(shardID string, success bool, storageType string) {
-	m.flushCounter.value.With(prometheus.Labels{
+	m.flushCounter.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcSuccess: fmt.Sprintf("%v", success),
 		wcStorage: storageType,
@@ -154,22 +154,12 @@ func (m *writeCacheMetrics) IncFlushCounter(shardID string, success bool, storag
 }
 
 func (m *writeCacheMetrics) IncEvictCounter(shardID string, storageType string) {
-	m.evictCounter.value.With(prometheus.Labels{
+	m.evictCounter.With(prometheus.Labels{
 		wcShardID: shardID,
 		wcStorage: storageType,
 	}).Inc()
 }
 
-func (m *writeCacheMetrics) register() {
-	mustRegister(m.getDuration)
-	mustRegister(m.putDuration)
-	mustRegister(m.deleteDuration)
-	mustRegister(m.actualCount)
-	mustRegister(m.estimatedSize)
-	mustRegister(m.flushCounter)
-	mustRegister(m.evictCounter)
-}
-
 func setWriteCacheDuration(m *prometheus.HistogramVec, shardID string, success bool, d time.Duration, storageType string) {
 	m.With(
 		prometheus.Labels{
@@ -180,17 +170,17 @@ func setWriteCacheDuration(m *prometheus.HistogramVec, shardID string, success b
 	).Observe(float64(d))
 }
 
-func newWCMethodDurationCounter(method string) metric[*prometheus.HistogramVec] {
-	return newHistogramVec(prometheus.HistogramOpts{
+func newWCMethodDurationCounter(method string) *prometheus.HistogramVec {
+	return metrics.NewHistogramVec(prometheus.HistogramOpts{
 		Namespace: namespace,
 		Subsystem: wcSubsystem,
 		Name:      fmt.Sprintf("%s_req_duration_seconds", method),
 		Help:      fmt.Sprintf("Accumulated %s request process duration", method),
-	}, []string{wcShardID, wcSuccess, wcStorage})
+	}, []string{wcShardID, wcSuccess})
 }
 
-func newWCOperationCounterVec(operation string, labels []string) metric[*prometheus.CounterVec] {
-	return newCounterVec(prometheus.CounterOpts{
+func newWCOperationCounterVec(operation string, labels []string) *prometheus.CounterVec {
+	return metrics.NewCounterVec(prometheus.CounterOpts{
 		Namespace: namespace,
 		Subsystem: wcSubsystem,
 		Name:      fmt.Sprintf("%s_operation_count", operation),
@@ -198,8 +188,8 @@ func newWCOperationCounterVec(operation string, labels []string) metric[*prometh
 	}, labels)
 }
 
-func newWCGaugeVec(name, help string, labels []string) metric[*prometheus.GaugeVec] {
-	return newGaugeVec(prometheus.GaugeOpts{
+func newWCGaugeVec(name, help string, labels []string) *prometheus.GaugeVec {
+	return metrics.NewGaugeVec(prometheus.GaugeOpts{
 		Namespace: namespace,
 		Subsystem: wcSubsystem,
 		Name:      name,
diff --git a/scripts/export-metrics/main.go b/scripts/export-metrics/main.go
index 694eea38b..f29eca37c 100644
--- a/scripts/export-metrics/main.go
+++ b/scripts/export-metrics/main.go
@@ -6,7 +6,8 @@ import (
 	"fmt"
 	"os"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
+	local_metrics "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/metrics"
+	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
 )
 
 var (
@@ -25,10 +26,10 @@ func main() {
 	var filename string
 	switch {
 	case *node != "":
-		_ = metrics.NewNodeMetrics()
+		_ = local_metrics.NewNodeMetrics()
 		filename = *node
 	case *ir != "":
-		_ = metrics.NewInnerRingMetrics()
+		_ = local_metrics.NewInnerRingMetrics()
 		filename = *ir
 
 	default:
@@ -36,11 +37,7 @@ func main() {
 		os.Exit(1)
 	}
 
-	ds, err := metrics.DescribeAll()
-	if err != nil {
-		fmt.Fprintf(os.Stderr, "Could not parse metric descriptions: %v\n", err)
-		os.Exit(1)
-	}
+	ds := metrics.DescribeAll()
 
 	data, err := json.Marshal(ds)
 	if err != nil {
-- 
2.45.3


From 1aa026328e930058b8c90bd35f0258ba2884b1d7 Mon Sep 17 00:00:00 2001
From: Dmitrii Stepanov <d.stepanov@yadro.com>
Date: Wed, 31 May 2023 12:26:54 +0300
Subject: [PATCH 4/5] [#412] node: Use observability interceptors

Use metrics and tracing interceptors.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
---
 cmd/frostfs-cli/modules/tree/client.go |  9 ++++++---
 cmd/frostfs-node/grpc.go               |  9 ++++++---
 pkg/services/tree/cache.go             |  9 ++++++---
 pkg/services/tree/sync.go              | 10 +++++++---
 4 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/cmd/frostfs-cli/modules/tree/client.go b/cmd/frostfs-cli/modules/tree/client.go
index f25bff166..4f4f54657 100644
--- a/cmd/frostfs-cli/modules/tree/client.go
+++ b/cmd/frostfs-cli/modules/tree/client.go
@@ -5,10 +5,11 @@ import (
 	"strings"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/tree"
+	metrics "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics/grpc"
+	tracing "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing/grpc"
 	"github.com/spf13/viper"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
@@ -26,10 +27,12 @@ func _client(ctx context.Context) (tree.TreeServiceClient, error) {
 	opts := []grpc.DialOption{
 		grpc.WithBlock(),
 		grpc.WithChainUnaryInterceptor(
-			tracing.NewGRPCUnaryClientInteceptor(),
+			metrics.NewUnaryClientInterceptor(),
+			tracing.NewUnaryClientInteceptor(),
 		),
 		grpc.WithChainStreamInterceptor(
-			tracing.NewGRPCStreamClientInterceptor(),
+			metrics.NewStreamClientInterceptor(),
+			tracing.NewStreamClientInterceptor(),
 		),
 	}
 
diff --git a/cmd/frostfs-node/grpc.go b/cmd/frostfs-node/grpc.go
index b0a587782..b62ae9c45 100644
--- a/cmd/frostfs-node/grpc.go
+++ b/cmd/frostfs-node/grpc.go
@@ -7,10 +7,11 @@ import (
 	"net"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	grpcconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/grpc"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger"
+	metrics "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics/grpc"
+	tracing "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing/grpc"
 	"go.uber.org/zap"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials"
@@ -22,10 +23,12 @@ func initGRPC(c *cfg) {
 		serverOpts := []grpc.ServerOption{
 			grpc.MaxSendMsgSize(maxMsgSize),
 			grpc.ChainUnaryInterceptor(
-				tracing.NewGRPCUnaryServerInterceptor(),
+				metrics.NewUnaryServerInterceptor(),
+				tracing.NewUnaryServerInterceptor(),
 			),
 			grpc.ChainStreamInterceptor(
-				tracing.NewGRPCStreamServerInterceptor(),
+				metrics.NewStreamServerInterceptor(),
+				tracing.NewStreamServerInterceptor(),
 			),
 		}
 
diff --git a/pkg/services/tree/cache.go b/pkg/services/tree/cache.go
index 3288083cc..97218da08 100644
--- a/pkg/services/tree/cache.go
+++ b/pkg/services/tree/cache.go
@@ -8,8 +8,9 @@ import (
 	"sync"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
+	metrics "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics/grpc"
+	tracing "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing/grpc"
 	"github.com/hashicorp/golang-lru/v2/simplelru"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/connectivity"
@@ -90,10 +91,12 @@ func dialTreeService(ctx context.Context, netmapAddr string) (*grpc.ClientConn,
 	opts := []grpc.DialOption{
 		grpc.WithBlock(),
 		grpc.WithChainUnaryInterceptor(
-			tracing.NewGRPCUnaryClientInteceptor(),
+			metrics.NewUnaryClientInterceptor(),
+			tracing.NewUnaryClientInteceptor(),
 		),
 		grpc.WithChainStreamInterceptor(
-			tracing.NewGRPCStreamClientInterceptor(),
+			metrics.NewStreamClientInterceptor(),
+			tracing.NewStreamClientInterceptor(),
 		),
 	}
 
diff --git a/pkg/services/tree/sync.go b/pkg/services/tree/sync.go
index ec51c6bc6..d132faf6e 100644
--- a/pkg/services/tree/sync.go
+++ b/pkg/services/tree/sync.go
@@ -11,11 +11,13 @@ import (
 	"sync"
 	"time"
 
-	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/pkg/tracing"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
+	metrics "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics/grpc"
+	tracing "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
+	tracing_grpc "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing/grpc"
 	cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
 	netmapSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
 	"github.com/panjf2000/ants/v2"
@@ -297,10 +299,12 @@ func (s *Service) synchronizeTree(ctx context.Context, cid cid.ID, from uint64,
 
 				cc, err := grpc.DialContext(egCtx, a.URIAddr(),
 					grpc.WithChainUnaryInterceptor(
-						tracing.NewGRPCUnaryClientInteceptor(),
+						metrics.NewUnaryClientInterceptor(),
+						tracing_grpc.NewUnaryClientInteceptor(),
 					),
 					grpc.WithChainStreamInterceptor(
-						tracing.NewGRPCStreamClientInterceptor(),
+						metrics.NewStreamClientInterceptor(),
+						tracing_grpc.NewStreamClientInterceptor(),
 					),
 					grpc.WithTransportCredentials(insecure.NewCredentials()))
 				if err != nil {
-- 
2.45.3


From 7af9cd1e2e024b2e336b294d076ff50c73be1b18 Mon Sep 17 00:00:00 2001
From: Dmitrii Stepanov <d.stepanov@yadro.com>
Date: Wed, 31 May 2023 12:30:46 +0300
Subject: [PATCH 5/5] [#412] cache: Pass DialOptions to create new conn

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
---
 pkg/network/cache/multi.go | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/pkg/network/cache/multi.go b/pkg/network/cache/multi.go
index b8a0aa4bc..ba81df16c 100644
--- a/pkg/network/cache/multi.go
+++ b/pkg/network/cache/multi.go
@@ -10,8 +10,11 @@ import (
 	rawclient "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client"
 	clientcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/network"
+	metrics "git.frostfs.info/TrueCloudLab/frostfs-observability/metrics/grpc"
+	tracing "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing/grpc"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
+	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
 )
@@ -72,6 +75,17 @@ func (x *multiClient) createForAddress(ctx context.Context, addr network.Address
 		prmInit.SetResponseInfoCallback(x.opts.ResponseCallback)
 	}
 
+	prmDial.SetGRPCDialOptions(
+		grpc.WithChainUnaryInterceptor(
+			metrics.NewUnaryClientInterceptor(),
+			tracing.NewUnaryClientInteceptor(),
+		),
+		grpc.WithChainStreamInterceptor(
+			metrics.NewStreamClientInterceptor(),
+			tracing.NewStreamClientInterceptor(),
+		),
+	)
+
 	c.Init(prmInit)
 	err := c.Dial(ctx, prmDial)
 	if err != nil {
-- 
2.45.3