mcpField
T
tencentcloud-cls-alarm

tencentcloud-cls-alarm

github.com/acedatacloud云与 DevOps17208 次安装今天更新
代码仓库

关于 tencentcloud-cls-alarm

tencentcloud-cls-alarm 是用于管理 Tencent Cloud CLS 告警的技能,面向需要维护日志告警策略和通知配置的运维人员。它涵盖告警策略、通知组、静默屏蔽规则及触发记录。

主要功能

  1. 01查看和创建告警策略
  2. 02修改告警查询与触发阈值
  3. 03启用或停用告警
  4. 04管理通知组和接收方
  5. 05设置限时告警屏蔽
  6. 06查询告警触发记录

适用场景

  1. 01创建基于日志查询的告警
  2. 02调整告警阈值和通知对象
  3. 03部署期间暂时静默告警
  4. 04检查告警触发时间与记录

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedatacloud/skills --skill tencentcloud-cls-alarm

安装后在 Claude Code 中输入/tencentcloud-cls-alarm确认已加载。

附带文件scripts/cls_alarm.py

详细介绍

腾讯云 CLS — 告警管理

对 CLS 告警策略、通知组、静默屏蔽和告警执行日志进行 CRUD 操作。

设置: 请参阅 腾讯云身份验证。默认使用环境变量中的 TENCENTCLOUD_REGION;CLS 告警按区域管理。

配套技能: 用于搜索日志内容的 tencentcloud-cls。

CLI(首选)

该技能提供 scripts/cls_alarm.py — 将所有告警/通知/屏蔽操作封装为子命令。

