mcpField
A
aliyun-sls-openclaw-integration

aliyun-sls-openclaw-integration

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

aliyun-sls-openclaw-integration について

Linux 上の OpenClaw に Alibaba Cloud SLS の可観測性を設定するスキルです。コレクターの導入からリソース作成まで、テンプレートを使った再実行可能な手順を案内します。

主な機能

  1. 01aliyun CLI の確認・インストール
  2. 02LoongCollector の導入
  3. 03マシングループと logstore の作成
  4. 04収集設定とバインドの構成
  5. 05ダッシュボードと設定のテンプレート利用

活用シーン

  1. 01OpenClaw の SLS 監査ログ設定
  2. 02ゲートウェイと監査ダッシュボードの作成
  3. 03既存リソースを省略してセットアップを再実行

インストール

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

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

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

同梱ファイル

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

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

詳細

OpenClaw SLS Integration

このスキルは、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 logstore 名

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

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

推奨する任意の項目:

  • ALIBABACLOUD_REGION_ID(設定されていない場合、PROJECT から自動解決します)

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


想定される結果

実行が成功すると、環境には次の状態が作成されます。

  • ホスト上で LoongCollector(または ilogtaild)が実行中
  • マシングループ openclaw-sls-collector
  • 対象の LOGSTORE に作成された 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}"
: "${ALIBABACLOUD_ACCESS_KEY_ID:?Please export ALIBABACLOUD_ACCESS_KEY_ID}"
: "${ALIBABACLOUD_ACCESS_KEY_SECRET:?Please export ALIBABACLOUD_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 ALIBABACLOUD_ACCESS_KEY_ID
export ALIBABACLOUD_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="${ALIBABACLOUD_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 ALIBABACLOUD_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 テンプレートを使用します。

コメント