Integration of prometheus and grafana
By: Dhiraj Kumar
Tags: Grafana, Monitoring, Prometheus, Kubernetes, DevOps

Prometheus: Prometheus is a devops tool which is used in monitoring . In devops monitoring is the process by which software, RAM , cpu and node is monitored , this process used in security also for monitor the activity of hacker.

In monitoring prometheus collect data only in matrics form in real time .

Prometheus work as a server which demand information from exporter then exporter gives the information and store data in TSDB( time series data base) .

Prometheus support regex for getting data .

When target is used node for monitoring then it’s called nodel instrumentation, when target is webserver then it’s known as service instrumentation , when target is php code then it’s known as app instrumentation.

Grafana: Grafana is the devops tool , which is used in monitoring . In grafana data is visualized using graph . when grafana is integrated with prometheus then grafana demand information every second to prometheus and visualize in graph .

Project description:

Integrate Prometheus and Grafana and perform in following way:

Deploy them as pods on top of kubernetes by creating resources Deployment , ReplicaSet , Pods or Services Make their data to be remain persistent And both of them should be exposed to outside world

First of all ,i have created my own docker image using “prom/prometheus

In Dockerfile, i have added prometheus.yml file in which job is cofigured .

Dockerfile:

FROM prom/prometheus

ADD prometheus.yml /etc/prometheus/

After that , built docker image and uploaded that image on docker hub using below cmd

docker build -t myprom_image:v1 .

docker tag myprom_image:v1 firsttalk26/myprom_image:v1

docker push firsttalk26/myprom_image:v1

After upload image on docker hub , i have created a configuration file for deploy Prometheus on Kubernetes

Configuration file :

myprometheus.yml

apiVersion: v1

kind: Service

metadata:

name: prometheus-service

labels:

app: prometheus-app

spec:

ports:

- port: 9090

nodePort: 30003

selector:

type: prometheus

type: NodePort

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvc-prometheus

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 5Gi

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: prometheus-deploy

labels:

app: prometheus-app

type: prometheus

spec:

selector:

matchLabels:

type: prometheus

strategy:

type: Recreate

template:

metadata:

labels:

app: prometheus-app

type: prometheus

spec:

containers:

- image: firsttalk26/myprom_image:v1

name: myprometheus

ports:

- containerPort: 9090

name: myprometheus

volumeMounts:

- name: prometheus-pv

mountPath: /root/prometheus/data

volumes:

- name: prometheus-pv

persistentVolumeClaim:

claimName: pvc-prometheus

After creation of cofiguration file, i have i have launched Prometheus deployment , service and pvc using below cmd

kubectl create -f myprometheus.yml

After launch of Prometheus , i have created a configuration file of grafana

Configuration file:

mygrafana.yml

apiVersion: v1

kind: Service

metadata:

name: grafana-service

labels:

app: grafana-app

spec:

ports:

- port: 3000

nodePort: 30002

selector:

type: grafana

type: NodePort

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: pvc-grafana

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 1Gi

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: grafana-deploy

labels:

app: grafana-app

type: grafana

spec:

selector:

matchLabels:

type: grafana

strategy:

type: Recreate

template:

metadata:

labels:

app: grafana-app

type: grafana

spec:

containers:

- image: grafana/grafana

name: mygrafana

ports:

- containerPort: 3000

name: mygrafana

volumeMounts:

- name: grafana-pv

mountPath: /var/lib/grafana

volumes:

- name: grafana-pv

persistentVolumeClaim:

claimName: pvc-grafana

After creating configuration file , i have launched grafana using below cmd

kubectl create -f mygrafana.yml

I have integrated Prometheus and Grafana and visulized data on Grafana as a graph .

For integrate Grafana with Prometheus , i have added data source for get data to visualize on graph .

After added data source create new panel for store data and visualize . I used promQL for searching data