发布从sql查询生成的prometheus度量(也用于carto sql api)。

query-exporter-carto的Python项目详细描述


Latest VersionBuild StatusCoverage StatusSnap Status

query-exporter是一个Prometheus导出器,它允许收集度量 从数据库查询,在指定的时间间隔。

它使用SQLAlchemy连接到不同的数据库引擎,包括 PostgreSQL、MySQL、Oracle和Microsoft SQL Server。

每个查询可以在多个数据库上运行,并更新多个度量。

使用如下所示的配置文件调用应用程序:

databases:db1:dsn:sqlite://db2:dsn:sqlite://metrics:metric1:type:gaugedescription:A sample gaugemetric2:type:summarydescription:A sample summarymetric3:type:histogramdescription:A sample histogrambuckets:[10,20,50,100,1000]metric4:type:enumdescription:A sample enumstates:[foo,bar,baz]queries:query1:interval:5databases:[db1]metrics:[metric1]sql:SELECT random() / 1000000000000000query2:interval:20databases:[db1,db2]metrics:[metric2,metric3]sql:|SELECT abs(random() / 1000000000000000),abs(random() / 10000000000000000)query3:interval:10databases:[db2]metrics:[metric4]sql:|SELECT value FROM (SELECT 'foo' AS value UNIONSELECT 'bar'UNION SELECT 'baz')ORDER BY random()LIMIT 1

dsn连接字符串的格式如下:

dialect[+driver]://[username:password][@host:port]/database

(有关可用选项的详细信息,请参见SQLAlchemy documentation)。

查询配置中的metrics列表必须与 在sql中定义的查询。

如果未指定后缀,interval值将被解释为秒; 有效后缀是smhd。只有整数值可以是 明确规定。如果未指定值(或指定为null),则查询为 在每个http请求时执行。

查询通常返回一行,但支持多行,并且 每一行都将导致相关度量的更新。这与任何 一种度量单位,但仪表除外,它将有效地更新为该值 从最后一排。

对于上面的配置,导出的度量如下:

# HELP metric1 A sample gauge
# TYPE metric1 gauge
metric1{database="db1"} 1549.0
# HELP metric2 A sample summary
# TYPE metric2 summary
metric2_count{database="db2"} 1.0
metric2_sum{database="db2"} 5229.0
metric2_count{database="db1"} 1.0
metric2_sum{database="db1"} 4513.0
# TYPE metric2_created gauge
metric2_created{database="db2"} 1.5456472955657206e+09
metric2_created{database="db1"} 1.5456472955663064e+09
# HELP metric3 A sample histogram
# TYPE metric3 histogram
metric3_bucket{database="db2",le="10.0"} 0.0
metric3_bucket{database="db2",le="20.0"} 0.0
metric3_bucket{database="db2",le="50.0"} 0.0
metric3_bucket{database="db2",le="100.0"} 0.0
metric3_bucket{database="db2",le="1000.0"} 1.0
metric3_bucket{database="db2",le="+Inf"} 1.0
metric3_count{database="db2"} 1.0
metric3_sum{database="db2"} 714.0
metric3_bucket{database="db1",le="10.0"} 0.0
metric3_bucket{database="db1",le="20.0"} 0.0
metric3_bucket{database="db1",le="50.0"} 0.0
metric3_bucket{database="db1",le="100.0"} 0.0
metric3_bucket{database="db1",le="1000.0"} 1.0
metric3_bucket{database="db1",le="+Inf"} 1.0
metric3_count{database="db1"} 1.0
metric3_sum{database="db1"} 602.0
# TYPE metric3_created gauge
metric3_created{database="db2"} 1.545647295565831e+09
metric3_created{database="db1"} 1.5456472955663848e+09
# HELP metric4 A sample enum
# TYPE metric4 gauge
metric4{database="db2",metric4="foo"} 0.0
metric4{database="db2",metric4="bar"} 1.0
metric4{database="db2",metric4="baz"} 0.0

度量将自动标记为database标签,以便 为每个数据库生成独立序列。

数据库引擎

sqlalchemy不依赖于 安装。这意味着可能需要为 使用中的发动机,如下所示:

pip install SQLAlchemy[postgresql] SQLAlchemy[mysql] ...

基于哪个数据库正在使用。

有关详细信息,请参见supported databases

纸箱扩展

您可以定义carto连接,而不是sql dsn。如果要这样做,请在数据库中使用carto:条目。

示例:

databases:
  test_carto:
    carto:
      user: my_carto_user
      api_key: my_carto_api_key

metrics:
  observations_simple_count:
    type: gauge
    description: Simple count to check if this works...

queries:
  query_count_simple_count:
    interval: 120s
    databases: [test_carto]
    metrics: [observations_simple_count]
    sql: SELECT count(*) from county_population;
  • 您不能在同一个数据库中同时使用dsncarto条目,因为这样做毫无意义。
  • 配置对象的可用字段与经度cartodatasource对象的可用字段相同。
  • 到今天为止,这些字段是(请记住,有些字段可能不适合监视):
    • api_versionv2默认情况下
    • uses_batchFalse默认情况下
    • on_premise_domain''默认。如果提供,carto url将使用它。如果不是,默认用户url将是。
    • api_key''默认。强制性的。建议使用主API密钥。
    • user''默认。强制性的。卡通用户(非电子邮件)
    • cache:默认为空。缓存配置。在这种情况下暂时没有用。

开发环境

安装所需依赖项的最简单方法是创建虚拟环境并安装软件包:

python setup.py install pipenv install -e .

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何为ConcurrentHashMap使用并设置适当的并发级别?   java泛型方法,运行时错误,   java在页面上显示加载的图像   java Paypal定期直接支付问题   java如何延迟重新绘制组件   JavaSpringBoot+Hibernate如何维护@Transient字段   java在其方法中获取关于类的信息   在java中将别名添加到枚举   java如何解决向google报告成绩时“需要重新连接客户端”的问题   清晰的java图像背景   java未找到适合JDateChooser的构造函数(字符串、字符串、字符)   java LRU缓存实现。某些测试用例的代码失败   if语句Java嵌套的if/Else条件   java JSoup“wrap”并非每次都按预期工作   Java Spring引导循环依赖于一个环境   ssl证书无法通过Java和IntelliJ连接到SOAP服务   带整数验证的Java扫描器   java在Flex中呈现具有动态列的datagrid   java Android:通过用户选择的选项将文件上载到服务器   子类中的java抛出错误、异常和运行时异常