flashduty-knowledge-base 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/iife/en.js CHANGED
@@ -8,7 +8,7 @@ url: "https://docs.flashcat.cloud/en/flashduty/custom-alert-integration-guide"
8
8
  Push alert events from your own system to Flashduty through standard protocols to achieve automated alert noise reduction.
9
9
 
10
10
  :::tips
11
- Flashduty has already adapted webhook protocols for most common alert systems. For these systems, you should first use the corresponding integration for simplicity. This integration provides a standard HTTP interface that requires your development for adaptation. The advantage is that you can push any alert events you want to handle through on-call.
11
+ Flashduty has already adapted webhook protocols for most common alert systems. For these systems, you should first use the corresponding integration for simplicity. This integration provides a standard HTTP interface that requires your development for adaptation. The advantage is that you can push any alert events you want to handle through On-call.
12
12
  :::
13
13
 
14
14
  ## Steps
@@ -42,9 +42,9 @@ When you need to route alert events to different collaboration spaces based on t
42
42
  1. Enter the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
43
43
  2. Select **Standard Alert Event** integration:
44
44
  - **Integration Name**: Define a name for the current integration
45
- 3. Click **Save** and copy the newly generated **Push URL** on the current page for later use
46
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different collaboration spaces based on conditions, or set a default collaboration space as a fallback, and adjust as needed later
47
- 5. Complete
45
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
46
+ 4. Click **Save** and copy the newly generated **push URL** for later use
47
+ 5. Done
48
48
 
49
49
  </details>
50
50
 
@@ -213,7 +213,7 @@ Failed Response:
213
213
  </details> `,a=`---
214
214
  title: "Email Integration"
215
215
  description: "Generate a unique email address in Flashduty to synchronize alert triggers and recoveries through email"
216
- date: "2024-05-11T10:00:00+08:00"
216
+ date: "2025-05-19T10:00:00+08:00"
217
217
  url: "https://docs.flashcat.cloud/en/flashduty/email-integration-guide"
218
218
  ---
219
219
 
@@ -255,8 +255,8 @@ Choose this option when you need to route alerts to different channels based on
255
255
  - **Email Address**: Set an easy-to-remember prefix for the email, which must be unique within your account
256
256
  - **Push Mode**: Choose when the email should trigger or recover alerts
257
257
  3. Copy the **Email Address** from the current page for later use
258
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
259
- 5. Complete
258
+ 4. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
259
+ 5. Done
260
260
 
261
261
  </details>
262
262
  </div>
@@ -312,14 +312,18 @@ attachment_stripped = true
312
312
  Currently, all alerts pushed to Flashduty through email integration are set to Warning severity.
313
313
 
314
314
  `,i=`---
315
- title: "Nightingale/FlashCat Integration"
315
+ title: "Nightingale/Flashcat Integration"
316
316
  description: "Push alert events from Nightingale (n9e) or Flashcat to Flashduty via webhook. When an alert is triggered, send a trigger event to Flashduty; when an alert recovers, send a recovery event to Flashduty"
317
- date: "2024-05-11T10:00:00+08:00"
317
+ date: "2025-05-19T10:00:00+08:00"
318
318
  url: "https://docs.flashcat.cloud/en/flashduty/nightingale-integration-guide"
319
319
  ---
320
320
 
321
321
  Push alert events from Nightingale (n9e) or Flashcat to Flashduty via webhook. When an alert is triggered, send a trigger event to Flashduty; when an alert recovers, send a recovery event to Flashduty.
322
322
 
