CommunityCodierung & Entwicklunggithub.com

huaweicloud/huawei-cloud-dws-io-diag

DWS-Cluster I/O-Überlastungsdiagnose-Skill, basierend auf KooCLI v3.2.0+ und DWS Autopilot MCP Server. Sammelt automatisch I/O-Metriken, analysiert Ursachen (kundenseitig/systemseitig) über einen dreistufigen Entscheidungsbaum und erstellt einen standardisierten Diagnosebericht. Anwendbar bei zu hoher I/O-Auslastung, I/O-Alarmen, anormaler Festplatten-I/O-Last.

Was ist huawei-cloud-dws-io-diag?

Dieser Skill ist ein spezialisiertes Diagnosewerkzeug für Huawei Cloud DWS (GaussDB(DWS)) Cluster, das die Grundursache von I/O-Überlastungen identifiziert. Er sammelt automatisch I/O-Metriken wie IOStat, CpuStat und cpu_io_diagnose_detail, analysiert die Daten über einen dreistufigen Entscheidungsbaum (kundenseitig/systemseitig) und erstellt einen standardisierten Diagnosebericht. Der Skill unterstützt zwei Ausführungsmodi: KooCLI (hcloud v3.2.0+) als primären Kanal und DWS Autopilot MCP Server als Fallback. Er ist speziell für die Diagnose von DWS-Cluster-I/O-Problemen konzipiert, nicht für andere Dienste oder Probleme. Alle Diagnoseergebnisse müssen auf tatsächlichen Tool-Rückgaben basieren, und das Hinzufügen von Optimierungsvorschlägen oder die Verwendung von Emojis ist untersagt.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/huaweicloud/huaweicloud-skills/tree/HEAD/skills/bigdata/dws/huawei-cloud-dws-io-diag

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Huawei Cloud DWS I/O-Überlastungsdiagnose-Skill

Übersicht

Dieser Skill ist für die Grundursachendiagnose von DWS-Cluster-I/O-Überlastungen vorgesehen. Wenn ein Cluster einen Alarm wegen zu hoher I/O-Auslastung auslöst, sammelt er automatisch Metrikdaten, analysiert die Ursachen (kundenseitig / systemseitig) über einen dreistufigen Entscheidungsbaum und erstellt einen standardisierten Diagnosebericht.

Architektur: KooCLI (hcloud) → DWS Autopilot API → Cluster-Überwachungsmetriken; MCP Server (dws_autopilot) → Fallback-Kanal für dieselbe API

Anwendbare Szenarien:

  • DWS-Cluster-Alarm wegen zu hoher I/O-Auslastung
  • Untersuchung anormaler Festplatten-I/O-Last
  • Benutzerinitiierte I/O-Diagnoseanfrage

Typische Anwendungsfälle:

  • „Mein DWS-Cluster hat eine sehr hohe I/O-Auslastung, bitte helfen Sie bei der Diagnose“
  • „Ich habe einen I/O-Alarm erhalten, die Cluster-ID ist xxx, bitte analysieren Sie die Ursache“
  • „Die Festplattenauslastung (util) des DWS-Clusters ist auf Maximum, sehen Sie sich die Ursache an“

Skill-Umfang & Grenzen:

  • Dienstgrenze: Dieser Skill unterstützt nur den Huawei Cloud DWS (GaussDB(DWS)) Data Warehouse Service. Er gilt NICHT für Nicht-DWS-Dienste wie ECS, RDS, CCE oder andere.
  • Problemtyp-Grenze: Dieser Skill diagnostiziert nur DWS-Cluster-I/O-Überlastung / zu hohe I/O-Auslastung / anormale Festplatten-I/O-Last (I/O-Überlastung, I/O-Anomalie, hohe await, hohe util usw.). Er behandelt KEINE CPU-Überlastung, hohen Arbeitsspeicher oder andere Nicht-I/O-Probleme (siehe dedizierte CPU-/Arbeitsspeicher-Diagnose-Skills).
  • Operationsgrenze: Dieser Skill ist eine reine Lese-Diagnose. Er führt KEINE Verwaltungs- oder Wartungsvorgänge wie Cluster-Neustart, Skalierung, Knotenaustausch, SQL-Killen oder Parameteränderungen aus.

