mcpField
A
alicloud-observability-openclaw-sls-integration

alicloud-observability-openclaw-sls-integration

github.com/cinienceクラウド・DevOps39685 回インストール11 週間前に更新
リポジトリ

alicloud-observability-openclaw-sls-integration について

alicloud-observability-openclaw-sls-integrationは、Linux上のOpenClaw向けにAlibaba Cloud SLSの可観測性を構成するスキルです。再実行可能な手順でコレクター、ログストア関連リソース、ダッシュボード、収集設定のバインドを行います。

主な機能

  1. 01aliyun CLIの確認とインストール
  2. 02LoongCollectorのインストール
  3. 03マシングループの作成
  4. 04ログストアのインデックスとダッシュボード設定
  5. 05収集設定の作成とバインド
  6. 06既存リソースの作成をスキップ

活用シーン

  1. 01OpenClaw向けSLS可観測性の設定
  2. 02Linuxホストでのログ収集設定
  3. 03既存リソースを残したまま設定を再実行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cinience/alicloud-skills --skill alicloud-observability-openclaw-sls-integration

インストール後、Claude Code で/alicloud-observability-openclaw-sls-integrationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

_meta.json
references/
cli-commands.md
collector-config.json
dashboard-audit.json
dashboard-gateway.json
index.json

詳細

OpenClaw SLS 統合

このスキルは、Linux 上の OpenClaw に Alibaba Cloud SLS のオブザーバビリティを設定し、再実行しても安全に動作するようにします。

大まかな流れは次のとおりです。

  1. aliyun CLI を確認してインストールします(未インストールの場合は最新版をインストールします)
  2. プロジェクトのリージョンに応じて LoongCollector をインストールします(すでに実行中の場合はスキップします)
  3. 識別子に基づくマシングループを作成します(ローカル識別子とクラウドのマシングループ)
  4. logstore のインデックスとダッシュボードを作成します
  5. logstore の収集設定を作成します
  6. 収集設定をマシングループにバインドします

実行前に意図を確認する

コマンドを実行する前に、ユーザーの意図がすべて確認できていることを確かめます。

  1. 対象の PROJECT と LOGSTORE を確認します。
  2. sudo を使用できる Linux ホストへのアクセスを確認します。
  3. AK/SK が環境変数にエクスポート済みであることを確認します。
  4. 必須の入力が不足している場合は、先にユーザーに確認し、セットアップを部分的に実行しないでください。

前提条件

必須:

  • PROJECT:SLS プロジェクト名
  • LOGSTORE:SLS ログストア名

環境変数から読み取ります:

  • ALIBABA_CLOUD_ACCESS_KEY_ID
  • ALIBABA_CLOUD_ACCESS_KEY_SECRET
  • ALIYUN_UID(/etc/ilogtail/users 配下のローカル UID ファイルに使用します)

推奨される任意項目:

  • ALIBABA_CLOUD_REGION_ID(未設定の場合は PROJECT から自動的に解決します)

AK/SK に別の環境変数名を使用している場合は、先にこれらの標準名にエクスポートしてください。


期待される結果

正常に実行されると、環境には次のものが含まれます。

  • ホスト上で実行中の LoongCollector(または ilogtaild)
  • マシングループ openclaw-sls-collector
  • 対象の LOGSTORE に作成されたインデックス
  • ダッシュボード openclaw-audit と openclaw-gateway
  • 収集設定 openclaw-audit_${LOGSTORE}
  • openclaw-audit_${LOGSTORE} と openclaw-sls-collector の間の設定バインディング

初回実行フロー(冪等)

以下のコマンドは「存在する場合はスキップ」するように設計されており、安全に再実行できます。 厳密なテンプレートモード:インデックス、設定、ダッシュボードのペイロードには、必ず references/ 内のファイルを読み込んでください。 必須のプレースホルダー置換を除き、JSON 本文を独自に作成したり簡略化したりしないでください。

set -euo pipefail

# ===== User inputs =====
: "${PROJECT:?Please export PROJECT}"
: "${LOGSTORE:?Please export LOGSTORE}"
: "${ALIBABA_CLOUD_ACCESS_KEY_ID:?Please export ALIBABA_CLOUD_ACCESS_KEY_ID}"
: "${ALIBABA_CLOUD_ACCESS_KEY_SECRET:?Please export ALIBABA_CLOUD_ACCESS_KEY_SECRET}"
: "${ALIYUN_UID:?Please export ALIYUN_UID}"

MACHINE_GROUP="openclaw-sls-collector"
CONFIG_NAME="openclaw-audit_${LOGSTORE}"

