Varnish

Questo documento descrive come configurare il deployment di Google Kubernetes Engine in modo da poter utilizzare Google Cloud Managed Service per Prometheus per raccogliere le metriche da Varnish. Questo documento mostra come eseguire le seguenti operazioni:

  • Configurare l'esportatore per Varnish in modo che riporti le metriche.
  • Accedere a una dashboard predefinita in Cloud Monitoring per visualizzare le metriche.
  • Configurare le regole di avviso per monitorare le metriche.

Queste istruzioni si applicano solo se utilizzi la raccolta gestita con Managed Service per Prometheus. Se utilizzi la raccolta con deployment automatico, consulta il repository di origine per l'esportatore Varnish per informazioni sull'installazione.

Queste istruzioni sono fornite a titolo di esempio e dovrebbero funzionare nella maggior parte degli ambienti Kubernetes. Se hai difficoltà a installare un'applicazione o un esportatore a causa di policy di sicurezza o aziendali restrittive, ti consigliamo di consultare la documentazione open source per ricevere assistenza.

Per informazioni su Varnish, consulta Varnish.

Prerequisiti

Per raccogliere le metriche da Varnish utilizzando Managed Service per Prometheus e la raccolta gestita, il deployment deve soddisfare i seguenti requisiti:

L'esportatore Varnish esegue lo scraping dell'output del comando varnishstat. Richiede la condivisione dello spazio dei nomi dei processi e l'accesso alla directory /var/lib/varnish del container Varnish.

L'esportatore Varnish non viene pubblicato come immagine container; devi crearne una tua. L'esempio seguente mostra come creare un'immagine container dell'esportatore che contiene l'esportatore e il varnishstat comando.

# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

FROM debian:stable-slim AS stage
WORKDIR /exporter
ADD https://github.com/jonnenauha/prometheus_varnish_exporter/releases/download/1.6.1/prometheus_varnish_exporter-1.6.1.linux-amd64.tar.gz /exporter/exporter.tar.gz
RUN tar -xvf exporter.tar.gz
RUN chmod +x /exporter/prometheus_varnish_exporter-1.6.1.linux-amd64/prometheus_varnish_exporter
FROM varnish:7.2.0
COPY --from=stage /exporter/prometheus_varnish_exporter-1.6.1.linux-amd64/prometheus_varnish_exporter /prometheus_varnish_exporter
ENTRYPOINT [ "/prometheus_varnish_exporter" ]

Installare l'esportatore Varnish

Ti consigliamo di installare l'esportatore Varnish, prometheus_varnish_exporter, come sidecar del workload Varnish. Per informazioni sull'utilizzo dei sidecar, consulta Estendere le applicazioni su Kubernetes con pod multi-container pods.

Per installare prometheus_varnish_exporter come sidecar di Varnish, modifica la configurazione di Varnish come mostrato nell'esempio seguente:

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: varnish
spec:
  selector:
    matchLabels:
+     app.kubernetes.io/name: varnish
  template:
    metadata:
      name: varnish
      labels:
+       app.kubernetes.io/name: varnish
    spec:
      containers:
      - name: varnish
        image: varnish:7.2.0
+       volumeMounts:
+         - name: shared-data
+           mountPath: /var/lib/varnish
+       env:
+       - name: VARNISH_HTTP_PORT
+         value: "8080"
+     - name: exporter
+       image: <custom-docker-image>
+       volumeMounts:
+         - name: shared-data
+           mountPath: /var/lib/varnish
+           readOnly: true
+       ports:
+       - containerPort: 9131
+         name: prometheus
+     volumes:
+       - name: shared-data
+         emptyDir: {}
+     shareProcessNamespace: true

Devi aggiungere alla configurazione tutte le righe precedute dal simbolo +.

Per applicare le modifiche alla configurazione da un file locale, esegui il seguente comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Puoi anche utilizzare Terraform per gestire le configurazioni.

Definire una risorsa PodMonitoring

Per l'individuazione dei target, l'operatore Managed Service per Prometheus richiede una risorsa PodMonitoring che corrisponda all'esportatore Varnish nello stesso spazio dei nomi.