Wichtige Regeln: Alle Diagnose-Schlussfolgerungen müssen aus tatsächlichen Tool-Rückgabeergebnissen stammen. Das Erfinden oder Annehmen von Werten ist verboten. Die Ausgabe enthält nur den Diagnosebericht. Das Hinzufügen von Behebungsvorschlägen, die Ausgabe von SQL-Optimierungsanweisungen und die Verwendung von Emojis sind verboten.

Hintergrundwissen: RAID-Architektur, Schwellenwerte für I/O-Schlüsselmetriken, Indikatormerkmale der drei wichtigsten I/O-Szenarien und wichtige Prinzipien sind in I/O-Hintergrundwissen dokumentiert. Vor der Diagnose muss dieses gelesen werden.

Voraussetzungen

1. CLI-Anforderungen

  • KooCLI (hcloud) >= 3.2.0
  • Installation überprüfen: hcloud version
  • Wenn nicht installiert oder Version zu niedrig, siehe CLI-Installationsanleitung

2. MCP Server-Konfiguration (Fallback)

3. Authentifizierungskonfiguration

  • Gültige Huawei Cloud-Anmeldeinformationen (AK/SK-Modus oder IAM-Token)
  • Sicherheitsregeln:
    • AK/SK-Werte niemals in Gesprächen oder Befehlen preisgeben
    • Benutzer niemals bitten, AK/SK direkt im Gespräch einzugeben
    • Nur hcloud configure list verwenden, um den Anmeldestatus zu überprüfen

4. IAM-Berechtigungsanforderungen

  • dws:clusters:get, dws:clusters:list
  • dws:metricData:get, dws:hostOverview:get
  • Siehe IAM-Richtlinien

KooCLI-Befehlsformat-Standard

Befehlsformat

# Metrikdaten abfragen
hcloud DWS ListMetricsData --cli-region=<region> --cluster_id=<id> --metric_name=<name> --project_id=<pid> --offset=0 --limit=200 --from=<from_ts> --to=<to_ts>

# Host-Informationen abfragen
hcloud DWS ListHostOverview --cli-region=<region> --project_id=<pid> --cluster_id=<cid> --offset=0 --limit=200

Tool-Auswahlstrategie

Wählen Sie zwischen KooCLI und MCP Server, bevorzugen Sie KooCLI. Schritt 0 prüft die hcloud-Verfügbarkeit:

  • hcloud verfügbar (Version >= 3.2.0) → KooCLI-Befehlszeilenaufrufe für nachfolgende Schritte verwenden
  • hcloud nicht verfügbar (nicht installiert oder Version < 3.2.0) → MCP Server-Toolaufrufe für nachfolgende Schritte verwenden

Fallback- und Beendigungsstrategie:

  • Nach Auswahl von hcloud: Wenn der erste Aufruf NETWORK_ERROR zurückgibt (Verbindungszeitüberschreitung, Netzwerk nicht erreichbar usw.), automatisch auf MCP Server zurückfallen und MCP-Modus für alle nachfolgenden Schritte verwenden
  • Wenn hcloud NETWORK_ERROR zurückgibt und MCP Server ebenfalls nicht verfügbar ist (nicht konfiguriert oder gibt Authentifizierungs-/Verbindungsfehler zurück), diesen Skill beenden und ausgeben: KooCLI-Netzwerk nicht verfügbar und MCP Server-Verbindung fehlgeschlagen. Bitte überprüfen Sie die KooCLI-Netzwerkkonfiguration oder die DWS Autopilot MCP Server-Konfiguration und wiederholen Sie den Vorgang.
  • Nach Auswahl von MCP Server: Wenn der erste Aufruf einen Authentifizierungsfehler zurückgibt (z. B. 401 Nicht autorisiert), nicht auf hcloud zurückfallen. Diesen Skill direkt beenden und ausgeben: MCP Server-Authentifizierung fehlgeschlagen. Bitte überprüfen Sie die DWS Autopilot MCP Server-Authentifizierungskonfiguration und wiederholen Sie den Vorgang.
  • hcloud-Aufruffehler, die NICHT NETWORK_ERROR sind (z. B. Parameterfehler, unzureichende Berechtigungen), lösen keinen Fallback aus; vorhandene Wiederholungslogik befolgen

