import requests
"""
官网位置
https://prometheus.io/docs/prometheus/latest/querying/api/
1、 表达式查询
# 在单个时刻或者一定时间范围内查询
1.1、 即时查询
# 单个时间点内查询
GET /api/v1/query
POST /api/v1/query
curl 'http://localhost:9090/api/v1/query?query=up&time=2023-01-30T20:10:51.781Z'
1.2、范围查询
# 一段时间内的表达式查询
GET /api/v1/query_range
POST /api/v1/query_range
curl 'http://localhost:9090/api/v1/query_range?query=up&start=2023-01-30T20:10:30.781Z&end=2023-01-30T20:11:00.781Z&step=15s'
2、设置查询表达式的格式
# 美化的方式设置ProQL表达式的格式
GET /api/v1/format_query
POST /api/v1/format_query
curl 'http://localhost:9090/api/v1/format_query?query=foo/bar'
3、查询元数据
# 查询有关系统及其标签的元数据
3.1、通过标签匹配器查找系列
GET /api/v1/series
POST /api/v1/series
$ curl -g 'http://localhost:9090/api/v1/series?' --data-urlencode 'match[]=up' --data-urlencode 'match[]=process_start_time_seconds{job="prometheus"}'
3.2、获取标签名称
# 返回标签名称列表
GET /api/v1/labels
POST /api/v1/labels
curl 'localhost:9090/api/v1/labels'
3.3、查询标签值
# 返回提供的标签名称的标签值列表
GET /api/v1/label//values
curl http://localhost:9090/api/v1/label/job/values
4、查询示例
# 实验性的接口
# 返回特定时间范围内的有效的PromQL查询的示例列表
GET /api/v1/query_exemplars
POST /api/v1/query_exemplars
curl -g 'http://localhost:9090/api/v1/query_exemplars?query=test_exemplar_metric_total&start=2023-01-30T15:22:25.479Z&end=2023-01-30T15:23:25.479Z'
5、目标
# 返回发现的标签
curl http://localhost:9090/api/v1/targets
curl 'http://localhost:9090/api/v1/targets?state=active' # state=activestate=droppedstate=any
6、规则
# 返回警报喝记录规则的列表
GET /api/v1/rules
curl http://localhost:9090/api/v1/rules # type=alert|recordtype=alerttype=record
7、警报
# 返回所有活动警报的列表
GET /api/v1/alerts
curl http://localhost:9090/api/v1/alerts
8、查询目标元数据
# 实验性指标
# 返回有关当前从目标抓取的指标的元数据
GET /api/v1/targets/metadata
curl -G http://localhost:9091/api/v1/targets/metadata \
--data-urlencode 'metric=go_goroutines' \
--data-urlencode 'match_target={job="prometheus"}' \
--data-urlencode 'limit=2'
curl -G http://localhost:9091/api/v1/targets/metadata \
--data-urlencode 'match_target={instance="127.0.0.1:9090"}'
curl -G http://localhost:9091/api/v1/targets/metadata
9、查询指标元数据
# 实验性指标
# 返回有关当前从目标抓取的指标的元数据
GET /api/v1/metadata
curl -G http://localhost:9090/api/v1/metadata?limit=2
curl -G http://localhost:9090/api/v1/metadata?metric=http_requests_total
10、警报管理器
# 返回活动和丢弃的警报
GET /api/v1/alertmanagers
curl http://localhost:9090/api/v1/alertmanagers
11、状态
# 返回当前的配置
11.1、配置
# 返回当前加载的配置文件
GET /api/v1/status/config
curl http://localhost:9090/api/v1/status/config
11.2、标签
# 返回配置的标签值
GET /api/v1/status/flags
curl http://localhost:9090/api/v1/status/flags
11.3、运行时信息
# 返回有关服务器的各种运行时信息属性
GET /api/v1/status/runtimeinfo
curl http://localhost:9090/api/v1/status/runtimeinfo
11.4、构建信息
# 返回有关服务器的各种生成信息属性
GET /api/v1/status/buildinfo
curl http://localhost:9090/api/v1/status/buildinfo
11.5、TSDB统计
# 返回有关 TSDB 的各种基数统计信息
GET /api/v1/status/tsdb
curl http://localhost:9090/api/v1/status/tsdb
11.6、WAL 回放数据
# 返回 WAL 重复的信息
GET /api/v1/status/walreplay
curl http://localhost:9090/api/v1/status/walreplay
12、TSDB 管理接口
# 为高级用户公开数据库功能的API,设置 --web.enable-admin-api
12.1、快照
# 将所有当前数据的快照创建到TSDB的数据目录下
# 并返回该目录作为响应
POST /api/v1/admin/tsdb/snapshot
PUT /api/v1/admin/tsdb/snapshot
curl -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot
12.2、删除系列
# 删除某个时间范围内所选序列的数据
POST /api/v1/admin/tsdb/delete_series
PUT /api/v1/admin/tsdb/delete_series
curl -X POST \
-g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}'
12.3、清理逻辑删除
# 从磁盘中删除已经删除的数据并清理现有的逻辑删除,
# 可以在删除系列后使用以释放空间
POST /api/v1/admin/tsdb/clean_tombstones
PUT /api/v1/admin/tsdb/clean_tombstones
curl -XPOST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones
"""
usr = "http://192.168.73.222:40090"
# 基础 API 构建
def getQueryValue(requestMethod,query,params):
inquire = usr + query
response = requests.request(requestMethod, inquire,params=params)
if response.status_code == 200:
# print(response.json())
result = response.json()
return result
else:
return None
def getQueryValueGet(requestMethod,query,params):
h = {
"Accept-Encoding": "gzip",
"Accept-Language": "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7"
}
r = requests.get(usr+query, headers=h, params=params).json()
return r
# 1、 表达式查询
# 在单个时刻或者一定时间范围内查询
# 1.1、 即时查询
# 单个时间点内即时查询
# GET | POST
def expressionQueriesValue():
query = '/api/v1/query?query=up&time=2023-01-30T20:10:51.781Z'
result = getQueryValue('GET',query,"")
return result
# 1.2、范围查询
# 一段时间内的表达式查询
# GET | POST
def rangeQueriesValue():
query = '/api/v1/query_range?query=up&start=2023-01-30T20:10:30.781Z&end=2023-01-30T20:11:00.781Z&step=15s'
result = getQueryValue('GET',query,"")
return result
# 2、设置查询表达式的格式
# 美化的方式设置ProQL表达式的格式
# GET | POST
def formattingQueryExpressionsValue():
query = '/api/v1/format_query?query=foo/bar'
result = getQueryValue('GET',query,"")
return result
# 3、查询元数据
# 查询有关系统及其标签的元数据
# 3.1、通过标签匹配器查找系列
# GET | POST
def findingSeriesByLabelMatchersValues():
query = '/api/v1/series?'
params = {
'match[]': 'up',
}
result = getQueryValueGet('GET',query,params)
return result
# 3.2、获取标签名称
# 返回标签名称列表
# GET | POST
def gettingLabelNamesValue():
query = '/api/v1/labels'
result = getQueryValue('GET',query,"")
return result
# 3.3、查询标签值
# 返回提供的标签名称的标签值列表
# GET
def queryingLabelValues():
query = '/api/v1/label/job/values'
result = getQueryValue('GET',query,"")
return result
# 4、查询示例
# 实验性的接口
# 返回特定时间范围内的有效的PromQL查询的示例列表
# GET | POST
def queryingExemplarsValue():
query = '/api/v1/query_exemplars?query=test_exemplar_metric_total&start=2023-01-30T15:22:25.479Z&end=2023-01-30T15:23:25.479Z'
result = getQueryValue('GET',query,"")
return result
# 5、目标
# 返回发现的标签
# GET
def targetsValue():
query = '/api/v1/targets'
query = '/api/v1/targets?state=active' # state=activestate=droppedstate=any
result = getQueryValue('GET',query,"")
return result
# 6、规则
# 返回警报喝记录规则的列表
# GET
def rulesValue():
query = '/api/v1/rules' # type=alert|recordtype=alerttype=record
result = getQueryValue('GET',query,"")
return result
# 7、警报
# 返回所有活动警报的列表
# GET
def alertsValue():
query = '/api/v1/alerts'
result = getQueryValue('GET',query,"")
return result
# 8、查询目标元数据
# 实验性指标
# 返回有关当前从目标抓取的指标的元数据
# GET
def queringTargetMetadataValue():
query1 = '/api/v1/targets/metadata'
params1 = {
'metric': 'go_goroutines',
'match_target': '{job="prometheus"}',
'limit': '2'
}
query2 = '/api/v1/targets/metadata'
params2 = {
'match_target': '{instance="127.0.0.1:9090"}'
}
query3 = '/api/v1/targets/metadata'
result = getQueryValueGet('GET',query1,params1)
return result
# 9、查询指标元数据
# 实验性指标
# 返回有关当前从目标抓取的指标的元数据
# GET
def queringMetricMetadataValue():
query = '/api/v1/metadata?limit=2'
query = '/api/v1/metadata?metric=http_requests_total'
result = getQueryValue('GET',query,"")
return result
# 10、警报管理器
# 返回活动和丢弃的警报
# GET
def alertmanagersValue():
query = '/api/v1/alertmanagers'
result = getQueryValue('GET',query,"")
return result
# 11、状态
# 返回当前的配置
# 11.1、配置
# 返回当前加载的配置文件
# GET
def configValue():
query = '/api/v1/status/config'
result = getQueryValue('GET',query,"")
return result
# 11.2、标签
# 返回配置的标签值
# GET
def flagsValue():
query = '/api/v1/status/flags'
result = getQueryValue('GET',query,"")
return result
# 11.3、运行时信息
# 返回有关服务器的各种运行时信息属性
# GET
def runtimeInformationValue():
query = '/api/v1/status/runtimeinfo'
result = getQueryValue('GET',query,"")
return result
# 11.4、构建信息
# 返回有关服务器的各种生成信息属性
# GET
def buildInformantionValue():
query = '/api/v1/status/buildinfo'
result = getQueryValue('GET',query,"")
return result
# 11.5、TSDB统计
# 返回有关 TSDB 的各种基数统计信息
# GET
def tsdbStatsValue():
query = '/api/v1/status/tsdb'
result = getQueryValue('GET',query,"")
return result
# 11.6、WAL 回放数据
# 返回 WAL 重复的信息
# GET
def valReplayStatsValue():
query = '/api/v1/status/walreplay'
result = getQueryValue('GET',query,"")
return result
# 12、TSDB 管理接口
# 为高级用户公开数据库功能的API,设置 --web.enable-admin-api
# 12.1、快照
# 将所有当前数据的快照创建到TSDB的数据目录下
# 并返回该目录作为响应
def snapshotValue():
query = '/api/v1/admin/tsdb/snapshot'
result = getQueryValue('GET',query,"")
return result
# 12.2、删除系列
# 删除某个时间范围内所选序列的数据
# POST | PUT
def deleteSeriesValue():
query = '/api/v1/admin/tsdb/delete_series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}'
result = getQueryValue('POST',query,"")
return result
# 12.3、清理逻辑删除
# 从磁盘中删除已经删除的数据并清理现有的逻辑删除,
# 可以在删除系列后使用以释放空间
# POST | PUT
def cleanTombstonesValue():
query = '/api/v1/admin/tsdb/clean_tombstones'
result = getQueryValue('POST',query,"")
return result
# 函数调用
dd = queringTargetMetadataValue()
print("dd",dd)
ee = buildInformantionValue()
print("ee",ee)