Sentry 企业级数据安全解决方案 - Relay 操作指南
<p><img title="Sentry 企业级数据安全解决方案 - Relay 操作指南" alt="Sentry 企业级数据安全解决方案 - Relay 操作指南" border="0" src="https://zhuji.jb51.net/uploads/img/202305/384216be558e3aa22aa95e01a9a00c5b.jpg"></p>
<p>
本篇回顾了我们在自托管外部使用 Relay 时的操作指南,即在您的硬件上运行的 Relay 并将事件转发到 sentry.io。</p>
<h3>
注意事项</h3>
<ul>
<li>
我们建议使用官方提供的 Docker 镜像(getsentry/Relay)运行 Relay,该镜像位于 DockerHub 上,并带有 Git 修订标识符,而不是从源代码构建。
<ul>
<li>
https://hub.docker.com/r/getsentry/relay/</li>
</ul>
</li>
<li>
我们建议至少运行两个 Relay 实例(容器),并在它们前面使用反向代理(例如 HAProxy 或 Nginx),以提高可用性并简化 Relay 更新。
<ul>
<li>
https://www.haproxy.org/</li>
<li>
https://nginx.org</li>
</ul>
</li>
<li>
要监控您的 Relay 设置,请配置 日志记录, 指标, 和 健康检查。
<ul>
<li>
https://docs.sentry.io/product/relay/monitoring/#logging</li>
<li>
https://docs.sentry.io/product/relay/monitoring/#metrics</li>
<li>
https://docs.sentry.io/product/relay/monitoring/#health-checks</li>
</ul>
</li>
</ul>
<p>
系统要求和建议</p>
<p>
以下建议假设 Relay 在 Docker 中运行。</p>
<table border-box="" box-sizing:="" break-word="" font-size:="" helvetica="" hiragino="" letter-spacing:="" microsoft="" overflow-wrap:="" pingfang="" sans="" text-align:="" yahei=""><tbody>
<tr>
<th width="99">
<span>资源</span>
</th>
<th width="436">
<span>建议</span>
</th>
</tr>
<tr>
<td>
<span>CPU</span>
</td>
<td width="415">
<ul class="list-paddingleft-2">
<li>
<p>
<span><span>必需</span>: x86-64 (amd64) CPU 架构</span></p>
</li>
<li>
<p>
<span>多核 CPU</span></p>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<span>内存</span>
</td>
<td width="415">
<ul class="list-paddingleft-2">
<li>
<p>
<span>建议每个 Relay 容器至少有 2GB 的 RAM。</span></p>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<span>网络</span>
</td>
<td width="415">
<ul class="list-paddingleft-2">
<li>
<p>
<span>带宽:确保您有足够的容量来接收和转发计划的数据量。默认情况下,Relay 会将所有上游请求压缩到 </span><code background-color:="" border-radius:="" color:="" courier="" font-size:="" overflow-x:="" word-break:=""><span>sentry.io</span></code><span>,但压缩率可能会因提交事件的类型和形状而异。</span></p>
</li>
<li>
<p>
<span>延迟:Relay 可以容忍网络延迟达到某个点。但是建议确保到上游的往返时间保持低于 5 秒。</span></p>
</li>
</ul>
</td>
</tr>
<tr>
<td>
<span>存储</span>
</td>
<td width="415">
<ul class="list-paddingleft-2">
<li>
<p>
<span>Relay 当前不需要磁盘存储。</span></p>
</li>
</ul>
</td>
</tr>
</tbody></table>
<p>
Relay 是一个多线程应用程序,它试图利用所有可用的 CPU 内核。因此,Sentry 强烈建议在多核 CPU 上运行 Relay。如果您的设置预计每秒处理 100 个以上的请求,我们建议在至少四 (4) 个 CPU 内核上运行 Relay。默认情况下,每个 Relay 实例将使用可用内核的总数来调整其线程池的大小。通过配置 limits.max_thread_count 来调整此行为。</p>
<h3>
示例配置</h3>
<p>
此示例配置设置基本日志记录和指标设置,以及更改默认并发级别。</p>
<ol class="dp-sql">
<li class="alt">
<span><span class="comment">---</span><span> </span></span>
</li>
<li>
<span>relay: </span>
</li>
<li class="alt">
<span># The upstream hostname <span class="keyword">is</span><span> taken </span><span class="keyword">from</span><span> </span><span class="op">any</span><span> </span><span class="keyword">of</span><span> your DSNs. </span></span>
</li>
<li>
<span># Go <span class="keyword">to</span><span> your Project Settings, </span><span class="op">and</span><span> </span><span class="keyword">then</span><span> </span><span class="keyword">to</span><span> </span><span class="string">"Client Keys (DSN)"</span><span> </span><span class="keyword">to</span><span> see them. </span></span>
</li>
<li class="alt">
<span>upstream: https://___ORG_INGEST_DOMAIN___. </span>
</li>
<li>
<span>host: 0.0.0.0 </span>
</li>
<li class="alt">
<span>port: 3000 </span>
</li>
<li>
<span>logging: </span>
</li>
<li class="alt">
<span><span class="keyword">level</span><span>: info </span></span>
</li>
<li>
<span>format: json </span>
</li>
<li class="alt">
<span>metrics: </span>
</li>
<li>
<span>statsd: 127.0.0.1:8126 </span>
</li>
<li class="alt">
<span>prefix: relay </span>
</li>
<li>
<span>limits: </span>
</li>
<li class="alt">
<span># Base <span class="keyword">size</span><span> </span><span class="keyword">of</span><span> various internal thread pools. Defaults </span><span class="keyword">to</span><span> the number </span><span class="keyword">of</span><span> logical CPU cores </span></span>
</li>
<li>
<span>max_thread_count: 8 </span>
</li>
</ol>
<p>
有关所有可用选项的详细说明,请参阅配置选项页面。</p>
<h3>
性能调优</h3>
<p>
Relay 提供了多种配置选项。与其他选项相比,更改某些选项对 Relay 的行为的影响更大。以下列表列出了当您想要根据组织的环境和工作负载调整 Relay 时应首先检查的几个选项:</p>
<ul>
<li>
limits.max_concurrent_requests (default: 100)</li>
</ul>
<p>
您的 Relay 实例可以发送到上游 (Sentry) 的并发请求数。如果您的事件量或 Sentry 的连接延迟很高,您可以增加此值以获得额外的吞吐量,尽管增加的代价是额外的网络连接。</p>
<ul>
<li>
cache.event_buffer_size (default: 1000)</li>
</ul>
<p>
在开始拒绝新事件之前,Relay 可以在其本地队列中缓冲多少事件。例如,当网络问题阻止 Relay 将接收到的消息转发到 Sentry 时,增加此值也会增加 Relay 的潜在内存消耗。</p>
<ul>
<li>
cache.event_expiry (in seconds, default: 600)</li>
</ul>
<p>
在丢弃事件之前,Relay 可以将缓冲的事件保留在内存中的时间。如果您预计 Relay 可能需要在内存中保留事件的时间比默认值长,则可以增加此值。</p>
<ul>
<li>
cache.project_expiry (in seconds, default: 300)</li>
</ul>
<p>
为了保持正常运行,Relay 会定期从 Sentry 上游获取项目配置。此设置控制 Relay 获取该配置的频率。您可以减小此值以使配置传播更加频繁。例如,如果您稍后在 Sentry 的项目设置中更改数据清理选项,您的 Relay 实例将更快地意识到这些更改。</p>
<ul>
<li>
cache.project_grace_period (in seconds, default: 0)</li>
</ul>
<p>
项目配置过期后仍可使用多长时间。当上游无法访问时,增加此值可能会有所帮助;例如,由于网络问题。</p>
<h3>
请求路由</h3>
<p>
SDK 在一组端点上与 Sentry 通信。Relay 提供相同的 API 以成为无缝替代品。这需要一组端点可以访问:</p>
<ul>
<li>
/api//envelope/</li>
<li>
/api//minidump/</li>
<li>
/api//security/</li>
<li>
/api//store/</li>
<li>
/api//unreal/</li>
</ul>
<p>
根据 SDK 或客户端,对这些端点的请求使用压缩内容编码(compressed content-encoding)或分块传输编码(chunked transfer-encoding)执行。根据 Relay 前面的基础设施,请检查以下 HTTP 头设置是否正确:</p>
<ul>
<li>
Host: 到此 Relay 的公共主机名</li>
<li>
X-Forwarded-For: 到客户端 IP 地址</li>
<li>
X-Sentry-Auth: 客户端提供的值</li>
</ul>
<p>
代理通常为请求设置默认的最大 body 大小。尤其是原生崩溃报告和附件可能会超出这些限制。我们建议将最大客户端 body 大小配置为 100MB。</p>
<p>
在内部,Relay 向已配置的上游发出请求以转发数据并检索项目配置。我们 强烈建议 不要限制这些请求。目前,Relay 向以下端点发出请求以进行基本操作:</p>
<p>
以上所有端点:</p>
<ul>
<li>
/api/0/relays/projectconfigs/</li>
<li>
/api/0/relays/publickeys/</li>
<li>
/api/0/relays/register/challenge/</li>
<li>
/api/0/relays/register/response/</li>
</ul>
<p>
原文地址:https://mp.weixin.qq.com/s/BBdCg7l5-FpcVUs_0kjIMQ</p>
頁:
[1]