Sobald ein Tool ausgewählt wurde, wird es durchgehend verwendet, ohne zu wechseln (außer für NETWORK_ERROR-Fallback). Wenn ein Aufruf fehlschlägt, einmal wiederholen (maximal 2 Versuche). Wenn immer noch fehlschlagend, die Metrik als „nicht verfügbar“ markieren und mit dem nächsten Schritt fortfahren. Wenn alle Metrikabfragen fehlschlagen, den Diagnosebericht direkt generieren.

Parameterzuordnung

Allgemeiner Parameterhcloud-ParameterMCP-Parameter
Region--cli-region(in MCP-Verbindung integriert)
Projekt-ID--project_idproject_id
Cluster-ID--cluster_idcluster_id
Metrikname--metric_namemetric_name
Startzeit--fromfrom_ts
Endzeit--toto_ts
Paginierungs-Offset--offsetoffset
Paginierungslimit--limitlimit
Sortierfeld(nicht unterstützt)order_by
Sortierrichtung(nicht unterstützt)sort_by

MCP-Tools

Tool-NameZweckWichtige Parameter
dws_autopilot_get_clustersCluster-Liste abfragenproject_id, cluster_id, limit, offset
dws_autopilot_get_hostsHost-Informationen abfragenproject_id, cluster_id, limit, offset
dws_autopilot_get_metricMetrikdaten abfragenproject_id, cluster_id, metric_name, from_ts, to_ts, limit, offset, order_by, sort_by

Hinweise zu metric_data-Parametern: metric_data unterstützt keine Filterung nach instance_name (kein solcher Parameter); die Abfrage gibt vollständige Clusterdaten zurück und muss nach dem inst_name-Feld für Zielinstanzen gefiltert werden; metric_data unterstützt keinen period-Parameter (das Abtastintervall wird automatisch von der Plattform bestimmt).

Verfügbare metric_name: IOStat, CpuStat, cpu_io_diagnose_detail, business_concurrency, business_query_monitor, business_thread_wait, bussiness_conflict_lock

Zeitprotokoll: from_ts/to_ts müssen Unix-Millisekunden-Zeitstempel verwenden; alle Zeiten sind in UTC-Zeitzone; empfohlenes Zeitfenster: von 5 Minuten vor Alarmzeit bis zur Alarmzeit (from_ts = erste_Alarmzeit - 300000).

Rückgabeformat: Erfolg {"code": 0, "data": [...]}; Fehler {"code": -1, "message": "Fehlerbeschreibung"}. Bei Fehler einmal wiederholen; wenn immer noch fehlschlagend, Degradationspfad verwenden und im Bericht als „nicht verfügbar“ markieren.

Schlüsselfelder pro Metrik:

  • IOStat: ctime, host_id, disk_name, io_data{util, await, r_await, w_await, r_s, w_s, read_iops, write_iops, rMB_s, wMB_s, read_throughput, write_throughput, avgrq_sz, avgqu_sz} → Kern-I/O-Metriken
  • CpuStat: ctime, host_id, cpu_data{usr, sys, idle, iowait} → iowait > 30 % weist auf erheblichen I/O-Druck hin
  • cpu_io_diagnose_detail: ctime, host_id, active_queries[{query, query_id, userName, cpu_rate, state, inst_name, duration_ms}], io_stats{read_iops, write_iops, read_throughput, write_throughput} → I/O-Diagnosedetails + aktive Abfragen
  • business_concurrency: ctime, concurrency_value, active_connections → Geschäftskonkurrenz
  • business_query_monitor: ctime, query, query_id, username, duration_ms, host_id → historische Echtzeit-Abfragen
  • business_thread_wait: ctime, wait_event, count, username, host_id → Warte-Ereignisse (Warte auf WAL-Sync, WALWriteLock usw.)
  • bussiness_conflict_lock: ctime, lock_type, blocker, waiter, username, host_id → Sperrkonflikte

