| import{_ as i,C as p,O as l,P as c,ah as u,Q as s,U as n,ai as a,ae as r,aW as e}from"./framework-e4340ccd.js";const d={},k=e('<h1 id="alerting" tabindex="-1"><a class="header-anchor" href="#alerting" aria-hidden="true">#</a> Alerting</h1><h2 id="overview" tabindex="-1"><a class="header-anchor" href="#overview" aria-hidden="true">#</a> Overview</h2><p>The alerting of IoTDB is expected to support two modes:</p><ul><li><p>Writing triggered: the user writes data to the original time series, and every time a piece of data is inserted, the judgment logic of <code>trigger</code> will be triggered. If the alerting requirements are met, an alert is sent to the data sink, The data sink then forwards the alert to the external terminal.</p><ul><li>This mode is suitable for scenarios that need to monitor every piece of data in real time.</li><li>Since the operation in the trigger will affect the data writing performance, it is suitable for scenarios that are not sensitive to the original data writing performance.</li></ul></li><li><p>Continuous query: the user writes data to the original time series, <code>ContinousQuery</code> periodically queries the original time series, and writes the query results into the new time series, Each write triggers the judgment logic of <code>trigger</code>, If the alerting requirements are met, an alert is sent to the data sink, The data sink then forwards the alert to the external terminal.</p><ul><li>This mode is suitable for scenarios where data needs to be regularly queried within a certain period of time.</li><li>It is Suitable for scenarios where the original data needs to be down-sampled and persisted.</li><li>Since the timing query hardly affects the writing of the original time series, it is suitable for scenarios that are sensitive to the performance of the original data writing performance.</li></ul></li></ul><p>With the introduction of the <code>trigger</code> module and the <code>sink</code> module into IoTDB, at present, users can use these two modules with <code>AlertManager</code> to realize the writing triggered alerting mode.</p><h2 id="deploying-alertmanager" tabindex="-1"><a class="header-anchor" href="#deploying-alertmanager" aria-hidden="true">#</a> Deploying AlertManager</h2><h3 id="installation" tabindex="-1"><a class="header-anchor" href="#installation" aria-hidden="true">#</a> Installation</h3><h4 id="precompiled-binaries" tabindex="-1"><a class="header-anchor" href="#precompiled-binaries" aria-hidden="true">#</a> Precompiled binaries</h4>',8),m={href:"https://prometheus.io/download/",target:"_blank",rel:"noopener noreferrer"},v=e(`<p>Running command:</p><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code>./alertmanager <span class="token parameter variable">--config.file</span><span class="token operator">=</span><span class="token operator"><</span>your_file<span class="token operator">></span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h4 id="docker-image" tabindex="-1"><a class="header-anchor" href="#docker-image" aria-hidden="true">#</a> Docker image</h4>`,3),g={href:"https://hub.docker.com/r/prom/alertmanager/",target:"_blank",rel:"noopener noreferrer"},b={href:"https://quay.io/repository/prometheus/alertmanager",target:"_blank",rel:"noopener noreferrer"},h=e(`<p>Running command:</p><div class="language-bash line-numbers-mode" data-ext="sh"><pre class="language-bash"><code><span class="token function">docker</span> run <span class="token parameter variable">--name</span> alertmanager <span class="token parameter variable">-d</span> <span class="token parameter variable">-p</span> <span class="token number">127.0</span>.0.1:9093:9093 quay.io/prometheus/alertmanager |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="configuration" tabindex="-1"><a class="header-anchor" href="#configuration" aria-hidden="true">#</a> Configuration</h3>`,3),y={href:"https://prometheus.io/docs/alerting/latest/configuration/",target:"_blank",rel:"noopener noreferrer"},f=e(`<p>Example:</p><div class="language-yaml line-numbers-mode" data-ext="yml"><pre class="language-yaml"><code><span class="token comment"># alertmanager.yml</span> |
| |
| <span class="token key atrule">global</span><span class="token punctuation">:</span> |
| <span class="token comment"># The smarthost and SMTP sender used for mail notifications.</span> |
| <span class="token key atrule">smtp_smarthost</span><span class="token punctuation">:</span> <span class="token string">'localhost:25'</span> |
| <span class="token key atrule">smtp_from</span><span class="token punctuation">:</span> <span class="token string">'alertmanager@example.org'</span> |
| |
| <span class="token comment"># The root route on which each incoming alert enters.</span> |
| <span class="token key atrule">route</span><span class="token punctuation">:</span> |
| <span class="token comment"># The root route must not have any matchers as it is the entry point for</span> |
| <span class="token comment"># all alerts. It needs to have a receiver configured so alerts that do not</span> |
| <span class="token comment"># match any of the sub-routes are sent to someone.</span> |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> <span class="token string">'team-X-mails'</span> |
| |
| <span class="token comment"># The labels by which incoming alerts are grouped together. For example,</span> |
| <span class="token comment"># multiple alerts coming in for cluster=A and alertname=LatencyHigh would</span> |
| <span class="token comment"># be batched into a single group.</span> |
| <span class="token comment">#</span> |
| <span class="token comment"># To aggregate by all possible labels use '...' as the sole label name.</span> |
| <span class="token comment"># This effectively disables aggregation entirely, passing through all</span> |
| <span class="token comment"># alerts as-is. This is unlikely to be what you want, unless you have</span> |
| <span class="token comment"># a very low alert volume or your upstream notification system performs</span> |
| <span class="token comment"># its own grouping. Example: group_by: [...]</span> |
| <span class="token key atrule">group_by</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'alertname'</span><span class="token punctuation">,</span> <span class="token string">'cluster'</span><span class="token punctuation">]</span> |
| |
| <span class="token comment"># When a new group of alerts is created by an incoming alert, wait at</span> |
| <span class="token comment"># least 'group_wait' to send the initial notification.</span> |
| <span class="token comment"># This way ensures that you get multiple alerts for the same group that start</span> |
| <span class="token comment"># firing shortly after another are batched together on the first</span> |
| <span class="token comment"># notification.</span> |
| <span class="token key atrule">group_wait</span><span class="token punctuation">:</span> 30s |
| |
| <span class="token comment"># When the first notification was sent, wait 'group_interval' to send a batch</span> |
| <span class="token comment"># of new alerts that started firing for that group.</span> |
| <span class="token key atrule">group_interval</span><span class="token punctuation">:</span> 5m |
| |
| <span class="token comment"># If an alert has successfully been sent, wait 'repeat_interval' to</span> |
| <span class="token comment"># resend them.</span> |
| <span class="token key atrule">repeat_interval</span><span class="token punctuation">:</span> 3h |
| |
| <span class="token comment"># All the above attributes are inherited by all child routes and can</span> |
| <span class="token comment"># overwritten on each.</span> |
| |
| <span class="token comment"># The child route trees.</span> |
| <span class="token key atrule">routes</span><span class="token punctuation">:</span> |
| <span class="token comment"># This routes performs a regular expression match on alert labels to</span> |
| <span class="token comment"># catch alerts that are related to a list of services.</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">match_re</span><span class="token punctuation">:</span> |
| <span class="token key atrule">service</span><span class="token punctuation">:</span> ^(foo1<span class="token punctuation">|</span>foo2<span class="token punctuation">|</span>baz)$ |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>X<span class="token punctuation">-</span>mails |
| |
| <span class="token comment"># The service has a sub-route for critical alerts, any alerts</span> |
| <span class="token comment"># that do not match, i.e. severity != critical, fall-back to the</span> |
| <span class="token comment"># parent node and are sent to 'team-X-mails'</span> |
| <span class="token key atrule">routes</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> critical |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>X<span class="token punctuation">-</span>pager |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">service</span><span class="token punctuation">:</span> files |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>Y<span class="token punctuation">-</span>mails |
| |
| <span class="token key atrule">routes</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> critical |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>Y<span class="token punctuation">-</span>pager |
| |
| <span class="token comment"># This route handles all alerts coming from a database service. If there's</span> |
| <span class="token comment"># no team to handle it, it defaults to the DB team.</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">service</span><span class="token punctuation">:</span> database |
| |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>DB<span class="token punctuation">-</span>pager |
| <span class="token comment"># Also group alerts by affected database.</span> |
| <span class="token key atrule">group_by</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>alertname<span class="token punctuation">,</span> cluster<span class="token punctuation">,</span> database<span class="token punctuation">]</span> |
| |
| <span class="token key atrule">routes</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">owner</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>X |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>X<span class="token punctuation">-</span>pager |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">owner</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>Y |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> team<span class="token punctuation">-</span>Y<span class="token punctuation">-</span>pager |
| |
| |
| <span class="token comment"># Inhibition rules allow to mute a set of alerts given that another alert is</span> |
| <span class="token comment"># firing.</span> |
| <span class="token comment"># We use this to mute any warning-level notifications if the same alert is</span> |
| <span class="token comment"># already critical.</span> |
| <span class="token key atrule">inhibit_rules</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">source_match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> <span class="token string">'critical'</span> |
| <span class="token key atrule">target_match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> <span class="token string">'warning'</span> |
| <span class="token comment"># Apply inhibition if the alertname is the same.</span> |
| <span class="token comment"># CAUTION: </span> |
| <span class="token comment"># If all label names listed in \`equal\` are missing </span> |
| <span class="token comment"># from both the source and target alerts,</span> |
| <span class="token comment"># the inhibition rule will apply!</span> |
| <span class="token key atrule">equal</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'alertname'</span><span class="token punctuation">]</span> |
| |
| |
| <span class="token key atrule">receivers</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'team-X-mails'</span> |
| <span class="token key atrule">email_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">to</span><span class="token punctuation">:</span> <span class="token string">'team-X+alerts@example.org, team-Y+alerts@example.org'</span> |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'team-X-pager'</span> |
| <span class="token key atrule">email_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">to</span><span class="token punctuation">:</span> <span class="token string">'team-X+alerts-critical@example.org'</span> |
| <span class="token key atrule">pagerduty_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">routing_key</span><span class="token punctuation">:</span> <team<span class="token punctuation">-</span>X<span class="token punctuation">-</span>key<span class="token punctuation">></span> |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'team-Y-mails'</span> |
| <span class="token key atrule">email_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">to</span><span class="token punctuation">:</span> <span class="token string">'team-Y+alerts@example.org'</span> |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'team-Y-pager'</span> |
| <span class="token key atrule">pagerduty_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">routing_key</span><span class="token punctuation">:</span> <team<span class="token punctuation">-</span>Y<span class="token punctuation">-</span>key<span class="token punctuation">></span> |
| |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'team-DB-pager'</span> |
| <span class="token key atrule">pagerduty_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">routing_key</span><span class="token punctuation">:</span> <team<span class="token punctuation">-</span>DB<span class="token punctuation">-</span>key<span class="token punctuation">></span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>In the following example, we used the following configuration:</p><div class="language-yaml line-numbers-mode" data-ext="yml"><pre class="language-yaml"><code><span class="token comment"># alertmanager.yml</span> |
| |
| <span class="token key atrule">global</span><span class="token punctuation">:</span> |
| <span class="token key atrule">smtp_smarthost</span><span class="token punctuation">:</span> <span class="token string">''</span> |
| <span class="token key atrule">smtp_from</span><span class="token punctuation">:</span> <span class="token string">''</span> |
| <span class="token key atrule">smtp_auth_username</span><span class="token punctuation">:</span> <span class="token string">''</span> |
| <span class="token key atrule">smtp_auth_password</span><span class="token punctuation">:</span> <span class="token string">''</span> |
| <span class="token key atrule">smtp_require_tls</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> |
| |
| <span class="token key atrule">route</span><span class="token punctuation">:</span> |
| <span class="token key atrule">group_by</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'alertname'</span><span class="token punctuation">]</span> |
| <span class="token key atrule">group_wait</span><span class="token punctuation">:</span> 1m |
| <span class="token key atrule">group_interval</span><span class="token punctuation">:</span> 10m |
| <span class="token key atrule">repeat_interval</span><span class="token punctuation">:</span> 10h |
| <span class="token key atrule">receiver</span><span class="token punctuation">:</span> <span class="token string">'email'</span> |
| |
| <span class="token key atrule">receivers</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">'email'</span> |
| <span class="token key atrule">email_configs</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">to</span><span class="token punctuation">:</span> <span class="token string">''</span> |
| |
| <span class="token key atrule">inhibit_rules</span><span class="token punctuation">:</span> |
| <span class="token punctuation">-</span> <span class="token key atrule">source_match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> <span class="token string">'critical'</span> |
| <span class="token key atrule">target_match</span><span class="token punctuation">:</span> |
| <span class="token key atrule">severity</span><span class="token punctuation">:</span> <span class="token string">'warning'</span> |
| <span class="token key atrule">equal</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">'alertname'</span><span class="token punctuation">]</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="api" tabindex="-1"><a class="header-anchor" href="#api" aria-hidden="true">#</a> API</h3>`,5),w=s("code",null,"AlertManager",-1),_=s("code",null,"v1",-1),q=s("code",null,"v2",-1),x=s("code",null,"AlertManager",-1),A=s("code",null,"v2",-1),E={href:"https://github.com/prometheus/alertmanager/blob/master/api/v2/openapi.yaml",target:"_blank",rel:"noopener noreferrer"},T=e('<p>By default, the prefix is <code>/api/v1</code> or <code>/api/v2</code> and the endpoint for sending alerts is <code>/api/v1/alerts</code> or <code>/api/v2/alerts</code>. If the user specifies <code>--web.route-prefix</code>, for example <code>--web.route-prefix=/alertmanager/</code>, then the prefix will become <code>/alertmanager/api/v1</code> or <code>/alertmanager/api/v2</code>, and the endpoint that sends the alert becomes <code>/alertmanager/api/v1/alerts</code> or <code>/alertmanager/api/v2/alerts</code>.</p><h2 id="creating-trigger" tabindex="-1"><a class="header-anchor" href="#creating-trigger" aria-hidden="true">#</a> Creating trigger</h2><h3 id="writing-the-trigger-class" tabindex="-1"><a class="header-anchor" href="#writing-the-trigger-class" aria-hidden="true">#</a> Writing the trigger class</h3>',3),M=s("code",null,"AlertManagerSink",-1),S=e(`<p>The following example creates the <code>org.apache.iotdb.trigger.AlertingExample</code> class, Its alertManagerHandler member variables can send alerts to the AlertManager instance at the address of <code>http://127.0.0.1:9093/</code>.</p><p>When <code>value> 100.0</code>, send an alert of <code>critical</code> severity; when <code>50.0 <value <= 100.0</code>, send an alert of <code>warning</code> severity .</p><div class="language-java line-numbers-mode" data-ext="java"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>trigger</span><span class="token punctuation">;</span> |
| |
| <span class="token comment">/* |
| package importing is omitted here |
| */</span> |
| |
| <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AlertingExample</span> <span class="token keyword">implements</span> <span class="token class-name">Trigger</span> <span class="token punctuation">{</span> |
| |
| <span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">AlertManagerHandler</span> alertManagerHandler <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlertManagerHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| <span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">AlertManagerConfiguration</span> alertManagerConfiguration <span class="token operator">=</span> |
| <span class="token keyword">new</span> <span class="token class-name">AlertManagerConfiguration</span><span class="token punctuation">(</span><span class="token string">"http://127.0.0.1:9093/api/v2/alerts"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| <span class="token keyword">private</span> <span class="token class-name">String</span> alertname<span class="token punctuation">;</span> |
| |
| <span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">></span></span> labels <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| <span class="token keyword">private</span> <span class="token keyword">final</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">></span></span> annotations <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onCreate</span><span class="token punctuation">(</span><span class="token class-name">TriggerAttributes</span> attributes<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token keyword">open</span><span class="token punctuation">(</span>alertManagerConfiguration<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| alertname <span class="token operator">=</span> <span class="token string">"alert_test"</span><span class="token punctuation">;</span> |
| |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"series"</span><span class="token punctuation">,</span> <span class="token string">"root.ln.wf01.wt01.temperature"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"value"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"severity"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| |
| annotations<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"summary"</span><span class="token punctuation">,</span> <span class="token string">"high temperature"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| annotations<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"description"</span><span class="token punctuation">,</span> <span class="token string">"{{.alertname}}: {{.series}} is {{.value}}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onDrop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">{</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onStart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token keyword">open</span><span class="token punctuation">(</span>alertManagerConfiguration<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onStop</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token class-name">Double</span> <span class="token function">fire</span><span class="token punctuation">(</span><span class="token keyword">long</span> timestamp<span class="token punctuation">,</span> <span class="token class-name">Double</span> value<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> |
| <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">></span> <span class="token number">100.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"value"</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"severity"</span><span class="token punctuation">,</span> <span class="token string">"critical"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token class-name">AlertManagerEvent</span> alertManagerEvent <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlertManagerEvent</span><span class="token punctuation">(</span>alertname<span class="token punctuation">,</span> labels<span class="token punctuation">,</span> annotations<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">onEvent</span><span class="token punctuation">(</span>alertManagerEvent<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">></span> <span class="token number">50.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"value"</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"severity"</span><span class="token punctuation">,</span> <span class="token string">"warning"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token class-name">AlertManagerEvent</span> alertManagerEvent <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlertManagerEvent</span><span class="token punctuation">(</span>alertname<span class="token punctuation">,</span> labels<span class="token punctuation">,</span> annotations<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">onEvent</span><span class="token punctuation">(</span>alertManagerEvent<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token keyword">return</span> value<span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| |
| <span class="token annotation punctuation">@Override</span> |
| <span class="token keyword">public</span> <span class="token keyword">double</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token function">fire</span><span class="token punctuation">(</span><span class="token keyword">long</span><span class="token punctuation">[</span><span class="token punctuation">]</span> timestamps<span class="token punctuation">,</span> <span class="token keyword">double</span><span class="token punctuation">[</span><span class="token punctuation">]</span> values<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">Exception</span> <span class="token punctuation">{</span> |
| <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">double</span> value <span class="token operator">:</span> values<span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">></span> <span class="token number">100.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"value"</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"severity"</span><span class="token punctuation">,</span> <span class="token string">"critical"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token class-name">AlertManagerEvent</span> alertManagerEvent <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlertManagerEvent</span><span class="token punctuation">(</span>alertname<span class="token punctuation">,</span> labels<span class="token punctuation">,</span> annotations<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">onEvent</span><span class="token punctuation">(</span>alertManagerEvent<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">></span> <span class="token number">50.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"value"</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| labels<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"severity"</span><span class="token punctuation">,</span> <span class="token string">"warning"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token class-name">AlertManagerEvent</span> alertManagerEvent <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlertManagerEvent</span><span class="token punctuation">(</span>alertname<span class="token punctuation">,</span> labels<span class="token punctuation">,</span> annotations<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| alertManagerHandler<span class="token punctuation">.</span><span class="token function">onEvent</span><span class="token punctuation">(</span>alertManagerEvent<span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| <span class="token punctuation">}</span> |
| <span class="token keyword">return</span> values<span class="token punctuation">;</span> |
| <span class="token punctuation">}</span> |
| <span class="token punctuation">}</span> |
| |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="creating-trigger-1" tabindex="-1"><a class="header-anchor" href="#creating-trigger-1" aria-hidden="true">#</a> Creating trigger</h3><p>The following SQL statement registered the trigger named <code>root-ln-wf01-wt01-alert</code> on the <code>root.ln.wf01.wt01.temperature</code> time series, whose operation logic is defined by <code>org.apache.iotdb.trigger.AlertingExample</code> java class.</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code> <span class="token keyword">CREATE</span> <span class="token keyword">TRIGGER</span> <span class="token identifier"><span class="token punctuation">\`</span>root-ln-wf01-wt01-alert<span class="token punctuation">\`</span></span> |
| <span class="token keyword">AFTER</span> <span class="token keyword">INSERT</span> |
| <span class="token keyword">ON</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">.</span>temperature |
| <span class="token keyword">AS</span> <span class="token string">"org.apache.iotdb.trigger.AlertingExample"</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="writing-data" tabindex="-1"><a class="header-anchor" href="#writing-data" aria-hidden="true">#</a> Writing data</h2><p>When we finish the deployment and startup of AlertManager as well as the creation of Trigger, we can test the alerting by writing data to the time series.</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">,</span> temperature<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">,</span> temperature<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">,</span> temperature<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">60</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">,</span> temperature<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| <span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> root<span class="token punctuation">.</span>ln<span class="token punctuation">.</span>wf01<span class="token punctuation">.</span>wt01<span class="token punctuation">(</span><span class="token keyword">timestamp</span><span class="token punctuation">,</span> temperature<span class="token punctuation">)</span> <span class="token keyword">VALUES</span> <span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">120</span><span class="token punctuation">)</span><span class="token punctuation">;</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>After executing the above writing statements, we can receive an alerting email. Because our <code>AlertManager</code> configuration above makes alerts of <code>critical</code> severity inhibit those of <code>warning</code> severity, the alerting email we receive only contains the alert triggered by the writing of <code>(5, 120)</code>.</p><img width="669" alt="alerting" src="https://alioss.timecho.com/docs/img/github/115957896-a9791080-a537-11eb-9962-541412bdcee6.png">`,11);function I(O,N){const t=p("ExternalLinkIcon"),o=p("RouterLink");return l(),c("div",null,[u(` |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| `),k,s("p",null,[n("The pre-compiled binary file can be downloaded "),s("a",m,[n("here"),a(t)]),n(".")]),v,s("p",null,[n("Available at "),s("a",g,[n("Quay.io"),a(t)]),n(" or "),s("a",b,[n("Docker Hub"),a(t)]),n(".")]),h,s("p",null,[n("The following is an example, which can cover most of the configuration rules. For detailed configuration rules, see "),s("a",y,[n("here"),a(t)]),n(".")]),f,s("p",null,[n("The "),w,n(" API is divided into two versions, "),_,n(" and "),q,n(". The current "),x,n(" API version is "),A,n(" (For configuration see "),s("a",E,[n("api/v2/openapi.yaml"),a(t)]),n(").")]),T,s("p",null,[n("The user defines a trigger by creating a Java class and writing the logic in the hook. Please refer to "),a(o,{to:"/UserGuide/V0.13.x/Process-Data/Triggers.html"},{default:r(()=>[n("Triggers")]),_:1}),n(" for the specific configuration process and the usage method of "),M,n(" related tools provided by the Sink module.")]),S])}const L=i(d,[["render",I],["__file","Alerting.html.vue"]]);export{L as default}; |