DX Operational Intelligence can consume both structured and unstructured data, including topology data, metrics, and alarms. Through RESTMon, teams can ingest data from a range of third-party data sources.
RESTmon offers these key capabilities:
In this two-part skill builder, we’ll outline how to set up RESTmon and employ it to ingest data from Zabbix. The first part offers step-by-step guidance for deploying a RESTmon instance and preparing it to ingest Zabbix data. The second part will detail how to configure a Zabbix schema for consumption.
For more information on RESTmon please refer to the official documentation. In addition, you can read this blog post: “Unify Visibility Across Your Monitoring Tools with DX Operational Intelligence.”
As you review this document, here are a few things to note:
In this section, I will offer step-by-step instructions for installing RESTmon. You can also find detailed technical documentation here.
I am using a Linux machine to deploy the instance.
> cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) |
For the machine that you are deploying on, make sure you have the following apps installed:
On my machine I have the following versions:
Client: Docker Engine – Community |
version.BuildInfo{Version:”v3.2.4”, GitCommit:”0ad800ef43d3b826f31a5ad8dfbb4fe05d143688”, GitTreeState:”clean”, GoVersion:”go1.13.12”} |
Client Version: version.Info{Major:”1”, Minor:”22”, GitVersion:”v1.22.2”, GitCommit:”8b5a19147530eaac9476b0ab82980b4088bbc1b2”, GitTreeState:”clean”, Server Version: version.Info{Major:”1”, Minor:”22”, GitVersion:”v1.22.1”, GitCommit:”632ed300f2c34f6d6d15ca4cef3d3c7073412212”, GitTreeState:”clean”, |
Download the package from the support site. At the time of writing, the latest package available is 2.1.3.
I chose the FTP option to download the binary.
sftp <user>@downloads.broadcom.com sftp> ls 23135811/RESTMon Container 2.1.3.zip sftp> get 23135811/RESTMon Container 2.1.3.zip /23135811/RESTMon Container 2.1.3.zip 100% 310MB 635.4KB/s 08:19 sftp> bye |
This downloads the zip file onto your local system. Once downloaded, you can rename the file as desired (e.g. RESTMON-2.1.3.zip).
root@master>unzip Restmon-2.1.3.zip |
docker load < dx-restmon-2.1.3.tar.gz |
The last statement, “Loaded image: dx-restmon:2.1.1,” confirms the image has been successfully loaded.
You can validate the image by issuing the command “docker image ls” and looking for the dx-restmon image.
root@master>docker image ls |
It is important to refer to the README.txt as it outlines the contents and the steps, which we will be following in this skill builder.
As indicated in point 1 in the README.txt, you need token details to connect to DX Operational Intelligence, which can be obtained from the solution.
Navigate to Settings > Connector Parameters.
Note the Cohort ID, which is an alphanumeric string.
Click “Generate New Token.”
And copy the token by clicking the Copy button.
Persistent volumes abstracts how storage is provided and consumed using storage classes. You can read more about storage classes in the Kubernetes documentation. In general, these classes allow you define attributes for the kind of storage available.
Create a file `pv.yaml` with contents as detailed below.
apiVersion: v1 |
The PV can now be created using the following command: kubectl create -f pv.yaml
> kubectl create -f pv.yaml |
You can see the listing by issuing the following command: kubectl get pv
> kubectl get pv |
The persistent volume is now available for claims.
Helm is a Kubernetes package manager.
Before we deploy RESTmon using Helm, let’s look at the possible values we can supply to the chart for customization.
Value File: You can learn more in the official documentation here.
The “values.yaml” file allows you to define the values that you can feed to the chart before it is installed.
helm install [NAME] [CHART] [flags]
In the directory that contains the Helm chart, “restmon-2.1.3.tgz” you can use the “helm show all <chart-name>” to get more information.
root@master>helm show all restmon-2.1.3.tgz |
Following is the output.
apiVersion: v1 --- # Default values for restmon. --- |
These are the default values. Let’s override some specific values.
className: |
imageName: dx-restmon:2.1.1 |
nodeSelector: |
oi_ingestion_tenant_token: "TjXWZeR9nrLAIDDDawa6ezQ" |
tenant_id: "6AAAAAAAAAAAÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀC" |
supportability_instanceName: restmom_demo_deployment |
health_statistics_log_level: DEBUG |
With the “values.yaml” defined, we can now release.
helm install demo-restmon ./restmon-2.1.3.tgz --values ./values.yaml |
“helm ls” will allow you see the release listing.
> helm ls NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION |
You can also check the pods deployed using the following command: kubectl get pods
> k get all -l app=dx-restmon1 -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR |
Let’s try accessing the swagger UI using the NodePort.
This confirms RESTmon is up and running.
Ingress is an API object that manages external access to the services in a cluster, typically HTTP. Ingress may provide load balancing, SSL termination, and name-based virtual hosting. (SSL termination is the process of decrypting SSL-encrypted data traffic.)
Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the ingress resource.
An ingress may be configured to give services externally reachable URLs, load balance traffic, terminate SSL / TLS, and offer name-based virtual hosting.
One must have an ingress controller to satisfy an ingress.
In our case, I am using HAProxy Ingress controller.
Access official documentation for the community edition of the HAProxy ingress controller.
helm install kubernetes-ingress haproxytech/kubernetes-ingress |
> helm ls NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION |
> k get all -owide --show-labels=true -l app.kubernetes.io/name=kubernetes-ingress |
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES |
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR LABELS |
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR LABELS |
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR LABELS |
apiVersion: networking.k8s.io/v1 |
Use the kubectl create command to create the ingress from the “ing.yaml” file.
kubectl get ing -owide NAME CLASS HOSTS ADDRESS PORTS AGE |
In our machine, I have the ingress service deployed as below.
kubernetes-ingress NodePort 10.101.156.196 <none> 80:30125/TCP,443:32388/TCP,1024:30313/TCP |
So, ingress will allow information access via port 30125.
curl -X GET "http://localhost:30125/restmon/api/v1/version" -H "accept: */*" -H "Host: restmon.demo" -u admin -v * About to connect() to localhost port 30125 (#0) |
Go to admin CRUD operations and navigate to the “version” API.
Once you execute, you should see a response like that below.
Now that RESTmon is up and running, you can begin to use it to feed information into DX Operational Intelligence. See the second part of this skill builder to learn how to use RESTmon to import data from Zabbix.