<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>健康检查 on Dapr 文档库</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/</link><description>Recent content in 健康检查 on Dapr 文档库</description><generator>Hugo</generator><language>zh-hans</language><atom:link href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/index.xml" rel="self" type="application/rss+xml"/><item><title>应用健康检查</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/</guid><description>&lt;p>应用健康检查功能可以检测应用程序的健康状况，并对状态变化做出反应。&lt;/p>
&lt;p>应用程序可能由于多种原因变得无响应。例如，您的应用程序：&lt;/p>
&lt;ul>
&lt;li>可能太忙而无法接受新工作；&lt;/li>
&lt;li>可能已崩溃；或&lt;/li>
&lt;li>可能处于死锁状态。&lt;/li>
&lt;/ul>
&lt;p>有时这种情况可能是暂时的，例如：&lt;/p>
&lt;ul>
&lt;li>如果应用程序只是忙碌，最终会恢复接受新工作&lt;/li>
&lt;li>如果应用程序因某种原因正在重启并处于初始化阶段&lt;/li>
&lt;/ul>
&lt;p>应用健康检查默认情况下是禁用的。一旦启用，Dapr 运行时（sidecar）会通过 HTTP 或 gRPC 调用定期轮询您的应用程序。当检测到应用程序的健康状况出现问题时，Dapr 会通过以下方式暂停接受新工作：&lt;/p>
&lt;ul>
&lt;li>取消所有 pub/sub 订阅&lt;/li>
&lt;li>停止所有输入绑定&lt;/li>
&lt;li>短路所有服务调用请求，这些请求在 Dapr 运行时终止，不会转发到应用程序&lt;/li>
&lt;/ul>
&lt;p>这些变化是暂时的，一旦 Dapr 检测到应用程序恢复响应，它将恢复正常操作。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/observability-app-health.webp" width="800" alt="显示应用健康功能的图示。启用应用健康的 Dapr 运行时会定期探测应用程序的健康状况。">
&lt;h2 id="应用健康检查与平台级健康检查">应用健康检查与平台级健康检查&lt;/h2>
&lt;p>Dapr 的应用健康检查旨在补充而不是替代任何平台级健康检查，例如在 Kubernetes 上运行时的&lt;a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/">存活探针&lt;/a>。&lt;/p>
&lt;p>平台级健康检查（或存活探针）通常确保应用程序正在运行，并在出现故障时导致平台重启应用程序。&lt;/p>
&lt;p>与平台级健康检查不同，Dapr 的应用健康检查专注于暂停当前无法接受工作的应用程序，但预计最终能够恢复接受工作。目标包括：&lt;/p>
&lt;ul>
&lt;li>不给已经超载的应用程序带来更多负担。&lt;/li>
&lt;li>当 Dapr 知道应用程序无法处理消息时，不从队列、绑定或 pub/sub 代理中获取消息。&lt;/li>
&lt;/ul>
&lt;p>在这方面，Dapr 的应用健康检查是“较软”的，等待应用程序能够处理工作，而不是以“硬”方式终止正在运行的进程。&lt;/p>


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

 对于 Kubernetes，失败的应用健康检查不会将 pod 从服务发现中移除：这仍然是 Kubernetes 存活探针的责任，而不是 Dapr。

&lt;/div>

