A Ruby library for reading metrics stored on a Prometheus server.
gem install prometheus-api-client require 'prometheus/api_client' # return a client for host http://localhost:9090/api/v1/ prometheus = Prometheus::ApiClient.client# return a client for host http://example.com:9090/api/v1/ prometheus = Prometheus::ApiClient.client(url: 'http://example.com:9090')If an authentication proxy ( e.g. oauth2 ) is used in a layer above the prometheus REST server, this client can use ssl and authentication headears.
# return a client for host https://example.com/api/v1/ using a Bearer token "TopSecret" prometheus = Prometheus::ApiClient.client(url: 'https://example.com:443', credentials: { token: 'TopSecret' })# send a low level get request to server prometheus.get( 'query_range', query: 'sum(container_cpu_usage_seconds_total' \ '{container_name="prometheus-hgv4s",job="kubernetes-nodes"})', start: '2015-07-01T20:10:30.781Z', end: '2015-07-02T20:10:30.781Z', step: '120s', )# response from server is a low level response struct including # fields like: method, body and request_headers # usually users will not need to use this low level calls ... method=:get, body="{\"status\":\"success\", ... # send a query request to server prometheus.query( query: 'sum(container_cpu_usage_seconds_total' \ '{container_name="prometheus-hgv4s",job="kubernetes-nodes"})', time: '2015-07-01T20:10:30.781Z', )# response from server: {"resultType"=>"vector", "result"=>[{"metric"=>{}, "value"=>[1502350741.161, "6606.310387038"]}]} # send a query_range request to server prometheus.query_range( query: 'sum(container_cpu_usage_seconds_total' \ '{container_name="prometheus-hgv4s",job="kubernetes-nodes"})', start: '2015-07-01T20:10:30.781Z', end: '2015-07-02T20:10:30.781Z', step: '120s', )# response from server: {"resultType"=>"matrix", "result"=> [{"metric"=> {"__name__"=>"container_cpu_usage_seconds_total", "beta_kubernetes_io_arch"=>"amd64", "beta_kubernetes_io_os"=>"linux", "cpu"=>"cpu00", "id"=>"/", "instance"=>"example.com", "job"=>"kubernetes-cadvisor", "kubernetes_io_hostname"=>"example.com", "region"=>"infra", "zone"=>"default"}, "values"=>[[1502086230.781, "51264.830099022"], [1502086470.781, "51277.367732154"]]}, {"metric"=> {"__name__"=>"container_cpu_usage_seconds_total", "beta_kubernetes_io_arch"=>"amd64", "beta_kubernetes_io_os"=>"linux", "cpu"=>"cpu01", "id"=>"/", "instance"=>"example.com", "job"=>"kubernetes-cadvisor", "kubernetes_io_hostname"=>"example.com", "region"=>"infra", "zone"=>"default"}, "values"=>[[1502086230.781, "53879.644934689"], [1502086470.781, "53892.665282065"]]}]} # send a label request to server prometheus.label('__name__')# response from server: ["APIServiceRegistrationController_adds", "APIServiceRegistrationController_depth", ... # send a targets request to server prometheus.targets()# response from server: {"activeTargets"=> [{"discoveredLabels"=> {"__address__"=>"10.35.19.248:8443", "__meta_kubernetes_endpoint_port_name"=>"https", "__meta_kubernetes_endpoint_port_protocol"=>"TCP", "__meta_kubernetes_endpoint_ready"=>"true", "__meta_kubernetes_endpoints_name"=>"kubernetes", "__meta_kubernetes_namespace"=>"default", "__meta_kubernetes_service_label_component"=>"apiserver", "__meta_kubernetes_service_label_provider"=>"kubernetes", "__meta_kubernetes_service_name"=>"kubernetes", "__metrics_path__"=>"/metrics", "__scheme__"=>"https", "job"=>"kubernetes-apiservers"}, "labels"=>{"instance"=>"10.35.19.248:8443", "job"=>"kubernetes-apiservers"}, "scrapeUrl"=>"https://10.35.19.248:8443/metrics", "lastError"=>"", "lastScrape"=>"2017-08-10T07:35:40.919376413Z", "health"=>"up"}, ... Install necessary development gems with bundle install and run tests with rspec:
rake