Prometheus:区分应用程序指标

Posted

技术标签:

【中文标题】Prometheus:区分应用程序指标【英文标题】:Prometheus : Distinguish Application metrics 【发布时间】:2020-11-09 02:48:06 【问题描述】:

我在 EKS 集群上运行我的服务。为了收集应用程序指标 [API 响应时间、状态和调用次数],我遇到了 Prometheus。我认为需要完成以下步骤:

    集群角色、服务帐户和角色绑定:这将允许我的 prometheus 服务与集群节点、pod 和服务 [在资源部分中定义] 进行通信。 Configmap:这允许抓取过程并定义不同的角色。 服务和入口:建立端点 [例如:9090] 并路由来自互联网的流量。

我遇到了prometheus using helm,它描述了我们如何利用 helm 预定义的 prometheus 图表来从 kubernetes 获取原始指标。

我按照以下步骤操作:

kubectl create namespace prometheus

helm install prometheus stable/prometheus \
    --namespace prometheus \
    --set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

kubectl get pods -n prometheus

我可以看到使用该命名空间运行的 pod。现在,我有两个问题,

    我有多个服务(例如,服务 A 和服务 B) 在集群上运行。那么,我怎样才能区分上的指标 普罗米修斯。 是否需要每次运行kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090 才能看到结果?我懂了 targetPort 被定义为 9090 那么为什么我需要运行 命令?我可以改用values.yaml 吗?

【问题讨论】:

是否尝试遵循普罗米修斯文档? 【参考方案1】:

很好地回答你的问题

    是的,您可以在prometheus的configMap中使用标签来区分服务指标

     static_configs:
       - targets:
           - "<yourfirstservicename>.<namespace>.svc.cluster.local:<yourservice1portnumber>"
         labels:
           instance: 'service1'
       - targets:
           - "<yourservice2name>.<namespace>.svc.cluster.local:<yourservice2port>"
         labels:
           instance: 'service2'
    

    是的,您必须进行端口转发,但如果您打算使用 grafana 进行可视化,那么新的 grafana 版本会提供内置的查询运行功能。

我希望这会有所帮助!

【讨论】:

1.我目前正在使用 helm for prometheus。你是在告诉我写所有的文件吗? 2. 为什么需要端口转发? service.yaml 文件应该建立端点? 3. 我在服务发现下看到我的服务 [with different namespace] 被删除了。它们也有 /metrics 路径,但已被删除。这是什么意思? [我在集群上运行了两个服务,并且有两个 kubernetes-apiservers active] @Amul123 不,我的意思是你必须编辑你的 configMap 并在你的 promethues configMap 中添加目标部分,以从两个不同的服务中获取指标。我已经更新了我的答案,看看我提供的 configMap。并回答您的第二个问题,如果您不进行端口转发,那么您将如何检查哪些查询返回了什么样的信息。您必须进行端口转发以检查查询及其数据

以上是关于Prometheus:区分应用程序指标的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 查询和区分大小写

#yyds干货盘点#Prometheus 最佳实践原则

Prometheus的四大指标类型

Prometheus监控系列最佳实践

Istio中使用Prometheus进行应用程序指标度量

具有动态标签值的 Prometheus 指标