Prometheus仪表指标的联合

发布于 2025-01-26 19:11:02 字数 1616 浏览 3 评论 0原文

这是我的指标代码:

from prometheus_client import Gauge

probe = Gauge('probe_success', '1 - probe success, 0 - probe failure'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
          ['probe_type', 'target', 'timeout', 'service', 'namespace', 'reason'])

如果对地址的请求成功,则最终值为1,如果发生某些错误,则值为0。

def probe_success(probe_type, target, timeout, service, namespace, reason, value):
    probe.labels(probe_type, target, timeout, service, namespace, reason).set(value)

这就是我的指标的样子:

  probe_success{namespace="test",probe_type="http",reason="MissingSchema",service="servicename",target="ddress-test1",timeout="5"} 0.0
probe_success{namespace="test",probe_type="http",reason="ConnectionError",service="servicename",target="http://address-test2",timeout="10"} 0.0
probe_success{namespace="test-2",probe_type="http",reason="",service="servicename",target="https://www.google.com",timeout="5"} 1.0

那么我如何测试这些指标。我阅读了有关registry.get_sample_value的信息,但我没有看到如何在量规组方法上使用它。总的来说,我不知道如何构建适当的测试用例。如果有人有建议,我会很高兴阅读它们。

Here is my metrics code:

from prometheus_client import Gauge

probe = Gauge('probe_success', '1 - probe success, 0 - probe failure'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
          ['probe_type', 'target', 'timeout', 'service', 'namespace', 'reason'])

If request to the address is successful the value in the end is 1, if some error occurs the value is 0.

def probe_success(probe_type, target, timeout, service, namespace, reason, value):
    probe.labels(probe_type, target, timeout, service, namespace, reason).set(value)

And this is how my metrics look like:

  probe_success{namespace="test",probe_type="http",reason="MissingSchema",service="servicename",target="ddress-test1",timeout="5"} 0.0
probe_success{namespace="test",probe_type="http",reason="ConnectionError",service="servicename",target="http://address-test2",timeout="10"} 0.0
probe_success{namespace="test-2",probe_type="http",reason="",service="servicename",target="https://www.google.com",timeout="5"} 1.0

So how could I test these metrics. I read about REGISTRY.get_sample_value but I didn't see how can I use it on gauge set method. In general I don't have idea how to build appropriate test cases. If anyone has suggestions I will be pleased to read them.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三月梨花 2025-02-02 19:11:02

这是我的解决方案:

from prometheus_client import REGISTRY
from utils.metrics import probe_success



def test_probe_success_metric_when_the_probe_fails():
   
    # calling the metrics function, passing the needed parameters
    # setting the gauges value to be equal to 0 (which means 'False', by default it is 1 'True')
    probe_success(
        'http',
        'http://127.0.0.1:8000/',
        1,
        'test_service',
        'test_namespace',
        'Timeout',
        0,
    )

    # searching in prometheus_client REGISTRY by metrics function name, and certain arguments (passed above)

    after = REGISTRY.get_sample_value(
        'probe_success',
        {
            'probe_type': 'http',
            'target': 'http://127.0.0.1:8000/',
            'timeout': '1',
            'service': 'test_service',
            'namespace': 'test_namespace',
            'reason': 'Timeout',
        },
    )
    
    # assert whether found gauge value of after is equal to 0.0 (the value which we passed above)
    assert 0.0 == after


 # Here the procedure is the same as above, but with the difference that here the gauge value is set to 1 'True'.
def test_probe_success_metric_when_the_probe_success():

    probe_success(
        'http', 'http://127.0.0.1:8000/', 1, 'test_service',
        'test_namespace', '', 1
    )

   after = REGISTRY.get_sample_value(
        'probe_success',
        {
            'probe_type': 'http',
            'target': 'http://127.0.0.1:8000/',
            'timeout': '1',
            'service': 'test_service',
            'namespace': 'test_namespace',
            'reason': '',
        },
    )

assert 1.0 == after

这是一个有解释的示例,但具有反向指标:
https://www.robustperception.io/www.robustperception.io/测试促进仪式

Here is my solution:

from prometheus_client import REGISTRY
from utils.metrics import probe_success



def test_probe_success_metric_when_the_probe_fails():
   
    # calling the metrics function, passing the needed parameters
    # setting the gauges value to be equal to 0 (which means 'False', by default it is 1 'True')
    probe_success(
        'http',
        'http://127.0.0.1:8000/',
        1,
        'test_service',
        'test_namespace',
        'Timeout',
        0,
    )

    # searching in prometheus_client REGISTRY by metrics function name, and certain arguments (passed above)

    after = REGISTRY.get_sample_value(
        'probe_success',
        {
            'probe_type': 'http',
            'target': 'http://127.0.0.1:8000/',
            'timeout': '1',
            'service': 'test_service',
            'namespace': 'test_namespace',
            'reason': 'Timeout',
        },
    )
    
    # assert whether found gauge value of after is equal to 0.0 (the value which we passed above)
    assert 0.0 == after


 # Here the procedure is the same as above, but with the difference that here the gauge value is set to 1 'True'.
def test_probe_success_metric_when_the_probe_success():

    probe_success(
        'http', 'http://127.0.0.1:8000/', 1, 'test_service',
        'test_namespace', '', 1
    )

   after = REGISTRY.get_sample_value(
        'probe_success',
        {
            'probe_type': 'http',
            'target': 'http://127.0.0.1:8000/',
            'timeout': '1',
            'service': 'test_service',
            'namespace': 'test_namespace',
            'reason': '',
        },
    )

assert 1.0 == after

Here is an example with explanation but with Counter metrics:
https://www.robustperception.io/how-to-unit-test-prometheus-instrumentation

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文