323
+ In the Nightingale/Flashcat v8.0.0-beta.7+ version, you can configure the collaboration space in the alert notification rules, no longer need to use routing rules.
324
+
325
+ - [v8.0.0-beta.7 +](#v8)
326
+ - [v5~v8.0.0-beta.6](#v7)
323
327
  <div class="hide">
324
328
 
325
329
  ## Prerequisites
@@ -368,16 +372,50 @@ Choose this method when you need to route alert events to different channels bas
368
372
  2. Select **Nightingale/Flashcat** integration:
369
373
  - **Integration Name**: Define a name for the current integration
370
374
  - **Console URL**: (Optional) Enter the Nightingale console URL (domain part only), and Flashduty will generate a Nightingale details link for new alerts
371
- 3. Click **Save** and copy the newly generated **push URL** for later use
372
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
375
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
376
+ 4. Click **Save** and copy the newly generated **push URL** for later use
373
377
  5. Complete
374
378
 
375
379
  </details>
376
380
  </div>
377
381
 
378
- ### In Nightingale/Flashcat
382
+ ## In Nightingale/Flashcat
383
+
384
+ ### Configure in Nightingale/Flashcat v8.0.0-beta.7 + <span id="v8"></span>
385
+
386
+ In the new version, although you can configure the collaboration space directly in the alert notification rules, you still need to create a collaboration space in Flashduty and configure the dispatch strategy.
387
+
388
+ #### Step 1: Add Notification Media
389
+
390
+ 1. Log in to your n9e console, select Alerting > Media types and click **Add**
391
+ 2. Fill in the media name and identifier, select **FlashDuty** type, and enter the integration push URL in the \`URL\` section
392
+ 3. Click **Save** and complete
393
+
394
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-1.png" />
395
+
396
+ #### Step 2: Configure Notification Rules
397
+
398
+ 1. Log in to your n9e console, select Alerting > Rules and click **Add** or edit the existing alert rules
399
+ 2. Configure the basic information as needed
400
+ 3. Select the \`FlashDuty\` notification media added in the previous step
401
+ 4. Select the collaboration space (the collaboration space must be created in [Flashduty](https://console.flashcat.cloud/channel) in advance), and select other options as needed
402
+ 5. Click **Save** and complete
403
+
404
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-2.png" />
405
+
406
+ #### Step 3: Select Notification Rules in Alert Rules
379
407
 
380
- Choose either of these two configuration methods.
408
+ 1. Log in to your n9e console, select Alerting > Alert Rules and click **Add** or edit the existing alert rules
409
+ 2. Select the \`FlashDuty\` notification rule added in the previous step, and select other options as needed
410
+ 3. Click **Save** and complete
411
+
412
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/n9e-3.png" />
413
+
414
+
415
+
416
+ ### Configure in Nightingale/Flashcat v5~v8.0.0-beta.6 <span id="v7"></span>
417
+
418
+ Choose one of the following two methods:
381
419
 
382
420
  #### Method 1: Configure by Strategy
383
421
 
@@ -472,7 +510,7 @@ Nightingale/Flashcat to Flashduty alert severity mapping:
472
510
  `,o=`---
473
511
  title: "Prometheus Integration Guide"
474
512
  description: "Push Prometheus alert events to Flashduty through AlertManager using webhooks. When an alert is triggered, it sends a trigger event to Flashduty, and when the alert recovers, it sends a recovery event."
475
- date: "2024-05-11T10:00:00+08:00"
513
+ date: "2025-05-19T10:00:00+08:00"
476
514
  url: "https://docs.flashcat.cloud/en/flashduty/prometheus-integration-guide"
477
515
  ---
478
516
 
@@ -524,8 +562,8 @@ Choose this method when you need to route alert events to different channels bas
524
562
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
525
563
  2. Select **Prometheus** integration:
526
564
  - **Integration Name**: Define a name for this integration
527
- 3. Click **Save** and copy the newly generated **push URL** for later use
528
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
565
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
566
+ 4. Click **Save** and copy the newly generated **push URL** for later use
529
567
  5. Done
530
568
 
531
569
  </details>
@@ -654,7 +692,7 @@ Prometheus to Flashduty severity mapping:
654
692
  `,s=`---
655
693
  title: "Grafana Integration"
656
694
  description: "Sync Grafana alert events to Flashduty via webhook to achieve automated alert noise reduction."
657
- date: "2024-05-11T10:00:00+08:00"
695
+ date: "2025-05-19T10:00:00+08:00"
658
696
  url: "https://docs.flashcat.cloud/en/flashduty/grafana-integration-guide"
659
697
  ---
660
698
 
@@ -690,9 +728,9 @@ Choose this method when you need to route alerts to different channels based on
690
728
  1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
691
729
  2. Select **Grafana** integration:
692
730
  - **Integration Name**: Define a name for this integration
693
- 3. Click **Save** and copy the newly generated **push URL** for later use
694
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
695
- 5. Complete
731
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
732
+ 4. Click **Save** and copy the newly generated **push URL** for later use
733
+ 5. Done
696
734
 
697
735
  </details>
698
736
  </div>
@@ -767,7 +805,7 @@ The system extracts the \`severity\`, \`priority\`, and \`level\` labels from al
767
805
  `,r=`---
768
806
  title: "Zabbix Integration"
769
807
  description: "Synchronize Zabbix alert events to Flashduty via webhook (supports Zabbix 3.x ~ 6.x versions, with different configuration requirements) to achieve automated alert noise reduction"
770
- date: "2024-05-11T10:00:00+08:00"
808
+ date: "2025-05-19T10:00:00+08:00"
771
809
  url: "https://docs.flashcat.cloud/en/flashduty/zabbix-integration-guide"
772
810
  ---
773
811
 
@@ -776,7 +814,9 @@ Synchronize Zabbix alert events to Flashduty via webhook (supports Zabbix 3.x ~
776
814
  <div class="hide">
777
815
 
778
816
  ## In Flashduty
817
+
779
818
  ---
819
+
780
820
  You can obtain an integration push URL through either of these two methods:
781
821
 
782
822
  ### Using Private Integration
@@ -803,14 +843,15 @@ Choose this method when you need to route alerts to different channels based on
803
843
  1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
804
844
  2. Select **Zabbix** integration:
805
845
  - **Integration Name**: Define a name for this integration
806
- 3. Click **Save** and copy the newly generated **push URL** for later use
807
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
808
- 5. Complete
846
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
847
+ 4. Click **Save** and copy the newly generated **push URL** for later use
848
+ 5. Done
809
849
 
810
850
  </details>
811
851
  </div>
812
852
 
813
- ## In Zabbix
853
+ ## In Zabbix
854
+
814
855
  ---
815
856
 
816
857
  - [7.x version](#v7)
@@ -822,6 +863,7 @@ Choose this method when you need to route alerts to different channels based on
822
863
  ### Version 7.x
823
864
 
824
865
  #### Step 1: Define Flashduty Media Type
866
+
825
867
  <div class="md-block">
826
868
 
827
869
  1. Media type is a transport channel used for sending notifications and alerts in Zabbix. Enter the terminal and download the complete configuration using the following command:
@@ -830,6 +872,7 @@ Choose this method when you need to route alerts to different channels based on
830
872
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/zabbix/zbx_mediatype_flashcat_v7.yml
831
873
 
832
874
  \`\`\`
875
+
833
876
  2. Log in to the Zabbix console, select \`Alert > Media Types\`, click the Import button in the top right corner, enter the editing page, select the configuration file downloaded above, and click Import to complete the import
834
877
  3. Return to the Media Types page to see the imported media type. Click the name to enter the editing page, complete the URL, zabbix_url, and HTTPProxy content:
835
878
 
@@ -841,7 +884,6 @@ wget --header="Referer: https://console.flashcat.cloud" https://download.flashca
841
884
 
842
885
  4. Click Update to save the configuration
843
886
 
844
-
845
887
  #### Step 2: Associate Media Type with User
846
888
 
847
889
  The media type must be associated with a user to send events. The user must have at least read permission for hosts. It is recommended to associate directly with the Admin user. Taking the Admin user as an example:
@@ -857,7 +899,6 @@ The media type must be associated with a user to send events. The user must have
857
899
  2. Click Add button to exit the add media window
858
900
  3. Click Update button to exit the edit user page
859
901
 
860
-
861
902
  #### Step 3: Create Action
862
903
 
863
904
  Sending notifications is one of the operations executed by actions in Zabbix. Therefore, to establish a notification, log in to the Zabbix console, select \`Alerts > Actions > Trigger actions\`, then:
@@ -878,7 +919,6 @@ Sending notifications is one of the operations executed by actions in Zabbix. Th
878
919
  <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-5.png" />
879
920
  <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/zabbix-4.png" />
880
921
 
881
-
882
922
  #### Step 4: Send Events to Flashduty
883
923
 
884
924
  Log in to the Zabbix console, select \`Monitoring > Problems\` to view the latest alert list.
@@ -1062,18 +1102,19 @@ Log in to the Zabbix console, select Monitoring > Problems to view the latest al
1062
1102
  Zabbix to Flashduty alert severity mapping:
1063
1103
 
1064
1104
  | Zabbix | Flashduty | Status |
1065
- | -------------- | -------------- | -------- |
1066
- | Disaster | Critical | Critical |
1067
- | High | Critical | Critical |
1068
- | Average | Warning | Warning |
1069
- | Warning | Warning | Warning |
1070
- | Information | Info | Info |
1071
- | Not classified | Info | Info |
1072
-
1073
- </dv>`,l=`---
1105
+ | -------------- | --------- | -------- |
1106
+ | Disaster | Critical | Critical |
1107
+ | High | Critical | Critical |
1108
+ | Average | Warning | Warning |
1109
+ | Warning | Warning | Warning |
1110
+ | Information | Info | Info |
1111
+ | Not classified | Info | Info |
1112
+
1113
+ </dv>
1114
+ `,l=`---
1074
1115
  title: "Uptime Kuma Integration"
1075
1116
  description: "Sync Uptime Kuma alert events to Flashduty via webhook for automated alert noise reduction"
1076
- date: "2024-05-11T10:00:00+08:00"
1117
+ date: "2025-05-19T10:00:00+08:00"
1077
1118
  url: "https://docs.flashcat.cloud/en/flashduty/uptime-kuma-integration-guide"
1078
1119
  ---
1079
1120
 
@@ -1109,9 +1150,9 @@ Choose this option when you need to route alerts to different channels based on
1109
1150
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1110
1151
  2. Select **Uptime Kuma** integration:
1111
1152
  - **Integration Name**: Define a name for this integration
1112
- 3. Click **Save** and copy the newly generated **push URL** for later use
1113
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1114
- 5. Complete
1153
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1154
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1155
+ 5. Done
1115
1156
 
1116
1157
  </details>
1117
1158
 
@@ -1159,7 +1200,7 @@ Uptime Kuma to Flashduty alert severity mapping:
1159
1200
  </div>`,d=`---
1160
1201
  title: "Alibaba Cloud ARMS Integration"
1161
1202
  description: "Sync Alibaba Cloud ARMS monitoring alerts to Flashduty via webhook for automated alert noise reduction"
1162
- date: "2024-05-11T10:00:00+08:00"
1203
+ date: "2025-05-19T10:00:00+08:00"
1163
1204
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-arms-integration-guide"
1164
1205
  ---
1165
1206
 
@@ -1195,9 +1236,9 @@ Choose this method when you need to route alerts to different channels based on
1195
1236
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1196
1237
  2. Select **Alibaba Cloud ARMS** integration:
1197
1238
  - **Integration Name**: Define a name for this integration
1198
- 3. Click **Save** and copy the newly generated **push URL** for later use
1199
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1200
- 5. Complete
1239
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1240
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1241
+ 5. Done
1201
1242
 
1202
1243
  </details>
1203
1244
  </div>
@@ -1245,7 +1286,7 @@ Alibaba Cloud ARMS monitoring to Flashduty alert severity mapping:
1245
1286
  `,c=`---
1246
1287
  title: "Alibaba Cloud Monitor CM Event Integration"
1247
1288
  description: "Sync Alibaba Cloud Monitor event center alerts to Flashduty via webhook for automated alert noise reduction"
1248
- date: "2024-05-11T10:00:00+08:00"
1289
+ date: "2025-05-19T10:00:00+08:00"
1249
1290
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-event-integration-guide"
1250
1291
  ---
1251
1292
 
@@ -1281,9 +1322,9 @@ Choose this method when you need to route alerts to different channels based on
1281
1322
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1282
1323
  2. Select **Alibaba Cloud CM Event** integration:
1283
1324
  - **Integration Name**: Define a name for this integration
1284
- 3. Click **Save** and copy the newly generated **push URL** for later use
1285
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1286
- 5. Complete
1325
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1326
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1327
+ 5. Done
1287
1328
 
1288
1329
  </details>
1289
1330
  </div>
@@ -1332,7 +1373,7 @@ Alibaba Cloud Monitor event alert to Flashduty severity level mapping:
1332
1373
  </div>`,h=`---
1333
1374
  title: "Alibaba Cloud Monitor CM Metrics Integration"
1334
1375
  description: "Sync Alibaba Cloud Monitor alert events to Flashduty via webhook for automated alert noise reduction"
1335
- date: "2024-05-11T10:00:00+08:00"
1376
+ date: "2025-05-19T10:00:00+08:00"
1336
1377
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-cm-metric-integration-guide"
1337
1378
  ---
1338
1379
 
@@ -1368,9 +1409,9 @@ Choose this option when you need to route alerts to different channels based on
1368
1409
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1369
1410
  2. Select **Alibaba Cloud CM Metrics** integration:
1370
1411
  - **Integration Name**: Define a name for this integration
1371
- 3. Click **Save** and copy the newly generated **push URL** for later use
1372
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1373
- 5. Complete
1412
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1413
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1414
+ 5. Done
1374
1415
 
1375
1416
  </details>
1376
1417
  </div>
@@ -1430,7 +1471,7 @@ Severity level mapping from Alibaba Cloud Monitor to Flashduty:
1430
1471
  `,e=`---
1431
1472
  title: "Alibaba Cloud SLS Integration"
1432
1473
  description: "Sync Alibaba Cloud Log Service (SLS) monitoring alert events to Flashduty via webhook for automated alert noise reduction"
1433
- date: "2024-05-11T10:00:00+08:00"
1474
+ date: "2025-05-19T10:00:00+08:00"
1434
1475
  url: "https://docs.flashcat.cloud/en/flashduty/aliyun-sls-integration-guide"
1435
1476
  ---
1436
1477
 
@@ -1466,9 +1507,9 @@ Choose this option when you need to route alerts to different channels based on
1466
1507
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1467
1508
  2. Select **Alibaba Cloud SLS** integration:
1468
1509
  - **Integration Name**: Define a name for this integration
1469
- 3. Click **Save** and copy the newly generated **push URL** for later use
1470
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1471
- 5. Complete
1510
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1511
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1512
+ 5. Done
1472
1513
 
1473
1514
  </details>
1474
1515
  </div>
@@ -1557,7 +1598,7 @@ Alibaba Cloud SLS monitoring to Flashduty alert severity mapping:
1557
1598
  `,u={CustomAlert:t,Email:a,N9e:i,Prometheus:o,Grafana:s,Zabbix:r,UptimeKuma:l,AliyunARMS:d,AliyunCmEvent:c,AliyunCm:h,AliyunSLS:e,AWSCW:e,AzureMonitor:`---
1558
1599
  title: "AWS CloudWatch Integration"
1559
1600
  description: "Sync AWS CloudWatch alert events to Flashduty via webhook to achieve automated alert noise reduction"
1560
- date: "2024-05-11T10:00:00+08:00"
1601
+ date: "2025-05-19T10:00:00+08:00"
1561
1602
  url: "https://docs.flashcat.cloud/en/flashduty/aws-cloudwatch-integration-guide"
1562
1603
  ---
1563
1604
 
@@ -1593,9 +1634,9 @@ Choose this method when you need to route alerts to different channels based on
1593
1634
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1594
1635
  2. Select **AWS CloudWatch** integration:
1595
1636
  - **Integration Name**: Define a name for this integration
1596
- 3. Click **Save** and copy the newly generated **push URL** for later use
1597
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1598
- 5. Complete
1637
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1638
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1639
+ 5. Done
1599
1640
 
1600
1641
  </details>
1601
1642
  </div>
@@ -1636,7 +1677,7 @@ All CloudWatch metric alarms correspond to Flashduty "warning" severity level al
1636
1677
  `,BaiDuBCM:`---
1637
1678
  title: "Baidu Cloud BCM Integration"
1638
1679
  description: "Sync Baidu Cloud BCM alerts to Flashduty via webhook for automated alert noise reduction"
1639
- date: "2024-05-11T10:00:00+08:00"
1680
+ date: "2025-05-19T10:00:00+08:00"
1640
1681
  url: "https://docs.flashcat.cloud/en/flashduty/baidu-bcm-integration-guide"
1641
1682
  ---
1642
1683
 
@@ -1672,8 +1713,8 @@ Choose this option when you need to route alerts to different channels based on
1672
1713
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1673
1714
  2. Select **Baidu Cloud BCM** integration:
1674
1715
  - **Integration Name**: Define a name for this integration
1675
- 3. Click **Save** and copy the newly generated **push URL** for later use
1676
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1716
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1717
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1677
1718
  5. Done
1678
1719
 
1679
1720
  </details>
@@ -1711,7 +1752,7 @@ Severity level mapping from Baidu Cloud Monitor to Flashduty:
1711
1752
  `,HuaWeiCES:`---
1712
1753
  title: "Huawei Cloud CES Integration"
1713
1754
  description: "Sync Huawei Cloud CES alerts to Flashduty via webhook to achieve automated alert noise reduction"
1714
- date: "2024-05-11T10:00:00+08:00"
1755
+ date: "2025-05-19T10:00:00+08:00"
1715
1756
  url: "https://docs.flashcat.cloud/en/flashduty/huawei-ces-integration-guide"
1716
1757
  ---
1717
1758
 
@@ -1747,8 +1788,8 @@ Choose this method when you need to route alerts to different channels based on
1747
1788
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
1748
1789
  2. Select **Huawei Cloud CES** integration:
1749
1790
  - **Integration Name**: Define a name for this integration
1750
- 3. Click **Save** and copy the newly generated **push URL** for later use
1751
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
1791
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1792
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1752
1793
  5. Done
1753
1794
 
1754
1795
  </details>
@@ -1829,8 +1870,8 @@ Choose this option when you need to route alerts to different channels based on
1829
1870
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1830
1871
  2. Select **Influxdata** integration:
1831
1872
  - **Integration Name**: Define a name for this integration
1832
- 3. Click **Save** and copy the newly generated **push URL** for later use
1833
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1873
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1874
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1834
1875
  5. Done
1835
1876
 
1836
1877
  </details>
@@ -1897,7 +1938,7 @@ Mapping relationship between Influxdata alert events and Flashduty alert severit
1897
1938
  `,OpenFalcon:`---
1898
1939
  title: "Open Falcon Integration"
1899
1940
  description: "Sync Open-Falcon alert events to Flashduty via webhook to achieve automated alert noise reduction"
1900
- date: "2024-05-11T10:00:00+08:00"
1941
+ date: "2025-05-19T10:00:00+08:00"
1901
1942
  url: "https://docs.flashcat.cloud/en/flashduty/open-falcon-integration-guide"
1902
1943
  ---
1903
1944
 
@@ -1933,8 +1974,8 @@ Choose this option when you need to route alerts to different channels based on
1933
1974
  1. Go to Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
1934
1975
  2. Select **Falcon** integration:
1935
1976
  - **Integration Name**: Define a name for this integration
1936
- 3. Click **Save** and copy the newly generated **push URL** for later use
1937
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
1977
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
1978
+ 4. Click **Save** and copy the newly generated **push URL** for later use
1938
1979
  5. Done
1939
1980
 
1940
1981
  </details>
@@ -1981,7 +2022,7 @@ Open-Falcon to Flashduty alert severity mapping:
1981
2022
  `,PagerDuty:`---
1982
2023
  title: "PagerDuty Integration"
1983
2024
  description: "Push alert events to Flashduty through PagerDuty protocol for automated alert noise reduction"
1984
- date: "2024-05-11T10:00:00+08:00"
2025
+ date: "2025-05-19T10:00:00+08:00"
1985
2026
  url: "https://docs.flashcat.cloud/en/flashduty/pagerduty-integration-guide"
1986
2027
  ---
1987
2028
 
@@ -2021,8 +2062,8 @@ Choose this option when you need to route alerts to different channels based on
2021
2062
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2022
2063
  2. Select **PagerDuty** integration:
2023
2064
  - **Integration Name**: Define a name for this integration
2024
- 3. Click **Save** and copy the newly generated **push URL** for later use
2025
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2065
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2066
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2026
2067
  5. Done
2027
2068
 
2028
2069
  </details>
@@ -2143,7 +2184,7 @@ pagerduty_v2_payload_source: mysql.host.name
2143
2184
  `,TencentBK:`---
2144
2185
  title: "Tencent BlueKing Integration"
2145
2186
  description: "Sync Tencent BlueKing monitoring events to Flashduty via webhook for automated alert noise reduction"
2146
- date: "2024-05-11T10:00:00+08:00"
2187
+ date: "2025-05-19T10:00:00+08:00"
2147
2188
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-bk-integration-guide"
2148
2189
  ---
2149
2190
 
@@ -2179,8 +2220,8 @@ Choose this option when you need to route alerts to different channels based on
2179
2220
  1. Go to Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
2180
2221
  2. Select **Tencent BlueKing** integration:
2181
2222
  - **Integration Name**: Define a name for this integration
2182
- 3. Click **Save** and copy the newly generated **push URL** for later use
2183
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2223
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2224
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2184
2225
  5. Done
2185
2226
 
2186
2227
  </details>
@@ -2241,7 +2282,7 @@ Alert severity mapping between BlueKing and Flashduty:
2241
2282
  `,TencentCLS:`---
2242
2283
  title: "Tencent Cloud CLS Integration"
2243
2284
  description: "Sync Tencent Cloud Log Service (CLS) monitoring alerts to Flashduty via webhook for automated alert noise reduction"
2244
- date: "2024-05-11T10:00:00+08:00"
2285
+ date: "2025-05-19T10:00:00+08:00"
2245
2286
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-cls-integration-guide"
2246
2287
  ---
2247
2288
 
@@ -2277,8 +2318,8 @@ Choose this option when you need to route alerts to different channels based on
2277
2318
  1. Go to the Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
2278
2319
  2. Select **Tencent Cloud CLS** integration:
2279
2320
  - **Integration Name**: Define a name for this integration
2280
- 3. Click **Save** and copy the newly generated **push URL** for later use
2281
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2321
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2322
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2282
2323
  5. Done
2283
2324
 
2284
2325
  </details>
@@ -2383,7 +2424,7 @@ Tencent Cloud CLS monitoring alert level mapping to Flashduty:
2383
2424
  `,TencentCm:`---
2384
2425
  title: "Tencent Cloud Monitor CM Integration"
2385
2426
  description: "Sync Tencent Cloud Monitor CM alert events to Flashduty via webhook for automated alert noise reduction"
2386
- date: "2024-05-11T10:00:00+08:00"
2427
+ date: "2025-05-19T10:00:00+08:00"
2387
2428
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-cm-integration-guide"
2388
2429
  ---
2389
2430
 
@@ -2419,8 +2460,8 @@ Choose this option when you need to route alerts to different channels based on
2419
2460
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2420
2461
  2. Select **Tencent Cloud Monitor CM** integration:
2421
2462
  - **Integration Name**: Define a name for this integration
2422
- 3. Click **Save** and copy the newly generated **push URL** for later use
2423
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2463
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2464
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2424
2465
  5. Done
2425
2466
 
2426
2467
  </details>
@@ -2456,7 +2497,7 @@ All metric alerts from Tencent Cloud Monitor correspond to "warning" severity le
2456
2497
  `,TencentEb:`---
2457
2498
  title: "Tencent Cloud EventBridge"
2458
2499
  description: "Sync Tencent Cloud EventBridge events to Flashduty via webhook for automated alert noise reduction"
2459
- date: "2024-05-11T10:00:00+08:00"
2500
+ date: "2025-05-19T10:00:00+08:00"
2460
2501
  url: "https://docs.flashcat.cloud/en/flashduty/tencent-event-bridge-integration-guide"
2461
2502
  ---
2462
2503
 
@@ -2492,8 +2533,8 @@ Choose this method when you need to route alerts to different channels based on
2492
2533
  1. Go to the Flashduty console, select **Integration Center => Alerts** to enter the integration selection page
2493
2534
  2. Select **Tencent Cloud EventBridge** integration:
2494
2535
  - **Integration Name**: Define a name for this integration
2495
- 3. Click **Save** and copy the newly generated **push URL** for later use
2496
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2536
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2537
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2497
2538
  5. Done
2498
2539
 
2499
2540
  </details>
@@ -2584,8 +2625,8 @@ Choose this method when you need to route alerts to different channels based on
2584
2625
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2585
2626
  2. Select **OceanBase** integration:
2586
2627
  - **Integration Name**: Define a name for this integration
2587
- 3. Click **Save** and copy the newly generated **push URL** for later use
2588
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
2628
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2629
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2589
2630
  5. Done
2590
2631
 
2591
2632
  </details>
@@ -2772,8 +2813,8 @@ Choose this option when you need to route alerts to different channels based on
2772
2813
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2773
2814
  2. Select **Graylog** integration:
2774
2815
  - **Integration Name**: Define a name for this integration
2775
- 3. Click **Save** and copy the newly generated **push URL** for later use
2776
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2816
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2817
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2777
2818
  5. Done
2778
2819
 
2779
2820
  </details>
@@ -2867,8 +2908,8 @@ Choose this method when you need to route alerts to different channels based on
2867
2908
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2868
2909
  2. Select **Skywalking** integration:
2869
2910
  - **Integration Name**: Define a name for this integration
2870
- 3. Click **Save** and copy the newly generated **push URL** for later use
2871
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
2911
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
2912
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2872
2913
  5. Done
2873
2914
 
2874
2915
  </details>
@@ -2882,11 +2923,11 @@ Choose this method when you need to route alerts to different channels based on
2882
2923
 
2883
2924
  1. Log in to the Skywalking server
2884
2925
  2. Locate the Skywalking configuration file ./config/alarm-settings.yml
2885
- 3. Add Level tags to the alert rules
2926
+ 3. Add level tags to the alert rules
2886
2927
 
2887
2928
  \`\`\`
2888
2929
  # Tags are supported in v8.6.0+ versions only, can be omitted for other versions
2889
- # Level values: Critical, Warning, Info
2930
+ # level values: Critical, Warning, Info
2890
2931
  # Case sensitive
2891
2932
  rules:
2892
2933
  endpoint_relation_resp_time_rule:
@@ -2894,7 +2935,7 @@ rules:
2894
2935
  period: 10
2895
2936
  message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes
2896
2937
  tags:
2897
- Level: Warning
2938
+ level: Warning
2898
2939
  \`\`\`
2899
2940
  4. Add the FlashDuty webhook URL
2900
2941
 
@@ -2966,8 +3007,8 @@ Choose this option when you need to route alerts to different channels based on
2966
3007
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
2967
3008
  2. Select **Sentry** integration:
2968
3009
  - **Integration Name**: Define a name for this integration
2969
- 3. Click **Save** and copy the newly generated **push URL** for later use
2970
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3010
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3011
+ 4. Click **Save** and copy the newly generated **push URL** for later use
2971
3012
  5. Done
2972
3013
 
2973
3014
  </details>
@@ -3072,8 +3113,8 @@ Choose this option when you need to route alerts to different channels based on
3072
3113
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3073
3114
  2. Select **Jiankongbao** integration:
3074
3115
  - **Integration Name**: Define a name for this integration
3075
- 3. Click **Save** and copy the newly generated **push URL** for later use
3076
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3116
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3117
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3077
3118
  5. Done
3078
3119
 
3079
3120
  </details>
@@ -3163,8 +3204,8 @@ Choose this option when you need to route alerts to different channels based on
3163
3204
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3164
3205
  2. Select **AWS EventBridge** integration:
3165
3206
  - **Integration Name**: Define a name for this integration
3166
- 3. Click **Save** and copy the newly generated **push URL** for later use
3167
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3207
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3208
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3168
3209
  5. Done
3169
3210
 
3170
3211
  </details>
@@ -3265,8 +3306,8 @@ Choose this option when you need to route alerts to different channels based on
3265
3306
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3266
3307
  2. Select **Dynatrace** integration:
3267
3308
  - **Integration Name**: Define a name for this integration
3268
- 3. Click **Save** and copy the newly generated **push URL** for later use
3269
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3309
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3310
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3270
3311
  5. Done
3271
3312
 
3272
3313
  </details>
@@ -3372,8 +3413,8 @@ Choose this option when you need to route alerts to different channels based on
3372
3413
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3373
3414
  2. Select **Huawei Cloud LTS** integration:
3374
3415
  - **Integration Name**: Define a name for this integration
3375
- 3. Click **Save** and copy the newly generated **push URL** for later use
3376
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3416
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3417
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3377
3418
  5. Done
3378
3419
 
3379
3420
  </details>
@@ -3485,8 +3526,8 @@ Choose this option when you need to route alerts to different channels based on
3485
3526
  1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
3486
3527
  2. Select **Google Cloud Monitoring** integration:
3487
3528
  - **Integration Name**: Define a name for this integration
3488
- 3. Click **Save** and copy the newly generated **push URL** for later use
3489
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
3529
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3530
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3490
3531
  5. Done
3491
3532
 
3492
3533
  </details>
@@ -3576,8 +3617,8 @@ Choose this method when you need to route alerts to different channels based on
3576
3617
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3577
3618
  2. Select **Zilliz** integration:
3578
3619
  - **Integration Name**: Define a name for this integration
3579
- 3. Click **Save** and copy the newly generated **push URL** for later use
3580
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3620
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3621
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3581
3622
  5. Done
3582
3623
 
3583
3624
  </details>
@@ -3649,8 +3690,8 @@ Choose this method when you need to route alerts to different channels based on
3649
3690
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3650
3691
  2. Select **Splunk** integration:
3651
3692
  - **Integration Name**: Define a name for this integration
3652
- 3. Click **Save** and copy the newly generated **push URL** for later use
3653
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3693
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3694
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3654
3695
  5. Done
3655
3696
 
3656
3697
  </details>
@@ -3724,8 +3765,8 @@ Choose this method when you need to route alerts to different channels based on
3724
3765
  1. Go to the Flashduty console, select **Integration Center=>Alerts**, and enter the integration selection page
3725
3766
  2. Select **AppDynamics** integration:
3726
3767
  - **Integration Name**: Define a name for this integration
3727
- 3. Click **Save** and copy the newly generated **Push URL** for later use
3728
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3768
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3769
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3729
3770
  5. Done
3730
3771
 
3731
3772
  </details>
@@ -3884,8 +3925,8 @@ Choose this option when you need to route alerts to different channels based on
3884
3925
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3885
3926
  2. Select **SolarWinds** integration:
3886
3927
  - **Integration Name**: Define a name for this integration
3887
- 3. Click **Save** and copy the newly generated **push URL** for later use
3888
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
3928
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
3929
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3889
3930
  5. Done
3890
3931
 
3891
3932
  </details>
@@ -3987,8 +4028,8 @@ Choose this method when you need to route alerts to different channels based on
3987
4028
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
3988
4029
  2. Select **Volcengine CM Metrics** integration:
3989
4030
  - **Integration Name**: Define a name for this integration
3990
- 3. Click **Save** and copy the newly generated **push URL** for later use
3991
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4031
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4032
+ 4. Click **Save** and copy the newly generated **push URL** for later use
3992
4033
  5. Done
3993
4034
 
3994
4035
  </details>
@@ -4076,8 +4117,8 @@ Choose this method when you need to route alerts to different channels based on
4076
4117
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4077
4118
  2. Select **Volcengine CM Metrics** integration:
4078
4119
  - **Integration Name**: Define a name for this integration
4079
- 3. Click **Save** and copy the newly generated **push URL** for later use
4080
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4120
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4121
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4081
4122
  5. Done
4082
4123
 
4083
4124
  </details>
@@ -4163,8 +4204,8 @@ Choose this method when you need to route alerts to different channels based on
4163
4204
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4164
4205
  2. Select **Volcengine TLS** integration:
4165
4206
  - **Integration Name**: Define a name for this integration
4166
- 3. Click **Save** and copy the newly generated **Push URL** for later use
4167
- 4. Click **Create Route** to configure routing rules. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4207
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4208
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4168
4209
  5. Done
4169
4210
 
4170
4211
  </details>
@@ -4300,8 +4341,8 @@ Choose this method when you need to route alerts to different channels based on
4300
4341
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4301
4342
  2. Select **OpManager** integration:
4302
4343
  - **Integration Name**: Define a name for this integration
4303
- 3. Click **Save** and copy the newly generated **push URL** for later use
4304
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
4344
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4345
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4305
4346
  5. Done
4306
4347
 
4307
4348
  </details>
@@ -4434,8 +4475,8 @@ Choose this option when you need to route alerts to different channels based on
4434
4475
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4435
4476
  2. Select **Meraki** integration:
4436
4477
  - **Integration Name**: Define a name for this integration
4437
- 3. Click **Save** and copy the newly generated **push URL** for later use
4438
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4478
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4479
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4439
4480
  5. Done
4440
4481
 
4441
4482
  </details>
@@ -4509,8 +4550,8 @@ Choose this option when you need to route alerts to different channels based on
4509
4550
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4510
4551
  2. Select **StateCloud** integration:
4511
4552
  - **Integration Name**: Define a name for this integration
4512
- 3. Click **Save** and copy the newly generated **push URL** for later use
4513
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4553
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4554
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4514
4555
  5. Done
4515
4556
 
4516
4557
  </details>
@@ -4593,8 +4634,8 @@ Choose this option when you need to route alerts to different channels based on
4593
4634
  1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
4594
4635
  2. Select **Guance** integration:
4595
4636
  - **Integration Name**: Define a name for this integration
4596
- 3. Click **Save** and copy the newly generated **push URL** for later use
4597
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback and adjust as needed later
4637
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
4638
+ 4. Click **Save** and copy the newly generated **push URL** for later use
4598
4639
  5. Done
4599
4640
 
4600
4641
  </details>
@@ -4642,7 +4683,7 @@ Choose this option when you need to route alerts to different channels based on
4642
4683
  `,CustomChange:`---
4643
4684
  title: "Custom Change Event Integration Guide"
4644
4685
  description: "Push change events from your own systems to Flashduty using standard protocols. Most incidents are caused by changes, and the correlation between changes and alerts helps quickly identify incident causes."
4645
- date: "2024-05-11T10:00:00+08:00"
4686
+ date: "2025-05-19T10:00:00+08:00"
4646
4687
  url: "https://docs.flashcat.cloud/en/flashduty/custom-change-integration-guide"
4647
4688
  ---
4648
4689
 
@@ -4699,7 +4740,7 @@ Labels are descriptions of events. You should enrich label content as much as po
4699
4740
  `,Jira:`---
4700
4741
  title: "Jira Issue Events"
4701
4742
  description: "Sync Jira Issue events to Flashduty via webhooks to collect change events."
4702
- date: "2024-05-11T10:00:00+08:00"
4743
+ date: "2025-05-19T10:00:00+08:00"
4703
4744
  url: "https://docs.flashcat.cloud/en/flashduty/jira-integration-guide"
4704
4745
  ---
4705
4746
 
@@ -4908,7 +4949,7 @@ Once published, you can access the application via mobile/PC client. First-time
4908
4949
  **Note:** Messages cannot be pushed normally when exceeding limits, please use notification channels reasonably`,Dingtalk:`---
4909
4950
  title: "Dingtalk Integration"
4910
4951
  description: "Integrate with Dingtalk custom application to receive and respond to alerts within Dingtalk"
4911
- date: "2024-05-11T10:00:00+08:00"
4952
+ date: "2025-05-19T10:00:00+08:00"
4912
4953
  url: "https://docs.flashcat.cloud/en/flashduty/dingtalk-integration-guide"
4913
4954
  ---
4914
4955
 
@@ -5064,7 +5105,7 @@ After the application is released, you can access it via mobile/PC client. First
5064
5105
  `,Wecom:`---
5065
5106
  title: "WeCom Integration"
5066
5107
  description: "Integrate WeCom third-party application to receive and respond to alerts within WeCom"
5067
- date: "2024-05-11T10:00:00+08:00"
5108
+ date: "2025-05-19T10:00:00+08:00"
5068
5109
  url: "https://docs.flashcat.cloud/en/flashduty/wecom-integration-guide"
5069
5110
  ---
5070
5111
 
@@ -5143,7 +5184,7 @@ Integrate WeCom third-party application to receive and respond to alerts within
5143
5184
  `,Slack:`---
5144
5185
  title: "Slack Integration"
5145
5186
  description: "Integrate with Slack to receive and respond to alerts within Slack"
5146
- date: "2024-05-11T10:00:00+08:00"
5187
+ date: "2025-05-19T10:00:00+08:00"
5147
5188
  url: "https://docs.flashcat.cloud/en/flashduty/slack-integration-guide"
5148
5189
  ---
5149
5190
 
@@ -5197,7 +5238,7 @@ Integrate with Slack to receive and respond to alerts within Slack.
5197
5238
  - If the error persists, contact customer support`,MicrosoftTeams:`---
5198
5239
  title: "Microsoft Teams Integration"
5199
5240
  description: "Integrate Microsoft Teams as a third-party application to receive and respond to alerts within Microsoft Teams"
5200
- date: "2024-05-11T10:00:00+08:00"
5241
+ date: "2025-05-19T10:00:00+08:00"
5201
5242
  url: "https://docs.flashcat.cloud/en/flashduty/microsoft-teams-integration-guide"
5202
5243
  ---
5203
5244
 
@@ -5926,25 +5967,42 @@ url: "https://docs.flashcat.cloud/en/flashduty/template-settings"
5926
5967
 
5927
5968
  ## When Are Templates Used?
5928
5969
  ---
5929
- The system uses templates to render [Incident](#Incident) and trigger notifications when assigning incidents. Assignment may occur in the following scenarios:
5970
+ The system uses templates to render [Incident](#Incident) when assigning incidents, which may occur in the following scenarios:
5930
5971
 
5931
5972
  1. Manually create and assign an incident
5932
5973
  2. When an alert event is reported, the system automatically generates an incident and assigns it according to the matched escalation rule
5933
5974
  3. After an incident is created, manually change the assignment (reassign)
5934
- 4. Automatically escalate assignment according to escalation rule settings
5975
+ 4. System automatically escalates according to escalation rule settings
5935
5976
  5. When reopening a closed incident, reassign according to previous settings
5936
5977
 
5937
- We use \`Golang template syntax\` [template/html](https://pkg.go.dev/html/template@go1.18.1) to parse data, allowing you to accomplish any complex rendering requirements.
5978
+ We use \`Golang template syntax\` [template/html](https://pkg.go.dev/html/template@go1.18.1) to parse data, enabling you to accomplish any complex rendering requirements.
5979
+
5980
+ - For documentation, please refer to [here](https://www.topgoer.com/%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93/template.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95), supporting logical conditions, loops, pipelines, and common functions;
5981
+ - We've incorporated the open-source library [sprig](https://github.com/flashcatcloud/sprig/tree/flashcat), which includes hundreds of common functions that you can directly call in templates;
5982
+ - If you wish to introduce more functions, feel free to submit a merge request
5983
+
5984
+ ## How to Configure Notification Templates?
5985
+ ---
5986
+
5987
+ ### Configure Notification Templates
5988
+ The system uses the default template when notifying incidents, which cannot be modified. If you need to customize the notification content, you should create a custom template.
5989
+
5990
+ 1. Enter the \`Templates\` page, click the \`Create Custom Template\` button or \`Copy Default Template\`, and enter the editing page.
5991
+ 2. In the editing page, you can edit the content according to the notification channel used, and reference the content in the template can refer to [What Variables Can I Reference?](#What Variables Can I Reference?)
5992
+ 3. After editing, click the \`Save\` button to save the template.
5993
+
5994
+ ### Use Notification Templates
5995
+ 1. Enter the \`Channel\` -> \`Escalation Rules\` page, click the \`Edit\` button, and enter the editing page.
5996
+ 2. In the strategy configuration section, you can select the template to use **which template** for notification, and select the notification template to use.
5997
+ 3. Other configurations can refer to [Escalation Rules Configuration](https://docs.flashcat.cloud/en/flashduty/escalate-rule-settings).
5998
+ 4. After configuration, click the \`Save\` button to save the escalation policy.
5938
5999
 
5939
- - For documentation, please refer to [here](https://www.topgoer.com/%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93/template.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95), supporting logical conditions, loops, pipelines and common functions
5940
- - We reference the open source library [sprig](https://github.com/flashcatcloud/sprig/tree/flashcat), which includes hundreds of common functions that you can call directly in templates
5941
- - If you want to introduce more functions, feel free to submit a merge request
5942
6000
 
5943
6001
  ## What Variables Can I Reference?
5944
6002
  ---
5945
6003
  **Variable Reference Examples**:
5946
6004
 
5947
- \`\`\`
6005
+ \`\`\`go
5948
6006
  // Reference title
5949
6007
  {{.Title}}
5950
6008
 
@@ -5966,7 +6024,7 @@ ID | string | Yes | Incident ID
5966
6024
  \`Title\` | string | Yes | Incident title
5967
6025
  \`Description\` | string | Yes | Incident description, can be empty
5968
6026
  DetailUrl | string | Yes | Incident detail page URL
5969
- Num | string | Yes | Short incident identifier, for easy visual recognition only, may be duplicate
6027
+ Num | string | Yes | Short incident identifier, for easy visual recognition, may be duplicate
5970
6028
  \`IncidentSeverity\` | string | Yes | Severity level, enum values: Critical, Warning, Info
5971
6029
  IncidentStatus | string | Yes | Incident status, enum values: Critical, Warning, Info, Ok
5972
6030
  \`Progress\` | string | Yes | Processing progress, enum values: Triggered, Processing, Closed
@@ -5975,19 +6033,19 @@ LastTime | int64 | No | Latest event time, latest incorporated event time in ass
5975
6033
  EndTime | int64 | No | Recovery time, when all associated alerts recover, the incident will automatically recover and close. Unix timestamp in seconds, default 0
5976
6034
  SnoozedBefore | int64 | No | Snooze end time, Unix timestamp in seconds, default 0
5977
6035
  AckTime | int64 | No | First acknowledgment time, Unix timestamp in seconds, default 0
5978
- CloseTime | int64 | No | Close time, end_time is incident recovery time, close_time is processing progress close time. Incident automatically closes on recovery, manual closure does not affect recovery. Unix timestamp in seconds, default 0
5979
- Creator | [Person](#Person) | No | Creator information, does not exist when automatically generated by system
5980
- Closer | [Person](#Person) | No | Closer information, does not exist when incident recovers automatically
6036
+ CloseTime | int64 | No | Close time, end_time is incident recovery time, close_time is processing progress close time. Incident automatically closes upon recovery, manual closure doesn't affect recovery. Unix timestamp in seconds, default 0
6037
+ Creator | [Person](#Person) | No | Creator information, not present when automatically generated by system
6038
+ Closer | [Person](#Person) | No | Closer information, not present when incident recovers automatically
5981
6039
  AssignedTo | [Assignment](Assignment) | No | Assignment configuration
5982
- Responders | [][Responder](#Responder) | No | List of responders, initialized based on assignment configuration, will also have corresponding records if non-assigned personnel acknowledge the incident
6040
+ Responders | [][Responder](#Responder) | No | Responder list, initialized based on assignment configuration, also includes records if non-assigned personnel acknowledge the incident
5983
6041
  ChannelID | int64 | No | Channel ID, value is 0 when manually creating global incident
5984
6042
  ChannelName | string | No | Channel name
5985
6043
  GroupMethod | string | No | Grouping method, enum values: n: no grouping, p: rule-based grouping, i: intelligent grouping
5986
- \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings. No information when manually created, label information from first alert when automatically created
6044
+ \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings. No information when manually created, contains first alert's label information when automatically created
5987
6045
  AlertCnt | int64 | Yes | Number of associated alerts
5988
6046
  Alerts | [][Alert](#Alert) | No | Associated alert details, no information when manually created
5989
6047
  FireType | string | No | Notification type, enum values: fire: notify, refire: loop notification
5990
- IsFlapping | bool | No | Whether in flapping state, i.e. frequent occurrence and recovery, related to convergence configuration
6048
+ IsFlapping | bool | No | Whether in flapping state, i.e., frequent occurrence and recovery, related to convergence configuration
5991
6049
  Impact | string | No | Incident impact, filled after incident closure
5992
6050
  RootCause | string | No | Root cause, filled after incident closure
5993
6051
  Resolution | string | No | Resolution, filled after incident closure
@@ -6004,11 +6062,11 @@ email | string | Yes | Email address
6004
6062
  **Assignment** (Indirect Reference):
6005
6063
  Field|Type|Required|Description
6006
6064
  :-:|:-:|:-:|:---
6007
- PersonIDs | []string| No | List of person IDs, exists only when assigning by person
6065
+ PersonIDs | []string| No | Person ID list, exists only when assigning by person
6008
6066
  EscalateRuleID | string | No | Escalation rule ID, exists only when assigning by rule
6009
6067
  EscalateRuleName | string | No | Escalation rule name
6010
6068
  LayerIdx | string | No | Assignment level, corresponds to escalation rule level index, starts from 0
6011
- Type | string | Yes | Assignment type, enum values: assign: assign, reassign: reassign, escalate: escalate assignment, reopen: reopen assignment
6069
+ Type | string | Yes | Assignment type, enum values: assign: assign, reassign: reassign, escalate: escalation assign, reopen: reopen assign
6012
6070
 
6013
6071
  <span id="Responder"></span>
6014
6072
  **Responder** (Indirect Reference):
@@ -6031,44 +6089,44 @@ AlertStatus | string | Yes | Alert status, enum values: Critical, Warning, Info,
6031
6089
  Progress | string | Yes | Processing progress, enum values: Triggered, Processing, Closed
6032
6090
  StartTime | int64 | Yes | Trigger time, Unix timestamp in seconds
6033
6091
  EndTime | int64 | No | Recovery time, Unix timestamp in seconds, default 0
6034
- CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime is processing progress close time. Alert automatically closes on recovery, manual closure does not affect recovery. Unix timestamp in seconds, default 0
6092
+ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime is processing progress close time. Alert automatically closes upon recovery, manual closure doesn't affect alert recovery. Unix timestamp in seconds, default 0
6035
6093
  \`Labels\` | map[string]string | No | Label key-value pairs, both Key and Value are strings
6036
6094
 
6037
- ## FAQ
6095
+ ## Common Questions
6038
6096
  ---
6039
- 1. **How do I know what label information is in \`Labels\`?**
6097
+ 1. **How do I know what label information is available in \`Labels\`?**
6040
6098
 
6041
6099
  - Manually created incidents have no labels
6042
- - Automatically created incidents have labels, same as the labels of the first incorporated alert. Go to the \`Alerts\` page, find an incident and view its details to see all label information
6100
+ - Automatically created incidents have labels, matching the first incorporated alert's labels. Go to the \`Incidents\` page, find an incident and view its details to see all label information
6043
6101
 
6044
6102
  2. **Why is the \`default template\` used when I configured custom template rendering?**
6045
6103
 
6046
6104
  - When creating a custom template, the system uses mock data to render the template to check for syntax errors
6047
- - Mock data has limited coverage and may not match some logical branches in your template, which could fail during actual execution
6048
- - After rendering fails, the system will use the default template as a fallback to ensure message delivery
6049
- - When unsure if a referenced variable exists, it's recommended to use logical conditions to avoid rendering exceptions, e.g. for the \`resource\` label:
6105
+ - Mock data has limited coverage and may not match some logic branches in your template during actual operation
6106
+ - If rendering fails, the system will use the default template as a fallback to ensure message delivery
6107
+ - When unsure if a referenced variable exists, it's recommended to use logical conditions to avoid rendering errors, e.g., for the \`resource\` label:
6050
6108
 
6051
- \`\`\`
6109
+ \`\`\`go
6052
6110
  // Wrong approach: directly read label
6053
6111
  {{.Labels.resource}}
6054
6112
 
6055
- // Recommended approach: check first, then read label
6113
+ // Recommended: check first, then read label
6056
6114
  {{if .Labels.resource}}{{.Labels.resource}}{{end}}
6057
6115
  \`\`\`
6058
6116
 
6059
- 3. **Why are characters like ">" \`escaped\` in the incident title?**
6117
+ 3. **Why are characters like ">" \`escaped\` in incident titles?**
6060
6118
 
6061
- \`\`\`
6119
+ \`\`\`go
6062
6120
  // Use toHtml function
6063
6121
  {{toHtml .Title}}
6064
6122
 
6065
- // Use first non-empty value for rendering, avoid writing complex if logic
6123
+ // Use first non-empty value for rendering, avoiding complex if logic
6066
6124
  {{toHtml .Title .TitleEnglish}}
6067
6125
  \`\`\`
6068
6126
 
6069
- 4. **Time variables are timestamps, how to \`format time\`?**
6127
+ 4. **Time variables are timestamps, how do I \`convert time formats\`?**
6070
6128
 
6071
- \`\`\`
6129
+ \`\`\`go
6072
6130
  // date function converts timestamp to readable format
6073
6131
  // "2006-01-02 15:04:05" is a common format, search online for more formats
6074
6132
  {{date "2006-01-02 15:04:05" .StartTime}}
@@ -6078,24 +6136,24 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6078
6136
  \`\`\`
6079
6137
 
6080
6138
  5. **How to reference external variables inside a for loop?**
6081
- \`\`\`
6139
+ \`\`\`go
6082
6140
  // Add "$" before external variables
6083
6141
  {{range .Responders}}
6084
- {{if eq $.Progress "Triggered"}}
6085
- [Pending]{{.Email}}
6086
- {{end}}
6142
+ {{if eq $.Progress "Triggered"}}
6143
+ [Pending]{{.Email}}
6144
+ {{end}}
6087
6145
  {{end}}
6088
6146
  \`\`\`
6089
- 6. **How to extract field values with "." in names, like "obj.instance" in labels?**
6147
+ 6. **How do I extract field values with "." in names, like "obj.instance" in labels?**
6090
6148
 
6091
- \`\`\`
6149
+ \`\`\`go
6092
6150
  // Use index function
6093
6151
  {{index .Labels "obj.instance"}}
6094
6152
  \`\`\`
6095
6153
 
6096
- 7. **How to extract and deduplicate label information from incident associated alerts?**
6154
+ 7. **How do I extract and deduplicate label information from incident-associated alerts?**
6097
6155
 
6098
- \`\`\`
6156
+ \`\`\`go
6099
6157
  // Use alertLabels function to get deduplicated array
6100
6158
  {{alertLabels . "resource"}}
6101
6159
 
@@ -6103,9 +6161,9 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6103
6161
  {{joinAlertLabels . "resource" "sep"}}
6104
6162
  \`\`\`
6105
6163
 
6106
- 8. **How to iterate and print labels?**
6164
+ 8. **How do I iterate and print labels?**
6107
6165
 
6108
- \`\`\`
6166
+ \`\`\`go
6109
6167
  // Complete iteration
6110
6168
  {{range $k, $v := .Labels}}
6111
6169
  {{$k}} : {{toHtml $v}}
@@ -6125,38 +6183,70 @@ CloseTime | int64 | No | Close time, EndTime is alert recovery time, CloseTime i
6125
6183
  {{end}}
6126
6184
  {{end}}
6127
6185
 
6128
- 9. **How to extract information from JSON fields?**
6186
+ 9. **How do I extract information from JSON fields?**
6129
6187
 
6130
- - The jsonGet function helps you extract values matching conditions from JSON format data via path
6131
- - Target data extracted by jsonGet function must be valid JSON
6188
+ - jsonGet function helps extract values from JSON format data using path
6189
+ - Target data for jsonGet function must be valid JSON
6132
6190
  - Basic usage: {{jsonGet .Labels.xxx "yyy"}}, where xxx must be valid JSON and yyy is a valid extraction path
6133
6191
  - For JSON path syntax, refer to [gjson.dev](https://gjson.dev/), where you can input target data and extraction path for real-time preview
6134
6192
 
6135
- \`\`\`
6193
+ \`\`\`go
6136
6194
  // Extract detail_url field from rule_note label
6137
6195
  {{jsonGet .Labels.rule_note "detail_url"}}
6138
6196
 
6139
6197
  // Extract name field from first element in JSON array
6140
6198
  {{jsonGet .Labels.slice "0.name"}}
6141
6199
 
6142
- // Iterate each element in JSON array, match instanceId field of object with userId==7777
6200
+ // Iterate through JSON array elements, match instanceId field of object with userId==7777
6143
6201
  {{jsonGet .Labels.rule_note "#(userId==7777)#.instanceId" }}
6144
6202
 
6145
6203
  \`\`\`
6204
+ 10. **如何使用逻辑与、或等条件进行内容显示判断?**
6146
6205
 
6147
- 10. **Where can I find more functions and usage examples?**
6206
+ \`\`\`
6207
+ # Supported functions
6208
+ - Use \`and\` function for logical AND judgment
6209
+ - Use \`or\` function for logical OR judgment
6210
+ - Use \`not\` function for logical NOT judgment
6211
+ - Use \`eq\` function for logical equal judgment
6212
+ - Use \`ne\` function for logical not equal judgment
6213
+ - Use \`gt\` function for logical greater than judgment
6214
+ - Use \`ge\` function for logical greater than or equal judgment
6215
+ - Use \`lt\` function for logical less than judgment
6216
+ - Use \`le\` function for logical less than or equal judgment
6217
+
6218
+ # Example usage
6219
+ # Use and function for logical AND judgment
6220
+
6221
+ {{if and (eq .Labels.resource "cpu") (eq .Labels.metric "cpu_usage")}}
6222
+ {{.Labels.resource}} CPU usage exceeds 80%
6223
+ {{end}}
6224
+
6225
+ # Use or function for logical OR judgment
6226
+ {{if or (eq .Labels.resource "cpu") (eq .Labels.metric "cpu_usage")}}
6227
+ {{.Labels.resource}} CPU usage exceeds 80%
6228
+ {{end}}
6229
+
6230
+ # Use not function for logical NOT judgment
6231
+ {{if not (eq .Labels.metric "cpu_usage")}}
6232
+ {{.Labels.metric}} is not CPU usage
6233
+ {{end}}
6234
+
6235
+ \`\`\`
6236
+
6237
+ 11. **How do I find more functions and their usage examples?**
6148
6238
  - Function list: https://github.com/flashcatcloud/sprig/blob/master/functions.go#L97
6149
- - Usage examples: Check corresponding _test.go files, e.g. date function test cases at https://github.com/flashcatcloud/sprig/blob/master/date_test.go
6239
+ - Usage examples: Check corresponding _test.go files, e.g., date function test cases at https://github.com/flashcatcloud/sprig/blob/master/date_test.go
6150
6240
 
6151
- Below are specific instructions for each notification channel.
6241
+ Below are specific instructions for each notification channel.
6152
6242
 
6153
6243
  <div class="feishu_app hide">
6154
6244
 
6155
6245
  ## Feishu/Lark App
6156
6246
  ---
6157
- You need to configure \`Integration Center - IM - Feishu/Lark\` integration first to send message cards. If custom content is not set, the system default template will be used to render all label information:
6247
+ You need to configure \`Integration Center-Instant Message-Feishu\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering all label information:
6158
6248
 
6159
- \`\`\`
6249
+ \`\`\`go
6160
6250
  {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6161
6251
  {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6162
6252
  {{range $k, $v := .Labels}}
@@ -6165,15 +6255,14 @@ You need to configure \`Integration Center - IM - Feishu/Lark\` integration firs
6165
6255
 
6166
6256
  As shown below:
6167
6257
 
6168
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-feishu-1.png" width="800">
6169
-
6258
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/feishu_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6170
6259
 
6171
- If you want to display only key label information, you can refer to the code snippet below:
6260
+ If you want to display only key label information, you can refer to the code segment below:
6172
6261
 
6173
- - We've listed some common labels that you can add or remove as needed
6174
- - In Feishu/Lark app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6262
+ - We've listed some common labels, you can add or remove as needed
6263
+ - In Feishu app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6175
6264
 
6176
- \`\`\`
6265
+ \`\`\`go
6177
6266
  {{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6178
6267
  {{if (index .Labels "check")}}check:{{toHtml (index .Labels "check")}}{{end}}
6179
6268
  {{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}
@@ -6201,9 +6290,9 @@ If you want to display only key label information, you can refer to the code sni
6201
6290
 
6202
6291
  ## Dingtalk App
6203
6292
  ---
6204
- You need to configure \`Integration Center - IM - Dingtalk\` integration first to send message cards. If custom content is not set, the system default template will be used to render all label information:
6293
+ You need to configure \`Integration Center-Instant Message-Dingtalk\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering all label information:
6205
6294
 
6206
- \`\`\`
6295
+ \`\`\`go
6207
6296
  {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6208
6297
  {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6209
6298
  {{range $k, $v := .Labels}}
@@ -6211,15 +6300,15 @@ You need to configure \`Integration Center - IM - Dingtalk\` integration first t
6211
6300
  \`\`\`
6212
6301
 
6213
6302
  As shown below:
6214
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-ding-1.png" width="800">
6215
6303
 
6304
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/dingtalk_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6216
6305
 
6217
- If you want to display only key label information, you can refer to the code snippet below:
6306
+ If you want to display only key label information, you can refer to the code segment below:
6218
6307
 
6219
- - We've listed some common labels that you can add or remove as needed
6220
- - In Dingtalk app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6308
+ - We've listed some common labels, you can add or remove as needed
6309
+ - In Dingtalk app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6221
6310
 
6222
- \`\`\`
6311
+ \`\`\`go
6223
6312
  {{if (index .Labels "resource")}}**resource**:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6224
6313
  {{if (index .Labels "metric")}}**metric**:{{index .Labels "metric"}}{{end}}
6225
6314
  {{if (index .Labels "prom_ql")}}**prom_ql**:{{toHtml (index .Labels "prom_ql")}}{{end}}
@@ -6246,12 +6335,13 @@ If you want to display only key label information, you can refer to the code sni
6246
6335
 
6247
6336
  ## WeCom App
6248
6337
  ---
6249
- You need to configure \`Integration Center - IM - WeCom\` integration first to send message cards. If custom content is not set, the system default template will be used to render only common label information:
6250
6338
 
6251
- - We've listed some common labels that you can add or remove as needed
6252
- - In WeCom app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6339
+ You need to configure \`Integration Center-Instant Message-WeCom\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6253
6340
 
6254
- \`\`\`
6341
+ - We've listed some common labels, you can add or remove as needed
6342
+ - In WeCom app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6343
+
6344
+ \`\`\`go
6255
6345
  {{if (index .Labels "resource")}}resource:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6256
6346
  {{if (index .Labels "metric")}}metric:{{index .Labels "metric"}}{{end}}
6257
6347
  {{if (index .Labels "prom_ql")}}prom_ql:{{toHtml (index .Labels "prom_ql")}}{{end}}
@@ -6275,19 +6365,19 @@ You need to configure \`Integration Center - IM - WeCom\` integration first to s
6275
6365
 
6276
6366
  As shown below:
6277
6367
 
6278
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-wecom-1.png" width="800">
6368
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/wecom_app_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6279
6369
 
6370
+ **Note: WeCom limits card length. In the template rendering area, you can render no more than 8 lines of content. Content beyond 8 lines will be hidden**
6280
6371
 
6281
- **Note: WeCom limits card length. In the template rendering area, you can render up to 8 lines of content. Content beyond 8 lines will be hidden**
6282
6372
  </div>
6283
6373
 
6284
6374
  <div class="slack_app hide">
6285
6375
 
6286
6376
  ## Slack App
6287
6377
  ---
6288
- You need to configure \`Integration Center - IM - Slack\` integration first to send message cards. If custom content is not set, the system default template will be used to render only common label information:
6378
+ You need to configure \`Integration Center-Instant Message-Slack\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6289
6379
 
6290
- \`\`\`
6380
+ \`\`\`go
6291
6381
  {{if .Description}}*description* :{{toHtml .Labels.body_text .Description}}{{end}}
6292
6382
  {{if .Labels.resource}}*resource* : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6293
6383
  {{range $k, $v := .Labels}}
@@ -6298,18 +6388,18 @@ As shown below:
6298
6388
 
6299
6389
  <img src="https://download.flashcat.cloud/flashduty/integration/slack/slack_app_message.png" alt="drawing" style="display: block; margin: 0 auto;" width="600"/>
6300
6390
 
6301
- If you want to display only key label information, you can refer to the code snippet below:
6391
+ If you want to display only key label information, you can refer to the code segment below:
6302
6392
 
6303
- - We've listed some common labels that you can add or remove as needed
6304
- - Messages can be around 15000 characters long, content beyond that will be truncated
6305
- - In Slack app, the system will automatically remove empty lines (caused by non-existent labels) during rendering, so you can configure freely
6393
+ - We've listed some common labels, you can add or remove as needed
6394
+ - Messages can be around 15000 characters long, content beyond this will be truncated
6395
+ - In Slack app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6306
6396
 
6307
- \`\`\`
6397
+ \`\`\`go
6308
6398
  {{if (index .Labels "resource")}}*resource*:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6309
6399
  {{if (index .Labels "metric")}}*metric*:{{index .Labels "metric"}}{{end}}
6310
6400
  {{if (index .Labels "prom_ql")}}*prom_ql*:{{toHtml (index .Labels "prom_ql")}}{{end}}
6311
6401
  {{if (index .Labels "trigger_value")}}*trigger_value*:{{index .Labels "trigger_value"}}{{end}}
6312
- {{if (index .Labels "host_ql")}}*host_ql*:{{toHtml (index .Labels "host_ql")}}{{end}}
6402
+ {{if (index .Labels "host_ql")}}*host_ql*:{{index .Labels "host_ql"}}{{end}}
6313
6403
  {{if (index .Labels "region")}}*region*:{{index .Labels "region"}}{{end}}
6314
6404
  {{if (index .Labels "cluster")}}*cluster*:{{index .Labels "cluster"}}{{end}}
6315
6405
  {{if (index .Labels "business")}}*business*:{{index .Labels "business"}}{{end}}
@@ -6324,19 +6414,392 @@ If you want to display only key label information, you can refer to the code sni
6324
6414
  {{if (index .Labels "name")}}*name*:{{index .Labels "name"}}{{end}}
6325
6415
  {{if (index .Labels "mode")}}*mode*:{{index .Labels "mode"}}{{end}}
6326
6416
  {{if (index .Labels "runbook_url")}}*runbook_url*:{{index .Labels "runbook_url"}}{{end}}
6327
- \`\`\`
6417
+ \`\`\`
6418
+ </div>
6419
+
6420
+ <div class="teams_app hide">
6421
+
6422
+ ## Microsoft Teams App
6423
+ ---
6424
+ You need to configure \`Integration Center-Instant Message-Microsoft Teams\` integration first to send message cards. If custom content is not set, the system default template will be used, rendering only common label information:
6425
+
6426
+ \`\`\`
6427
+ {{if .Description}}**description** :{{toHtml .Labels.body_text .Description}}{{end}}
6428
+ {{if .Labels.resource}}**resource** : {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6429
+ {{range $k, $v := .Labels}}
6430
+ {{if not (in $k "resource" "body_text" "body_text_with_table")}}**{{$k}}** : {{toHtml $v}}{{end}}{{end}}
6431
+ \`\`\`
6432
+
6433
+ As shown below:
6434
+
6435
+ <img src="https://download.flashcat.cloud/flashduty/integration/microsoft-teams/teams_app_message.png" alt="drawing" style="display: block; margin: 0 auto;" width="300"/>
6436
+
6437
+ If you want to display only key label information, you can refer to the code segment below:
6438
+
6439
+ - We've listed some common labels, you can add or remove as needed
6440
+ - Messages can be around 28KB in size, content beyond this will result in an error
6441
+ - In Microsoft Teams app, the system will automatically remove empty rendered lines (due to non-existent labels), so you can configure freely
6442
+
6443
+ \`\`\`
6444
+ {{if (index .Labels "resource")}}**resource**:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}
6445
+ {{if (index .Labels "metric")}}**metric**:{{index .Labels "metric"}}{{end}}
6446
+ {{if (index .Labels "prom_ql")}}**prom_ql**:{{toHtml (index .Labels "prom_ql")}}{{end}}
6447
+ {{if (index .Labels "trigger_value")}}**trigger_value**:{{index .Labels "trigger_value"}}{{end}}
6448
+ {{if (index .Labels "host_ql")}}**host_ql**:{{index .Labels "host_ql"}}{{end}}
6449
+ {{if (index .Labels "region")}}**region**:{{index .Labels "region"}}{{end}}
6450
+ {{if (index .Labels "cluster")}}**cluster**:{{index .Labels "cluster"}}{{end}}
6451
+ {{if (index .Labels "business")}}**business**:{{index .Labels "business"}}{{end}}
6452
+ {{if (index .Labels "service")}}**service**:{{index .Labels "service"}}{{end}}
6453
+ {{if (index .Labels "env")}}**env**:{{index .Labels "env"}}{{end}}
6454
+ {{if (index .Labels "type")}}**type**:{{index .Labels "type"}}{{end}}
6455
+ {{if (index .Labels "topic")}}**topic**:{{index .Labels "topic"}}{{end}}
6456
+ {{if (index .Labels "cpu")}}**cpu**:{{index .Labels "cpu"}}{{end}}
6457
+ {{if (index .Labels "device")}}**device**:{{index .Labels "device"}}{{end}}
6458
+ {{if (index .Labels "path")}}**path**:{{index .Labels "path"}}{{end}}
6459
+ {{if (index .Labels "fstype")}}**fstype**:{{index .Labels "fstype"}}{{end}}
6460
+ {{if (index .Labels "name")}}**name**:{{index .Labels "name"}}{{end}}
6461
+ {{if (index .Labels "mode")}}**mode**:{{index .Labels "mode"}}{{end}}
6462
+ {{if (index .Labels "runbook_url")}}**runbook_url**:{{index .Labels "runbook_url"}}{{end}}
6463
+ \`\`\`
6464
+ </div>
6465
+
6466
+ <div class="sms hide">
6467
+
6468
+ ## Feishu/Lark Bot
6469
+ ---
6470
+ Feishu/Lark bot supports message cards, rich text, and plain text formats. The default template is in message card format.
6471
+
6472
+ - The msg_type field is required for message cards and rich text, otherwise it will be sent as plain text format
6473
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
6474
+ - If no custom content is set, the system default template will be used to display key information:
6475
+
6476
+ 1. Message Card
6477
+ msg_type is required, value should be interactive
6478
+ \`\`\`
6479
+ {
6480
+ "msg_type": "interactive",
6481
+ "card": {
6482
+ "config": {
6483
+ "wide_screen_mode": true,
6484
+ "enable_forward": true
6485
+ },
6486
+ "header": {
6487
+ "template": "{{if eq .IncidentSeverity "Critical"}}red{{else if eq .IncidentSeverity "Warning"}}orange{{else}}yellow{{end}}",
6488
+ "title": {
6489
+ "content": "{{fireReason .}}INC #{{.Num}} {{toHtml .Title}}",
6490
+ "tag": "plain_text"
6491
+ }
6492
+ },
6493
+ "elements": [{
6494
+ "tag": "div",
6495
+ "fields": [{
6496
+ "text": {
6497
+ "tag": "lark_md",
6498
+ "content": "**🏢 Channel:**{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}"
6499
+ }
6500
+ },
6501
+ {
6502
+ "text": {
6503
+ "tag": "lark_md",
6504
+ "content": "**{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} Severity:**{{.IncidentSeverity}}"
6505
+ }
6506
+ },
6507
+ {
6508
+ "text": {
6509
+ "tag": "lark_md",
6510
+ "content": "**⏰ Triggered at:**{{date "2006-01-02 15:04:05" .StartTime}}{{if gt .AlertCnt 1}}"
6511
+ }
6512
+ },
6513
+ {
6514
+ "text": {
6515
+ "tag": "lark_md",
6516
+ "content": "**🔔 Grouped alerts:**{{.AlertCnt}} {{end}}{{if .Labels.resource}}"
6517
+ }
6518
+ },
6519
+ {
6520
+ "tag": "div",
6521
+ "text": {
6522
+ "tag": "lark_md",
6523
+ "content": "**📌 Alert targets:**{{toHtml (joinAlertLabels . "resource" ",")}} {{end}}{{if .Description}}"
6524
+ }
6525
+ },
6526
+ {
6527
+ "tag": "div",
6528
+ "text": {
6529
+ "tag": "lark_md",
6530
+ "content": "**🔍 Description:**{{.Description}}{{end}}{{if gt (len .Responders) 0}}"
6531
+ }
6532
+ },
6533
+ {
6534
+ "tag": "div",
6535
+ "text": {
6536
+ "tag": "lark_md",
6537
+ "content": "**👨‍💻 Responders:**{{range .Responders}}@{{.PersonName}} {{end}}{{end}}"
6538
+ }
6539
+ }
6540
+ ]
6541
+ },
6542
+ {
6543
+ "tag": "hr"
6544
+ },
6545
+ {
6546
+ "tag": "action",
6547
+ "actions": [{
6548
+ "tag": "button",
6549
+ "text": {
6550
+ "tag": "plain_text",
6551
+ "content": "Details"
6552
+ },
6553
+ "type": "primary",
6554
+ "url": "{{.DetailUrl}}"
6555
+ },
6556
+ {
6557
+ "tag": "button",
6558
+ "text": {
6559
+ "tag": "plain_text",
6560
+ "content": "Acknowledge"
6561
+ },
6562
+ "type": "primary",
6563
+ "url": "{{.DetailUrl}}?ack=1"
6564
+ }
6565
+ ]
6566
+ }]
6567
+ }
6568
+ }
6569
+ \`\`\`
6570
+
6571
+ 2. Rich Text
6572
+ msg_type is required, value should be post
6573
+ \`\`\`
6574
+ {
6575
+ "msg_type": "post",
6576
+ "post": {
6577
+ "zh_cn": {
6578
+ "title": "{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} {{fireReason .}}INC #{{.Num}} {{toHtml .Title}}",
6579
+ "content": [
6580
+ [{
6581
+ "tag": "text",
6582
+ "text": "🏢 "
6583
+ }, {
6584
+ "tag": "text",
6585
+ "text": "Channel:",
6586
+ "text_type": "bold"
6587
+ }, {
6588
+ "tag": "text",
6589
+ "text": "{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}\\n"
6590
+ }],
6591
+ [{
6592
+ "tag": "text",
6593
+ "text": "{{if eq .IncidentSeverity "Critical"}}🔴{{else if eq .IncidentSeverity "Warning"}}⚠️{{else}}ℹ️{{end}} "
6594
+ }, {
6595
+ "tag": "text",
6596
+ "text": "Severity:",
6597
+ "text_type": "bold"
6598
+ }, {
6599
+ "tag": "text",
6600
+ "text": "{{.IncidentSeverity}}\\n",
6601
+ "text_type": "{{if eq .IncidentSeverity "Critical"}}bold{{end}}"
6602
+ }],
6603
+ [{
6604
+ "tag": "text",
6605
+ "text": "⏰ "
6606
+ }, {
6607
+ "tag": "text",
6608
+ "text": "Triggered at:",
6609
+ "text_type": "bold"
6610
+ }, {
6611
+ "tag": "text",
6612
+ "text": "{{date "2006-01-02 15:04:05" .StartTime}}\\n"
6613
+ }],
6614
+ {{if gt .AlertCnt 1}}[{
6615
+ "tag": "text",
6616
+ "text": "🔔 "
6617
+ }, {
6618
+ "tag": "text",
6619
+ "text": "Grouped alerts:",
6620
+ "text_type": "bold"
6621
+ }, {
6622
+ "tag": "text",
6623
+ "text": "{{.AlertCnt}}\\n"
6624
+ }],{{end}}
6625
+ {{if .Labels.resource}}[{
6626
+ "tag": "text",
6627
+ "text": "📋 "
6628
+ }, {
6629
+ "tag": "text",
6630
+ "text": "Alert targets:",
6631
+ "text_type": "bold"
6632
+ }, {
6633
+ "tag": "text",
6634
+ "text": "{{toHtml (joinAlertLabels . "resource" ", ")}}\\n"
6635
+ }],{{end}}
6636
+ {{if .Description}}[{
6637
+ "tag": "text",
6638
+ "text": "📝 "
6639
+ }, {
6640
+ "tag": "text",
6641
+ "text": "Description:",
6642
+ "text_type": "bold"
6643
+ }, {
6644
+ "tag": "text",
6645
+ "text": "{{toHtml .Description}}\\n"
6646
+ }],{{end}}
6647
+ {{if gt (len .Responders) 0}}[{
6648
+ "tag": "text",
6649
+ "text": "👨‍💻 "
6650
+ }, {
6651
+ "tag": "text",
6652
+ "text": "Responders:",
6653
+ "text_type": "bold"
6654
+ }, {
6655
+ "tag": "text",
6656
+ "text": "{{range .Responders}}@{{.PersonName}} {{end}}\\n"
6657
+ }],{{end}}
6658
+ [{
6659
+ "tag": "a",
6660
+ "href": "{{.DetailUrl}}",
6661
+ "text": "Details"
6662
+ },{
6663
+ "tag": "text",
6664
+ "text": " "
6665
+ },{
6666
+ "tag": "a",
6667
+ "href": "{{.DetailUrl}}?ack=1",
6668
+ "text": "Acknowledge"
6669
+ }]
6670
+ ]
6671
+ }
6672
+ }
6673
+ }
6674
+ \`\`\`
6675
+
6676
+ 3. Plain Text
6677
+ \`\`\`
6678
+ {{fireReason .}}INC #{{.Num}} {{toHtml .Title}}
6679
+ -----
6680
+ Channel:{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
6681
+ Severity:{{.IncidentSeverity}}
6682
+ Triggered at:{{date "2006-01-02 15:04:05" .StartTime}}
6683
+ Duration:{{ago .StartTime}}{{if gt .AlertCnt 1}}
6684
+ Grouped alerts:{{.AlertCnt}}{{end}}{{if .Labels.resource}}
6685
+ Alert targets:{{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
6686
+ Description:{{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
6687
+ Responders:{{range .Responders}}@{{.PersonName}} {{end}}{{end}}
6688
+ <br>Details:{{.DetailUrl}}
6689
+ \`\`\`
6690
+ </div>
6691
+
6692
+ <div class="dingtalk hide">
6693
+
6694
+ ## Dingtalk Bot
6695
+ ---
6696
+ Dingtalk bot only supports sending Markdown messages ([syntax restrictions](https://open.dingtalk.com/document/robots/custom-robot-access#title-7ur-3ok-s1a)).
6697
+
6698
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
6699
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
6700
+ - If no custom content is set, the system default template will be used to display key information:
6701
+
6702
+ \`\`\`
6703
+ {{fireReason .}}INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}
6704
+
6705
+ ---
6706
+ - Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
6707
+ - Severity: {{$s := colorSeverity .IncidentSeverity}}{{toHtml $s}}
6708
+ - Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
6709
+ - Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
6710
+ - Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
6711
+ - Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
6712
+ - Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
6713
+ - Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
6714
+ ---
6715
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
6716
+ \`\`\`
6717
+ </div>
6718
+
6719
+ <div class="wecom hide">
6720
+
6721
+ ## WeCom Bot
6722
+ ---
6723
+ WeCom bot only supports sending Markdown messages ([syntax restrictions](https://developer.work.weixin.qq.com/document/path/91770#markdown%E7%B1%BB%E5%9E%8B)).
6724
+
6725
+ - The maximum message length is \`4000 bytes, content exceeding this limit will be truncated\`
6726
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
6727
+ - If no custom content is set, the system default template will be used to display key information:
6728
+
6729
+ \`\`\`
6730
+ {{fireReason .}}**INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}**
6731
+ > Channel: <font color="warning">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</font>
6732
+ > Severity: <font color="warning">{{.IncidentSeverity}}</font>
6733
+ > Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
6734
+ > Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
6735
+ > Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
6736
+ > Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
6737
+ > Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
6738
+ > Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
6739
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
6740
+ \`\`\`
6741
+ </div>
6742
+
6743
+ <div class="telegram hide">
6744
+
6745
+ ## Telegram Bot
6746
+ ---
6747
+
6748
+ - Configure a Telegram service address accessible in mainland China
6749
+ - The maximum message length is \`4096 characters, content exceeding this limit will not be sent\`
6750
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
6751
+ - If no custom content is set, the system default template will be used to display key information:
6752
+
6753
+ \`\`\`
6754
+ {{fireReason .}}INC [#{{.Num}}]({{.DetailUrl}}) {{toHtml .Title}}
6755
+ -----
6756
+ Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
6757
+ Severity: {{.IncidentSeverity}}
6758
+ Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
6759
+ Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
6760
+ Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
6761
+ Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}({{.Labels.resource}}){{end}}{{if .Description}}
6762
+ Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
6763
+ Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
6764
+
6765
+ <br>[Details]({{.DetailUrl}})|[Acknowledge]({{.DetailUrl}}?ack=1)
6766
+ \`\`\`
6767
+ </div>
6768
+
6769
+ <div class="slack hide">
6770
+
6771
+ ## Slack Bot
6772
+ ---
6773
+ - Messages can be \`approximately 15000 characters long, content exceeding this limit will be truncated\`
6774
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
6775
+ - If no custom content is set, the system default template will be used to display key information:
6776
+
6777
+ \`\`\`
6778
+ {{fireReason .}}INC <{{.DetailUrl}}|#{{.Num}}> {{toHtml .Title}}
6779
+ -----
6780
+ Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}
6781
+ Severity: {{.IncidentSeverity}}
6782
+ Triggered at: {{date "2006-01-02 15:04:05" .StartTime}}
6783
+ Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}
6784
+ Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}
6785
+ Alert targets: {{toHtml (joinAlertLabels . "resource" ", ")}}{{end}}{{if .Description}}
6786
+ Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}
6787
+ Responders: {{range .Responders}}@{{.PersonName}} {{end}}{{end}}
6788
+ -----
6789
+ <br><{{.DetailUrl}}|Details>|<{{.DetailUrl}}?ack=1|Acknowledge>
6790
+ \`\`\`
6328
6791
  </div>
6329
6792
 
6330
6793
  <div class="zoom hide">
6331
6794
 
6332
6795
  ## Zoom Bot
6333
6796
  ---
6334
- - Messages \`can be around 4000 characters long, content beyond that will be truncated\`
6335
- - If text contains \`<br>\`, during rendering the system will \`first remove empty lines, then replace <br> with newline\`
6336
- - Message format \`follows Zoom message format\`. Current bot application doesn't support Markdown, refer to official website for other formats: https://developers.zoom.us/docs/team-chat-apps/customizing-messages/
6337
- - If custom content is not set, the system default template will be used to display only key information:
6797
+ - Messages can be \`approximately 4000 characters long, content exceeding this limit will be truncated\`
6798
+ - If the text contains \`<br>\`, when rendering, the system will \`first remove empty lines, then replace <br> with line breaks\`
6799
+ - Message format \`follows Zoom message format\`. The current bot application doesn't support Markdown. For other formats, please refer to the official documentation: https://developers.zoom.us/docs/team-chat-apps/customizing-messages/
6800
+ - If no custom content is set, the system default template will be used to display key information:
6338
6801
 
6339
- \`\`\`
6802
+ \`\`\`json
6340
6803
  {"head": {
6341
6804
  "text": "{{fireReason .}}INC [#{{.Num}}] {{toHtml .Title}}",
6342
6805
  "style": {
@@ -6348,7 +6811,7 @@ If you want to display only key label information, you can refer to the code sni
6348
6811
  "body": [
6349
6812
  {
6350
6813
  "type": "message",
6351
- "text": "Channel{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}",
6814
+ "text": "Channel: {{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}",
6352
6815
  "style": {
6353
6816
  "bold": false,
6354
6817
  "italic": false
@@ -6356,7 +6819,7 @@ If you want to display only key label information, you can refer to the code sni
6356
6819
  },
6357
6820
  {
6358
6821
  "type": "message",
6359
- "text": "Severity{{.IncidentSeverity}}",
6822
+ "text": "Severity: {{.IncidentSeverity}}",
6360
6823
  "style": {
6361
6824
  "bold": false,
6362
6825
  "italic": false,
@@ -6365,7 +6828,7 @@ If you want to display only key label information, you can refer to the code sni
6365
6828
  },
6366
6829
  {
6367
6830
  "type": "message",
6368
- "text": "Duration{{ago .StartTime}}{{if gt .AlertCnt 1}}",
6831
+ "text": "Duration: {{ago .StartTime}}{{if gt .AlertCnt 1}}",
6369
6832
  "style": {
6370
6833
  "bold": false,
6371
6834
  "italic": false
@@ -6373,7 +6836,7 @@ If you want to display only key label information, you can refer to the code sni
6373
6836
  },
6374
6837
  {
6375
6838
  "type": "message",
6376
- "text": "Grouped alerts{{.AlertCnt}}{{end}}{{if .Labels.resource}}",
6839
+ "text": "Grouped alerts: {{.AlertCnt}}{{end}}{{if .Labels.resource}}",
6377
6840
  "style": {
6378
6841
  "bold": false,
6379
6842
  "italic": false
@@ -6381,7 +6844,7 @@ If you want to display only key label information, you can refer to the code sni
6381
6844
  },
6382
6845
  {
6383
6846
  "type": "message",
6384
- "text": "Resource:{{.Labels.resource}}{{end}}{{if .Description}}",
6847
+ "text": "Alert targets: {{.Labels.resource}}{{end}}{{if .Description}}",
6385
6848
  "style": {
6386
6849
  "bold": false,
6387
6850
  "italic": false
@@ -6389,7 +6852,7 @@ If you want to display only key label information, you can refer to the code sni
6389
6852
  },
6390
6853
  {
6391
6854
  "type": "message",
6392
- "text": "Description{{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}",
6855
+ "text": "Description: {{toHtml .Description}}{{end}}{{if gt (len .Responders) 0}}",
6393
6856
  "style": {
6394
6857
  "bold": false,
6395
6858
  "italic": false
@@ -6397,7 +6860,7 @@ If you want to display only key label information, you can refer to the code sni
6397
6860
  },
6398
6861
  {
6399
6862
  "type": "message",
6400
- "text": "Responders{{range .Responders}}@{{.PersonName}}{{end}}{{end}}",
6863
+ "text": "Responders: {{range .Responders}}@{{.PersonName}}{{end}}{{end}}",
6401
6864
  "style": {
6402
6865
  "bold": false,
6403
6866
  "italic": false
@@ -6405,12 +6868,12 @@ If you want to display only key label information, you can refer to the code sni
6405
6868
  },
6406
6869
  {
6407
6870
  "type": "message",
6408
- "text": "View details",
6871
+ "text": "View Details",
6409
6872
  "link": "{{.DetailUrl}}{{if .IsFlapping}}"
6410
6873
  },
6411
6874
  {
6412
6875
  "type": "message",
6413
- "text": "Note: Current incident status changes frequently, notifications will be suppressed for {{.Flapping.MuteMinutes}} minutes. Please optimize your alert policy.{{end}}{{if .IsInStorm}}",
6876
+ "text": "Note: The current incident status is changing frequently. Notifications will be suppressed for {{.Flapping.MuteMinutes}} minutes. Please optimize your alert policy.{{end}}{{if .IsInStorm}}",
6414
6877
  "style": {
6415
6878
  "bold": true,
6416
6879
  "italic": false
@@ -6418,7 +6881,7 @@ If you want to display only key label information, you can refer to the code sni
6418
6881
  },
6419
6882
  {
6420
6883
  "type": "message",
6421
- "text": "Note: Current incident has grouped {{.AlertCnt}} alerts, triggering alert storm. Please handle urgently!{{end}}",
6884
+ "text": "Note: The current incident has grouped {{.AlertCnt}} alerts, triggering an alert storm. Please handle with urgency!{{end}}",
6422
6885
  "style": {
6423
6886
  "bold": true,
6424
6887
  "italic": false
@@ -6429,14 +6892,13 @@ If you want to display only key label information, you can refer to the code sni
6429
6892
  \`\`\`
6430
6893
  </div>
6431
6894
 
6432
-
6433
6895
  <div class="sms hide">
6434
6896
 
6435
6897
  ## SMS
6436
6898
  ---
6437
- If custom content is not set, the system default template will be used for notification:
6899
+ If no custom content is set, the system default template will be used for notifications:
6438
6900
 
6439
- \`\`\`
6901
+ \`\`\`go
6440
6902
  You have a pending incident: {{toHtml .Title}}, Channel: {{.ChannelName}}, Severity: {{.IncidentSeverity}}{{if gt .AlertCnt 1}}, Grouped {{.AlertCnt}} alerts{{end}}
6441
6903
  \`\`\`
6442
6904
  </div>
@@ -6445,97 +6907,98 @@ You have a pending incident: {{toHtml .Title}}, Channel: {{.ChannelName}}, Sever
6445
6907
 
6446
6908
  ## Email
6447
6909
  ---
6448
- If custom content is not set, the system default template will be used for notification:
6910
+ If no custom content is set, the system default template will be used for notifications:
6449
6911
 
6450
- \`\`\`
6912
+ \`\`\`html
6451
6913
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6452
6914
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6453
6915
  <title>{{.Title}}</title>
6454
6916
  <html lang="en">
6455
6917
 
6456
6918
  <head data-id="__react-email-head">
6457
- <style>
6458
- .bg-Critical { background-color: #C80000; }
6459
- .bg-Warning { background-color: #FA7D00; }
6460
- .bg-Info { background-color: #FABE00; }
6461
- .bg-Ok { background-color: rgb(132 204 22); }
6462
- .text-Critical { color: #C80000; }
6463
- .text-Warning { color: #FA7D00; }
6464
- .text-Info { color: #FABE00; }
6465
- .text-Ok { color: rgb(132 204 22); }
6466
- .text-title {font-weight:500;width:6rem;flex-shrink:0}
6467
- .text-content {color:rgb(55,65,81)}
6468
- </style>
6919
+ <style>
6920
+ .bg-Critical { background-color: #C80000; }
6921
+ .bg-Warning { background-color: #FA7D00; }
6922
+ .bg-Info { background-color: #FABE00; }
6923
+ .bg-Ok { background-color: rgb(132 204 22); }
6924
+ .text-Critical { color: #C80000; }
6925
+ .text-Warning { color: #FA7D00; }
6926
+ .text-Info { color: #FABE00; }
6927
+ .text-Ok { color: rgb(132 204 22); }
6928
+ .text-title {font-weight:500;width:6rem;flex-shrink:0}
6929
+ .text-content {color:rgb(55,65,81)}
6930
+ </style>
6469
6931
  </head>
6470
6932
 
6471
6933
  <body data-id="__react-email-body" style="background-color:rgb(255,255,255);border-radius:0.25rem;margin-top:2.5rem;margin-bottom:2.5rem;margin-left:auto;margin-right:auto;padding:1rem;min-width:400px;max-width:660px;font-family:ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji">
6472
- <div style="width:100%;height:0.375rem;margin-bottom:2rem" class="bg-{{.IncidentSeverity}}"></div>
6473
- <div style="display:flex;align-items:center;margin-bottom:1.5rem">
6474
- <div style="display:flex;align-items:flex-end;gap:1rem"><img witdh="120" data-id="react-email-img" src="https://console.flashcat.cloud/image/saas-logo.png" height="40" style="display:block;outline:none;border:none;text-decoration:none" /><span style="font-size:1.25rem;line-height:1.75rem;font-weight:600">You have a pending incident</span></div>
6475
- </div>
6476
- <div style="background-color:rgb(243,244,246);padding:2rem;margin-top:1rem;border-radius:0.5rem">
6477
- <div style="display:flex;flex-direction:column;gap:0.75rem">
6478
- <div style="display:flex">
6479
- <div class="text-title">Title</div>
6480
- <div class="text-content">{{.Title}}</div>
6481
- </div>
6482
- <div style="display:flex">
6483
- <div class="text-title">Severity</div>
6484
- <div class="text-{{.IncidentSeverity}}">{{.IncidentSeverity}}</div>
6485
- </div>
6486
- <div style="display:flex">
6487
- <div class="text-title">Channel</div>
6488
- <div class="text-content">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</div>
6489
- </div>
6490
- <div style="display:flex">
6491
- <div class="text-title">Triggered at</div>
6492
- <div class="text-content">{{date "2006-01-02 15:04:05" .StartTime}}</div>
6493
- </div>
6494
- {{if .CreatorID}}
6495
- <div style="display:flex">
6496
- <div class="text-title">Creator</div>
6497
- <div class="text-content">{{.Creator.PersonName}}</div>
6498
- </div>
6499
- {{end}}
6500
- {{if gt (len .Responders) 0}}
6501
- <div style="display:flex">
6502
- <div class="text-title">Responders</div>
6503
- <div class="text-content">{{range .Responders}}@{{.PersonName}} {{end}}</div>
6504
- </div>
6505
- {{end}}
6506
- <div style="display:flex">
6507
- <div class="text-title">Progress</div>
6508
- <div class="text-content">{{.Progress}}</div>
6509
- </div>
6510
- <div style="display:flex">
6511
- <div class="text-title">Description</div>
6512
- <div style="color:rgb(55,65,81);margin-top:0.125rem">
6513
- <div data-id="react-email-markdown">{{toHtml .Description}}</div>
6514
- </div>
6515
- </div>
6516
- {{if .Labels.resource}}
6517
- <div style="display:flex;margin-bottom:0.5rem;">
6518
- <div style="color:#000;font-weight:500;width:6rem;margin-right:1rem;">Resource</div>
6519
- <div style="color:rgb(55,65,81);margin-top:0.125rem">
6520
- <div data-id="react-email-markdown">{{toHtml (joinAlertLabels . "resource" ", ")}}</div>
6521
- </div>
6522
- </div>
6523
- {{end}}
6524
- </div>
6525
- <div style="display:flex;gap:1rem;margin-top:2rem"><a href="{{.DetailUrl}}?ack=1" data-id="react-email-button" target="_blank" style="line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(108,83,177);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(255,255,255);font-weight:600;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms">Acknowledge</div></span><span></span></a><a href="{{.DetailUrl}}" data-id="react-email-button" target="_blank" style="color:#61dafb;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(255,255,255);border-width: 1px;border-style:solid;border-color:rgb(229,231,235);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(0,0,0);font-weight:600">View Details</div></span><span></span></a></div>
6526
- </div>
6527
- <div style="display:flex;justify-content:flex-end;align-items:flex-end;margin-top:2rem">
6528
- <div style="font-size:0.875rem;line-height:1.25rem;font-weight:500">ALL RIGHTS RESERVED © Beijing Flashcat Cloud Technology Co.,Ltd.</div>
6529
- </div>
6934
+ <div style="width:100%;height:0.375rem;margin-bottom:2rem" class="bg-{{.IncidentSeverity}}"></div>
6935
+ <div style="display:flex;align-items:center;margin-bottom:1.5rem">
6936
+ <div style="display:flex;align-items:flex-end;gap:1rem"><img witdh="120" data-id="react-email-img" src="https://console.flashcat.cloud/image/saas-logo.png" height="40" style="display:block;outline:none;border:none;text-decoration:none" /><span style="font-size:1.25rem;line-height:1.75rem;font-weight:600">You have a pending incident</span></div>
6937
+ </div>
6938
+ <div style="background-color:rgb(243,244,246);padding:2rem;margin-top:1rem;border-radius:0.5rem">
6939
+ <div style="display:flex;flex-direction:column;gap:0.75rem">
6940
+ <div style="display:flex">
6941
+ <div class="text-title">Title</div>
6942
+ <div class="text-content">{{.Title}}</div>
6943
+ </div>
6944
+ <div style="display:flex">
6945
+ <div class="text-title">Severity</div>
6946
+ <div class="text-{{.IncidentSeverity}}">{{.IncidentSeverity}}</div>
6947
+ </div>
6948
+ <div style="display:flex">
6949
+ <div class="text-title">Channel</div>
6950
+ <div class="text-content">{{if .ChannelName}}{{.ChannelName}}{{else}}None{{end}}</div>
6951
+ </div>
6952
+ <div style="display:flex">
6953
+ <div class="text-title">Triggered at</div>
6954
+ <div class="text-content">{{date "2006-01-02 15:04:05" .StartTime}}</div>
6955
+ </div>
6956
+ {{if .CreatorID}}
6957
+ <div style="display:flex">
6958
+ <div class="text-title">Creator</div>
6959
+ <div class="text-content">{{.Creator.PersonName}}</div>
6960
+ </div>
6961
+ {{end}}
6962
+ {{if gt (len .Responders) 0}}
6963
+ <div style="display:flex">
6964
+ <div class="text-title">Responders</div>
6965
+ <div class="text-content">{{range .Responders}}@{{.PersonName}} {{end}}</div>
6966
+ </div>
6967
+ {{end}}
6968
+ <div style="display:flex">
6969
+ <div class="text-title">Progress</div>
6970
+ <div class="text-content">{{.Progress}}</div>
6971
+ </div>
6972
+ <div style="display:flex">
6973
+ <div class="text-title">Description</div>
6974
+ <div style="color:rgb(55,65,81);margin-top:0.125rem">
6975
+ <div data-id="react-email-markdown">{{toHtml .Description}}</div>
6976
+ </div>
6977
+ </div>
6978
+ {{if .Labels.resource}}
6979
+ <div style="display:flex;margin-bottom:0.5rem;">
6980
+ <div style="color:#000;font-weight:500;width:6rem;margin-right:1rem;">Alert targets</div>
6981
+ <div style="color:rgb(55,65,81);margin-top:0.125rem">
6982
+ <div data-id="react-email-markdown">{{toHtml (joinAlertLabels . "resource" ", ")}}</div>
6983
+ </div>
6984
+ </div>
6985
+ {{end}}
6986
+ </div>
6987
+ <div style="display:flex;gap:1rem;margin-top:2rem"><a href="{{.DetailUrl}}?ack=1" data-id="react-email-button" target="_blank" style="line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(108,83,177);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(255,255,255);font-weight:600;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms">Acknowledge</div></span><span></span></a><a href="{{.DetailUrl}}" data-id="react-email-button" target="_blank" style="color:#61dafb;line-height:100%;text-decoration:none;display:inline-block;max-width:100%;padding:0px 0px"><span></span><span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:0"><div style="padding-left:2rem;padding-right:2rem;padding-top:0.5rem;padding-bottom:0.5rem;background-color:rgb(255,255,255);border-width: 1px;border-style:solid;border-color:rgb(229,231,235);border-radius:0.25rem;font-size:1rem;line-height:1.5rem;color:rgb(0,0,0);font-weight:600">View Details</div></span><span></span></a></div>
6988
+ </div>
6989
+ <div style="display:flex;justify-content:flex-end;align-items:flex-end;margin-top:2rem">
6990
+ <div style="font-size:0.875rem;line-height:1.25rem;font-weight:500">ALL RIGHTS RESERVED © Beijing Flashcat Cloud Technology Co.,Ltd.</div>
6991
+ </div>
6530
6992
  </body>
6531
6993
 
6532
6994
  </html>
6533
6995
  \`\`\`
6534
6996
 
6535
- As shown below:
6536
- <img src="https://download.flashcat.cloud/flashduty/doc/en/fd/template-mail-1.png" width="800">
6997
+ As shown in the image below:
6998
+
6999
+ <img src="https://download.flashcat.cloud/flashduty/changelog/20230720/email_render.png" alt="drawing" style="display: block; margin: 0 auto;" width="500"/>
6537
7000
 
6538
- `,HuaweiyunAPM:`---
7001
+ </div>`,HuaweiyunAPM:`---
6539
7002
  title: "Huawei Cloud APM Alerts"
6540
7003
  description: "Sync Huawei Cloud APM alerts to Flashduty through webhook to achieve automatic alert noise reduction"
6541
7004
  date: "2024-07-05T10:00:00+08:00"
@@ -6574,8 +7037,8 @@ When you need to route alerts to different channels based on alert payload infor
6574
7037
  1. Go to Flashduty console, select **Integration Center=>Alerts** to enter the integration selection page
6575
7038
  2. Select **Huawei Cloud APM** integration:
6576
7039
  - **Integration Name**: Define a name for the current integration
6577
- 3. Click **Save** and copy the newly generated **push URL** for later use
6578
- 4. Click **Create Route** to configure routing rules for the integration. You can match different alerts to different channels based on conditions, or set a default channel as a fallback, and adjust as needed later
7040
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
7041
+ 4. Click **Save** and copy the newly generated **push URL** for later use
6579
7042
  5. Done.
6580
7043
 
6581
7044
  </details>
@@ -6644,7 +7107,7 @@ When you need to route alerts to different channels based on alert payload infor
6644
7107
  `,JiraSync:`---
6645
7108
  title: "Jira Sync"
6646
7109
  description: "Sync incidents with Jira issues through Jira Sync Webhook."
6647
- date: "2024-05-11T10:00:00+08:00"
7110
+ date: "2025-05-19T10:00:00+08:00"
6648
7111
  url: "https://docs.flashcat.cloud/en/flashduty/jira-sync"
6649
7112
  ---
6650
7113
 
@@ -6723,4 +7186,377 @@ In the Integration Center, select **Webhook**, choose **Jira Sync** integration,
6723
7186
 
6724
7187
  - Flashduty syncs information according to default field mappings and your custom field configurations. If your Jira issue type has required fields without mapping relationships, Jira issue creation may fail.
6725
7188
  - Jira issue details are accessed using project KEY + number format. If you modify the project KEY, saved issue URLs in Flashduty may become inaccessible, so please modify project KEYs with caution.
7189
+ `,ZStack:`---
7190
+ title: "zstack integration"
7191
+ description: "Push ZStack alerts to Flashduty via webhook, to achieve automatic alert noise reduction."
7192
+ date: "2024-07-05T10:00:00+08:00"
7193
+ url: "https://docs.flashcat.cloud/en/flashduty/zstack-integration-guide"
7194
+ ---
7195
+
7196
+ Push ZStack alerts to Flashduty via webhook, to achieve automatic alert noise reduction.
7197
+
7198
+ <div class="hide">
7199
+
7200
+ ## In Flashduty
7201
+ ---
7202
+ You can obtain an integration push URL through either of these two methods:
7203
+
7204
+ ### Using Dedicated Integration
7205
+
7206
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
7207
+
7208
+ <details>
7209
+ <summary>Expand</summary>
7210
+
7211
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
7212
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
7213
+ 3. Choose **ZStack** integration and click **Save** to generate a card
7214
+ 4. Click the generated card to view the **push URL**, copy it for later use, and you're done
7215
+
7216
+ </details>
7217
+
7218
+ ### Using Shared Integration
7219
+
7220
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
7221
+
7222
+ <details>
7223
+ <summary>Expand</summary>
7224
+
7225
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
7226
+ 2. Select **ZStack** integration:
7227
+ - **Integration Name**: Define a name for this integration
7228
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
7229
+ 4. Click **Save** and copy the newly generated **push URL** for later use
7230
+ 5. Done
7231
+
7232
+ </details>
7233
+ </div>
7234
+
7235
+
7236
+ ## In ZStack
7237
+ ---
7238
+
7239
+ <div class="md-block">
7240
+
7241
+ ## 一、Create Notification Object
7242
+
7243
+ ### Step 1: Create Notification Object
7244
+ 1. Login to your \`ZStack\` console, find \`Cloud Monitoring\` in the \`Platform O&M\` menu
7245
+ 2. Click \`Endpoint\`, click \`Create Endpoint\` or edit the existing endpoint
7246
+ 3. In the edit page, Name it \`Flashduty\`, select \`Webhook\` type, and fill in the <span class='integration_url'>push URL</span> of the alert integration
7247
+ 4. Click \`Send Test Message\`, if the message is sent successfully, it means the configuration is successful
7248
+ 5. Click \`OK\` to complete the configuration
7249
+
7250
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/zstack-1.png" />
7251
+
7252
+ ### Step 2: Use Notification Object in Alert Policy
7253
+
7254
+ 1. Login to your \`ZStack\` console, find \`Cloud Monitoring\` in the \`Platform O&M\` menu
7255
+ 2. Click \`Alarm\`, click \`Create Resource Alarm\` or \`Create Event Alarm\`, or edit the existing alarm object
7256
+ 3. In the edit page, select the created \`Flashduty\` Endpoint (\`Resource Alarm\` is recommended to open the recovery notification)
7257
+ 4. Configure other settings as needed, and click \`OK\` to complete the configuration
7258
+
7259
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/zstack-2.png" />
7260
+
7261
+
7262
+
7263
+ </dev>
7264
+
7265
+ ## 二、Status Mapping
7266
+
7267
+ <div class="md-block">
7268
+
7269
+ | ZStack | Flashduty | Status |
7270
+ | ---------- | -------- | ---- |
7271
+ | Emergent | Critical | Critical |
7272
+ | Major | Warning | Warning |
7273
+ | Info | Info | Info |
7274
+
7275
+ </div>
7276
+
7277
+ `,Keep:`---
7278
+ title: "Keep Alert Integration Guide"
7279
+ description: "Push alert events to Flashduty through Keep's Provider to achieve automated alert noise reduction."
7280
+ date: "2025-05-19T10:00:00+08:00"
7281
+ url: "https://docs.flashcat.cloud/en/flashduty/keep-alert-integration-guide"
7282
+ ---
7283
+
7284
+ Push alert events to Flashduty through Keep's Flashduty Provider to achieve automated alert noise reduction.
7285
+
7286
+ <div class="hide">
7287
+
7288
+ ## In Flashduty
7289
+
7290
+ You can obtain an integration key through either of these 2 methods:
7291
+
7292
+ #### Using Dedicated Integration
7293
+
7294
+ Choose this method when you don't need to route alert events to different channels - it's simpler.
7295
+
7296
+ <details>
7297
+ <summary>Expand</summary>
7298
+
7299
+ 1. Enter the Flashduty console, select **Channel**, and go to a specific channel's details page
7300
+ 2. Select the **Integrations** tab, click **Add Integration** to enter the integration page
7301
+ 3. Choose **Keep** integration, click **Save** to generate a card
7302
+ 4. Click the generated card to view the **Integration Key**, copy it for later use, and you're done
7303
+
7304
+ </details>
7305
+
7306
+ #### Using Shared Integration
7307
+
7308
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
7309
+
7310
+ <details>
7311
+ <summary>Expand</summary>
7312
+
7313
+ 1. Enter the Flashduty console, select **Integration Center=>Alert Events** to access the integration selection page
7314
+ 2. Select **Keep** integration:
7315
+ - **Integration Name**: Define a name for this integration
7316
+ 3. Configure default routing and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
7317
+ 4. Click **Save** and copy the newly generated **Integration Key** for later use
7318
+ 5. Done
7319
+
7320
+ </details>
7321
+ </div>
7322
+
7323
+
7324
+ ## In Keep
7325
+ ---
7326
+
7327
+ ### Field Definitions
7328
+
7329
+ Field|Required|Type|Definition
7330
+ :-:|:-:|:-:|:---
7331
+ | title | Yes | string | Alert title, maximum \`512\` characters, will be truncated if exceeded
7332
+ | event_status | Yes | string | Alert status.<br><br>Enumerated values (\`First letter capitalized\`): *Critical*: Critical, *Warning*: Warning, *Info*: Info, *Ok*: Recovery.<br><br>When set to Ok, it indicates automatic recovery of the alert
7333
+ | alert_key | No | string | Alert identifier, used for updating or automatically recovering existing alerts.<br><br>You can customize this value, but it cannot exceed \`255\` characters. You can also rely on system-generated values, which will be returned in the response.<br><br>This value must exist if you're reporting a recovery event
7334
+ | description | No | string | Alert description, maximum \`2048\` characters, will be truncated if exceeded
7335
+ | labels | No | map | Alert label collection, where key is the label name and value is the label value:<br><br>1. Both label key and value are case-sensitive strings<br>2. Label keys should not exceed \`128\` characters and follow Prometheus label naming conventions. Values should not exceed \`2048\` characters, will be truncated if exceeded<br>3. Maximum \`50\` labels allowed. \`Label content refers to\` [Best Practices](#best-practices)<br><br>Example: "resource": "171.26.23.22", "check": "api latency > 500ms"
7336
+
7337
+
7338
+
7339
+ ### Configuration Method
7340
+
7341
+ #### Step 1: Configure Flashduty Provider
7342
+ 1. Login to Keep console, enter \`Providers\` list, select and click \`Flashduty\`.
7343
+ 2. Fill in the \`Flashduty Integration Key\` field with the \`Integration Key\` of Flashduty.
7344
+ 3. Click \`Save\` to save the configuration.
7345
+
7346
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/keep-1.png" />
7347
+
7348
+ #### Step 2: Configure WorkFlows
7349
+ 1. Login to Keep console, enter \`WorkFlows\` , create or edit an existing Workflow.
7350
+ 2. Configure the \`Trigger\` section as needed.
7351
+ 3. In the \`Steps\` section, select \`flashduty-action\` and select the \`Flashduty Provider\` configured in the previous step.
7352
+ 4. In the \`flashduty-action\`'s \`Configure\` section, configure the alert title, alert status, alert description, and alert labels (for details on the field definitions, please refer to [Field Definitions](#field-definitions)).
7353
+ 5. Click \`Save\` to save the configuration.
7354
+
7355
+
7356
+ <img alt="drawing" width="600" src="https://download.flashcat.cloud/flashduty/doc/en/fd/keep-2.png" />
7357
+
7358
+ `,ElastAlert2:`---
7359
+ title: "ElastAlert2 Alert Integration Guide"
7360
+ description: "Push alert events to Flashduty through ElastAlert2's Provider to achieve automated alert noise reduction."
7361
+ date: "2025-05-19T10:00:00+08:00"
7362
+ url: "https://docs.flashcat.cloud/en/flashduty/elastalert2-alert-integration-guide"
7363
+ ---
7364
+
7365
+ Push ElastAlert2 alerts to Flashduty via webhook, to achieve automatic alert noise reduction.
7366
+
7367
+ <div class="hide">
7368
+
7369
+ ## In Flashduty
7370
+ ---
7371
+ You can obtain an integration push URL through either of these two methods:
7372
+
7373
+ ### Using Dedicated Integration
7374
+
7375
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
7376
+
7377
+ <details>
7378
+ <summary>Expand</summary>
7379
+
7380
+ 1. Go to the Flashduty console, select **Channel**, and enter a channel's details page
7381
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
7382
+ 3. Choose **ElastAlert 2** integration and click **Save** to generate a card
7383
+ 4. Click the generated card to view the **Integration Key**, copy it for later use, and you're done
7384
+
7385
+ </details>
7386
+
7387
+ ### Using Shared Integration
7388
+
7389
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
7390
+
7391
+ <details>
7392
+ <summary>Expand</summary>
7393
+
7394
+ 1. Go to the Flashduty console, select **Integration Center=>Alert Events** to enter the integration selection page
7395
+ 2. Select **ElastAlert 2** integration:
7396
+ - **Integration Name**: Define a name for this integration
7397
+ 3. Configure the default route and select the corresponding channel (after the integration is created, you can go to \`Route\` to configure more routing rules)
7398
+ 4. Click **Save** and copy the newly generated **Integration Key** for later use
7399
+ 5. Done
7400
+
7401
+ </details>
7402
+ </div>
7403
+
7404
+
7405
+ ## In ElastAlert 2
7406
+ ---
7407
+
7408
+ ### Configure ElastAlert 2 Alerts
7409
+ Follow the [ElastAlert FlashDuty](https://elastalert2.readthedocs.io/en/latest/alerts.html#flashduty) push configuration document
7410
+
7411
+ 1. Create or edit the alert rule file, for example \`rules/elastalert2_alert.yaml\`.
7412
+ 2. Fill in the \`flashduty\` alert type in the \`alert\` field.
7413
+ 3. Fill in the integrated \`integration key\` in the \`flashduty_integration_key\` field.
7414
+ 4. The \`flashduty_title\` and \`flashduty_event_status\` are required fields, and other fields can be filled in as needed. For the field definitions, please refer to the following table.
7415
+
7416
+ Field|Required|Type|Definition
7417
+ :-:|:-:|:-:|:---
7418
+ | title | 是 | string | The alert title, it cannot exceed \`512\` characters.
7419
+ | event_status | 是 | string | The alert status.<br><br>Enum values (capitalized): *Critical*:severe, *Warning*:warning, *Info*:reminder, *Ok*:recovery.<br><br>When specified as Ok, it means automatic recovery of the alert.
7420
+ | alert_key | 否 | string | The alert identifier, used to update or automatically recover existing alerts. You can customize this value, but it cannot exceed \`255\` characters. You can also rely on the system to automatically generate this value, which will be returned in the response. If you report a recovery event, this value must exist.
7421
+ | description | 否 | string | The alert description
7422
+ | check | 否 | string | The alert check item
7423
+ | resource | 否 | string | The alert resource
7424
+ | service | 否 | string | The alert service name
7425
+ | metric | 否 | string | The alert metric name
7426
+ | group | 否 | string | The alert group
7427
+ | cluster | 否 | string | The alert cluster
7428
+ | app | 否 | string | The alert application
7429
+ | env | 否 | string | The alert environment
7430
+
7431
+
7432
+ \`\`\`yaml
7433
+
7434
+ name: "elastalert2 alert"
7435
+ type: "frequency"
7436
+ index: "pgy_audit*"
7437
+ is_enabled: true
7438
+ num_events: 1
7439
+ realert:
7440
+ minutes: 1
7441
+ terms_size: 50
7442
+ scan_entire_timeframe: true
7443
+ timeframe:
7444
+ minutes: 60
7445
+ timestamp_field: "created_at"
7446
+ timestamp_type: "unix_ms"
7447
+ use_strftime_index: false
7448
+ alert_subject: "Test {0} 123 aa☃ {1}"
7449
+ alert_subject_args:
7450
+ - "account_id"
7451
+ - "operation"
7452
+ alert_text: "Test {0} 123 bb☃ {1}"
7453
+ alert_text_args:
7454
+ - "request_id"
7455
+ - "operation_name"
7456
+ filter:
7457
+ - query:
7458
+ query_string:
7459
+ query: "created_at:*"
7460
+
7461
+ # ------- FlashDuty ----------------
7462
+ alert: flashduty
7463
+ flashduty_integration_key: "xxxx"
7464
+ flashduty_title: "elastalert2 alert"
7465
+ flashduty_event_status: "Warning"
7466
+ flashduty_alert_key: "abc"
7467
+ flashduty_description: "log error"
7468
+ flashduty_check: "log error"
7469
+ flashduty_resource: "10.1.1.1"
7470
+ flashduty_service: "service1"
7471
+ flashduty_metric: "error"
7472
+ flashduty_group: "group1"
7473
+ flashduty_cluster: "bj"
7474
+ flashduty_app: "app1"
7475
+ flashduty_env: "dev"
7476
+ # ------- FlashDuty ----------------
7477
+ \`\`\`
7478
+
7479
+ 5. Restart ElastAlert and wait for the alert to trigger.`,DingtalkAlert:`---
7480
+ title: "Dingtalk Alert Integration"
7481
+ description: "Generate a unique Dingtalk robot address in Flashduty, and synchronize the occurrence and recovery of alerts through Dingtalk"
7482
+ date: "2025-05-19T10:00:00+08:00"
7483
+ url: "https://docs.flashcat.cloud/en/flashduty/dingtalk-alert-integration-guide"
7484
+ ---
7485
+
7486
+ Generate a unique Dingtalk robot address in Flashduty, and synchronize the occurrence and recovery of alerts through Dingtalk.
7487
+
7488
+ <div class="hide">
7489
+
7490
+ ## Operation Steps
7491
+ ---
7492
+
7493
+ ### Create Dingtalk Alert Integration
7494
+
7495
+ You can obtain a Dingtalk alert integration address through either of these two methods:
7496
+
7497
+ #### Using Dedicated Integration
7498
+
7499
+ Choose this method when you don't need to route alert events to different channels. It's simpler and recommended.
7500
+
7501
+ <details>
7502
+ <summary>Expand</summary>
7503
+
7504
+ 1. Go to the Flashduty console, select **Channel**, and enter a specific channel's details page
7505
+ 2. Select the **Integration** tab, click **Add Integration** to enter the integration page
7506
+ 3. Choose **Dingtalk Alert** integration and click **Save** to generate a card
7507
+ 4. Click the generated card to view the **Dingtalk Alert Integration URL**, copy it for later use, and you're done
7508
+
7509
+ </details>
7510
+
7511
+ #### Using Shared Integration
7512
+
7513
+ Choose this method when you need to route alerts to different channels based on the alert event's payload information.
7514
+
7515
+ <details>
7516
+ <summary>Expand</summary>
7517
+
7518
+ 1. Go to the Flashduty console, select **Integration Center => Alert Events** to enter the integration selection page
7519
+ 2. Select **Dingtalk Alert** integration:
7520
+ - **Integration Name**: Define a name for the current integration
7521
+ - **Message Type**: Select Dingtalk alert message type, currently only Text and Markdown are supported
7522
+ - **Push Mode**: Choose when to trigger or recover alerts for Dingtalk notifications
7523
+ 3. Copy the **Dingtalk Alert Integration URL** for later use
7524
+ 4. Configure the default route and select the corresponding channel (after integration creation, you can go to \`Routes\` to configure more routing rules)
7525
+ 5. Done
7526
+
7527
+ </details>
7528
+ </div>
7529
+
7530
+ ### Customize Dingtalk Alert Integration
7531
+
7532
+ #### Dingtalk Alert Integration URL
7533
+
7534
+ The system will generate a unique Dingtalk alert integration URL for you. This URL is compatible with Dingtalk robot message protocol. When platforms only support Dingtalk robot channels, you can use this URL to receive corresponding messages.
7535
+
7536
+ #### Push Mode
7537
+
7538
+ By default, the system always creates new alerts for each message, but you can switch to these modes:
7539
+
7540
+ 1. **Trigger or Update Alert Based on Message Title**: In this mode, when receiving a new message, the system searches for open alerts based on the message title. If an alert is found, it will be updated; otherwise, a new alert will be triggered.
7541
+ 2. **Trigger or Close Alert Based on Rules**: In this mode, when receiving a new message, the system matches messages according to your rules and triggers new alerts or closes existing alerts based on the matching results.
7542
+
7543
+ - You need to fill in at least one **trigger** rule
7544
+ - You must set up regex extraction rules for Alert Key. The system uses this field to find historical alerts for updates or closure. **If regex extraction fails, the system will use the message title to generate an Alert Key** to ensure alerts won't be lost due to configuration errors
7545
+ - You can choose whether to discard messages when none of the rules match
7546
+
7547
+ Configuration example:
7548
+
7549
+ - Receive all messages, close the alert when the message content contains **RESOLVED**, otherwise trigger a new alert
7550
+ - Extract Alert Key from message title using the rule **/(.*)/**.
7551
+
7552
+
7553
+ ### Notes
7554
+ - Dingtalk alert integration URL only supports Text and Markdown message types; other message types cannot be received
7555
+ - When Dingtalk message type is Text, Flashduty will generate a default alert title "Dingtalk Alert"
7556
+
7557
+ ## Severity Mapping
7558
+ ---
7559
+
7560
+ Currently, all alerts pushed to Flashduty through email integration are set to Warning severity.
7561
+
6726
7562
  `};n.FlashDocsEn=u})(window);