Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/CodySwannGT/expostarter --skill ops-verify-telemetry명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | ops-verify-telemetry |
| description | Verify OpenTelemetry traces are… |
| allowed-tools | ["Bash","Read"] |
Verify OpenTelemetry traces are being collected and exported to X-Ray.
Argument: $ARGUMENTS — check type (traces, metrics, all; default: all)
Gemfile for OpenTelemetry gem configuration:
opentelemetry-sdkopentelemetry-exporter-otlpopentelemetry-instrumentation-all (or individual instrumentation gems)config/initializers/opentelemetry.rb (or similar) for SDK configurationconfig/deploy.yml or environment files for OTEL_EXPORTER_OTLP_ENDPOINT and OTEL_SERVICE_NAMEdocker-compose.yml for OpenTelemetry Collector sidecar configuration (if present)bundle list | grep -i opentelemetry
grep -r "OpenTelemetry" config/initializers/ app/
echo "OTEL_EXPORTER_OTLP_ENDPOINT=${OTEL_EXPORTER_OTLP_ENDPOINT:-not set}"
echo "OTEL_SERVICE_NAME=${OTEL_SERVICE_NAME:-not set}"
Make a request to the local app and check that traces are produced:
# Make a request that should generate a trace
curl -sf http://localhost:3000/up -w "\nHTTP %{http_code}\n"
# Check Rails logs for OpenTelemetry output (if configured to log)
grep -i "otel\|opentelemetry\|trace_id" log/development.log | tail -10
docker compose logs otel-collector 2>/dev/null | tail -20 || echo "No otel-collector service in Docker Compose"
aws xray get-trace-summaries \
--region {aws-region} \
--start-time $(ruby -r time -e 'puts (Time.now.utc - 30 * 60).iso8601') \
--end-time $(ruby -r time -e 'puts Time.now.utc.iso8601') \
--query 'TraceSummaries | length(@)' \
--output text
aws xray get-trace-summaries \
--region {aws-region} \
--start-time $(ruby -r time -e 'puts (Time.now.utc - 30 * 60).iso8601') \
--end-time $(ruby -r time -e 'puts Time.now.utc.iso8601') \
--filter-expression "service(\"{service-name}\")" \
--query 'TraceSummaries[:10].{TraceId:Id,Duration:Duration,StatusCode:Http.HttpStatus,URL:Http.HttpURL,ResponseTime:ResponseTime}' \
--output table
aws xray get-trace-summaries \
--region {aws-region} \
--start-time $(ruby -r time -e 'puts (Time.now.utc - 3600).iso8601') \
--end-time $(ruby -r time -e 'puts Time.now.utc.iso8601') \
--filter-expression "service(\"{service-name}\") AND fault = true" \
--query 'TraceSummaries[:10].{TraceId:Id,Duration:Duration,StatusCode:Http.HttpStatus,URL:Http.HttpURL}' \
--output table
aws xray batch-get-traces \
--region {aws-region} \
--trace-ids "{trace-id}" \
--query 'Traces[0].Segments[].Document' \
--output text | jq '.'
aws xray get-service-graph \
--region {aws-region} \
--start-time $(ruby -r time -e 'puts (Time.now.utc - 3600).iso8601') \
--end-time $(ruby -r time -e 'puts Time.now.utc.iso8601') \
--query 'Services[].{Name:Name,Type:Type,Edges:Edges[].{Ref:ReferenceId,Latency:ResponseTimeHistogram[0].Average}}' \
--output table
aws cloudwatch list-metrics \
--region {aws-region} \
--namespace "{app_name}" \
--query 'Metrics[].{MetricName:MetricName,Dimensions:Dimensions[].{Name:Name,Value:Value}}' \
--output table
aws cloudwatch get-metric-statistics \
--region {aws-region} \
--namespace "{app_name}" \
--metric-name "{metric-name}" \
--start-time $(ruby -r time -e 'puts (Time.now.utc - 3600).iso8601') \
--end-time $(ruby -r time -e 'puts Time.now.utc.iso8601') \
--period 300 \
--statistics Average Sum \
--output table
aws cloudwatch describe-alarms \
--region {aws-region} \
--alarm-name-prefix "{app_name}" \
--query 'MetricAlarms[].{Name:AlarmName,State:StateValue,Metric:MetricName,Threshold:Threshold}' \
--output table
For checking telemetry configuration in deployed environments:
kamal app exec --roles=web "bin/rails runner \"
puts 'OTEL_EXPORTER_OTLP_ENDPOINT: ' + ENV.fetch('OTEL_EXPORTER_OTLP_ENDPOINT', 'NOT SET')
puts 'OTEL_SERVICE_NAME: ' + ENV.fetch('OTEL_SERVICE_NAME', 'NOT SET')
puts 'OTEL_TRACES_EXPORTER: ' + ENV.fetch('OTEL_TRACES_EXPORTER', 'NOT SET')
\"" -d {environment}
| Check | Status | Details |
|---|---|---|
| OTel gems installed | OK/FAIL | opentelemetry-sdk v1.x.x |
| OTel initializer present | OK/FAIL | config/initializers/opentelemetry.rb |
| OTLP endpoint configured | OK/FAIL | https://otel-collector:4318 |
| Traces in X-Ray (last 30m) | OK/FAIL | 245 traces found |
| Error traces (last 1h) | OK/WARN | 3 fault traces |
| CloudWatch metrics | OK/FAIL | 12 custom metrics published |
| CloudWatch alarms | OK/WARN | 1 alarm in ALARM state |
| Trace ID | Duration | Status | URL |
|---|---|---|---|
| 1-abc123 | 45ms | 200 | GET /up |
| 1-def456 | 120ms | 200 | GET /api/v1/users |
| 1-ghi789 | 2300ms | 500 | POST /api/v1/orders |
Flag concerns: