> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/self-managed-enterprise-edition/troubleshooting-and-resources/monitoring/install-prometheus.md).

# Install Prometheus

### Install Open Source Prometheus <a href="#install-open-source-prometheus" id="install-open-source-prometheus"></a>

Harness supports using open source Prometheus to monitor your self-managed enterprise edition deployment. This guide walks you through installing Prometheus using the Bitnami `kube-prometheus` Helm chart and the `monitoring.coreos.com` CRDs.

### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* Helm 3 installed
* Access to your Kubernetes cluster
* Namespace `prometheus` (or any preferred namespace)

***

### Step 1: Configure Prometheus Settings <a href="#step-1-configure-prometheus-settings" id="step-1-configure-prometheus-settings"></a>

Create an override file `override-prometheus.yaml` to customize resources and enable Prometheus to scrape metrics from pods using annotations:

```yaml
prometheus:
  resourcesPreset: "large"
  image:
    repository: bitnamilegacy/prometheus
  thanos:
    image:
      repository: bitnamilegacy/thanos
  additionalScrapeConfigs:
    enabled: true
    type: internal
    internal:
      jobList:
      - job_name: 'kubernetes-pods'
        scrape_interval: 30s
        kubernetes_sd_configs:
        - role: pod
        relabel_configs:
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
          action: replace
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
          target_label: __address__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_pod_name]
          action: replace
          target_label: kubernetes_pod_name
kube-state-metrics:
  image:
    repository: bitnamilegacy/kube-state-metrics
node-exporter:
  image:
    repository: bitnamilegacy/node-exporter
operator:
  image:
    repository: bitnamilegacy/prometheus-operator
alertmanager:
  image:
    repository: bitnamilegacy/alertmanager
blackboxExporter:
  image:
    repository: bitnamilegacy/blackbox-exporter
thanosRuler:
  image:
    repository: bitnamilegacy/thanos
```

> This chart automatically installs the necessary CRDs. Use the `--skip-crds` flag in the Helm install command if you want to avoid CRD installation.

***

### Step 2: Install the Bitnami Kube-Prometheus Chart <a href="#step-2-install-the-bitnami-kube-prometheus-chart" id="step-2-install-the-bitnami-kube-prometheus-chart"></a>

#### For connected environments: <a href="#for-connected-environments" id="for-connected-environments"></a>

```bash
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install prometheus oci://registry-1.docker.io/bitnamicharts/kube-prometheus \
  -f override-prometheus.yaml -n prometheus --create-namespace
```

#### For air-gapped environments: <a href="#for-air-gapped-environments" id="for-air-gapped-environments"></a>

```bash
helm pull bitnami/kube-prometheus
# Transfer chart to jumpbox or airgap environment <a href="#transfer-chart-to-jumpbox-or-airgap-environment" id="transfer-chart-to-jumpbox-or-airgap-environment"></a>
helm install prometheus ./kube-prometheus -f override-prometheus.yaml -n prometheus --create-namespace
```

***

### Step 3: Access Prometheus <a href="#step-3-access-prometheus" id="step-3-access-prometheus"></a>

#### Option 1: Port Forwarding <a href="#option-1-port-forwarding" id="option-1-port-forwarding"></a>

```bash
kubectl port-forward -n prometheus svc/prometheus-kube-prometheus-prometheus 9090:9090
```

Then visit: <http://localhost:9090>

#### Option 2: Expose via Ingress <a href="#option-2-expose-via-ingress" id="option-2-expose-via-ingress"></a>

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus-ingress
  namespace: prometheus
spec:
  ingressClassName: <PrometheusNginxIngressClass>
  rules:
  - http:
      paths:
      - path: /
        pathType: ImplementationSpecific
        backend:
          service:
            name: prometheus-kube-prometheus-prometheus
            port:
              number: 9090
```

#### Option 3: Expose via Istio VirtualService <a href="#option-3-expose-via-istio-virtualservice" id="option-3-expose-via-istio-virtualservice"></a>

```yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: prometheus-virtualservice
  namespace: prometheus
spec:
  gateways:
  - <PrometheusGateway>
  http:
  - match:
    - uri:
        prefix: /
    name: prometheus
    rewrite:
      uri: /
    route:
    - destination:
        host: prometheus-kube-prometheus-prometheus
        port:
          number: 9090
```
