APM Solutions — FC Integrated with NewRelic

Alibaba Cloud
4 min readJan 19, 2021

Background

Under the general trend of cloud-native, more and more developers have adopted container and serverless technologies when creating and deploying applications. New Relic is always paying attention to the evolution of cloud-native technology and the new challenges in the field of observability.

Traditional servers, virtual machines, containers, serverless functions, and developers’ operation and maintenance burdens are gradually reduced or eliminated. However, the demand for observable and observable insights continues to increase:

  • Link Tracking: Fine-grained single responsibility interconnection of multiple functions, remote function calls to access databases, and other cloud services require distributed link tracking.
  • Instance-Level Monitoring: Serverless black-boxes the concept of instances, but developers need to see the impact of events, such as cold starts caused by instance changes on business performance.
  • Rich Indicators: Some business key indicators, such as CPU, memory, network, and other cloud services, have not been provided yet, and the business side collects time and effort by themselves.
  • It uses metrics, logs, link tracking, and correlation to solve difficult distributed application problems.

In order to facilitate the integration of the third-party APM platform such as NewRelic, FC released Lifecycle Capability which allows APM agent to better monitor Serverless applications.

Next we introduce how to integrate NewRelic in FC, follow our steps and you will get your own serverless observability dashboard.

Solutions to integrate with NewRelic

Before you begin

  1. Register NewRelic and get your licence key (You can get your licence key when you create application)
  2. Register FunctionCompute .

Step 1: Prepare the environment

An easy and simple way to install Funcraft is to download the executable binary files.

  1. Install Funcraft on the local machine. For more information, see installation instructions.
  2. Run fun --version to check whether the installation is successful.
  3. You need to configure funcraft with your own aliyun access key id and access key secret. Follow the steps in Configure Funcraft .Run fun config to configure Funcraft. Then configure Account ID, Access Key ID, Access Key Secret, and Default region name as prompted.
$ fun config
Aliyun Account ID 1234xxx
Aliyun Access Key ID xxxx
Aliyun Access Key Secret xxxx
Default region name cn-xxxx
The timeout in seconds for each SDK client invoking 300
The maximum number of retries for each SDK client 5
Allow to anonynously report usage statistics to improve the tool over time? (Y/n)

Step 2: Deploy application

  1. Run the following command to clone the sample project to your local machine.
git clone https://github.com/awesome-fc/fc-newrelic-demo.git

2. Run the following command to access the cloned sample project:

cd fc-newrelic-demo

3. Replace licence key in template.yml with your own license key

EnvironmentVariables:
NEW_RELIC_LICENSE_KEY: your-license-key

4. Run the following command to deploy the function:

make deploy

5. The following result is returned:

➜  newrelic make deploy 
docker build -t fc-go-runtime -f build-image/Dockerfile build-image
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM golang:1.12.16-stretch
---> 7ad03a8aece5
Step 2/5 : RUN mkdir -p $GOPATH/src/golang.org/x/
---> Using cache
---> 5678ac31beda
Step 3/5 : RUN cd $GOPATH/src/golang.org/x/ && git clone https://github.com/golang/net.git
---> Using cache
---> 77d355f1730b
Step 4/5 : RUN cd $GOPATH/src/golang.org/x/ && git clone https://github.com/golang/sys.git
---> Using cache
---> 414d3e786a8e
Step 5/5 : RUN go get github.com/newrelic/go-agent
---> Using cache
---> 5c983a67a451
Successfully built 5c983a67a451
Successfully tagged fc-go-runtime:latest
docker run --rm -it -v $(pwd):/tmp fc-go-runtime bash -c "go build -o /tmp/code//bootstrap /tmp/code/main.go"
chmod +x code/bootstrap
fun deploy -y
using template: template.yml
using region: cn-shenzhen
using accountId: ***********3743
using accessKeyId: ***********Ts6J
using timeout: 20
Collecting your services information, in order to caculate devlopment changes...
Resources Changes(Beta version! Only FC resources changes will be displayed):
┌─────────────────────┬──────────────────────────────┬────────┬──────────┐
│ Resource │ ResourceType │ Action │ Property │
├─────────────────────┼──────────────────────────────┼────────┼──────────┤
│ newrelic-integration │ Aliyun::Serverless::Function │ Modify │ CodeUri │
└─────────────────────┴──────────────────────────────┴────────┴──────────┘
Waiting for service fc-integrate-with-third-apm to be deployed...
make sure role 'aliyunfcgeneratedrole-cn-shenzhen-xxx' is exist
role 'aliyunfcgeneratedrole-cn-shenzhen-xxx' is already exist
Waiting for function newrelic-integration to be deployed...
Waiting for packaging function newrelic-integration code...
The function newrelic-integration has been packaged. A total of 2 files were compressed and the final size was 4.16 MB
function newrelic-integration deploy success
service xxx deploy success

Application has been deployed successfully, and your function can be monitored by newrelic.

The application template has time trigger by dafault, it is triggerd every minite, and you can view a default dashboard with 1tps invocation.
You can also invoke function by fun invoke command or API calls.

View Dashboard

Original Source:

--

--

Alibaba Cloud

Follow me to keep abreast with the latest technology news, industry insights, and developer trends. Alibaba Cloud website:https://www.alibabacloud.com