17 Prometheus controles

Overzicht

Zabbix kan metingen opvragen die worden blootgesteld in het Prometheus-lineformaat.

Er zijn twee stappen vereist om te beginnen met het verzamelen van Prometheus-gegevens:

  • een HTTP-masteritem dat wijst naar het juiste gegevens-eindpunt, bijvoorbeeld https://<prometheus host>/metrics
  • afhankelijke items die een Prometheus-voorverwerkingsoptie gebruiken om de benodigde gegevens op te vragen uit de metingen die zijn verzameld door het masteritem

Er zijn twee Prometheus-gegevensvoorverwerkingsmogelijkheden:

  • Prometheus-patroon - gebruikt in normale items om Prometheus-gegevens op te vragen
  • Prometheus naar JSON - gebruikt in normale items en voor low-level ontdekking. In dit geval worden opgevraagde Prometheus-gegevens geretourneerd in JSON-indeling.
Bulkverwerking

Bulkverwerking wordt ondersteund voor afhankelijke items. Om caching en indexering mogelijk te maken, moet de voorverwerking met het Prometheus-patroon de eerste voorverwerkingsstap zijn. Wanneer het Prometheus-patroon de eerste voorverwerkingsstap is, worden de geparseerde Prometheus-gegevens gecachet en geïndexeerd op basis van de eerste <label>==<waarde>-voorwaarde in de voorverwerkingsstap van het Prometheus-patroon. Deze cache wordt opnieuw gebruikt bij het verwerken van andere afhankelijke items in deze batch. Voor optimale prestaties moet het eerste label het label zijn met de meeste verschillende waarden.

Als er andere voorverwerking moet plaatsvinden vóór de eerste stap, moet deze worden verplaatst naar het masteritem of naar een nieuw afhankelijk item dat als masteritem wordt gebruikt voor de afhankelijke items.

Configuratie

Als je het HTTP-masteritem hebt geconfigureerd, moet je een afhankelijk item maken dat gebruikmaakt van een Prometheus-voorverwerking:

  • Voer algemene parameters voor afhankelijke items in het configuratieformulier in.
  • Ga naar het tabblad Voorverwerking.
  • Selecteer een Prometheus-voorverwerkingsoptie (Prometheus-patroon of Prometheus naar JSON).

De volgende parameters zijn specifiek voor de voorverwerkingsoptie Prometheus-patroon:

Parameter Beschrijving Voorbeelden
Patroon Om het vereiste datapatroon te definiëren, kun je een querytaal gebruiken die lijkt op de Prometheus-querytaal (zie vergelijkingstabel), bijvoorbeeld:
<metricanaam> - selecteer op metricanaam
{__name__="<metricanaam>"} - selecteer op metricanaam
{__name__=~"<regex>"} - selecteer op metricanaam die overeenkomt met een reguliere expressie
{<labelnaam>="<labelwaarde>",...} - selecteer op labelnaam
{<labelnaam>=~"<regex>",...} - selecteer op labelnaam die overeenkomt met een reguliere expressie
{__name__=~".*"}==<waarde> - selecteer op metrische waarde
Of een combinatie van het bovenstaande:
<metricanaam>{<label1naam>="<label1waarde>",<label2naam>=~"<regex>",...}==<waarde>

Labelwaarde kan een willekeurige reeks UTF-8-tekens zijn, maar de backslash, dubbele aanhalingstekens en regeleindetekens moeten worden ontsnapt als \\, \" en \n respectievelijk; andere tekens mogen niet worden ontsnapt.
wmi_os_physical_memory_free_bytes
cpu_usage_system{cpu="cpu-total"}
cpu_usage_system{cpu=~".*"}
cpu_usage_system{cpu="cpu-total",host=~".*"}
wmi_service_state{name="dhcp"}==1
wmi_os_timezone{timezone=~".*"}==1
Resultaatverwerking Geef aan of je de waarde, het label of de juiste functie wilt retourneren (als het patroon overeenkomt met meerdere regels en het resultaat moet worden geaggregeerd):
value - retourneer metrische waarde (fout als er meerdere regels overeenkomen)
label - retourneer waarde van het label dat is gespecificeerd in het Label-veld (fout als er meerdere metingen overeenkomen)
sum - retourneer de som van waarden
min - retourneer de minimale waarde
max - retourneer de maximale waarde
avg - retourneer de gemiddelde waarde
count - retourneer het aantal waarden
Dit veld is alleen beschikbaar voor de optie Prometheus-patroon.
Zie ook voorbeelden van het gebruik van parameters hieronder.
Uitvoer Definieer de labelnaam (optioneel). In dit geval wordt de waarde die overeenkomt met de labelnaam geretourneerd.
Dit veld is alleen beschikbaar voor de optie Prometheus-patroon als 'Label' is geselecteerd in het veld Resultaatverwerking.