Für Abfrageunterschiede pro Schritt siehe Metrik-Referenz.

Paginierungsspezifikation

Alle Tool-Aufrufe (MCP und hcloud) müssen paginierte Abfragen verwenden, um zu verhindern, dass einzelne Antworten zu groß werden und Token-Limits überschreiten.

Paginierungsregeln:

  • Einheitlich limit=200 verwenden (keine Werte größer als 200 verwenden, außer der deklarierten Ausnahme unten)
  • Explizite Ausnahme: cpu_io_diagnose_detail verwendet limit=800-Paginierung (aufgrund des größten Datenvolumens: Multi-Knoten × Multi-Instanz × Multi-Zeitpunkt × Multi-Abfrage); eine einzelne Seite von 200 reicht möglicherweise nicht aus
  • Erste Seite offset=0; wenn zurückgegebene Datenanzahl = limit, dann offset+=limit und Abfrage fortsetzen
  • Wiederholen, bis zurückgegebene Datenanzahl < limit, dann alle paginierten Daten zusammenführen
  • Beim Zusammenführen alle Datenarrays aller Seiten zu einem vollständigen Datensatz konkatenieren

MCP-Aufrufbeispiel (mit IOStat):

Seite 1: dws_autopilot_get_metric(project_id, cluster_id, metric_name="IOStat", from_ts, to_ts, limit=200, offset=0)
Wenn zurückgegebene Datenlänge = 200:
Seite 2: dws_autopilot_get_metric(project_id, cluster_id, metric_name="IOStat", from_ts, to_ts, limit=200, offset=200)
Wenn zurückgegebene Datenlänge < 200: Paginierung stoppen, Daten von Seite 1 + Seite 2 zusammenführen

hcloud-Aufrufbeispiel (mit IOStat):

Seite 1: hcloud DWS ListMetricsData --cli-region=<region> --cluster_id=<id> --metric_name=IOStat --project_id=<pid> --offset=0 --limit=200 --from=<from_ts> --to=<to_ts>
Wenn zurückgegebene Datenanzahl = 200:
Seite 2: hcloud DWS ListMetricsData --cli-region=<region> --cluster_id=<id> --metric_name=IOStat --project_id=<pid> --offset=200 --limit=200 --from=<from_ts> --to=<to_ts>
Wenn zurückgegebene Datenanzahl < 200: Paginierung stoppen, Daten zusammenführen

Arbeitsablauf

Erstellen Sie vor der Diagnose einen Ausführungsplan basierend auf den Schritten 0-7 und führen Sie ihn dann sequenziell aus. Informationen zur Tool-Auswahlstrategie finden Sie im Abschnitt „KooCLI-Befehlsformat-Standard“; nachfolgende Schritte wiederholen dies nicht. Alle MCP-Toolaufrufe befolgen den Abschnitt „Paginierungsspezifikation“; nachfolgende Schritte wiederholen keine Paginierungsdetails.

Schritt 0: Umgebungserkennung & Parameterauflösung

Erforderliche Parametervalidierung: Stellen Sie vor dem Fortfahren sicher, dass mindestens einer von cluster_id oder cluster_name bereitgestellt wurde (beide können bereitgestellt werden, aber mindestens einer ist erforderlich). Wenn beide fehlen, fordern Sie den Benutzer auf, eine gültige cluster_id oder einen gültigen cluster_name bereitzustellen und beenden Sie die Diagnose, bis dies geschehen ist.

