如何在Prometheus+Grafana中获取各target的内存使用情况
首先纠正当前配置的核心问题
你当前将业务服务端口(8000~8040)全部加入node采集Job的配置是错误的:Node Exporter默认只会在9100端口暴露整机级别的系统指标,其余业务端口没有对应的Node Exporter metrics接口,无法通过这个配置拿到单服务的资源数据。
实现单端口对应服务的内存使用率采集
Node Exporter本身只采集整机维度的资源,要拿到单服务/单进程的内存数据,根据你的部署方式选择对应方案:
- 容器部署业务:部署cAdvisor采集容器维度资源指标,Prometheus对接cAdvisor后,使用如下PromQL即可查询每个容器对应的内存使用率:
可以直接按端口标签分组输出每个服务的内存使用率,匹配你需要的展示效果。sum(container_memory_usage_bytes{image!="", container_label_port=~".+"}) by (container_label_port) / sum(container_spec_memory_limit_bytes{image!="", container_label_port=~".+"}) by (container_label_port) * 100 - 裸机部署进程:部署Process Exporter,配置规则匹配对应端口的业务进程,采集进程级别的资源指标,使用如下PromQL查询:
100 - (sum by (name, instance) (process_memory_bytes{job="process"}) / sum by (instance) (node_memory_MemTotal_bytes) * 100)
多节点独立运行Node Exporter的配置方法
要通过instance标签区分不同节点的监控数据,操作步骤如下:
- 在每台需要监控的节点上单独部署Node Exporter,默认使用9100端口即可,同一主机部署多实例时再调整端口。
- 修改Prometheus配置的
scrape_configs部分,将所有节点的IP:9100加入node Job的targets:scrape_configs: - job_name: node scrape_interval: 15s static_configs: - targets: - '192.168.1.10:9100' # 节点1 - '192.168.1.11:9100' # 节点2 - '192.168.1.12:9100' # 节点3 # 可自定义分组标签 labels: env: production - Prometheus会自动给所有采集到的node指标新增
instance标签,标签值为你配置的IP:端口,直接通过该标签即可过滤不同节点的监控数据。Grafana中可配置instance变量,查询语句填写label_values(node_cpu_seconds_total, instance)即可实现节点下拉选择切换。
内容的提问来源于stack exchange,提问作者PythonNewbie
相关产品推荐
相关产品推荐

