blob: 60c25894a24a3e1bcad6ae69659b8f7906a78da4 [file] [log] [blame]
import{_ as c,C as o,O as l,P as u,ah as r,Q as s,U as n,ai as a,ae as i,aW as e}from"./framework-e4340ccd.js";const k={},d=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>',4),m=s("code",null,"AlertManager",-1),v=e('<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>',3),g={href:"https://prometheus.io/download/",target:"_blank",rel:"noopener noreferrer"},b=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">&lt;</span>your_file<span class="token operator">&gt;</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),h={href:"https://hub.docker.com/r/prom/alertmanager/",target:"_blank",rel:"noopener noreferrer"},y={href:"https://quay.io/repository/prometheus/alertmanager",target:"_blank",rel:"noopener noreferrer"},f=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),w={href:"https://prometheus.io/docs/alerting/latest/configuration/",target:"_blank",rel:"noopener noreferrer"},_=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">&#39;localhost:25&#39;</span>
<span class="token key atrule">smtp_from</span><span class="token punctuation">:</span> <span class="token string">&#39;alertmanager@example.org&#39;</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">&#39;team-X-mails&#39;</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 &#39;...&#39; 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">&#39;alertname&#39;</span><span class="token punctuation">,</span> <span class="token string">&#39;cluster&#39;</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 &#39;group_wait&#39; 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 &#39;group_interval&#39; 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 &#39;repeat_interval&#39; 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 &#39;team-X-mails&#39;</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&#39;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">&#39;critical&#39;</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">&#39;warning&#39;</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">&#39;alertname&#39;</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">&#39;team-X-mails&#39;</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">&#39;team-X+alerts@example.org, team-Y+alerts@example.org&#39;</span>
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">&#39;team-X-pager&#39;</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">&#39;team-X+alerts-critical@example.org&#39;</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> &lt;team<span class="token punctuation">-</span>X<span class="token punctuation">-</span>key<span class="token punctuation">&gt;</span>
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">&#39;team-Y-mails&#39;</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">&#39;team-Y+alerts@example.org&#39;</span>
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">&#39;team-Y-pager&#39;</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> &lt;team<span class="token punctuation">-</span>Y<span class="token punctuation">-</span>key<span class="token punctuation">&gt;</span>
<span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">&#39;team-DB-pager&#39;</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> &lt;team<span class="token punctuation">-</span>DB<span class="token punctuation">-</span>key<span class="token punctuation">&gt;</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">&#39;&#39;</span>
<span class="token key atrule">smtp_from</span><span class="token punctuation">:</span> <span class="token string">&#39;&#39;</span>
<span class="token key atrule">smtp_auth_username</span><span class="token punctuation">:</span> <span class="token string">&#39;&#39;</span>
<span class="token key atrule">smtp_auth_password</span><span class="token punctuation">:</span> <span class="token string">&#39;&#39;</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">&#39;alertname&#39;</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">&#39;email&#39;</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">&#39;email&#39;</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">&#39;&#39;</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">&#39;critical&#39;</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">&#39;warning&#39;</span>
<span class="token key atrule">equal</span><span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token string">&#39;alertname&#39;</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),T=s("code",null,"AlertManager",-1),q=s("code",null,"v1",-1),A=s("code",null,"v2",-1),x=s("code",null,"AlertManager",-1),S=s("code",null,"v2",-1),E={href:"https://github.com/prometheus/alertmanager/blob/master/api/v2/openapi.yaml",target:"_blank",rel:"noopener noreferrer"},I=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),L=e(`<p>The following example creates the <code>org.apache.iotdb.trigger.ClusterAlertingExample</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&gt; 100.0</code>, send an alert of <code>critical</code> severity; when <code>50.0 &lt;value &lt;= 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 comment">/*
* 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
* &quot;License&quot;); 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
* &quot;AS IS&quot; 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.
*/</span>
<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 keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>db<span class="token punctuation">.</span>engine<span class="token punctuation">.</span>trigger<span class="token punctuation">.</span>sink<span class="token punctuation">.</span>alertmanager<span class="token punctuation">.</span></span><span class="token class-name">AlertManagerConfiguration</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>db<span class="token punctuation">.</span>engine<span class="token punctuation">.</span>trigger<span class="token punctuation">.</span>sink<span class="token punctuation">.</span>alertmanager<span class="token punctuation">.</span></span><span class="token class-name">AlertManagerEvent</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>db<span class="token punctuation">.</span>engine<span class="token punctuation">.</span>trigger<span class="token punctuation">.</span>sink<span class="token punctuation">.</span>alertmanager<span class="token punctuation">.</span></span><span class="token class-name">AlertManagerHandler</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>trigger<span class="token punctuation">.</span>api<span class="token punctuation">.</span></span><span class="token class-name">Trigger</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>trigger<span class="token punctuation">.</span>api<span class="token punctuation">.</span></span><span class="token class-name">TriggerAttributes</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>tsfile<span class="token punctuation">.</span>file<span class="token punctuation">.</span>metadata<span class="token punctuation">.</span>enums<span class="token punctuation">.</span></span><span class="token class-name">TSDataType</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>tsfile<span class="token punctuation">.</span>write<span class="token punctuation">.</span>record<span class="token punctuation">.</span></span><span class="token class-name">Tablet</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>iotdb<span class="token punctuation">.</span>tsfile<span class="token punctuation">.</span>write<span class="token punctuation">.</span>schema<span class="token punctuation">.</span></span><span class="token class-name">MeasurementSchema</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span></span><span class="token class-name">Logger</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span></span><span class="token class-name">LoggerFactory</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span><span class="token class-name">IOException</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">HashMap</span></span><span class="token punctuation">;</span>
<span class="token keyword">import</span> <span class="token import"><span class="token namespace">java<span class="token punctuation">.</span>util<span class="token punctuation">.</span></span><span class="token class-name">List</span></span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ClusterAlertingExample</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">static</span> <span class="token keyword">final</span> <span class="token class-name">Logger</span> <span class="token constant">LOGGER</span> <span class="token operator">=</span> <span class="token class-name">LoggerFactory</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token class-name">ClusterAlertingExample</span><span class="token punctuation">.</span><span class="token keyword">class</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">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">&quot;http://127.0.0.1:9093/api/v2/alerts&quot;</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">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">&gt;</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">&lt;</span><span class="token punctuation">&gt;</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">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">String</span><span class="token punctuation">&gt;</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">&lt;</span><span class="token punctuation">&gt;</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>
alertname <span class="token operator">=</span> <span class="token string">&quot;alert_test&quot;</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">&quot;series&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;root.ln.wf01.wt01.temperature&quot;</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">&quot;value&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;&quot;</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">&quot;severity&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;&quot;</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">&quot;summary&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;high temperature&quot;</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">&quot;description&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;{{.alertname}}: {{.series}} is {{.value}}&quot;</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">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">boolean</span> <span class="token function">fire</span><span class="token punctuation">(</span><span class="token class-name">Tablet</span> tablet<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 class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">MeasurementSchema</span><span class="token punctuation">&gt;</span></span> measurementSchemaList <span class="token operator">=</span> tablet<span class="token punctuation">.</span><span class="token function">getSchemas</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> n <span class="token operator">=</span> measurementSchemaList<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> n<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>measurementSchemaList<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getType</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span><span class="token class-name">TSDataType</span><span class="token punctuation">.</span><span class="token constant">DOUBLE</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// for example, we only deal with the columns of Double type</span>
<span class="token keyword">double</span><span class="token punctuation">[</span><span class="token punctuation">]</span> values <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">double</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span> tablet<span class="token punctuation">.</span>values<span class="token punctuation">[</span>i<span class="token punctuation">]</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">&gt;</span> <span class="token number">100.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token constant">LOGGER</span><span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">&quot;trigger value &gt; 100&quot;</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">&quot;value&quot;</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">&quot;severity&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;critical&quot;</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">&gt;</span> <span class="token number">50.0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token constant">LOGGER</span><span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">&quot;trigger value &gt; 50&quot;</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">&quot;value&quot;</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">&quot;severity&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;warning&quot;</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 punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token boolean">true</span><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 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.ClusterAlertingExample</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> STATELESS <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">&quot;org.apache.iotdb.trigger.AlertingExample&quot;</span>
<span class="token keyword">USING</span> URI <span class="token string">&#39;http://jar/ClusterAlertingExample.jar&#39;</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><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 M(N,O){const p=o("RouterLink"),t=o("ExternalLinkIcon");return l(),u("div",null,[r(`
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.
`),d,s("p",null,[n("With the introduction of the "),a(p,{to:"/UserGuide/Master/Trigger/Instructions.html"},{default:i(()=>[n("Trigger")]),_:1}),n(" into IoTDB, at present, users can use these two modules with "),m,n(" to realize the writing triggered alerting mode.")]),v,s("p",null,[n("The pre-compiled binary file can be downloaded "),s("a",g,[n("here"),a(t)]),n(".")]),b,s("p",null,[n("Available at "),s("a",h,[n("Quay.io"),a(t)]),n(" or "),s("a",y,[n("Docker Hub"),a(t)]),n(".")]),f,s("p",null,[n("The following is an example, which can cover most of the configuration rules. For detailed configuration rules, see "),s("a",w,[n("here"),a(t)]),n(".")]),_,s("p",null,[n("The "),T,n(" API is divided into two versions, "),q,n(" and "),A,n(". The current "),x,n(" API version is "),S,n(" (For configuration see "),s("a",E,[n("api/v2/openapi.yaml"),a(t)]),n(").")]),I,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(p,{to:"/UserGuide/Master/Trigger/Implement-Trigger.html"},{default:i(()=>[n("Trigger")]),_:1}),n(" for the specific configuration process.")]),L])}const R=c(k,[["render",M],["__file","Alerting.html.vue"]]);export{R as default};