Graphite
Graphite is a monitoring tool used to track the performance of websites, applications, business services, and networked servers.
Scope of Support
Currently, Nobl9 integration with Graphite does not support the Direct connection.
Authentication
Graphite does not directly support authentication for connections to its HTTP API. Organizations can set it in their infrastructure. Nobl9 connects to Graphite through the Render URL API. To connect Nobl9 Agent to Graphite, you must specify your Render URL API endpoint that allows you to generate graphs and retrieve raw data from Graphite. For more details, see The Render URL API | Graphite Documentation.
Optional Bearer Token
If GRAPHITE_AUTH_BEARER_TOKEN
variable is set during agent startup, its value will be added as an Authorization header to every HTTP request.
Optional HTTP Basic Authentication Credentials
This plugin allows credentials passed as environment variables during agent startup. The keys are GRAPHITE_BASIC_AUTH_USERNAME
and GRAPHITE_BASIC_AUTH_PASSWORD
.
Adding Graphite as a Data Source in the UI
To add Graphite as a data source in Nobl9 using the Agent connection method, follow these steps:
Navigate to Integrations > Sources.
Click the
button.
Click the Graphite icon.
Choose Agent, then configure the source as described below.
Graphite Agent
Agent Configuration in the UI
Follow the instructions below to configure your Graphite Agent:
Enter the Render URL API to connect to your data source.
The URL must start withhttp://
orhttps://
.Select a Project (mandatory).
Specifying a Project is helpful when multiple users are spread across multiple teams or projects. When the Project field is left blank, a default value appears.Enter a Display name (optional).
You can enter a friendly name with spaces in this field.Enter a Name (mandatory).
The name is mandatory and can only contain lowercase, alphanumeric characters and dashes (for example,my-project-name
). This field is populated automatically when you enter a display name, but you can edit the result.Enter a Description (optional).
Here you can add details such as who is responsible for the integration (team/owner) and the purpose of creating it.Click the Add Data Source button.
Deploying Graphite Agent
When you add the data source, Nobl9 automatically generates a Kubernetes configuration and a Docker command line for you to use to deploy the Agent. Both of these are available in the web UI, under the Agent Configuration section. Be sure to swap in your credentials.
- Kubernetes
- Docker
If you use Kubernetes, you can apply the supplied YAML config file to a Kubernetes cluster to deploy the Agent. It will look something like this:
# DISCLAIMER: This deployment description contains only the fields necessary for the purpose of this demo.
# It is not a ready-to-apply k8s deployment description, and the client_id and client_secret are only exemplary values.
apiVersion: v1
kind: Secret
metadata:
name: nobl9-agent-graphite-secret
namespace: default
type: Opaque
stringData:
client_id: "unique_client_id"
client_secret: "unique_client_secret"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nobl9-agent-graphite-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
nobl9-agent-name: "graphite-name"
nobl9-agent-project: "graphite"
nobl9-agent-organization: "organization"
template:
metadata:
labels:
nobl9-agent-name: "graphite-name"
nobl9-agent-project: "graphite"
nobl9-agent-organization: "organization"
spec:
containers:
- name: agent-container
image: nobl9/agent:latest
resources:
requests:
memory: "350Mi"
cpu: "0.1"
env:
- name: N9_CLIENT_ID
valueFrom:
secretKeyRef:
key: client_id
name: nobl9-agent-graphite-secret
- name: N9_CLIENT_SECRET
valueFrom:
secretKeyRef:
key: client_secret
name: nobl9-agent-graphite-secret
If you use Docker, you can run the Docker command to deploy the Agent. It will look something like this:
# DISCLAIMER: This docker command description is containing only the necessary fields for the purpose of this demo.
# It is not a ready-to-apply docker command.
docker run -d --restart on-failure \
--name nobl9-agent-graphite-container \
-e N9_CLIENT_ID="unique_client_id" \
-e N9_CLIENT_SECRET="unique_client_secret" \
nobl9/agent:latest
Creating SLOs with Graphite
Creating SLOs in the UI
Follow the instructions below to create your SLOs with Graphite in the UI:
Navigate to Service Level Objectives.
Click the
button.
In step 2, select Graphite as the Data Source for your SLO, then specify the Metric. You can choose either a Threshold Metric, where a single time series is evaluated against a threshold, or a Ratio Metric, which allows you to enter two time series to compare (for example, a count of good requests and total requests). Enter a Query or Good Query, and Total Query for the metric you selected. The following are query examples:
Threshold metric for Graphite:
Query:carbon.agents.9b365cce.cpuUsage
Ratio metric for Graphite:
Good Query:stats_counts.response.200
Total Query:astats_counts.response.all
In step 3, define a Time Window for the SLO.
In step 4, specify the Error Budget Calculation Method and your Objective(s).
In step 5, add a Name, Description, and other details about your SLO. You can also select Alert Policies and Labels on this screen.
When you’re done, click Create SLO.
SLOs with Graphite - YAML samples
- rawMetric
- countMetric
Here’s an example of Graphite using a rawMetric
(Threshold metric):
apiVersion: n9/v1alpha
kind: SLO
metadata:
name: graphite-slo-1
project: graphite
spec:
service: web-service
indicator:
metricSource:
name: graphite-agent
timeWindows:
- unit: Day
count: 7
isRolling: true
budgetingMethod: Occurrences
objectives:
- displayName: Good
op: lte
rawMetric:
query:
graphite:
metricPath: carbon.agents.9b365cce.cpuUsage
value: 100
target: 0.9
Here’s an example of Graphite using a countMetric
(Ratio metric):
apiVersion: n9/v1alpha
kind: SLO
metadata:
name: graphite-slo-2
project: default
spec:
service: web-service
indicator:
metricSource:
name: graphite-agent
timeWIndows:
- unit: Day
count: 7
calendar:
startTime: 2020-03-09 00:00:00
timeZone: Europe/Warsaw
budgetingMethod: Occurrences
objectives:
- displayName: Good
target: 0.95
countMetrics:
incremental: false
good:
graphite:
metricPath: stats_counts.response.200
total:
graphite:
metricPath: stats_counts.response.all
Metric specification for Graphite has only one mandatory field:
metricPath
- it is a string field that specifies Graphite’s metric path, such asservers.cpu.total
Visit the following link to understand Paths and Wildcards.
caution
The Graphite documentation suggests using *
, [
,]
, {
, or }
, but Nobl9 does not support this functionality. When you use *
, [
,]
, {
, or }
, a validation error occurs.
Querying the Graphite Server
Metrics are retrieved using the from
and until
parameters once per minute. The API returns a half-open interval (from, until]
, which includes the end date but not the start date.