<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>可视化观测 on Apache Dubbo</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/</link><description>Recent content in 可视化观测 on Apache Dubbo</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/index.xml" rel="self" type="application/rss+xml"/><item><title>配置和管理框架日志</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/logger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/logger/</guid><description>&lt;p>本示例演示如何配置 dubbo-go 框架日志组件，将框架运行态日志保存到指定的位置。可在此查看 &lt;a href="https://github.com/apache/dubbo-go-samples/tree/main/logger/level" target="_blank">完整示例源码地址&lt;/a>。&lt;/p>


&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 这里配置的只是 dubbo-go 框架自身的日志组件行为，即框架内部使用的日志，不影响业务日志框架的使用！

&lt;/div>

&lt;h2 id="1-日志配置">1. 日志配置&lt;/h2>
&lt;p>如下所示，可以通过 &lt;code>log.WithZap()&lt;/code>、&lt;code>log.WithLevel(&amp;quot;warn&amp;quot;)&lt;/code> 设置 dubbo 框架日志行为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>ins, err &lt;span style="color:#719e07">:=&lt;/span> dubbo.&lt;span style="color:#268bd2">NewInstance&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	dubbo.&lt;span style="color:#268bd2">WithLogger&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		log.&lt;span style="color:#268bd2">WithLevel&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;warn&amp;#34;&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>		log.&lt;span style="color:#268bd2">WithZap&lt;/span>(),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="2-应用共享日志组件">2. 应用共享日志组件&lt;/h2>
&lt;p>注意，这里配置的只是 dubbo-go 框架自身的日志组件行为（即框架内部使用的日志），不影响业务日志框架的使用！&lt;/p>
&lt;p>&lt;strong>通过以下方式，业务应用也可以选择复用这个日志组件：&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> app_logger &lt;span style="color:#2aa198">&amp;#34;github.com/dubbogo/gost/log/logger&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>app_logger.&lt;span style="color:#268bd2">Info&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;hello&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>日志 Interface&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">type&lt;/span> Logger &lt;span style="color:#268bd2">interface&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Info&lt;/span>(args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Warn&lt;/span>(args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Error&lt;/span>(args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Debug&lt;/span>(args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Fatal&lt;/span>(args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Infof&lt;/span>(fmt &lt;span style="color:#dc322f">string&lt;/span>, args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Warnf&lt;/span>(fmt &lt;span style="color:#dc322f">string&lt;/span>, args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Errorf&lt;/span>(fmt &lt;span style="color:#dc322f">string&lt;/span>, args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Debugf&lt;/span>(fmt &lt;span style="color:#dc322f">string&lt;/span>, args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#268bd2">Fatalf&lt;/span>(fmt &lt;span style="color:#dc322f">string&lt;/span>, args &lt;span style="color:#719e07">...&lt;/span>&lt;span style="color:#268bd2">interface&lt;/span>{})
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>

&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 日志API不可以在Init 阶段使用，否则可能会发生意料之外的问题。

&lt;/div>