Voorbeelden van het gebruik van parameters

  1. De meest voorkomende use case is om de waarde terug te geven. Om bijvoorbeeld de waarde van /var/db terug te geven van:

node_disk_usage_bytes{path="/var/cache"} 2.1766144e+09
node_disk_usage_bytes{path="/var/db"} 20480
node_disk_usage_bytes{path="/var/dpkg"} 8192
node_disk_usage_bytes{path="/var/empty"} 4096

gebruik je de volgende parameters:

  • Patroon - node_disk_usage_bytes{path="/var/db"}
  • Resultaatverwerking - selecteer 'waarde'
  1. Mogelijk ben je ook geïnteresseerd in de gemiddelde waarde van alle node_disk_usage_bytes parameters:
  • Patroon - node_disk_usage_bytes
  • Resultaatverwerking - selecteer 'avg'
  1. Hoewel Prometheus alleen numerieke gegevens ondersteunt, is het populair om een omweg te gebruiken waarmee je ook de relevante tekstuele beschrijving kunt retourneren. Dit kan worden bereikt met een filter en het specificeren van het label. Dus om bijvoorbeeld de waarde van het label 'color' terug te geven van:

elasticsearch_cluster_health_status{cluster="elasticsearch",color="green"} 1
elasticsearch_cluster_health_status{cluster="elasticsearch",color="red"} 0
elasticsearch_cluster_health_status{cluster="elasticsearch",color="yellow"} 0

gebruik je de volgende parameters:

  • Patroon - elasticsearch_cluster_health_status {cluster="elasticsearch"} == 1
  • Resultaatverwerking - selecteer 'label'
  • Label - specificeer 'color'

Het filter (op basis van de numerieke waarde '1') zal de juiste rij matchen, terwijl het label de gezondheidsstatusbeschrijving zal retourneren (momenteel 'green'; maar potentieel ook 'red' of 'yellow').

Prometheus naar JSON

Gegevens van Prometheus kunnen worden gebruikt voor detectie op laag niveau. In dit geval zijn gegevens in JSON-indeling nodig en de voorverwerkingsoptie Prometheus naar JSON retourneert precies dat.

Voor meer details, zie Detectie met behulp van Prometheus-gegevens.

Vergelijking van querytalen

De volgende tabel geeft de verschillen en overeenkomsten weer tussen PromQL en de Zabbix Prometheus voorverwerkingsquerytaal.

PromQL instant vector-selector Zabbix Prometheus voorverwerking
Verschillen
Querydoel Prometheus-server Platte tekst in Prometheus-expositie-indeling
Retourneert Instant-vector Metriek of labelwaarde (Prometheus-patroon)
Array van metrieken voor enkele waarde in JSON (Prometheus naar JSON)
Operatoren voor labelmatching =, !=, =~, !~ =, !=, =~, !~
Reguliere expressie gebruikt bij label- of metrieknaam-matching RE2 PCRE
Vergelijkingsoperatoren Zie lijst Alleen == (gelijk) wordt ondersteund voor waardefiltering
Overeenkomsten
Selecteren op metrieknaam die gelijk is aan string <metrieknaam> of {__name__="<metrieknaam>"} <metrieknaam> of {__name__="<metrieknaam>"}
Selecteren op metrieknaam die overeenkomt met reguliere expressie {__name__=~"<regex>"} {__name__=~"<regex>"}
Selecteren op <labelnaam>-waarde die gelijk is aan string {<labelnaam>="<labelwaarde>",...} {<labelnaam>="<labelwaarde>",...}
Selecteren op <labelnaam>-waarde die overeenkomt met reguliere expressie {<labelnaam>=~"<regex>",...} {<labelnaam>=~"<regex>",...}
Selecteren op waarde die gelijk is aan string {__name__=~".*"} == <waarde> {__name__=~".*"} == <waarde>