new-relic

Monitor applications and infrastructure with New Relic's observability platform.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "new-relic" with this command: npx skills add bagelhole/devops-security-agent-skills/bagelhole-devops-security-agent-skills-new-relic

New Relic

Monitor applications and infrastructure with New Relic's observability platform.

When to Use This Skill

Use this skill when:

  • Implementing full-stack observability

  • Setting up APM for applications

  • Monitoring infrastructure health

  • Creating custom dashboards and alerts

  • Implementing distributed tracing

Prerequisites

  • New Relic account and license key

  • Application access for APM agents

  • Infrastructure access for host agents

Infrastructure Agent

Linux Installation

Add repository and install

curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash

Configure license key

sudo NEW_RELIC_API_KEY=<YOUR_API_KEY> NEW_RELIC_ACCOUNT_ID=<ACCOUNT_ID> /usr/local/bin/newrelic install

Or manual configuration

echo "license_key: YOUR_LICENSE_KEY" | sudo tee -a /etc/newrelic-infra.yml sudo systemctl start newrelic-infra

Docker

docker-compose.yml

version: '3.8'

services: newrelic-infra: image: newrelic/infrastructure:latest cap_add: - SYS_PTRACE privileged: true pid: "host" network_mode: "host" environment: - NRIA_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY} - NRIA_DISPLAY_NAME=docker-host volumes: - /:/host:ro - /var/run/docker.sock:/var/run/docker.sock

Kubernetes

Using Helm

helm repo add newrelic https://helm-charts.newrelic.com

helm install newrelic-bundle newrelic/nri-bundle
--namespace newrelic
--create-namespace
--set global.licenseKey=${NEW_RELIC_LICENSE_KEY}
--set global.cluster=my-cluster
--set newrelic-infrastructure.privileged=true
--set ksm.enabled=true
--set kubeEvents.enabled=true
--set logging.enabled=true

APM Agents

Node.js

// At the very start of your application require('newrelic');

// newrelic.js configuration exports.config = { app_name: ['My Application'], license_key: process.env.NEW_RELIC_LICENSE_KEY, distributed_tracing: { enabled: true }, logging: { level: 'info' }, error_collector: { enabled: true, ignore_status_codes: [404] }, transaction_tracer: { enabled: true, transaction_threshold: 'apdex_f', record_sql: 'obfuscated' } };

Install agent

npm install newrelic

Run application

NEW_RELIC_LICENSE_KEY=xxx node -r newrelic app.js

Python

newrelic.ini

[newrelic] license_key = YOUR_LICENSE_KEY app_name = My Application distributed_tracing.enabled = true transaction_tracer.enabled = true error_collector.enabled = true browser_monitoring.auto_instrument = true

Install agent

pip install newrelic

Generate config file

newrelic-admin generate-config YOUR_LICENSE_KEY newrelic.ini

Run application

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python app.py

Or with gunicorn

NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program gunicorn app:app

Java

Download agent

curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip unzip newrelic-java.zip

Configure newrelic.yml

license_key: YOUR_LICENSE_KEY

app_name: My Application

Run with agent

java -javaagent:/path/to/newrelic.jar -jar myapp.jar

Go

package main

import ( "github.com/newrelic/go-agent/v3/newrelic" "net/http" )

func main() { app, err := newrelic.NewApplication( newrelic.ConfigAppName("My Application"), newrelic.ConfigLicense("YOUR_LICENSE_KEY"), newrelic.ConfigDistributedTracerEnabled(true), ) if err != nil { panic(err) }

http.HandleFunc(newrelic.WrapHandleFunc(app, "/", indexHandler))
http.ListenAndServe(":8080", nil)

}

func indexHandler(w http.ResponseWriter, r *http.Request) { txn := newrelic.FromContext(r.Context()) txn.AddAttribute("user_id", "12345") w.Write([]byte("Hello, World!")) }

Custom Instrumentation

Custom Events

import newrelic.agent

Record custom event

newrelic.agent.record_custom_event('OrderPlaced', { 'order_id': '12345', 'amount': 99.99, 'customer_id': 'cust_001' })

Custom Metrics

import newrelic.agent

Record custom metric

newrelic.agent.record_custom_metric('Custom/OrderValue', 99.99)

With attributes

