时间戳记未过期的普罗米修斯客户自定义指标

时间:2020-06-14 00:45:04

标签: python client prometheus

我在下面编写了自定义收集器,该收集器从rest api提取数据并添加页面浏览量度。每个有效负载都有5个指标,因此我要为其添加时间戳。它已成功将其发布到http侦听器,但指标永不过期。如何将到期时间添加到这些指标?

#!/usr/bin/env python3

import argparse
import re
import sys
import time
import datetime
import urllib3
import requests
import aniso8601
import pytz
import json

from prometheus_client import start_http_server
from prometheus_client.core import GaugeMetricFamily, REGISTRY

class HttpCollector(object):
    def __init__(self):
        self.url = "my_endpoint"
        self.username = 'my_userid'
        self.password = 'my_pass'
        self.labels = ['app_name', 'url_host' ]
        self.page_views_metrics = GaugeMetricFamily('pageviews', 'Page Views', labels=self.labels)

    def collect(self):
        headers = {'Accept': '*/*', }
        auth = (self.username, self.password)
        urllib3.disable_warnings()
        result = requests.get(self.url, headers=headers, auth=auth, timeout=60, verify=False)
        if not result.ok:
            # Log error
            print("No results")
            return
        json_result = result.json()
        for record in json_result['records']:
            timestamp_epoch = covert_date_to_epoch(record["timestamp'])
            label_values = ["testapp", "testhost"]
            self.page_views_metrics.add_metric(label_values, record["page_views"], timestamp=timestamp_epoch)
        yield self.page_views_metrics

1 个答案:

答案 0 :(得分:0)

通过将self.page_views_metrics作为局部变量来收集方法可以解决此问题。

import re
import sys
import time
import datetime
import urllib3
import requests
import aniso8601
import pytz
import json

from prometheus_client import start_http_server
from prometheus_client.core import GaugeMetricFamily, REGISTRY

class HttpCollector(object):
    def __init__(self):
        self.url = "my_endpoint"
        self.username = 'my_userid'
        self.password = 'my_pass'
        self.labels = ['app_name', 'url_host' ]

    def collect(self):
        headers = {'Accept': '*/*', }
        auth = (self.username, self.password)
        urllib3.disable_warnings()
        result = requests.get(self.url, headers=headers, auth=auth, timeout=60, verify=False)
        if not result.ok:
            # Log error
            print("No results")
            return
        json_result = result.json()
        page_views_metrics = GaugeMetricFamily('pageviews', 'Page Views', labels=self.labels)
        for record in json_result['records']:
            timestamp_epoch = covert_date_to_epoch(record["timestamp'])
            label_values = ["testapp", "testhost"]
            page_views_metrics.add_metric(label_values, record["page_views"], timestamp=timestamp_epoch)
        yield page_views_metrics