|
1157 | 1157 | </span> |
1158 | 1158 | </a> |
1159 | 1159 |
|
| 1160 | +</li> |
| 1161 | + |
| 1162 | + <li class="md-nav__item"> |
| 1163 | + <a href="#per-ip-top-n-metrics" class="md-nav__link"> |
| 1164 | + <span class="md-ellipsis"> |
| 1165 | + |
| 1166 | + Per-IP Top-N Metrics |
| 1167 | + |
| 1168 | + </span> |
| 1169 | + </a> |
| 1170 | + |
1160 | 1171 | </li> |
1161 | 1172 |
|
1162 | 1173 | <li class="md-nav__item"> |
|
1662 | 1673 | </span> |
1663 | 1674 | </a> |
1664 | 1675 |
|
| 1676 | +</li> |
| 1677 | + |
| 1678 | + <li class="md-nav__item"> |
| 1679 | + <a href="#per-ip-top-n-metrics" class="md-nav__link"> |
| 1680 | + <span class="md-ellipsis"> |
| 1681 | + |
| 1682 | + Per-IP Top-N Metrics |
| 1683 | + |
| 1684 | + </span> |
| 1685 | + </a> |
| 1686 | + |
1665 | 1687 | </li> |
1666 | 1688 |
|
1667 | 1689 | <li class="md-nav__item"> |
@@ -1843,25 +1865,40 @@ <h2 id="secret-expiration">Secret Expiration<a class="headerlink" href="#secret- |
1843 | 1865 | <li><strong>Stats:</strong> <code>secret_temp_expires 1751327999</code>, <code>secret_temp_rejected_expired 12</code></li> |
1844 | 1866 | <li><strong>Prometheus:</strong> <code>teleproxy_secret_expires_timestamp{secret="temp"} 1751327999</code></li> |
1845 | 1867 | </ul> |
| 1868 | +<h2 id="per-ip-top-n-metrics">Per-IP Top-N Metrics<a class="headerlink" href="#per-ip-top-n-metrics" title="Permanent link">¶</a></h2> |
| 1869 | +<p>Surface the heaviest client IPs per secret in <code>/metrics</code> to diagnose rogue clients. Disabled by default — opt in with a top-level config knob, not a per-secret one (cardinality is an operator concern).</p> |
| 1870 | +<p>TOML config:</p> |
| 1871 | +<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="n">top_ips_per_secret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="c1"># 0 disables; max 32</span> |
| 1872 | +</code></pre></div> |
| 1873 | +<p>Docker:</p> |
| 1874 | +<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="nv">TOP_IPS_PER_SECRET</span><span class="o">=</span><span class="m">10</span> |
| 1875 | +</code></pre></div> |
| 1876 | +<p>When enabled, three new Prometheus metric families are emitted, each labelled <code>{secret="...", ip="..."}</code> for the top-N heaviest IPs per secret (sorted by total bytes):</p> |
| 1877 | +<ul> |
| 1878 | +<li><code>teleproxy_secret_ip_connections</code> — current active connections from this IP (gauge)</li> |
| 1879 | +<li><code>teleproxy_secret_ip_bytes_received_total</code> — bytes received from this IP (counter)</li> |
| 1880 | +<li><code>teleproxy_secret_ip_bytes_sent_total</code> — bytes sent to this IP (counter)</li> |
| 1881 | +</ul> |
| 1882 | +<p>Cardinality is bounded at <code>top_ips_per_secret × secret_count</code> labelled samples per family. Counters reset when an IP entry is recycled — Prometheus <code>rate()</code> handles this correctly.</p> |
1846 | 1883 | <h2 id="toml-config-example">TOML Config Example<a class="headerlink" href="#toml-config-example" title="Permanent link">¶</a></h2> |
1847 | 1884 | <p>All per-secret features combined:</p> |
1848 | | -<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="k">[[secret]]</span> |
1849 | | -<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"cafe01234567890abcafe01234567890a"</span> |
1850 | | -<a id="__codelineno-17-3" name="__codelineno-17-3" href="#__codelineno-17-3"></a><span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"family"</span> |
1851 | | -<a id="__codelineno-17-4" name="__codelineno-17-4" href="#__codelineno-17-4"></a><span class="n">limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span> |
1852 | | -<a id="__codelineno-17-5" name="__codelineno-17-5" href="#__codelineno-17-5"></a><span class="n">quota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"50G"</span> |
1853 | | -<a id="__codelineno-17-6" name="__codelineno-17-6" href="#__codelineno-17-6"></a><span class="n">rate_limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"10M"</span> |
1854 | | -<a id="__codelineno-17-7" name="__codelineno-17-7" href="#__codelineno-17-7"></a><span class="n">max_ips</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span> |
1855 | | -<a id="__codelineno-17-8" name="__codelineno-17-8" href="#__codelineno-17-8"></a><span class="n">expires</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ld">2026-12-31T23:59:59Z</span> |
1856 | | -<a id="__codelineno-17-9" name="__codelineno-17-9" href="#__codelineno-17-9"></a> |
1857 | | -<a id="__codelineno-17-10" name="__codelineno-17-10" href="#__codelineno-17-10"></a><span class="k">[[secret]]</span> |
1858 | | -<a id="__codelineno-17-11" name="__codelineno-17-11" href="#__codelineno-17-11"></a><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"dead01234567890abcead01234567890a"</span> |
1859 | | -<a id="__codelineno-17-12" name="__codelineno-17-12" href="#__codelineno-17-12"></a><span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"guest"</span> |
1860 | | -<a id="__codelineno-17-13" name="__codelineno-17-13" href="#__codelineno-17-13"></a><span class="n">limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">50</span> |
1861 | | -<a id="__codelineno-17-14" name="__codelineno-17-14" href="#__codelineno-17-14"></a><span class="n">quota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"5G"</span> |
1862 | | -<a id="__codelineno-17-15" name="__codelineno-17-15" href="#__codelineno-17-15"></a><span class="n">rate_limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"2M"</span> |
1863 | | -<a id="__codelineno-17-16" name="__codelineno-17-16" href="#__codelineno-17-16"></a><span class="n">max_ips</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span> |
1864 | | -<a id="__codelineno-17-17" name="__codelineno-17-17" href="#__codelineno-17-17"></a><span class="n">expires</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ld">2025-06-30T00:00:00Z</span> |
| 1885 | +<div class="highlight"><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="k">[[secret]]</span> |
| 1886 | +<a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"cafe01234567890abcafe01234567890a"</span> |
| 1887 | +<a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a><span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"family"</span> |
| 1888 | +<a id="__codelineno-19-4" name="__codelineno-19-4" href="#__codelineno-19-4"></a><span class="n">limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span> |
| 1889 | +<a id="__codelineno-19-5" name="__codelineno-19-5" href="#__codelineno-19-5"></a><span class="n">quota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"50G"</span> |
| 1890 | +<a id="__codelineno-19-6" name="__codelineno-19-6" href="#__codelineno-19-6"></a><span class="n">rate_limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"10M"</span> |
| 1891 | +<a id="__codelineno-19-7" name="__codelineno-19-7" href="#__codelineno-19-7"></a><span class="n">max_ips</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span> |
| 1892 | +<a id="__codelineno-19-8" name="__codelineno-19-8" href="#__codelineno-19-8"></a><span class="n">expires</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ld">2026-12-31T23:59:59Z</span> |
| 1893 | +<a id="__codelineno-19-9" name="__codelineno-19-9" href="#__codelineno-19-9"></a> |
| 1894 | +<a id="__codelineno-19-10" name="__codelineno-19-10" href="#__codelineno-19-10"></a><span class="k">[[secret]]</span> |
| 1895 | +<a id="__codelineno-19-11" name="__codelineno-19-11" href="#__codelineno-19-11"></a><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"dead01234567890abcead01234567890a"</span> |
| 1896 | +<a id="__codelineno-19-12" name="__codelineno-19-12" href="#__codelineno-19-12"></a><span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"guest"</span> |
| 1897 | +<a id="__codelineno-19-13" name="__codelineno-19-13" href="#__codelineno-19-13"></a><span class="n">limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">50</span> |
| 1898 | +<a id="__codelineno-19-14" name="__codelineno-19-14" href="#__codelineno-19-14"></a><span class="n">quota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"5G"</span> |
| 1899 | +<a id="__codelineno-19-15" name="__codelineno-19-15" href="#__codelineno-19-15"></a><span class="n">rate_limit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"2M"</span> |
| 1900 | +<a id="__codelineno-19-16" name="__codelineno-19-16" href="#__codelineno-19-16"></a><span class="n">max_ips</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span> |
| 1901 | +<a id="__codelineno-19-17" name="__codelineno-19-17" href="#__codelineno-19-17"></a><span class="n">expires</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ld">2025-06-30T00:00:00Z</span> |
1865 | 1902 | </code></pre></div> |
1866 | 1903 |
|
1867 | 1904 |
|
|
0 commit comments