From 39a4c6c18bf36918f48967357ab16e964d18c710 Mon Sep 17 00:00:00 2001 From: Paul Ambrose Date: Thu, 3 Jan 2019 23:45:22 -0800 Subject: [PATCH] Merge 1.3.9 * Update metrics and brave jars * Fix proxy http port assignment --- Makefile | 2 +- README.md | 17 ++++++++-------- bin/docker-agent.sh | 2 +- bin/docker-proxy.sh | 2 +- docs/release.md | 2 +- etc/compose/proxy.yml | 2 +- pom.xml | 6 +++--- src/main/java/io/prometheus/Proxy.kt | 8 ++++---- src/main/java/io/prometheus/package-info.java | 2 +- .../java/io/prometheus/proxy/PathManager.kt | 18 ++++++++--------- .../io/prometheus/proxy/ProxyHttpService.kt | 12 ++++++----- .../java/io/prometheus/proxy/ProxyOptions.kt | 20 ++++++++++--------- src/test/java/io/prometheus/OptionsTest.kt | 4 ++-- src/test/java/io/prometheus/TestUtils.kt | 2 +- 14 files changed, 51 insertions(+), 48 deletions(-) diff --git a/Makefile b/Makefile index 21c32aa0..b2f0efa3 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION=1.3.8 +VERSION=1.3.9 default: build diff --git a/README.md b/README.md index 3c17f931..1fe1a564 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,11 @@ [![codebeat badge](https://codebeat.co/badges/8dbe1dc6-628e-44a4-99f9-d468831ff0cc)](https://codebeat.co/projects/github-com-pambrose-prometheus-proxy-master) [![Code Climate](https://codeclimate.com/github/pambrose/prometheus-proxy/badges/gpa.svg)](https://codeclimate.com/github/pambrose/prometheus-proxy) [![Kotlin](https://img.shields.io/badge/%20language-Kotlin-red.svg)](https://kotlinlang.org/) -[![Dependency Status](https://www.versioneye.com/user/projects/5a4c7a110fb24f0536e5b92f/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/5a4c7a110fb24f0536e5b92f) [Prometheus](https://prometheus.io) is an excellent systems monitoring and alerting toolkit, which uses a pull model for -collecting metrics. The pull model is problematic when a Prometheus server and its metrics endpoints are separated -by a firewall. [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) enables Prometheus to -reach metrics endpoints running behind a firewall and preserves the pull model. +collecting metrics. The pull model is problematic when a Prometheus server and its metrics endpoints are separated by a +firewall. [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) enables Prometheus to reach metrics endpoints +running behind a firewall and preserves the pull model. Endpoints running behind a firewall require a Prometheus Agent to be run inside the firewall. An Agent can run as a stand-alone server, embedded in another java server or as a java agent. @@ -86,8 +85,8 @@ scrape_configs: The docker images are available via: ```bash -$ docker pull pambrose/prometheus-proxy:1.3.8 -$ docker pull pambrose/prometheus-agent:1.3.8 +$ docker pull pambrose/prometheus-proxy:1.3.9 +$ docker pull pambrose/prometheus-agent:1.3.9 ``` Start the proxy and an agent in separate shells on your local machine: @@ -96,14 +95,14 @@ Start the proxy and an agent in separate shells on your local machine: $ docker run --rm -p 8082:8082 -p 8092:8092 -p 50051:50051 -p 8080:8080 \ -e HOSTNAME=${HOSTNAME} \ -e METRICS_ENABLED=true \ - pambrose/prometheus-proxy:1.3.8 + pambrose/prometheus-proxy:1.3.9 ``` ```bash $ docker run --rm -p 8083:8083 -p 8093:8093 \ -e HOSTNAME=${HOSTNAME} \ -e AGENT_CONFIG='https://raw.githubusercontent.com/pambrose/prometheus-proxy/master/examples/simple.conf' \ - pambrose/prometheus-agent:1.3.8 + pambrose/prometheus-agent:1.3.9 ``` Using the config file [simple.conf](https://raw.githubusercontent.com/pambrose/prometheus-proxy/master/examples/simple.conf), @@ -130,7 +129,7 @@ The only required argument is an Agent config value, which should have an `agent |:--------------------|:----------------|:-----------------------|:-------|:---------------------------------------| | -c --config | PROXY_CONFIG | | | Agent config file or url | | -p --port | PROXY_PORT | proxy.http.port | 8080 | Proxy listen port | -| -a --agent_port | AGENT_PORT | proxy.agent.port | 50051 | Grpc listen port | +| -a --agent_port | AGENT_PORT | proxy.agent.port | 50051 | gRPC listen port for Agents | | -r --admin | ADMIN_ENABLED | proxy.admin.enabled | false | Enable admin servlets | | -i --admin_port | ADMIN_PORT | proxy.admin.port | 8092 | Admin servlets port | | -e --metrics | METRICS_ENABLED | proxy.metrics.enabled | false | Enable proxy metrics | diff --git a/bin/docker-agent.sh b/bin/docker-agent.sh index 442ed9fc..7fc7b9c1 100755 --- a/bin/docker-agent.sh +++ b/bin/docker-agent.sh @@ -3,4 +3,4 @@ docker run --rm -p 8083:8083 -p 8093:8093 \ -e HOSTNAME=${HOSTNAME} \ -e AGENT_CONFIG='https://raw.githubusercontent.com/pambrose/prometheus-proxy/master/examples/simple.conf' \ - pambrose/prometheus-agent:1.3.8 \ No newline at end of file + pambrose/prometheus-agent:1.3.9 \ No newline at end of file diff --git a/bin/docker-proxy.sh b/bin/docker-proxy.sh index c610b280..386f8a2f 100755 --- a/bin/docker-proxy.sh +++ b/bin/docker-proxy.sh @@ -3,4 +3,4 @@ docker run --rm -p 8082:8082 -p 8092:8092 -p 50051:50051 -p 8080:8080 \ -e HOSTNAME=${HOSTNAME} \ -e PROXY_CONFIG='https://raw.githubusercontent.com/pambrose/prometheus-proxy/master/examples/simple.conf' \ - pambrose/prometheus-proxy:1.3.8 \ No newline at end of file + pambrose/prometheus-proxy:1.3.9 \ No newline at end of file diff --git a/docs/release.md b/docs/release.md index 819c47eb..30ed63fa 100644 --- a/docs/release.md +++ b/docs/release.md @@ -24,4 +24,4 @@ upload the *target/distro/prometheus-proxy.jar* and *target/distro/prometheus-a 11) Build and push docker images with: `make docker-build docker-push` 12) Update the *prometheus-proxy* and *prometheus-agent* repository descriptions -on [Docker hub](https://hub.docker.com) with the latest `~~~~**_****_**~~~~`version of *README.md*. \ No newline at end of file +on [Docker hub](https://hub.docker.com) with the latest version of *README.md*. \ No newline at end of file diff --git a/etc/compose/proxy.yml b/etc/compose/proxy.yml index 672a957b..60f29c72 100644 --- a/etc/compose/proxy.yml +++ b/etc/compose/proxy.yml @@ -1,6 +1,6 @@ prometheus-proxy: autoredeploy: true - image: 'pambrose/prometheus-proxy:1.3.8' + image: 'pambrose/prometheus-proxy:1.3.9' ports: - '8080:8080' - '8082:8082' diff --git a/pom.xml b/pom.xml index a5d08568..06d2ab7d 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ io.prometheus prometheus-proxy - 1.3.8-SNAPSHOT + 1.3.9-SNAPSHOT 1.3.11 @@ -31,7 +31,7 @@ 1.72 1.3.3 26.0-android - 4.1.0-rc2 + 4.1.0-rc3 1.17.1 1.11.0 @@ -43,7 +43,7 @@ 2.8.0 9.4.12.v20180830 - 5.5.2 + 5.6.0 2.7.13 1.2.3 diff --git a/src/main/java/io/prometheus/Proxy.kt b/src/main/java/io/prometheus/Proxy.kt index 65c04e95..73f636f3 100644 --- a/src/main/java/io/prometheus/Proxy.kt +++ b/src/main/java/io/prometheus/Proxy.kt @@ -42,7 +42,7 @@ import mu.KLogging import kotlin.properties.Delegates class Proxy(options: ProxyOptions, - proxyPort: Int = options.agentPort, + proxyHttpPort: Int = options.proxyHttpPort, inProcessServerName: String = "", testMode: Boolean = false, initBlock: (Proxy.() -> Unit)? = null) : @@ -60,10 +60,10 @@ class Proxy(options: ProxyOptions, val agentContextManager = AgentContextManager() var metrics: ProxyMetrics by Delegates.notNull() - private val httpService = ProxyHttpService(this, proxyPort) + private val httpService = ProxyHttpService(this, proxyHttpPort) private val grpcService = if (inProcessServerName.isEmpty()) - newProxyGrpcService(proxy = this, port = options.agentPort) + newProxyGrpcService(proxy = this, port = options.proxyAgentPort) else newProxyGrpcService(proxy = this, serverName = inProcessServerName) @@ -152,7 +152,7 @@ class Proxy(options: ProxyOptions, override fun toString() = toStringElements { - add("proxyPort", httpService.port) + add("proxyPort", httpService.httpPort) add("adminService", if (isAdminEnabled) adminService else "Disabled") add("metricsService", if (isMetricsEnabled) metricsService else "Disabled") } diff --git a/src/main/java/io/prometheus/package-info.java b/src/main/java/io/prometheus/package-info.java index bd2a887b..7d26a678 100644 --- a/src/main/java/io/prometheus/package-info.java +++ b/src/main/java/io/prometheus/package-info.java @@ -14,7 +14,7 @@ * limitations under the License. */ -@VersionAnnotation(version = "1.3.8", date = "12/08/18") +@VersionAnnotation(version = "1.3.9", date = "12/08/18") package io.prometheus; import io.prometheus.common.VersionAnnotation; \ No newline at end of file diff --git a/src/main/java/io/prometheus/proxy/PathManager.kt b/src/main/java/io/prometheus/proxy/PathManager.kt index a4731a83..ac603489 100644 --- a/src/main/java/io/prometheus/proxy/PathManager.kt +++ b/src/main/java/io/prometheus/proxy/PathManager.kt @@ -17,8 +17,8 @@ package io.prometheus.proxy import com.google.common.collect.Maps -import io.prometheus.Proxy import io.prometheus.grpc.UnregisterPathResponse +import mu.KLogging import java.util.concurrent.ConcurrentMap class PathManager(private val isTestMode: Boolean) { @@ -34,12 +34,11 @@ class PathManager(private val isTestMode: Boolean) { val pathMapSize: Int get() = pathMap.size - fun addPath(path: String, agentContext: AgentContext) { synchronized(pathMap) { pathMap[path] = agentContext if (!isTestMode) - Proxy.logger.info { "Added path /$path for $agentContext" } + logger.info { "Added path /$path for $agentContext" } } } @@ -49,7 +48,7 @@ class PathManager(private val isTestMode: Boolean) { when { agentContext == null -> { val msg = "Unable to remove path /$path - path not found" - Proxy.logger.error { msg } + logger.error { msg } responseBuilder .apply { this.valid = false @@ -58,7 +57,7 @@ class PathManager(private val isTestMode: Boolean) { } agentContext.agentId != agentId -> { val msg = "Unable to remove path /$path - invalid agentId: $agentId (owner is ${agentContext.agentId})" - Proxy.logger.error { msg } + logger.error { msg } responseBuilder .apply { this.valid = false @@ -68,7 +67,7 @@ class PathManager(private val isTestMode: Boolean) { else -> { pathMap.remove(path) if (!isTestMode) - Proxy.logger.info { "Removed path /$path for $agentContext" } + logger.info { "Removed path /$path for $agentContext" } responseBuilder .apply { this.valid = true @@ -81,14 +80,15 @@ class PathManager(private val isTestMode: Boolean) { fun removePathByAgentId(agentId: String?) = if (agentId.isNullOrEmpty()) - Proxy.logger.error { "Missing agentId" } + logger.error { "Missing agentId" } else synchronized(pathMap) { pathMap.forEach { k, v -> if (v.agentId == agentId) - pathMap.remove(k)?.let { Proxy.logger.info { "Removed path /$k for $it" } } - ?: Proxy.logger.error { "Missing path /$k for agentId: $agentId" } + pathMap.remove(k)?.let { logger.info { "Removed path /$k for $it" } } + ?: logger.error { "Missing path /$k for agentId: $agentId" } } } + companion object : KLogging() } \ No newline at end of file diff --git a/src/main/java/io/prometheus/proxy/ProxyHttpService.kt b/src/main/java/io/prometheus/proxy/ProxyHttpService.kt index d8d0eac6..4522065d 100644 --- a/src/main/java/io/prometheus/proxy/ProxyHttpService.kt +++ b/src/main/java/io/prometheus/proxy/ProxyHttpService.kt @@ -18,7 +18,9 @@ package io.prometheus.proxy import brave.Tracing import brave.sparkjava.SparkTracing -import com.google.common.net.HttpHeaders.* +import com.google.common.net.HttpHeaders.ACCEPT +import com.google.common.net.HttpHeaders.ACCEPT_ENCODING +import com.google.common.net.HttpHeaders.CONTENT_ENCODING import com.google.common.util.concurrent.MoreExecutors import io.prometheus.Proxy import io.prometheus.common.sleepForSecs @@ -34,13 +36,13 @@ import spark.Spark import java.net.BindException import kotlin.properties.Delegates -class ProxyHttpService(private val proxy: Proxy, val port: Int) : GenericIdleService() { +class ProxyHttpService(private val proxy: Proxy, val httpPort: Int) : GenericIdleService() { private val configVals = proxy.configVals private var tracing: Tracing by Delegates.notNull() private val httpServer = httpServer { - initExceptionHandler { e -> sparkExceptionHandler(e, port) } - port(port) + initExceptionHandler { e -> sparkExceptionHandler(e, httpPort) } + port(httpPort) threadPool(configVals.http.maxThreads, configVals.http.minThreads, configVals.http.idleTimeoutMillis) @@ -176,7 +178,7 @@ class ProxyHttpService(private val proxy: Proxy, val port: Int) : GenericIdleSer proxy.metrics.scrapeRequests.labels(type).inc() } - override fun toString() = toStringElements { add("port", port) } + override fun toString() = toStringElements { add("port", httpPort) } companion object : KLogging() { fun sparkExceptionHandler(e: Exception, port: Int) { diff --git a/src/main/java/io/prometheus/proxy/ProxyOptions.kt b/src/main/java/io/prometheus/proxy/ProxyOptions.kt index 0ea92c5e..888776ae 100644 --- a/src/main/java/io/prometheus/proxy/ProxyOptions.kt +++ b/src/main/java/io/prometheus/proxy/ProxyOptions.kt @@ -20,17 +20,19 @@ import com.beust.jcommander.Parameter import com.google.common.collect.Iterables import io.prometheus.Proxy import io.prometheus.common.BaseOptions -import io.prometheus.common.EnvVars.* +import io.prometheus.common.EnvVars.AGENT_PORT +import io.prometheus.common.EnvVars.PROXY_CONFIG +import io.prometheus.common.EnvVars.PROXY_PORT class ProxyOptions(argv: Array) : BaseOptions(Proxy::class.java.simpleName, argv, PROXY_CONFIG.name) { constructor(args: List) : this(Iterables.toArray(args, String::class.java)) - @Parameter(names = ["-p", "--port"], description = "Listen port for Prometheus") - var proxyPort: Int = -1 + @Parameter(names = ["-p", "--port"], description = "Proxy listen port") + var proxyHttpPort: Int = -1 private set - @Parameter(names = ["-a", "--agent_port"], description = "Listen port for agents") - var agentPort: Int = -1 + @Parameter(names = ["-a", "--agent_port"], description = "gRPC listen port for Agents") + var proxyAgentPort: Int = -1 private set init { @@ -38,11 +40,11 @@ class ProxyOptions(argv: Array) : BaseOptions(Proxy::class.java.simpleNa } override fun assignConfigVals() { - if (proxyPort == -1) - proxyPort = PROXY_PORT.getEnv(configVals.proxy.http.port) + if (proxyHttpPort == -1) + proxyHttpPort = PROXY_PORT.getEnv(configVals.proxy.http.port) - if (agentPort == -1) - agentPort = AGENT_PORT.getEnv(configVals.proxy.agent.port) + if (proxyAgentPort == -1) + proxyAgentPort = AGENT_PORT.getEnv(configVals.proxy.agent.port) assignAdminEnabled(configVals.proxy.admin.enabled) assignAdminPort(configVals.proxy.admin.port) diff --git a/src/test/java/io/prometheus/OptionsTest.kt b/src/test/java/io/prometheus/OptionsTest.kt index ad2be861..5b69d578 100644 --- a/src/test/java/io/prometheus/OptionsTest.kt +++ b/src/test/java/io/prometheus/OptionsTest.kt @@ -62,8 +62,8 @@ class OptionsTest { fun verifyProxyDefaults() { val options = ProxyOptions(listOf()) - assertThat(options.proxyPort).isEqualTo(8080) - assertThat(options.agentPort).isEqualTo(50051) + assertThat(options.proxyHttpPort).isEqualTo(8080) + assertThat(options.proxyAgentPort).isEqualTo(50051) } @Test diff --git a/src/test/java/io/prometheus/TestUtils.kt b/src/test/java/io/prometheus/TestUtils.kt index d8427d29..9638fce9 100644 --- a/src/test/java/io/prometheus/TestUtils.kt +++ b/src/test/java/io/prometheus/TestUtils.kt @@ -44,7 +44,7 @@ object TestUtils : KLogging() { add("-Dproxy.admin.enabled=$adminEnabled") add("-Dproxy.metrics.enabled=$metricsEnabled") }), - proxyPort = PROXY_PORT, + proxyHttpPort = PROXY_PORT, inProcessServerName = serverName, testMode = true) { startSync() } }