Skip to content

Commit

Permalink
Merge 1.3.9
Browse files Browse the repository at this point in the history
* Update metrics and brave jars
* Fix proxy http port assignment
  • Loading branch information
pambrose authored Jan 4, 2019
1 parent 6ae5f91 commit 39a4c6c
Show file tree
Hide file tree
Showing 14 changed files with 51 additions and 48 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION=1.3.8
VERSION=1.3.9

default: build

Expand Down
17 changes: 8 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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:
Expand All @@ -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),
Expand All @@ -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 |
Expand Down
2 changes: 1 addition & 1 deletion bin/docker-agent.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
pambrose/prometheus-agent:1.3.9
2 changes: 1 addition & 1 deletion bin/docker-proxy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
pambrose/prometheus-proxy:1.3.9
2 changes: 1 addition & 1 deletion docs/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -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*.
on [Docker hub](https://hub.docker.com) with the latest version of *README.md*.
2 changes: 1 addition & 1 deletion etc/compose/proxy.yml
Original file line number Diff line number Diff line change
@@ -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'
Expand Down
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

<groupId>io.prometheus</groupId>
<artifactId>prometheus-proxy</artifactId>
<version>1.3.8-SNAPSHOT</version>
<version>1.3.9-SNAPSHOT</version>

<properties>
<kotlin.version>1.3.11</kotlin.version>
Expand All @@ -31,7 +31,7 @@
<jcommander.version>1.72</jcommander.version>
<config.version>1.3.3</config.version>
<guava.version>26.0-android</guava.version>
<metrics.version>4.1.0-rc2</metrics.version>
<metrics.version>4.1.0-rc3</metrics.version>

<grpc.version>1.17.1</grpc.version>
<grpc.plugin.version>1.11.0</grpc.plugin.version>
Expand All @@ -43,7 +43,7 @@
<spark.version>2.8.0</spark.version>
<jetty.version>9.4.12.v20180830</jetty.version>

<brave.version>5.5.2</brave.version>
<brave.version>5.6.0</brave.version>
<zipkin-sender.version>2.7.13</zipkin-sender.version>

<logback.version>1.2.3</logback.version>
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/io/prometheus/Proxy.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) :
Expand All @@ -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)

Expand Down Expand Up @@ -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")
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/prometheus/package-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
18 changes: 9 additions & 9 deletions src/main/java/io/prometheus/proxy/PathManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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" }
}
}

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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()
}
12 changes: 7 additions & 5 deletions src/main/java/io/prometheus/proxy/ProxyHttpService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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) {
Expand Down
20 changes: 11 additions & 9 deletions src/main/java/io/prometheus/proxy/ProxyOptions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,31 @@ 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<String>) : BaseOptions(Proxy::class.java.simpleName, argv, PROXY_CONFIG.name) {

constructor(args: List<String>) : this(Iterables.toArray<String>(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 {
parseOptions()
}

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)
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/io/prometheus/OptionsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/io/prometheus/TestUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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() }
}
Expand Down

0 comments on commit 39a4c6c

Please sign in to comment.