当前位置: 首页 > 知识库问答 >
问题:

版本号指标

羿易安
2023-03-14

是否可以向Java系统添加一些度量,该系统将作为受监控应用程序的字符串返回版本号?

我的目标是建立一个仪表板,其中监控Kubernetes集群中Docker容器中运行Java应用程序的每个pod,并查看每个Java应用程序的当前版本。

如果不可能,您是否知道如何从Java应用程序中获取这些信息,并使其在Grafana仪表板中可用?

共有2个答案

韩寒
2023-03-14

在@Oliver思想的基础上,我添加了一个示例java类,该类在应用程序启动/准备就绪后将当前使用的应用程序版本、git分支和git提交id公开给Prometheus metricsendpoint。

这假设您有一个spring boot应用程序,其中启用了prometheus metrics作为执行器endpoint。

@Component
@RequiredArgsConstructor
public class PrometheusCustomMetricsService implements ApplicationListener<ApplicationReadyEvent> {

    private static final int FIXED_VALUE = 1;
    @Value("${info.project.version}")
    private String applicationVersion;

    private final MeterRegistry meterRegistry;
    private final GitProperties gitProperties;

    @Override
    public void onApplicationEvent(@NonNull ApplicationReadyEvent event) {
        registerApplicationInfoGauge();
    }

    private void registerApplicationInfoGauge() {
        Tag versionTag = new ImmutableTag("application_version", applicationVersion);
        Tag branchTag = new ImmutableTag("branch", gitProperties.getBranch());
        Tag commitIdTag = new ImmutableTag("commit_id", gitProperties.getShortCommitId());

        meterRegistry.gauge("application_info",
                            List.of(versionTag, branchTag, commitIdTag),
                            new AtomicInteger(FIXED_VALUE));
    }
}

您的自定义度量应该在prometheusendpoint中显示如下内容:

application_info{application_version="1.2.3",branch="SOME-BRANCH-123",commit_id="123456"} NaN

我不担心application\u info gauge的值是NaN,因为我们不需要这个值,只将它用作发送标签的一种方式。

能逸清
2023-03-14

在您的应用程序中,您可以使用使用标签导出的量表度量,例如版本号或提交/生成哈希,然后将量表的值设置为1。

例如,这就是redis\u exporter导出redis实例信息的方式:

# HELP redis_instance_info Information about the Redis instance
# TYPE redis_instance_info gauge
redis_instance_info{addr="redis://localhost:6379",os="Linux 4.4.0-62-generic x86_64",redis_build_id="687a2a319020fa42",redis_mode="standalone",redis_version="3.0.6",role="master"} 1

您可以看到版本和几个其他属性导出为指标redis_instance_info的标签。

 类似资料:
  • +++ get:/ <<< success { "code":1, "msg":"恭喜您,API访问成功!", "data":{ "version":"1.0.0", "doc":"http://www.kancloud.cn/thinkcmf/cmf5api" } } +++

  • 这是一个处理需要反复标记的问题的一个小技巧,以一个ACM形式的题目为例: 输入:第一行是一个数字N,表示N个case,之后每个case第一行是一个数字M,表示这个case有M个数字输入,接下来是M个数字,每个数字范围是0<=n<K 输出:对每个case,输出M个数字去重后的数量 当然,这题本身没什么难度,弄个hash_set就行了,不过为了说明问题,我们假定做题的人比较笨,使用bitmap: bm

  • 本文向大家介绍PHP版本号,包括了PHP版本号的使用技巧和注意事项,需要的朋友参考一下 总是向PHP添加不同的功能和选项。尽管新版本通常不会产生太多的向后兼容性问题,但是编写谨慎的生产代码通常是明智的,您知道这些代码将在运行该语言稍旧版本的服务器上运行。 要检查当前使用的PHP版本,可以使用函数phpversion()或常量PHP_VERSION。函数和常量都返回一个包含版本号的字符串。可以使用两

  • 软件的版本号由以下4部分组成: 主要版本号.次要版本号.版本状态码[.修订号] 应根据下面的约定使用这些部分: 主要版本:主要版本号不同,意味着本版本进行了大幅的本质修改,并且可能出现不同版本不兼容的问题。 次要版本:次要版本号不同,意味着功能的显著增强,但考虑了向后兼容性。 版本状态码:版本状态码包含了对当前版本的一些描述。它具体包含了以下信息: 发布状态。 0: 计划版(planned):计

  • 我正试图在我的react-native android项目中升级gradle包装器版本。 我没有在Mac上安装gradle,我只是使用react-native附带的包装器,它是2.14.1版本。我想使用一个库,它要求年级4.4+,我遵循了官方教程。我马上就得到了这个问题。 我发现每当我键入时,它总是引用我的用户目录中的,尽管我已经指定要使用这是较新的版本。zip文件现在在我的项目包装器文件夹中,(

  • 问题内容: 您如何使用既不使用自定义代码也不使用外部依赖关系(例如Shell脚本)的文件来编写: 生成格式major.minor.revision的内部版本号(例如 01.02.34 )。 在每次编译源代码时自动递增修订。 每次执行dist(ribution)任务时,都会自动增加次要版本。 另外: 提供增加主号码的选项。 提供增加小号的选项。 主编号递增时,次编号和修订版本号设置为0。 每当次要编