# Introduction to Service Monitors
In order to understand service monitors, we will need to understand how to monitor
kubernetes environment.
You will need a base understanding of Kubernetes and have a basic understanding of the `kube-prometheus` monitoring stack.
Checkout the video [How to monitor Kubernetes in 2022](https://youtu.be/YDtuwlNTzRc):
## Create a kubernetes cluster
```
# create cluster
kind create cluster --name monitoring --image kindest/node:v1.23.5
# see cluster up and running
kubectl get nodes
NAME STATUS ROLES AGE VERSION
monitoring-control-plane Ready control-plane,master 2m12s v1.23.5
```
## Deploy kube-prometheus
Installation:
```
kubectl create -f ./monitoring/prometheus/kubernetes/1.23/manifests/setup/
kubectl create -f ./monitoring/prometheus/kubernetes/1.23/manifests/
```
Check the install:
```
kubectl -n monitoring get pods
```
After a few minutes, everything should be up and running:
```
kubectl -n monitoring get pods
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 3m10s
alertmanager-main-1 2/2 Running 0 3m10s
alertmanager-main-2 2/2 Running 0 3m10s
blackbox-exporter-6b79c4588b-t4czf 3/3 Running 0 4m7s
grafana-7fd69887fb-zm2d2 1/1 Running 0 4m7s
kube-state-metrics-55f67795cd-f7frb 3/3 Running 0 4m6s
node-exporter-xjdtn 2/2 Running 0 4m6s
prometheus-adapter-85664b6b74-bvmnj 1/1 Running 0 4m6s
prometheus-adapter-85664b6b74-mcgbz 1/1 Running 0 4m6s
prometheus-k8s-0 2/2 Running 0 3m9s
prometheus-k8s-1 2/2 Running 0 3m9s
prometheus-operator-6dc9f66cb7-z98nj 2/2 Running 0 4m6s
```
## View dashboards
```
kubectl -n monitoring port-forward svc/grafana 3000
```
Then access Grafana on [localhost:3000](http://localhost:3000)
## Access Prometheus
```
kubectl -n monitoring port-forward svc/prometheus-operated 9090
```
Then access Prometheus on [localhost:9090](http://localhost:9090).
## Create our own Prometheus
```
kubectl apply -n monitoring -f ./kubernetes/servicemonitors/prometheus.yaml
```
View our prometheus `prometheus-applications-0` instance:
```
kubectl -n monitoring get pods
```
Checkout our prometheus UI
```
kubectl -n monitoring port-forward prometheus-applications-0 9090
```
## Deploy a service monitor for example app
```
kubectl -n default apply -f ./kubernetes/servicemonitors/servicemonitor.yaml
```
After applying the service monitor, if Prometheus is correctly selecting it, we should see the item appear under the [Service Discovery](http://localhost:9090/service-discovery) page in Prometheus.
Double check with with `port-forward` before proceeding.
If it does not appear, that means your Prometheus instance is not selecting the service monitor accordingly. Either a label mismatch on the namespace or the service monitor.
## Deploy our example app
```
kubectl -n default apply -f ./kubernetes/servicemonitors/example-app/
```
Now we should see a target in the Prometheus [Targets](http://localhost:9090/targets) page.