Cluster-Existenzvalidierung: Verwenden Sie die Clusterlistenabfrage (hcloud DWS ListClusters im hcloud-Modus oder dws_autopilot_get_clusters im MCP-Modus), um zu bestätigen, dass der Zielcluster existiert:

  • Wenn die Abfrage die Fehlercodes DWS.13026 oder DWS.13032 zurückgibt (Cluster nicht gefunden) oder die zurückgegebene Clusterliste die angegebene cluster_id/cluster_name nicht enthält → der Cluster existiert nicht. Beenden Sie die Diagnose und geben Sie aus: Der angegebene DWS-Cluster existiert nicht. Bitte überprüfen Sie die cluster_id/cluster_name und wiederholen Sie den Vorgang.
  • Wenn die Abfrage erfolgreich ist und der Cluster existiert → mit den folgenden Schritten fortfahren.

Parameterauflösung: Wenn project_id oder region_id nicht vom Benutzer bereitgestellt wurden, aus der MCP Server-Konfigurationsdatei conf/dws_config.yaml lesen:

  • Wenn project_id fehlt: python -c "import yaml; c=yaml.safe_load(open('conf/dws_config.yaml')); print(c.get('project_id',''))" ausführen, um sie zu erhalten
  • Wenn region_id fehlt: python -c "import yaml; c=yaml.safe_load(open('conf/dws_config.yaml')); print(c.get('region_id',''))" ausführen, um sie zu erhalten
  • Wenn das entsprechende Feld in der Konfigurationsdatei ebenfalls leer ist, den Benutzer auffordern, den Parameter bereitzustellen

hcloud version ausführen; Version >= 3.2.0 → tool_mode=hcloud, sonst tool_mode=mcp.

hcloud-Netzwerkverfügbarkeitsprüfung: Wenn tool_mode=hcloud, einen leichten API-Aufruf ausführen (z. B. hcloud DWS ListClusters --cli-region=<region> --project_id=<project_id>), um die Netzwerkkonnektivität zu überprüfen:

  • Gibt Normalwert oder Geschäftsfehler zurück (z. B. unzureichende Berechtigungen, Parameterfehler) → Netzwerk verfügbar, tool_mode=hcloud beibehalten
  • Gibt NETWORK_ERROR zurück → Netzwerk nicht verfügbar, auf tool_mode=mcp zurückfallen
  • Nach Fallback, wenn MCP ebenfalls nicht verfügbar ist → Ausführung beenden, Benutzer auffordern, die KooCLI-Netzwerkkonfiguration oder die MCP Server-Konfiguration zu überprüfen

Schritt 1: IOStat abfragen

Metrikabfrage mit metric_name="IOStat" aufrufen, Zeitfenster: from_ts=erste_Alarmzeit - 300000, to_ts=erste_Alarmzeit. Im MCP-Modus limit=200-paginierte Abfrage verwenden.

Autopilot-Nicht-Verfügbarkeitsbestimmung: Gibt Fehler 50201/RDS.9999 zurück → Schritte 1-6 überspringen, alle Metriken als „nicht verfügbar“ markieren, direkt zu Schritt 7 gehen.

Parsen: Nach host_id und disk_name gruppieren, die neuesten I/O-Daten für jede Festplatte auf jedem Knoten finden. Für jede Festplatte util, await, r_await, w_await, r_s, w_s, read_iops, write_iops, rMB_s, wMB_s, read_throughput, write_throughput, avgrq_sz, avgqu_sz extrahieren.

I/O-Überlastungsbestimmung: Ob eine Festplatte util > 90 % oder await > 100 oder Durchsatz/IOPS die Obergrenze erreicht.

I/O-Ungleichgewichtsbestimmung: Ob die Abweichung von util oder await zwischen Knoten > 20 %.

TOP-Knoten-Filterung: Die beiden Knoten mit der höchsten I/O-Last finden.

Phänomenverteilungsbestimmung: Ob ein Knoten einzelne Festplatte mit hohem I/O oder alle Festplatten mit hohem I/O hat (für Schritt 4 Szenario-Routing verwendet).

