You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.7 KiB
64 lines
1.7 KiB
#include <chrono> |
|
#include <iostream> |
|
#include <memory> |
|
#include <string> |
|
#include <thread> |
|
|
|
#include "prometheus/client_metric.h" |
|
#include "prometheus/counter.h" |
|
#include "prometheus/family.h" |
|
#include "prometheus/gateway.h" |
|
#include "prometheus/registry.h" |
|
|
|
#ifdef _WIN32 |
|
#include <Winsock2.h> |
|
#else |
|
#include <unistd.h> |
|
#endif |
|
|
|
static std::string GetHostName() { |
|
char hostname[1024]; |
|
|
|
if (::gethostname(hostname, sizeof(hostname))) { |
|
return {}; |
|
} |
|
return hostname; |
|
} |
|
|
|
int main() { |
|
using namespace prometheus; |
|
|
|
// create a push gateway |
|
const auto labels = Gateway::GetInstanceLabel(GetHostName()); |
|
|
|
Gateway gateway{"127.0.0.1", "9091", "sample_client", labels}; |
|
|
|
// create a metrics registry with component=main labels applied to all its |
|
// metrics |
|
auto registry = std::make_shared<Registry>(); |
|
|
|
// add a new counter family to the registry (families combine values with the |
|
// same name, but distinct label dimensions) |
|
auto& counter_family = BuildCounter() |
|
.Name("time_running_seconds_total") |
|
.Help("How many seconds is this server running?") |
|
.Labels({{"label", "value"}}) |
|
.Register(*registry); |
|
|
|
// add a counter to the metric family |
|
auto& second_counter = counter_family.Add( |
|
{{"another_label", "value"}, {"yet_another_label", "value"}}); |
|
|
|
// ask the pusher to push the metrics to the pushgateway |
|
gateway.RegisterCollectable(registry); |
|
|
|
for (;;) { |
|
std::this_thread::sleep_for(std::chrono::seconds(1)); |
|
// increment the counter by one (second) |
|
second_counter.Increment(); |
|
|
|
// push metrics |
|
auto returnCode = gateway.Push(); |
|
std::cout << "returnCode is " << returnCode << std::endl; |
|
} |
|
}
|
|
|