&lt;h2 id="配置应用健康检查">配置应用健康检查&lt;/h2>
&lt;p>应用健康检查默认情况下是禁用的，但可以通过以下方式启用：&lt;/p>
&lt;ul>
&lt;li>&lt;code>--enable-app-health-check&lt;/code> CLI 标志；或&lt;/li>
&lt;li>在 Kubernetes 上运行时使用 &lt;code>dapr.io/enable-app-health-check: true&lt;/code> 注释。&lt;/li>
&lt;/ul>
&lt;p>添加此标志是启用应用健康检查的必要且充分条件，使用默认选项。&lt;/p>
&lt;p>完整的选项列表如下表所示：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>CLI 标志&lt;/th>
 &lt;th>Kubernetes 部署注释&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;th>默认值&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>--enable-app-health-check&lt;/code>&lt;/td>
 &lt;td>&lt;code>dapr.io/enable-app-health-check&lt;/code>&lt;/td>
 &lt;td>启用健康检查的布尔值&lt;/td>
 &lt;td>禁用&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/#health-check-paths">&lt;code>--app-health-check-path&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;code>dapr.io/app-health-check-path&lt;/code>&lt;/td>
 &lt;td>当应用通道为 HTTP 时，Dapr 用于健康探测的路径（如果应用通道使用 gRPC，则忽略此值）&lt;/td>
 &lt;td>&lt;code>/healthz&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/#intervals-timeouts-and-thresholds">&lt;code>--app-health-probe-interval&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;code>dapr.io/app-health-probe-interval&lt;/code>&lt;/td>
 &lt;td>每次健康探测之间的&lt;em>秒数&lt;/em>&lt;/td>
 &lt;td>&lt;code>5&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/#intervals-timeouts-and-thresholds">&lt;code>--app-health-probe-timeout&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;code>dapr.io/app-health-probe-timeout&lt;/code>&lt;/td>
 &lt;td>健康探测请求的超时时间（以&lt;em>毫秒&lt;/em>为单位）&lt;/td>
 &lt;td>&lt;code>500&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/app-health/#intervals-timeouts-and-thresholds">&lt;code>--app-health-threshold&lt;/code>&lt;/a>&lt;/td>
 &lt;td>&lt;code>dapr.io/app-health-threshold&lt;/code>&lt;/td>
 &lt;td>在应用被视为不健康之前的最大连续失败次数&lt;/td>
 &lt;td>&lt;code>3&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;p>请参阅&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/arguments-annotations-overview/">完整的 Dapr 参数和注释参考&lt;/a>以获取所有选项及其启用方法。&lt;/p></description></item><item><title>Sidecar 健康检查</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/sidecar-health/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/sidecar-health/</guid><description>&lt;p>Dapr 提供了一种方法，通过 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/health_api/">HTTP &lt;code>/healthz&lt;/code> 端点&lt;/a> 来确定其健康状态。通过这个端点，&lt;em>daprd&lt;/em> 进程或 sidecar 可以：&lt;/p>
&lt;ul>
&lt;li>检查整体健康状况&lt;/li>
&lt;li>在初始化期间确认 Dapr sidecar 的就绪状态&lt;/li>
&lt;li>在 Kubernetes 中确定就绪和存活状态&lt;/li>
&lt;/ul>
&lt;p>在本指南中，您将了解 Dapr &lt;code>/healthz&lt;/code> 端点如何与应用托管平台（如 Kubernetes）以及 Dapr SDK 的健康检查功能集成。&lt;/p>


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

 Dapr actor 也有一个健康 API 端点，Dapr 会探测应用程序以响应 Dapr 发出的信号，确认 actor 应用程序是健康且正在运行的。请参阅 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/actors_api/#health-check">actor 健康 API&lt;/a>。

&lt;/div>

&lt;p>下图展示了 Dapr sidecar 启动时，healthz 端点和应用通道初始化的步骤。&lt;/p>
&lt;img src="https://v1-18.docs.dapr.io/images/healthz-outbound.png" width="800" alt="Dapr 检查出站健康连接的图示。" />
&lt;h2 id="出站健康端点">出站健康端点&lt;/h2>
&lt;p>如上图中的红色边界线所示，&lt;code>v1.0/healthz/&lt;/code> 端点用于等待以下情况：&lt;/p>
&lt;ul>
&lt;li>所有组件已初始化；&lt;/li>
&lt;li>Dapr HTTP 端口可用；&lt;em>并且，&lt;/em>&lt;/li>
&lt;li>应用通道已初始化。&lt;/li>
&lt;/ul>
&lt;p>这用于确认 Dapr sidecar 的完整初始化及其健康状况。&lt;/p>
&lt;p>您可以通过设置 &lt;code>DAPR_HEALTH_TIMEOUT&lt;/code> 环境变量来控制健康检查的超时时间，这在高延迟环境中可能很重要。&lt;/p>
&lt;p>另一方面，如上图中的绿色边界线所示，当 &lt;code>v1.0/healthz/outbound&lt;/code> 端点返回成功时：&lt;/p>
&lt;ul>
&lt;li>所有组件已初始化；&lt;/li>
&lt;li>Dapr HTTP 端口可用；&lt;em>但，&lt;/em>&lt;/li>
&lt;li>应用通道尚未建立。&lt;/li>
&lt;/ul>
&lt;p>在 Dapr SDK 中，&lt;code>waitForSidecar&lt;/code>/&lt;code>wait_until_ready&lt;/code> 方法（取决于&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/resiliency/health-checks/sidecar-health/#sdks-supporting-outbound-health-endpoint">您使用的 SDK&lt;/a>）用于通过 &lt;code>v1.0/healthz/outbound&lt;/code> 端点进行此特定检查。使用这种方法，您的应用程序可以在应用通道初始化之前调用 Dapr sidecar API，例如，通过 secret API 读取 secret。&lt;/p></description></item></channel></rss>