You can enable the New Relic Track changes feature to monitor deployment events on your Commerce on cloud infrastructure project.
The Deployments data collection helps analyze the impact of deployment changes to overall performance, such as CPU, memory, response time, and more. See Track changes using NerdGraph in the New Relic documentation.
NR_API_URL
: New Relic API endpoint, in this case NerdGraph API URL https://api.newrelic.com/graphql
NR_API_KEY
: Create a user key, see New Relic API Keys in the New Relic documentation.NR_APP_GUID
: An entity that reports data to New Relic has a unique ID (GUID). As an example, to enable on a Staging environment, adjust the Staging environment NR_APP_GUID
cloud variable with the staging entity GUID from New Relic. See the NerdGraph tutorial: View entity data in the New Relic documentation.Track your Commerce project deployment events in New Relic by creating a script integration.
To enable the track deployments:
On your local workstation, change to your project directory.
Create an action-integration.js
file. Copy the following code and paste it in the action-integration.js
file and save:
function variables() {
var vars = {};
activity.payload.deployment.variables.forEach(function(variable) {
vars[variable.name] = variable.value;
});
return vars;
}
function trackDeployments() {
const envName = activity.payload.environment.name;
const config = JSON.parse(variables()['env:NR_CONFIG'].replace(/'/g, '"'));
const commitSha = activity.payload.commits ? activity.payload.commits[0].sha : activity.payload.environment.head_commit;
const deploymentType = activity.type;
if (!(envName in config)) {
throw new Error('There is no configuration for ' + envName);
}
const configEnv = config[envName];
if (!configEnv.NR_APP_GUID || !configEnv.NR_API_KEY || !configEnv.NR_API_URL) {
throw new Error('You must define the next configuation in the env variable NR_CONFIG: NR_APP_GUID, NR_API_KEY and NR_API_URL');
}
const query = `mutation {
changeTrackingCreateDeployment(
deployment: {
version: "${commitSha}",
entityGuid: "${configEnv.NR_APP_GUID}",
commit: "${commitSha}",
changelog: "${deploymentType}"
}
) {
deploymentId
entityGuid
}
}`;
var resp = fetch(configEnv.NR_API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'API-Key': configEnv.NR_API_KEY
},
body: JSON.stringify({
query
})
});
if (!resp.ok) {
console.log('Sending new relic change tracking failed: ' + resp.text());
} else {
console.log(resp.text());
}
}
trackDeployments();
Create a script integration using the magento-cloud
CLI command and reference the action-integration.js
file.
magento-cloud integration:add --type script --events='environment.restore, environment.push, environment.branch, environment.activate, environment.synchronize, environment.initialize, environment.merge, environment.redeploy, environment.variable.create, environment.variable.delete, environment.variable.update' --file ./action-integration.js --project=<YOUR_PROJECT_ID> --environments=<YOUR_ENVIRONMENT_ID>
Sample response:
Created integration 767u4hathojjw (type: script)
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| id | 767u4hathojjw |
| type | script |
| role | |
| events | - environment.restore |
| | - environment.push |
| | - environment.branch |
| | - environment.activate |
| | - environment.synchronize |
| | - environment.initialize |
| | - environment.merge |
| | - environment.redeploy |
| | - environment.variable.create |
| | - environment.variable.delete |
| | - environment.variable.update |
| environments | - staging |
| | - production |
| excluded_environments | { } |
| states | - complete |
| result | * |
| script | function variables() { |
| | var vars = {}; |
| | activity.payload.deployment.variables.forEach(function(variable) { |
| | vars[variable.name] = variable.value; |
| | }); |
| | return vars; |
| | } |
| | |
| | function trackDeployments() { |
| | const envName = activity.payload.environment.name; |
| | |
| | const config = JSON.parse(variables()['env:NR_CONFIG'].replace(/'/g, '"')); |
| | const commitSha = activity.payload.commits ? activity.payload.commits[0].sha : activity.payload.environment.head_commit; |
| | const deploymentType = activity.type; |
| | |
| | if (!(envName in config)) { |
| | throw new Error('There is no configuration for ' + envName); |
| | } |
| | |
| | const configEnv = config[envName]; |
| | |
| | if (!configEnv.NR_APP_GUID || !configEnv.NR_API_KEY || !configEnv.NR_API_URL) { |
| | throw new Error('You must define the next configuation in the env variable NR_CONFIG: NR_APP_GUID, NR_API_KEY and NR_API_URL'); |
| | } |
| | |
| | const query = `mutation { |
| | changeTrackingCreateDeployment( |
| | deployment: { |
| | version: "${commitSha}", |
| | entityGuid: "${configEnv.NR_APP_GUID}", |
| | commit: "${commitSha}", |
| | changelog: "${deploymentType}" |
| | } |
| | ) { |
| | deploymentId |
| | entityGuid |
| | } |
| | }`; |
| | |
| | var resp = fetch(configEnv.NR_API_URL, { |
| | method: 'POST', |
| | headers: { |
| | 'Content-Type': 'application/json', |
| | 'API-Key': configEnv.NR_API_KEY |
| | }, |
| | body: JSON.stringify({ |
| | query |
| | }) |
| | }); |
| | |
| | if (!resp.ok) { |
| | console.log('Sending new relic change tracking failed: ' + resp.text()); |
| | } else { |
| | console.log(resp.text()); |
| | } |
| | } |
| | |
| | trackDeployments(); |
| | |
+-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------+
Make a note of the integration ID for later use. In this example, the ID is:
Created integration 767u4hathojjw (type: script)
Optionally, you can verify the integration and note the integration ID using: magento-cloud integration:list
Create the environment variable using the prerequisites.
magento-cloud variable:create --level project --name=env:NR_CONFIG --value='{"<YOUR_ENVIRONMENT_ID>":{"NR_API_KEY": "<YOUR_API_KEY>", "NR_API_URL": "https://api.newrelic.com/graphql", "NR_APP_GUID":"<YOUR_APP_GUID>"}}' -p <YOUR_PROJECT_ID>
Review the last activity log.
magento-cloud integration:activity:log <INTEGRATION_ID> -p <YOUR_PROJECT_ID> -e <YOUR_ENVIRONMENT_ID>
Response:
Integration ID: 767u4hathojjw
Activity ID: poxqidsfajkmg
Type: integration.script
Description: Running activity script
Created: 2023-08-28T20:32:02+00:00
State: complete
Log:
HTTP request
HTTP response
{"data":{"changeTrackingCreateDeployment":{"deploymentId":"some-deployment-id","entityGuid":"SomeGUIDhere"}}}
Log in to your New Relic account.
In the Explorer navigation menu, click APM & Services. Select your environment Name and Account.
Under Events, click Deployments.