Hohe I/O-Zeitpunkte: Aus den IOStat-Zeitreihendaten alle ctime-Punkte finden, an denen auf den Top-2-I/O-Knoten eine Festplatte util > 90 % aufweist. Diese ctime-Werte als high_io_ctimes (Liste von Millisekunden-Zeitstempeln) sammeln. Auch die ctime mit der höchsten util als peak_io_ctime aufzeichnen. Wenn keine ctime util > 90 % aufweist, ist high_io_ctimes leer und peak_io_ctime ist die ctime mit dem höchsten util-Wert.

Ausgabe: io_by_host_disk, io_by_host, max_io_hosts, problem_host_id, problem_host_util, problem_host_await, problem_host_avgrq_sz, problem_host_avgqu_sz, cluster_avg_util, is_imbalanced, io_deviation, high_io_nodes, single_disk_high_nodes, all_disk_high_nodes, high_io_ctimes, peak_io_ctime

Schritt 2: Hostnamen abrufen

Hostinformationsabfrage aufrufen (MCP-Modus limit=200-paginiert), host_id → {ho ... [für die Übersetzung gekürzt]

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

huaweicloud/huawei-cloud-ecs-manage

Use when managing Huawei Cloud ECS (Elastic Cloud Server / 弹性云服务器) instances — lifecycle management (create / start / stop / restart / delete), day-to-day change operations (resize / reinstall OS / reset password / replace keypair / bind & unbind EIP / change security group / add & remove NIC / attach & detach volume), instance querying, quota/flavor/image inspection, mandatory async-job polling after every write, and multi-step root-cause diagnosis of ECS instance creation failures (quota → flavor → image → network → keypair → disk). Provides 23 huawei_* actions: huawei_list_ecs_instances, huawei_get_ecs_instance, huawei_list_ecs_flavors, huawei_list_ecs_images, huawei_list_ecs_quotas, huawei_diagnose_ecs_create_failure, huawei_analyze_ecs_health, huawei_create_ecs_instance, huawei_start_ecs_instance, huawei_stop_ecs_instance, huawei_restart_ecs_instance, huawei_delete_ecs_instance, huawei_resize_ecs_instance, huawei_reinstall_ecs_os, huawei_reset_ecs_password, huawei_replace_ecs_keypair, huawei_bind_ecs_eip

huaweicloud/huawei-cloud-ges-graph

Provides access guide for Huawei Cloud Graph Database GES service. Covers Cypher queries, GQL queries, schema/label management, summary info queries, graph data editing and more. Use this skill when users want to operate Huawei Cloud graph database GES service via terminal.

huaweicloud/huawei-cloud-obs-upload

Upload a local file or directory to a specified Huawei Cloud OBS (Object Storage Service) bucket with obsutil, and set up a scheduled/periodic upload task (crontab) that syncs a local directory to an OBS bucket. Also lists OBS buckets with storage capacity and object count. Use this skill when the user wants to: (1) upload a specific local file or directory to a named OBS bucket, (2) set up a scheduled/periodic upload task that automatically syncs a local directory to a named OBS bucket, (3) list their OBS buckets and check capacity and object count. Triggers include: user mentions "upload to OBS bucket", "上传文件到OBS", "上传目录到OBS", "定时上传到OBS", "目录同步到OBS桶", "OBS scheduled upload", "OBS周期上传", "OBS bucket capacity check", "OBS桶容量查询". Generic phrases such as "object storage", "upload file" or "upload directory" alone are NOT sufficient to trigger this skill.

huaweicloud/huawei-cloud-obs-website-host

Configure Huawei Cloud OBS static website hosting with Python SDK and a custom domain. Use when the user needs to enable or repair OBS website hosting, set index or error pages, expose an existing bucket for public website access through a custom domain, or connect that domain through Huawei Cloud DNS when Huawei manages the zone. Triggers include OBS static website hosting, website endpoint, index page, error page, public-read bucket website access, custom domain CNAME, Huawei Cloud DNS, setBucketWebsite. 中文触发词包括:OBS 静态网站托管、网站托管、自定义域名解析。

Verwandte Skills