Puoi utilizzare la seguente configurazione PodMonitoring:

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: varnish
  labels:
    app.kubernetes.io/name: varnish
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: varnish

Assicurati che i selettori di etichette e la porta corrispondano ai selettori e alla porta utilizzati in Installare l'esportatore Varnish.

Per applicare le modifiche alla configurazione da un file locale, esegui il seguente comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Puoi anche utilizzare Terraform per gestire le configurazioni.

Definire regole e avvisi

Puoi utilizzare la seguente configurazione Rules per definire gli avvisi sulle metriche Varnish:

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  name: varnish-rules
  labels:
    app.kubernetes.io/component: rules
    app.kubernetes.io/name: varnish-rules
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  groups:
  - name: varnish
    interval: 30s
    rules:
    - alert: VarnishBackendConnectionFailure
      annotations:
        description: |-
          Varnish backend connection failure
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Varnish backend connection failure (instance {{ $labels.instance }})
      expr: varnish_backend_fail > 0
      for: 5m
      labels:
        severity: critical
    - alert: VarnishHighCacheEvictions
      annotations:
        description: |-
          Varnish high cache evictions
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Varnish high cache evictions (instance {{ $labels.instance }})
      expr: rate(varnish_main_n_obj_purged[5m]) >= 10
      for: 5m
      labels:
        severity: warning
    - alert: VarnishHighServerLimit
      annotations:
        description: |-
          Varnish high server limit
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Varnish high server limit (instance {{ $labels.instance }})
      expr: varnish_main_threads_failed > 0
      for: 5m
      labels:
        severity: critical
    - alert: VarnishSessionsDropped
      annotations:
        description: |-
          Varnish sessions dropped
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Varnish sessions dropped (instance {{ $labels.instance }})
      expr: varnish_main_sessions{type="dropped"} > 0
      for: 5m
      labels:
        severity: critical

Per applicare le modifiche alla configurazione da un file locale, esegui il seguente comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Puoi anche utilizzare Terraform per gestire le configurazioni.

Per maggiori informazioni sull'applicazione delle regole al cluster, consulta Valutazione e avvisi delle regole gestite.

Puoi modificare le soglie di avviso in base alla tua applicazione.

Verificare la configurazione

Puoi utilizzare Metrics Explorer per verificare di aver configurato correttamente l'esportatore Varnish. Cloud Monitoring potrebbe impiegare uno o due minuti per importare le metriche.

Per verificare che le metriche siano state importate:

  1. Nella Google Cloud console, vai alla  Esplora metriche pagina:

    Vai a Esplora metriche

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Nella barra degli strumenti del riquadro del generatore di query, seleziona il pulsante il cui nome è  PromQL.
  3. Inserisci ed esegui la seguente query:
    up{job="varnish", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}

Visualizzare dashboard

L'integrazione di Cloud Monitoring include la dashboard Panoramica di Varnish Prometheus. Le dashboard vengono installate automaticamente quando configuri l'integrazione. Puoi anche visualizzare le anteprime statiche delle dashboard senza installare l'integrazione.

Per visualizzare una dashboard installata:

  1. Nella Google Cloud console, vai alla pagina  Dashboard:

    Vai a Dashboard

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Seleziona la scheda Elenco dashboard.
  3. Scegli la categoria Integrazioni.
  4. Fai clic sul nome della dashboard, ad esempio Panoramica di Varnish Prometheus.

Per visualizzare un'anteprima statica della dashboard:

  1. Nella Google Cloud console, vai alla  pagina Integrazioni:

    Vai a Integrazioni

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Monitoring.

  2. Fai clic sul filtro della piattaforma di deployment Kubernetes Engine.
  3. Individua l'integrazione di Varnish e fai clic su Visualizza dettagli.
  4. Seleziona la scheda Dashboard.

Risoluzione dei problemi

Per informazioni sulla risoluzione dei problemi di importazione delle metriche, consulta Problemi con la raccolta dagli esportatori in Risoluzione dei problemi lato importazione.