# 1) Install aliyun CLI if missing (Linux)
if ! command -v aliyun >/dev/null 2>&1; then
  if command -v apt-get >/dev/null 2>&1; then
    sudo apt-get update
    sudo apt-get install -y aliyun-cli
  elif command -v dnf >/dev/null 2>&1; then
    sudo dnf install -y aliyun-cli
  elif command -v yum >/dev/null 2>&1; then
    sudo yum install -y aliyun-cli
  elif command -v zypper >/dev/null 2>&1; then
    sudo zypper -n install aliyun-cli
  else
    echo "aliyun CLI not found. Install aliyun-cli manually for your Linux distribution." >&2
    exit 1
  fi
fi

# Export auth variables for aliyun CLI
export ALIBABA_CLOUD_ACCESS_KEY_ID
export ALIBABA_CLOUD_ACCESS_KEY_SECRET

is_loong_running() {
  if sudo /etc/init.d/loongcollectord status 2>/dev/null | grep -qi "running"; then
    return 0
  fi
  if sudo /etc/init.d/ilogtaild status 2>/dev/null | grep -qi "running"; then
    return 0
  fi
  return 1
}

# 2) Resolve region and install LoongCollector (skip when already running)
REGION_ID="${ALIBABA_CLOUD_REGION_ID:-}"
if [ -z "$REGION_ID" ]; then
  REGION_ID="$(aliyun sls GetProject --project "$PROJECT" --cli-query 'region' --quiet 2>/dev/null | tr -d '\"' || true)"
fi
if [ -z "$REGION_ID" ]; then
  echo "Cannot resolve region from project: $PROJECT. Please set ALIBABA_CLOUD_REGION_ID." >&2
  exit 1
fi

if ! is_loong_running; then
  wget "https://aliyun-observability-release-${REGION_ID}.oss-${REGION_ID}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh" -O loongcollector.sh
  chmod +x loongcollector.sh
  ./loongcollector.sh install "${REGION_ID}"
fi

# Post-install verification: one of loongcollectord/ilogtaild must be running.
if ! is_loong_running; then
  sudo /etc/init.d/loongcollectord start >/dev/null 2>&1 || true
  sudo /etc/init.d/ilogtaild start >/dev/null 2>&1 || true
fi
if ! is_loong_running; then
  echo "LoongCollector installation check failed: neither loongcollectord nor ilogtaild is running." >&2
  exit 1
fi

# 3) Local user-defined identifier + create machine group
sudo mkdir -p /etc/ilogtail
sudo mkdir -p /etc/ilogtail/users
if [ ! -f /etc/ilogtail/user_defined_id ]; then
  sudo touch /etc/ilogtail/user_defined_id
fi
RAND8="$(LC_ALL=C tr -dc 'a-z0-9' </dev/urandom | head -c 8)"
USER_DEFINED_ID_PREFIX="${PROJECT}_openclaw_sls_collector_"
EXISTING_USER_DEFINED_ID="$(sudo awk -v p="${USER_DEFINED_ID_PREFIX}" 'index($0,p)==1 {print; exit}' /etc/ilogtail/user_defined_id 2>/dev/null || true)"
if [ -n "${EXISTING_USER_DEFINED_ID}" ]; then
  USER_DEFINED_ID="${EXISTING_USER_DEFINED_ID}"
else
  USER_DEFINED_ID="${USER_DEFINED_ID_PREFIX}${RAND8}"
  echo "${USER_DEFINED_ID}" | sudo tee -a /etc/ilogtail/user_defined_id >/dev/null
fi
if ! sudo grep -Fxq "${USER_DEFINED_ID}" /etc/ilogtail/user_defined_id 2>/dev/null; then
  echo "Failed to persist USER_DEFINED_ID to /etc/ilogtail/user_defined_id" >&2
  exit 1
fi
if [ ! -f "/etc/ilogtail/users/${ALIYUN_UID}" ]; then
  sudo touch "/etc/ilogtail/users/${ALIYUN_UID}"
fi
if [ ! -f "/etc/ilogtail/users/${ALIYUN_UID}" ]; then
  echo "Failed to create UID marker file: /etc/ilogtail/users/${ALIYUN_UID}" >&2
  exit 1
fi

if ! aliyun sls GetMachineGroup --project "$PROJECT" --machineGroup "$MACHINE_GROUP" >/dev/null 2>&1; then
  cat > /tmp/openclaw-machine-group.json <<EOF
{
  "groupName": "${MACHINE_GROUP}",
  "groupType": "",
  "machineIdentifyType": "userdefined",
  "machineList": ["${USER_DEFINED_ID}"]
}
EOF
  aliyun sls CreateMachineGroup \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-machine-group.json)"
