Skip to main content

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:

  1. Navigate to Integrations > Sources.

  2. Click the plus button button.

  3. Click the Graphite icon.

  4. 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:

  1. Enter the Render URL API to connect to your data source.
    The URL must start with http:// or https://.

  2. 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.

  3. Enter a Display name (optional).
    You can enter a friendly name with spaces in this field.

  4. 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.

  5. 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.

  6. 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.

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

Creating SLOs with Graphite‚Äč

Creating SLOs in the UI‚Äč

Follow the instructions below to create your SLOs with Graphite in the UI:

  1. Navigate to Service Level Objectives.

  2. Click the plus button button.

  3. 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

  4. In step 3, define a Time Window for the SLO.

  5. In step 4, specify the Error Budget Calculation Method and your Objective(s).

  6. In step 5, add a Name, Description, and other details about your SLO. You can also select Alert Policies and Labels on this screen.

  7. When you’re done, click Create SLO.

SLOs with Graphite - YAML samples‚Äč

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

Metric specification for Graphite has only one mandatory field:

  • metricPath - it is a string field that specifies Graphite‚Äôs metric path, such as servers.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.

Paths and Wildcards | Graphite Documentation

The Render URL API | Graphite Documentation