&lt;h2 id="2-完全自定义日志">2. 完全自定义日志&lt;/h2>
&lt;p>当前 dubbo-go 框架支持 zap、logrus 两个日志框架，如果您想让 dubbo 框架内核使用其他日志框架打印日志，推荐以标准扩展形式增加支持，具体可参考核心库中内置的 &lt;a href="https://github.com/apache/dubbo-go/tree/main/logger">源码实现&lt;/a>。&lt;/p></description></item><item><title>metrics监控</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/rpc_metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/rpc_metrics/</guid><description>&lt;p>Dubbo 支持采集运行态 Metrics 指标并接入 Prometheus、Grafana 系统，实现对微服务集群的可视化监控，以下是一个具体的使用示例，可查看 &lt;a href="https://github.com/apache/dubbo-go-samples/tree/main/metrics">示例完整源码&lt;/a>。&lt;/p>
&lt;h2 id="contents">Contents&lt;/h2>
&lt;ul>
&lt;li>server/main.go - is the main definition of the service, handler and rpc server&lt;/li>
&lt;li>client/main.go - is the rpc client&lt;/li>
&lt;li>proto - contains the protobuf definition of the API&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-run">How to run&lt;/h2>
&lt;h3 id="run-server">Run server&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>go run ./go-server/cmd/main.go
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>test server work as expected:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>curl &lt;span style="color:#cb4b16">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cb4b16">&lt;/span> --header &lt;span style="color:#2aa198">&amp;#34;Content-Type: application/json&amp;#34;&lt;/span> &lt;span style="color:#cb4b16">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cb4b16">&lt;/span> --data &lt;span style="color:#2aa198">&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;Dubbo&amp;#34;}&amp;#39;&lt;/span> &lt;span style="color:#cb4b16">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cb4b16">&lt;/span> http://localhost:20000/greet.GreetService/Greet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="run-client">Run client&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>go run ./go-client/cmd/main.go
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="deploy-to-local">deploy to local&lt;/h2>
&lt;p>install prometheus and open prometheus config file &lt;code>prometheus.yml&lt;/code>, write the config like this&lt;/p></description></item><item><title>链路追踪</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/mannual/golang-sdk/tutorial/observability/tracing/</guid><description>&lt;p>Dubbo-go 支持基于 &lt;a href="https://opentelemetry.io/">OpenTelemetry&lt;/a> 标准的全链路追踪埋点，同时支持通过以下 exporter 导出到不同的 tracing 后端系统。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://opentelemetry.io/docs/specs/otel/logs/sdk_exporters/stdout/">Stdout exporter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://opentelemetry.io/docs/languages/js/exporters/#jaeger">Jaeger exporter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://opentelemetry.io/docs/languages/js/exporters/#zipkin">Zipkin exporter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://opentelemetry.io/docs/languages/js/exporters/#use-otlp-exporter-with-httpjson-or-httpprotobuf">OTLP-HTTP exporter&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/">OTLP-gRPC exporter&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="使用方式">使用方式&lt;/h2>
&lt;p>请注意，仅支持通过 &lt;code>dubbo.NewInstance&lt;/code> 方式创建 dubbo 应用时开启 tracing 功能，也就是我们快速开始中提到的&lt;code>微服务应用模式&lt;/code>，对于&lt;code>轻量 RPC API&lt;/code>暂时不支持开启 tracing。&lt;/p>
&lt;h2 id="示例详解">示例详解&lt;/h2>
&lt;p>可在此查看完整示例&lt;a href="https://github.com/apache/dubbo-go-samples/tree/main/otel">源码&lt;/a>地址。&lt;/p>
&lt;p>使用 &lt;code>dubbo.WithTracing()&lt;/code> 开启 tracing，可以通过多个参数控制 tracing 行为：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">package&lt;/span> main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">import&lt;/span> (
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;dubbo.apache.org/dubbo-go/v3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> _ &lt;span style="color:#2aa198">&amp;#34;dubbo.apache.org/dubbo-go/v3/imports&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;dubbo.apache.org/dubbo-go/v3/otel/trace&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">func&lt;/span> &lt;span style="color:#268bd2">main&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> instance, err &lt;span style="color:#719e07">:=&lt;/span> dubbo.&lt;span style="color:#268bd2">NewInstance&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dubbo.&lt;span style="color:#268bd2">WithTracing&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">// add tracing options here
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> trace.&lt;span style="color:#268bd2">WithEnabled&lt;/span>(), &lt;span style="color:#586e75">// enable tracing feature
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> trace.&lt;span style="color:#268bd2">WithStdoutExporter&lt;/span>(),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trace.&lt;span style="color:#268bd2">WithW3cPropagator&lt;/span>(),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trace.&lt;span style="color:#268bd2">WithAlwaysMode&lt;/span>(),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> trace.&lt;span style="color:#268bd2">WithRatioMode&lt;/span>(), &lt;span style="color:#586e75">// use ratio mode
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> trace.&lt;span style="color:#268bd2">WithRatio&lt;/span>(&lt;span style="color:#2aa198">0.5&lt;/span>), &lt;span style="color:#586e75">// sample ratio, only active when use ratio mode
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> ),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你在 &lt;code>dubbo.WithTracing()&lt;/code> 调用中不指定任何 option 参数，则会使用默认行为：&lt;/p></description></item></channel></rss>