fi
if ! aliyun sls GetMachineGroup --project "$PROJECT" --machineGroup "$MACHINE_GROUP" >/dev/null 2>&1; then
  echo "Machine group was not created successfully: ${MACHINE_GROUP}" >&2
  exit 1
fi

# 4) Create logstore (if missing) + index + multiple dashboards
if ! aliyun sls GetLogStore --project "$PROJECT" --logstore "$LOGSTORE" >/dev/null 2>&1; then
  aliyun sls CreateLogStore --project "$PROJECT" \
    --body "{\"logstoreName\":\"${LOGSTORE}\",\"ttl\":30,\"shardCount\":2}"
fi

if ! aliyun sls GetIndex --project "$PROJECT" --logstore "$LOGSTORE" >/dev/null 2>&1; then
  # Use the index template as-is from references/index.json
  aliyun sls CreateIndex \
    --project "$PROJECT" \
    --logstore "$LOGSTORE" \
    --body "$(cat references/index.json)"
fi

sed "s/\${logstoreName}/${LOGSTORE}/g" references/dashboard-audit.json > /tmp/openclaw-audit-dashboard.json
sed "s/\${logstoreName}/${LOGSTORE}/g" references/dashboard-gateway.json > /tmp/openclaw-gateway-dashboard.json

# Create dashboard uses project + body(detail). Update uses path + project + body.
if aliyun sls GET "/dashboards/openclaw-audit" --project "$PROJECT" >/dev/null 2>&1; then
  aliyun sls PUT "/dashboards/openclaw-audit" \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-audit-dashboard.json)"
else
  aliyun sls POST "/dashboards" \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-audit-dashboard.json)"
fi

if aliyun sls GET "/dashboards/openclaw-gateway" --project "$PROJECT" >/dev/null 2>&1; then
  aliyun sls PUT "/dashboards/openclaw-gateway" \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-gateway-dashboard.json)"
else
  aliyun sls POST "/dashboards" \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-gateway-dashboard.json)"
fi

# 5) Create collection config (update when already exists)
# Render collector config strictly from references/collector-config.json
sed \
  -e "s/\${configName}/${CONFIG_NAME}/g" \
  -e "s/\${logstoreName}/${LOGSTORE}/g" \
  -e "s/\${region_id}/${REGION_ID}/g" \
  references/collector-config.json > /tmp/openclaw-collector-config.json

if aliyun sls GetConfig --project "$PROJECT" --configName "$CONFIG_NAME" >/dev/null 2>&1; then
  aliyun sls UpdateConfig \
    --project "$PROJECT" \
    --configName "$CONFIG_NAME" \
    --body "$(cat /tmp/openclaw-collector-config.json)"
else
  aliyun sls CreateConfig \
    --project "$PROJECT" \
    --body "$(cat /tmp/openclaw-collector-config.json)"
fi

# 6) Bind collection config to machine group
aliyun sls ApplyConfigToMachineGroup \
  --project "$PROJECT" \
  --machineGroup "$MACHINE_GROUP" \
  --configName "$CONFIG_NAME"

echo "OpenClaw SLS observability setup completed."

応答形式

このスキルの完了時に、次の内容を含む簡潔なステータスレポートを返します。

  1. 使用した入力:PROJECT、LOGSTORE、解決された REGION_ID
  2. 作成・更新したリソース(マシングループ、インデックス、ダッシュボード、設定、バインディング)
  3. スキップした手順(すでに存在していた/すでに実行中だったもの)
  4. ユーザーが次に実行する確認コマンド

確認コマンド

aliyun sls GetMachineGroup --project "$PROJECT" --machineGroup openclaw-sls-collector
aliyun sls GetIndex --project "$PROJECT" --logstore "$LOGSTORE"
aliyun sls GetDashboard --project "$PROJECT" --dashboardName openclaw-audit
aliyun sls GetDashboard --project "$PROJECT" --dashboardName openclaw-gateway
aliyun sls GetConfig --project "$PROJECT" --configName "openclaw-audit_${LOGSTORE}"

参照ファイル

  • コマンドフロー:references/cli-commands.md
  • インデックス定義:references/index.json
  • ダッシュボードテンプレート:references/dashboard-audit.json、references/dashboard-gateway.json
  • 収集設定テンプレート:references/collector-config.json

必要に応じて参照ファイルを読み込みます。

  • 手順に沿ったトラブルシューティングには cli-commands.md を使用します。
  • リソースの作成・更新には JSON テンプレートを使用します。

コメント