version: '2' services: prometheus: build: . ports: - 9090:9090 volumes: - /tmp/prometheus-data:/prometheus-data links: - pushgateway pushgateway: image: prom/pushgateway ports: - 9999:9091
配置從pushgateway採起數據java
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Attach these labels to any time series or alerts when communicating with # external systems (federation, remote storage, Alertmanager). external_labels: monitor: 'codelab-monitor' # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first.rules" # - "second.rules" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] - job_name: 'push-metrics' static_configs: - targets: ['192.168.99.100:9999']
<!-- The client --> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.0.21</version> </dependency> <!-- Hotspot JVM metrics --> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_hotspot</artifactId> <version>0.0.21</version> </dependency> <!-- Exposition servlet --> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_servlet</artifactId> <version>0.0.21</version> </dependency> <!-- Pushgateway exposition --> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_pushgateway</artifactId> <version>0.0.21</version> </dependency> <dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient_dropwizard</artifactId> <version>0.0.21</version> </dependency>
@Component public class PrometheusConfig { @Autowired MetricRegistry dropwizardRegistry; @Value("${spring.application.name}") String applicationName; @Value("${prometheus.pushgateway.host}") String pushHost; @Value("${prometheus.pushgateway.intervalInMillis:10000}") long intervalInMillis; private final CollectorRegistry prometheusRegistry = new CollectorRegistry(); @PostConstruct public void initialize() { DropwizardExports prometheus = new DropwizardExports(dropwizardRegistry); prometheus.register(prometheusRegistry); PushGateway prometheusPush = new PushGateway(pushHost); Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> { try { prometheus.collect(); prometheusPush.push(prometheusRegistry, applicationName); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }, 5000, intervalInMillis, TimeUnit.MILLISECONDS); } }