# $SKILL_DIR can point at another skill loaded this turn — anchor on our own
# script (re-run this at the top of every fresh-shell Bash block).
CLSA="$SKILL_DIR/scripts/cls_alarm.py"; [ -f "$CLSA" ] || CLSA=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/cls_alarm.py' 2>/dev/null | head -1)
[ -f "$CLSA" ] || { echo "tencentcloud-cls-alarm script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }

python3 "$CLSA" alarms                          # list policies
python3 "$CLSA" alarm <alarm-id>                # full detail
python3 "$CLSA" alarm-disable <alarm-id>        # quick mute (Status=false)
python3 "$CLSA" alarm-enable  <alarm-id>
python3 "$CLSA" alarm-create --json /tmp/alarm.json --dry-run
python3 "$CLSA" alarm-modify <alarm-id> --condition '$1.cnt > 20'
python3 "$CLSA" alarm-delete <alarm-id> --yes   # destructive

python3 "$CLSA" notices                         # notice groups
python3 "$CLSA" notice <notice-id>

python3 "$CLSA" shields                         # mute rules
python3 "$CLSA" shield-create --notice-id <notice-id> --start $(date +%s) --end $(date -v+2H +%s) --type 1 --reason "deploy"

python3 "$CLSA" alarm-log --time 6h             # firing history

对于 CLI 未提供的少见架构字段,可改用下方的原始 SDK 示例。

适用场景

  • 检查现有告警策略(按名称、启用状态筛选)
  • 创建基于日志的新告警:CQL/SQL 查询 → 触发条件 → 通知组
  • 修改阈值、查询、周期、接收人
  • 事件期间快速启用/禁用,以静默告警
  • 管理通知组(接收人:用户、群组、Webhook,并支持升级通知)
  • 部署期间使用有时限的屏蔽规则静默告警
  • 获取告警执行日志,查看哪些告警触发过以及触发时间

依赖项

pip install tencentcloud-sdk-python

快速开始

import os
import json
from tencentcloud.common import credential
from tencentcloud.cls.v20201016 import cls_client, models

cred = credential.EnvironmentVariableCredential().get_credential()
client = cls_client.ClsClient(cred, os.environ["TENCENTCLOUD_REGION"])

关键概念

对象API 方法说明
告警策略DescribeAlarms / CreateAlarm / ModifyAlarm / DeleteAlarm针对一个或多个主题的查询 + 条件 + 通知组
通知组DescribeAlarmNotices / CreateAlarmNotice / …接收人(用户/群组/Webhook)+ 升级通知
屏蔽规则DescribeAlarmShields / CreateAlarmShield / …作用于某个通知组的有时限静默规则
告警日志GetAlarmLog触发历史

工作流

列出告警策略
req = models.DescribeAlarmsRequest()
req.Limit = 100
# Optional filters: req.Filters = [{"Key": "name", "Values": ["DeepSeek"]}]
resp = client.DescribeAlarms(req)
for a in resp.Alarms:
    print(a.AlarmId, a.Name, "Enable=", a.Enable, "Status=", a.Status)
获取单个告警策略的完整信息
req = models.DescribeAlarmsRequest()
req.Filters = [{"Key": "alarmId", "Values": ["<alarm-id>"]}]
resp = client.DescribeAlarms(req)
print(json.dumps(resp.Alarms[0]._serialize(), indent=2, ensure_ascii=False))
创建告警
req = models.CreateAlarmRequest()
req.Name = "OpenAI 5xx burst"
req.AlarmTargets = [{
    "TopicId": "<trace-topic-id>",
    "Query": "* | select count(*) as cnt where status_code >= 500",
    "Number": 1,
    "StartTimeOffset": -5,
    "EndTimeOffset": 0,
    "SyntaxRule": 1,             # 1 = CQL, 0 = Lucene
}]
req.MonitorTime = {"Type": "Period", "Time": 1}
req.Condition = "$1.cnt > 10"
req.AlarmPeriod = 5              # evaluate every 5 minutes
req.TriggerCount = 1             # fire after 1 consecutive match
req.AlarmLevel = 2               # 0=Notice, 1=Warning, 2=Critical
req.AlarmNoticeIds = ["<notice-id-a>", "<notice-id-b>"]
req.MonitorObjectType = 0
req.Enable = True

resp = client.CreateAlarm(req)
print("Created", resp.AlarmId)
快速启用/禁用
req = models.ModifyAlarmRequest()
req.AlarmId = "<alarm-id>"
req.Status = False               # mute (Status — runtime), keep Enable=True
client.ModifyAlarm(req)

Enable 与 Status 是不同的字段。Enable=False 会归档告警定义;Status=False 是日常用于静默告警的开关。

修改阈值,而不重写整个载荷
req = models.ModifyAlarmRequest()
req.AlarmId = "<alarm-id>"
req.Condition = "$1.cnt > 20"
req.AlarmPeriod = 10
client.ModifyAlarm(req)
删除(有破坏性)
# Confirm with the user first — there's no undo.
req = models.DeleteAlarmRequest()
req.AlarmId = "<alarm-id>"
client.DeleteAlarm(req)
管理通知组
# List
req = models.DescribeAlarmNoticesRequest()
req.Limit = 100
for n in client.DescribeAlarmNotices(req).AlarmNotices:
    print(n.AlarmNoticeId, n.Name, n.Type)

# Create
req = models.CreateAlarmNoticeRequest()
req.Name = "Ops on-call"
req.Type = "Trigger"             # Trigger | Recovery | All
req.NoticeReceivers = [{
    "ReceiverType": "Uin",
    "ReceiverIds": [123456],
    "ReceiverChannels": ["Email", "Sms"],
    "StartTime": "00:00:00",
    "EndTime": "23:59:59",
}]
req.WebCallbacks = [{
    "Url": "https://hooks.example.com/cls",
    "CallbackType": "WeCom",
    "Method": "POST",
}]
resp = client.CreateAlarmNotice(req)
有时限的屏蔽规则(部署期间静默告警)
import time
req = models.CreateAlarmShieldRequest()
req.AlarmNoticeId = "<notice-id>"
req.StartTime = int(time.time())
req.EndTime = int(time.time()) + 7200       # 2 hours
req.Type = 1                                # 1 = full shield, 2 = partial
req.Reason = "Deploy <git-sha>"
client.CreateAlarmShield(req)
查看告警触发历史
req = models.GetAlarmLogRequest()
req.From = int((time.time() - 86400) * 1000)
req.To = int(time.time() * 1000)
req.Query = 'alarm_name:"OpenAI*"'
req.Limit = 100
resp = client.GetAlarmLog(req)
for line in resp.Results:
    print(line.Time, line.LogJson)

克隆告警

创建类似告警最快的方法是读取现有告警,移除只读字段,调整后重新创建:

import json
existing = client.DescribeAlarms(models.DescribeAlarmsRequest(Filters=[{"Key": "alarmId", "Values": ["<src-id>"]}])).Alarms[0]
payload = json.loads(json.dumps(existing._serialize()))      # deep clone
for k in ("AlarmId", "CreateTime", "UpdateTime"):
    payload.pop(k, None)
payload["Name"] = "OpenAI 5xx burst v2"
# ...edit other fields...
req = models.CreateAlarmRequest()
req.from_json_string(json.dumps(payload))
print(client.CreateAlarm(req).AlarmId)

重要提示

  • 调用 CreateAlarm / ModifyAlarm 前,务必预览载荷(json.dumps(req._serialize(), indent=2))——架构要求严格,错误信息也不够明确。
  • 破坏性操作(DeleteAlarm、DeleteAlarmNotice、DeleteAlarmShield)需要先在聊天中征得用户明确确认,再执行。
  • Enable(是否归档?)与 Status(当前是否启用?)是不同的字段。日常静默告警请使用 Status。
  • 屏蔽规则仅作用于单个 AlarmNoticeId。要列出所有全局屏蔽规则,请遍历所有通知组 ID。
  • 默认区域为 ap-hongkong;如需使用其他区域,可通过 cls_client.ClsClient(cred, "ap-singapore") 指定。

控制台链接

评论

支持 Markdown