newrelic.agent.record_custom_metric('Custom/ProcessingTime', processing_time, {'unit': 'milliseconds'} )

Custom Spans

import newrelic.agent

@newrelic.agent.function_trace(name='process_payment') def process_payment(order_id, amount): # This creates a custom span in the trace pass

Manual span creation

with newrelic.agent.FunctionTrace(name='custom_operation'): # Traced code pass

NRQL Queries

Basic Queries

-- Transaction throughput SELECT rate(count(*), 1 minute) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago

-- Average response time SELECT average(duration) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago

-- Error rate SELECT percentage(count(*), WHERE error IS true) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago

-- Apdex score SELECT apdex(duration, t: 0.5) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago

Advanced Queries

-- Slowest transactions SELECT average(duration) FROM Transaction WHERE appName = 'My Application' FACET name SINCE 1 hour ago ORDER BY average(duration) DESC LIMIT 10

-- Error breakdown SELECT count(*) FROM TransactionError WHERE appName = 'My Application' FACET error.class SINCE 1 hour ago

-- Percentile response times SELECT percentile(duration, 50, 90, 95, 99) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago TIMESERIES

-- Custom event analysis SELECT average(amount), count(*) FROM OrderPlaced FACET customer_id SINCE 1 day ago

Dashboards

Dashboard JSON

{ "name": "Application Dashboard", "pages": [ { "name": "Overview", "widgets": [ { "title": "Throughput", "visualization": {"id": "viz.line"}, "configuration": { "nrqlQueries": [ { "accountId": 12345, "query": "SELECT rate(count(), 1 minute) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago TIMESERIES" } ] } }, { "title": "Error Rate", "visualization": {"id": "viz.billboard"}, "configuration": { "nrqlQueries": [ { "accountId": 12345, "query": "SELECT percentage(count(), WHERE error IS true) FROM Transaction WHERE appName = 'My Application' SINCE 1 hour ago" } ] } } ] } ] }

Alerts

Alert Condition (NRQL)

{ "name": "High Error Rate", "type": "static", "nrql": { "query": "SELECT percentage(count(*), WHERE error IS true) FROM Transaction WHERE appName = 'My Application'" }, "valueFunction": "single_value", "terms": [ { "threshold": 5, "thresholdOccurrences": "all", "thresholdDuration": 300, "operator": "above", "priority": "critical" }, { "threshold": 2, "thresholdOccurrences": "all", "thresholdDuration": 300, "operator": "above", "priority": "warning" } ] }

Alert Policy

{ "name": "Application Alerts", "incident_preference": "PER_CONDITION_AND_TARGET", "conditions": [ { "name": "High Response Time", "type": "apm_app_metric", "entities": ["My Application"], "metric": "response_time_web", "condition_scope": "application", "terms": [ { "duration": "5", "operator": "above", "threshold": "1", "priority": "critical" } ] } ] }

Logs in Context

Python Configuration

newrelic.ini

[newrelic] application_logging.enabled = true application_logging.forwarding.enabled = true application_logging.metrics.enabled = true application_logging.local_decorating.enabled = true

Log Forwarding

newrelic-infra.yml

log:

  • name: application-logs file: /var/log/myapp/*.log attributes: service: myapp environment: production

Common Issues

Issue: No Data Appearing

Problem: Agent not reporting to New Relic Solution: Verify license key, check network connectivity, review agent logs

Issue: Missing Transactions

Problem: Some transactions not captured Solution: Check instrumentation coverage, verify framework support

Issue: High Overhead

Problem: APM agent impacting performance Solution: Adjust sampling rate, disable unnecessary features

Best Practices

  • Use meaningful application names

  • Implement distributed tracing across services

  • Set up service maps for dependency visualization

  • Configure appropriate alert thresholds

  • Use custom attributes for business context

  • Implement logs in context for correlation

  • Set up workloads for service grouping

  • Regular review of unused dashboards and alerts

Related Skills

  • datadog - Alternative monitoring platform

  • prometheus-grafana - Open source monitoring

  • alerting-oncall - Alert management

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Security

sops-encryption

No summary provided by upstream source.

Repository SourceNeeds Review
Security

linux-administration

No summary provided by upstream source.

Repository SourceNeeds Review
Security

linux-hardening

No summary provided by upstream source.

Repository SourceNeeds Review