1、需求

在 rancher 应用商店添加集群监控,会安装 prometheus、grafana;需要从 prometheus 的 api 中收集 pod 的一些信息。

查看grafana 配置的数据源为:http://prometheus-operated:9090

遂用 curl 请求如下:

curl http://prometheus-operated:9090/api/v1/query?query=container_cpu_usage_seconds_total
unauthorized

提示没有授权。

2、查找原因

查看官网介绍了basic auth 方式,采用 nginx 作为代理,配置了验证信息。遂想着 rancher 是不是也配置了代理;查看rancher 信息:

应用商店添加集群监控 prometheus,会创建如下信息:

命名空间: cattle-prometheus,
工作负载:prometheus-cluster-monitoring,
工作负载中包含如下5个容器:
prometheus #监听9090端口
prometheus-config-reloader
rules-configmap-reloader
prometheus-proxy #监听8080端口
prometheus-agent

查看到 prometheus-proxy 代理了9090 端口,并监听8080端口,其中还配置了 Authorization

proxy_set_header Authorization "Bearer eyJhbGciOiJSL3j-89LHMtCQCzHrmk12uUP4SI425bxKJEg........";
proxy_pass_header Authorization;

这样我们只需要请求 prometheus-cluster-monitoring 的 8080 端口即可,不用配置 Authorization 就可以访问数据了。

3、解决

配置服务发现,暴露出 prometheus-cluster-monitoring 的 8080 端口

名称:http-api
命名空间: cattle-prometheus
解析到:Pod
标签:
app=prometheus
chart=prometheus-0.0.
release=cluster-monitoring
类型:Headless Service
端口映射:
端口名称:
服务端口:
协议:tcp
目标端口:

然后请求 http-api

curl http://http-api:8080/api/v1/query?query=container_cpu_usage_seconds_total

可以看到返回了数据。

4、外部访问

要想外部也想要访问该服务,还需要配置负载均衡
1)域名 api-prometheus-operated.wmq.com 指向 http-api 服务的 8080 端口;

2)配置域名解析到 ingress;

3)获取数据

curl http://api-prometheus-operated.wmq.com/api/v1/query?query=container_cpu_usage_seconds_total
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "container_cpu_usage_seconds_total",
"container": "POD",
"endpoint": "https-metrics",
"instance": "172.16.5.74:10250",
"job": "expose-kubelets-metrics",
"namespace": "cattle-prometheus",
"node": "dev-k8s-master-server-01",
"pod": "exporter-node-cluster-monitoring-h8ph2",
"service": "expose-kubelets-metrics"
},
"value": [
1573700778.551,
"0.026998712"
]
}
}
}

参考:

官网介绍http api:https://prometheus.io/docs/prometheus/latest/querying/api/

官网介绍functions:https://prometheus.io/docs/prometheus/latest/querying/functions/

获取 Rancher 中 Prometheus 的数据的更多相关文章

  1. 在ASP.NET MVC控制器中获取链接中的路由数据

    在ASP.NET MVC中,在链接中附加路由数据有2种方式.一种是把路由数据放在匿名对象中传递: <a href="@Url.Action("GetRouteData&quo ...

  2. Go net/http获取body中json格式数据

    Go net/http获取body中json格式数据 package main import ( "encoding/json" "fmt" "io/ ...

  3. 数组:获取数组中最后一个数据end()函数

    今天来学习一下end()函数 1.案例:直接获取数组中最后一个数据 代码部分 结果: 2.案例:从url中获取最后一个数据 代码部分: 结果: 总结: 1.有时候我们需要去获取数据库中,id最大的那个 ...

  4. HTML中获取input中单选按钮radio数据(性别例子)

    个人学习整理 1.编写HTML <!doctype html> <html> <head> <meta charset="utf-8"&g ...

  5. 使用phpword获取doc中的表格数据

    1. 首先确定使用phpword是可以读取word文档中表格里面的数据, 使用的phpword版本0.17.0 2.理解word文档内容的存储逻辑规则(这里只做简单概述) 一般做博文喜欢直接贴代码,直 ...

  6. php获取post中的json数据的实现方法

    最近用到腾讯微博与PHP交互,腾讯把json数据post给PHP(腾讯推送数据时,每条数据是一个json格式的数据包,作为post的数据体(请注意post数据体没有参数,不是key=value形式,整 ...

  7. [SoapUI] 在SoapUI里获取Excel中多行数据并存入List

    ArrayList<ArrayList<String>> getCellValuesH( String filePath, String sheetName,int tr1,i ...

  8. 9.SpringMVC和json结合传递数据 && 10.SpringMVC获取controller中json的数据

  9. 使用 UEditor 编辑器获取数据库中的数据

    在 ThinkPHP 3.2.2 中,使用 UEditor 编辑器获取数据库中保存的数据,可以使用 UEditor 自身提供的方法. 首先在视图模板中实例化编辑器,这是出现编辑器界面的必须的行为: & ...

随机推荐

  1. 排序算法Java代码实现(二)—— 冒泡排序

    本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...

  2. mssql SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法

    解决方法: 工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去掉即可.

  3. jQuery-对列表的操作

    主要是通过对dom元素的增加和删除实现对数据增加和删除 <!DOCTYPE html> <html lang="en"> <head> < ...

  4. strace命令 系统调用

    简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...

  5. 2.监控软件zabbix-客户端安装

    环境准备 Zabbix-Agent只要http://www.zabbix.com/download.php中可以下载的Zabbix-Agent均可以搭建Zabbix-Agent环境,本文选用CentO ...

  6. DBCP连接池使用

    转载请注明原文地址https://www.cnblogs.com/ygj0930/p/11280475.html 一:引入jar包或添加依赖 1:jar包 2:maven依赖 <dependen ...

  7. Linux设备管理(四)_从sysfs回到ktype【转】

    转自:https://www.cnblogs.com/xiaojiang1025/archive/2016/12/21/6202298.html sysfs是一个基于ramfs的文件系统,在2.6内核 ...

  8. 9-剑指offer: 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 代码 class Solution { public: int NumberOf1(int n) { if(n==0) re ...

  9. AtCoder abc 141 F - Xor Sum 3(线性基)

    传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二 ...

  10. 《2019面向对象程序设计(java)课程学习进度条

    周次 (阅读/编写)代码行数 发布博客量/评论他人博客数量 课余学习时间(小时) 学习收获最大的程序 阅读或编译让我 第一周 20/5 1/0 4 编译九九乘法表 第二周 100/10 2/0 5 第 ...