> new-relic
Set up and manage New Relic for full-stack observability including APM, browser monitoring, infrastructure monitoring, and alerting. Use when a user needs to instrument applications, write NRQL queries, create dashboards, configure alert policies, or integrate New Relic with their deployment pipeline.
curl "https://skillshub.wtf/TerminalSkills/skills/new-relic?format=md"New Relic
Overview
Configure New Relic for application performance monitoring, infrastructure observability, browser real-user monitoring, and intelligent alerting. Covers agent installation, NRQL querying, dashboard creation, and alert policy configuration.
Instructions
Task A: Install APM Agent
# Install New Relic Node.js agent
npm install newrelic
// newrelic.js — New Relic agent configuration (must be first require)
'use strict'
exports.config = {
app_name: ['payment-service'],
license_key: process.env.NEW_RELIC_LICENSE_KEY,
distributed_tracing: { enabled: true },
logging: { level: 'info' },
allow_all_headers: true,
attributes: {
exclude: [
'request.headers.cookie',
'request.headers.authorization',
]
},
transaction_tracer: {
enabled: true,
transaction_threshold: 'apdex_f',
record_sql: 'obfuscated',
},
error_collector: {
enabled: true,
ignore_status_codes: [404, 401],
},
}
// app.js — Load New Relic before anything else
require('newrelic')
const express = require('express')
const app = express()
app.get('/api/orders', async (req, res) => {
const orders = await db.query('SELECT * FROM orders LIMIT 100')
res.json(orders)
})
Task B: Infrastructure Agent Setup
# Install infrastructure agent on Ubuntu
curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash
sudo NEW_RELIC_API_KEY="NRAK-XXXXXXXXX" NEW_RELIC_ACCOUNT_ID="1234567" \
/usr/local/bin/newrelic install -n infrastructure-agent-installer
# /etc/newrelic-infra.yml — Infrastructure agent config
license_key: "<YOUR_LICENSE_KEY>"
display_name: "web-server-01"
custom_attributes:
environment: production
team: platform
region: us-east-1
enable_process_metrics: true
metrics_system_sample_rate: 15
metrics_network_sample_rate: 15
Task C: NRQL Queries
-- Find slowest transactions in the last hour
SELECT average(duration), max(duration), count(*)
FROM Transaction
WHERE appName = 'payment-service'
FACET name
SINCE 1 hour ago
ORDER BY average(duration) DESC
LIMIT 20
-- Error rate by deployment version
SELECT percentage(count(*), WHERE error IS true) AS 'Error Rate'
FROM Transaction
WHERE appName = 'payment-service'
FACET tags.version
SINCE 1 day ago
TIMESERIES 15 minutes
-- Apdex score trend over time
SELECT apdex(duration, 0.5) AS 'Apdex'
FROM Transaction
WHERE appName = 'payment-service'
SINCE 7 days ago
TIMESERIES 1 hour
-- Infrastructure: hosts with high CPU
SELECT average(cpuPercent), max(memoryUsedPercent)
FROM SystemSample
FACET hostname
WHERE environment = 'production'
SINCE 30 minutes ago
Task D: Create Alert Policies via API
# Create an alert policy via NerdGraph API
curl -X POST 'https://api.newrelic.com/graphql' \
-H "Content-Type: application/json" \
-H "Api-Key: ${NEW_RELIC_API_KEY}" \
-d '{
"query": "mutation { alertsPolicyCreate(accountId: 1234567, policy: { name: \"Payment Service - Production\", incidentPreference: PER_CONDITION_AND_TARGET }) { id name } }"
}'
# Create a NRQL alert condition — High error rate
curl -X POST 'https://api.newrelic.com/graphql' \
-H "Content-Type: application/json" \
-H "Api-Key: ${NEW_RELIC_API_KEY}" \
-d '{
"query": "mutation { alertsNrqlConditionStaticCreate(accountId: 1234567, policyId: 987654, condition: { name: \"High Error Rate\", enabled: true, nrql: { query: \"SELECT percentage(count(*), WHERE error IS true) FROM Transaction WHERE appName = '\''payment-service'\''\" }, signal: { aggregationWindow: 300, aggregationMethod: EVENT_FLOW, aggregationDelay: 120 }, terms: [{ threshold: 5, thresholdOccurrences: ALL, thresholdDuration: 300, operator: ABOVE, priority: CRITICAL }, { threshold: 2, thresholdOccurrences: ALL, thresholdDuration: 300, operator: ABOVE, priority: WARNING }], violationTimeLimitSeconds: 86400 }) { id name } }"
}'
Task E: Create Dashboards via NerdGraph
# Create a dashboard with multiple widgets
curl -X POST 'https://api.newrelic.com/graphql' \
-H "Content-Type: application/json" \
-H "Api-Key: ${NEW_RELIC_API_KEY}" \
-d '{
"query": "mutation { dashboardCreate(accountId: 1234567, dashboard: { name: \"Payment Service Overview\", permissions: PUBLIC_READ_WRITE, pages: [{ name: \"Overview\", widgets: [{ title: \"Throughput\", configuration: { line: { nrqlQueries: [{ accountIds: [1234567], query: \"SELECT rate(count(*), 1 minute) FROM Transaction WHERE appName = '\''payment-service'\'' TIMESERIES\" }] } }, rawConfiguration: { facet: { showOtherSeries: false } } }, { title: \"Error Rate\", configuration: { billboard: { nrqlQueries: [{ accountIds: [1234567], query: \"SELECT percentage(count(*), WHERE error IS true) AS '\''Error Rate'\'' FROM Transaction WHERE appName = '\''payment-service'\'' SINCE 1 hour ago\" }], thresholds: [{ alertSeverity: CRITICAL, value: 5 }, { alertSeverity: WARNING, value: 2 }] } } }] }] }) { entityResult { guid } } }"
}'
Task F: Browser Monitoring
<!-- index.html — Add New Relic browser agent snippet -->
<head>
<script type="text/javascript">
;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},
privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}};
// Paste the full browser agent JS snippet from New Relic UI
// Settings > Application > Browser monitoring > Copy/paste method
</script>
</head>
# Configure browser monitoring via API for SPA
curl -X POST 'https://api.newrelic.com/graphql' \
-H "Content-Type: application/json" \
-H "Api-Key: ${NEW_RELIC_API_KEY}" \
-d '{
"query": "mutation { agentApplicationSettingsUpdate(guid: \"YOUR_BROWSER_ENTITY_GUID\", settings: { browserConfig: { apdexTarget: 3.0 }, browserMonitoring: { distributedTracing: { enabled: true }, ajax: { enabled: true }, spa: { enabled: true } } }) { browserConfig { apdexTarget } } }"
}'
Best Practices
- Use distributed tracing across all services for end-to-end request visibility
- Set meaningful Apdex thresholds per service based on actual SLA requirements
- Use
FACETin NRQL to break down metrics by deployment version, endpoint, or region - Configure alert notification channels (Slack, PagerDuty) before creating policies
- Use workloads to group related entities and get unified health status
- Exclude sensitive headers and parameters from agent collection
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.