sentry-create-alert
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCreate Sentry Alert
创建Sentry告警
Create alerts via Sentry’s workflow engine API.
Note: This API is currently in beta and may be subject to change.
It is part of New Monitors and Alerts and may not be viewable in the legacy Alerts UI.
通过Sentry的工作流引擎API创建告警。
注意: 此API目前处于beta阶段,可能会发生变更。它属于新版监控与告警功能,在旧版告警UI中可能无法查看。
Invoke This Skill When
调用此技能的场景
- User asks to “create a Sentry alert” or “set up notifications”
- User wants to be emailed or notified when issues match certain conditions
- User mentions priority alerts, de-escalation alerts, or workflow automations
- User wants to configure Slack, PagerDuty, or email notifications for Sentry issues
- 用户要求“创建Sentry告警”或“设置通知”
- 用户希望在问题符合特定条件时收到电子邮件或通知
- 用户提及优先级告警、降级告警或工作流自动化
- 用户希望为Sentry问题配置Slack、PagerDuty或电子邮件通知
Prerequisites
前置条件
- available in shell
curl - Sentry org auth token with scope (also accepts
alerts:writeororg:admin)org:write
- 环境中已安装
curl - 拥有权限范围的Sentry组织认证令牌(也接受
alerts:write或org:admin权限)org:write
Phase 1: Gather Configuration
阶段1:收集配置信息
Ask the user for any missing details:
| Detail | Required | Example |
|---|---|---|
| Org slug | Yes | |
| Auth token | Yes | |
| Region | Yes (default: | |
| Alert name | Yes | |
| Trigger events | Yes | Which issue events fire the workflow |
| Conditions | Optional | Filter conditions before actions execute |
| Action type | Yes | |
| Action target | Yes | User email, team, channel, or service |
向用户询问缺失的详细信息:
| 详情 | 必填 | 示例 |
|---|---|---|
| 组织别名(Org slug) | 是 | |
| 认证令牌(Auth token) | 是 | |
| 区域(Region) | 是(默认值: | |
| 告警名称 | 是 | |
| 触发事件 | 是 | 哪些问题事件会触发工作流 |
| 条件 | 可选 | 执行操作前的过滤条件 |
| 操作类型 | 是 | |
| 操作目标 | 是 | 用户邮箱、团队、频道或服务 |
Phase 2: Look Up IDs
阶段2:查询ID
Use these API calls to resolve names to IDs as needed.
bash
API="https://{region}.sentry.io/api/0/organizations/{org}"
AUTH="Authorization: Bearer {token}"根据需要使用以下API调用将名称解析为ID。
bash
API="https://{region}.sentry.io/api/0/organizations/{org}"
AUTH="Authorization: Bearer {token}"Find user ID by email
通过邮箱查找用户ID
curl -s "$API/members/" -H "$AUTH" | python3 -c "
import json,sys
for m in json.load(sys.stdin):
if m.get('email')=='USER_EMAIL' or m.get('user',{}).get('email')=='USER_EMAIL':
print(m['user']['id']); break"
curl -s "$API/members/" -H "$AUTH" | python3 -c "
import json,sys
for m in json.load(sys.stdin):
if m.get('email')=='USER_EMAIL' or m.get('user',{}).get('email')=='USER_EMAIL':
print(m['user']['id']); break"
List teams
列出团队
curl -s "$API/teams/" -H "$AUTH" | python3 -c "
import json,sys
for t in json.load(sys.stdin):
print(t['id'], t['slug'])"
curl -s "$API/teams/" -H "$AUTH" | python3 -c "
import json,sys
for t in json.load(sys.stdin):
print(t['id'], t['slug'])"
List integrations (for Slack/PagerDuty)
列出集成(用于Slack/PagerDuty)
curl -s "$API/integrations/" -H "$AUTH" | python3 -c "
import json,sys
for i in json.load(sys.stdin):
print(i['id'], i['provider']['key'], i['name'])"
undefinedcurl -s "$API/integrations/" -H "$AUTH" | python3 -c "
import json,sys
for i in json.load(sys.stdin):
print(i['id'], i['provider']['key'], i['name'])"
undefinedPhase 3: Build Payload
阶段3:构建请求体
Trigger Events
触发事件
Pick which issue events fire the workflow.
Use (triggers must always use this).
logicType: "any-short"| Type | Fires when |
|---|---|
| New issue created |
| Resolved issue recurs |
| Archived issue reappears |
| Issue is resolved |
选择哪些问题事件会触发工作流。使用(触发器必须始终使用此值)。
logicType: "any-short"| 类型 | 触发时机 |
|---|---|
| 创建新问题时 |
| 已解决的问题再次出现时 |
| 已归档的问题重新出现时 |
| 问题被解决时 |
Filter Conditions
过滤条件
Conditions that must pass before actions execute.
Use , , or .
logicType: "all""any-short""none"The field is polymorphic — its shape depends on the condition :
comparisontype| Type | | Description |
|---|---|---|
| | Priority >= Low(25)/Medium(50)/High(75) |
| | Priority dropped below peak |
| | Event count in time window |
| | Affected users in time window |
| | Event tag matches |
| | Issue assigned to target |
| | Event level (fatal=50, error=40, warning=30) |
| | Issue age |
| | Category (1=Error, 6=Feedback) |
| | Total occurrence count |
Interval options: , , , , , ,
"1min""5min""15min""1hr""1d""1w""30d"Tag match types: (contains), (not contains), , ,
(starts with), (ends with), (set), (not set)
"co""nc""eq""ne""sw""ew""is""ns"Set to to invert (fire when condition is NOT met).
conditionResultfalse执行操作前必须满足的条件。使用, , 或 。
logicType: "all""any-short""none"comparisontype| 类型 | | 描述 |
|---|---|---|
| | 优先级 >= 低(25)/中(50)/高(75) |
| | 优先级低于峰值 |
| | 时间窗口内的事件数量 |
| | 时间窗口内受影响的用户数量 |
| | 事件标签匹配 |
| | 问题已分配给目标对象 |
| | 事件级别(致命=50,错误=40,警告=30) |
| | 问题时长 |
| | 分类(1=错误,6=反馈) |
| | 总出现次数 |
时间间隔选项: , , , , , ,
"1min""5min""15min""1hr""1d""1w""30d"标签匹配类型: (包含), (不包含), , , (开头为), (结尾为), (已设置), (未设置)
"co""nc""eq""ne""sw""ew""is""ns"将设置为可反转条件(当条件不满足时触发)。
conditionResultfalseActions
操作
| Type | Key Config |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| 类型 | 关键配置 |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
Full Payload Structure
完整请求体结构
json
{
"name": "<Alert Name>",
"enabled": true,
"environment": null,
"config": { "frequency": 30 },
"triggers": {
"logicType": "any-short",
"conditions": [
{ "type": "first_seen_event", "comparison": true, "conditionResult": true }
],
"actions": []
},
"actionFilters": [{
"logicType": "all",
"conditions": [
{ "type": "issue_priority_greater_or_equal", "comparison": 75, "conditionResult": true },
{ "type": "event_frequency_count", "comparison": {"value": 50, "interval": "1hr"}, "conditionResult": true }
],
"actions": [{
"type": "email",
"integrationId": null,
"data": {},
"config": {
"targetType": "user",
"targetIdentifier": "<user_id>",
"targetDisplay": null
},
"status": "active"
}]
}]
}frequency051030601807201440Structure note: is always — actions live inside
.
triggers.actions[]actionFilters[].actionsjson
{
"name": "<Alert Name>",
"enabled": true,
"environment": null,
"config": { "frequency": 30 },
"triggers": {
"logicType": "any-short",
"conditions": [
{ "type": "first_seen_event", "comparison": true, "conditionResult": true }
],
"actions": []
},
"actionFilters": [{
"logicType": "all",
"conditions": [
{ "type": "issue_priority_greater_or_equal", "comparison": 75, "conditionResult": true },
{ "type": "event_frequency_count", "comparison": {"value": 50, "interval": "1hr"}, "conditionResult": true }
],
"actions": [{
"type": "email",
"integrationId": null,
"data": {},
"config": {
"targetType": "user",
"targetIdentifier": "<user_id>",
"targetDisplay": null
},
"status": "active"
}]
}]
}frequency051030601807201440结构说明: 始终为 —— 操作需放在中。
triggers.actions[]actionFilters[].actionsPhase 4: Create the Alert
阶段4:创建告警
bash
curl -s -w "\n%{http_code}" -X POST \
"https://{region}.sentry.io/api/0/organizations/{org}/workflows/" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{payload}'Expect HTTP . The response contains the workflow .
201idbash
curl -s -w "\n%{http_code}" -X POST \
"https://{region}.sentry.io/api/0/organizations/{org}/workflows/" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{payload}'预期返回HTTP 状态码。响应结果包含工作流。
201idPhase 5: Verify
阶段5:验证
Confirm the alert was created and provide the UI link:
https://{org_slug}.sentry.io/monitors/alerts/{workflow_id}/If the org lacks the feature flag, the alert appears at:
workflow-engine-uihttps://{org_slug}.sentry.io/alerts/rules/确认告警已创建并提供UI链接:
https://{org_slug}.sentry.io/monitors/alerts/{workflow_id}/如果组织未启用功能标志,告警将显示在:
workflow-engine-uihttps://{org_slug}.sentry.io/alerts/rules/Managing Alerts
告警管理
bash
undefinedbash
undefinedList all workflows
列出所有工作流
curl -s "$API/workflows/" -H "$AUTH"
curl -s "$API/workflows/" -H "$AUTH"
Get one workflow
获取单个工作流
curl -s "$API/workflows/{id}/" -H "$AUTH"
curl -s "$API/workflows/{id}/" -H "$AUTH"
Update a workflow
更新工作流
curl -s -X PUT "$API/workflows/{id}/" -H "$AUTH" -H "Content-Type: application/json" -d '{payload}'
curl -s -X PUT "$API/workflows/{id}/" -H "$AUTH" -H "Content-Type: application/json" -d '{payload}'
Delete a workflow
删除工作流
curl -s -X DELETE "$API/workflows/{id}/" -H "$AUTH"
curl -s -X DELETE "$API/workflows/{id}/" -H "$AUTH"
Expect 204
预期返回204状态码
undefinedundefinedTroubleshooting
故障排查
| Issue | Solution |
|---|---|
| 401 Unauthorized | Token needs |
| 403 Forbidden | Token must belong to the target org |
| 404 Not Found | Check org slug and region ( |
| 400 Bad Request | Validate payload JSON structure, check required fields |
| User ID not found | Verify email matches a member of the org |
| 问题 | 解决方案 |
|---|---|
| 401 Unauthorized(未授权) | 令牌需要 |
| 403 Forbidden(禁止访问) | 令牌必须属于目标组织 |
| 404 Not Found(未找到) | 检查组织别名和区域( |
| 400 Bad Request(错误请求) | 验证请求体JSON结构,检查必填字段 |
| 用户ID未找到 | 确认邮箱与组织成员匹配 |