You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by as...@apache.org on 2020/01/22 15:59:09 UTC
[camel-k] 13/13: chore(trait): Use container args to configure
Prometheus agent
This is an automated email from the ASF dual-hosted git repository.
astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 4c5c9633c39083de8b5dec9dd291340a69d12a9d
Author: Antonin Stefanutti <an...@stefanutti.fr>
AuthorDate: Wed Jan 22 15:53:55 2020 +0100
chore(trait): Use container args to configure Prometheus agent
---
deploy/prometheus-jmx-exporter.yaml | 586 +++++++++++++++++++++
deploy/resources.go | 673 +++++++++++++++++++++++--
docs/modules/ROOT/pages/traits/prometheus.adoc | 9 +-
pkg/apis/camel/v1/integration_types_support.go | 20 +
pkg/trait/prometheus.go | 83 ++-
pkg/trait/prometheus_test.go | 26 +-
6 files changed, 1312 insertions(+), 85 deletions(-)
diff --git a/deploy/prometheus-jmx-exporter.yaml b/deploy/prometheus-jmx-exporter.yaml
new file mode 100644
index 0000000..aff0fc9
--- /dev/null
+++ b/deploy/prometheus-jmx-exporter.yaml
@@ -0,0 +1,586 @@
+startDelaySecs: 5
+ssl: false
+blacklistObjectNames: ["java.lang:*"]
+rules:
+ # Context level
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ type: context
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ type: context
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=consumers, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+
+
+ # Route level
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+
+ # Processor level
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+
+ # Consumers
+ - pattern: 'org.apache.camel<context=([^,]+), type=consumers, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ consumer: $2
+ type: consumers
+ type: GAUGE
+
+ # Services
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MaxDuration'
+ name: org.apache.camel.MaxDuration
+ help: Maximum Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MeanDuration'
+ name: org.apache.camel.MeanDuration
+ help: Mean Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MinDuration'
+ name: org.apache.camel.MinDuration
+ help: Minimum Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>TotalDuration'
+ name: org.apache.camel.TotalDuration
+ help: Total Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>ThreadsBlocked'
+ name: org.apache.camel.ThreadsBlocked
+ help: Threads Blocked
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>ThreadsInterrupted'
+ name: org.apache.camel.ThreadsInterrupted
+ help: Threads Interrupted
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumLogicalRuntimeFaults'
+ name: org.apache.cxf.NumLogicalRuntimeFaults
+ help: Number of logical runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumLogicalRuntimeFaults'
+ name: org.apache.cxf.NumLogicalRuntimeFaults
+ help: Number of logical runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>AvgResponseTime'
+ name: org.apache.cxf.AvgResponseTime
+ help: Average Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>AvgResponseTime'
+ name: org.apache.cxf.AvgResponseTime
+ help: Average Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumInvocations'
+ name: org.apache.cxf.NumInvocations
+ help: Number of invocations
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumInvocations'
+ name: org.apache.cxf.NumInvocations
+ help: Number of invocations
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MaxResponseTime'
+ name: org.apache.cxf.MaxResponseTime
+ help: Maximum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>MaxResponseTime'
+ name: org.apache.cxf.MaxResponseTime
+ help: Maximum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MinResponseTime'
+ name: org.apache.cxf.MinResponseTime
+ help: Minimum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MinResponseTime'
+ name: org.apache.cxf.MinResponseTime
+ help: Minimum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>TotalHandlingTime'
+ name: org.apache.cxf.TotalHandlingTime
+ help: Total Handling Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>TotalHandlingTime'
+ name: org.apache.cxf.TotalHandlingTime
+ help: Total Handling Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumRuntimeFaults'
+ name: org.apache.cxf.NumRuntimeFaults
+ help: Number of runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumRuntimeFaults'
+ name: org.apache.cxf.NumRuntimeFaults
+ help: Number of runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumUnCheckedApplicationFaults'
+ name: org.apache.cxf.NumUnCheckedApplicationFaults
+ help: Number of unchecked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumUnCheckedApplicationFaults'
+ name: org.apache.cxf.NumUnCheckedApplicationFaults
+ help: Number of unchecked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumCheckedApplicationFaults'
+ name: org.apache.cxf.NumCheckedApplicationFaults
+ help: Number of checked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumCheckedApplicationFaults'
+ name: org.apache.cxf.NumCheckedApplicationFaults
+ help: Number of checked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
\ No newline at end of file
diff --git a/deploy/resources.go b/deploy/resources.go
index 60513dc..04dc010 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -19,8 +19,6 @@ limitations under the License.
package deploy
-var Resources map[string]string
-
func init() {
Resources = make(map[string]string)
@@ -7971,6 +7969,46 @@ spec:
- org.apache.camel.dataformat.zipfile.ZipFileDataFormat
`
+ Resources["cr-example.yaml"] =
+ `
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+apiVersion: camel.apache.org/v1
+kind: Integration
+metadata:
+ name: example
+spec:
+ sources:
+ - content: |-
+ // This is Camel K Groovy example route
+
+ rnd = new Random()
+
+ from('timer:groovy?period=1s')
+ .routeId('groovy')
+ .setBody()
+ .constant('Hello Camel K!')
+ .process {
+ it.in.headers['RandomValue'] = rnd.nextInt()
+ }
+ .to('log:info?showHeaders=true')
+ name: routes.groovy
+`
Resources["crd-build.yaml"] =
`
# ---------------------------------------------------------------------------
@@ -8272,46 +8310,6 @@ spec:
JSONPath: .status.replicas
`
- Resources["cr-example.yaml"] =
- `
-# ---------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1
-kind: Integration
-metadata:
- name: example
-spec:
- sources:
- - content: |-
- // This is Camel K Groovy example route
-
- rnd = new Random()
-
- from('timer:groovy?period=1s')
- .routeId('groovy')
- .setBody()
- .constant('Hello Camel K!')
- .process {
- it.in.headers['RandomValue'] = rnd.nextInt()
- }
- .to('log:info?showHeaders=true')
- name: routes.groovy
-`
Resources["operator-deployment.yaml"] =
`
# ---------------------------------------------------------------------------
@@ -9338,6 +9336,595 @@ spec:
- mvn:org.apache.camel.k/camel-k-runtime-main
- mvn:org.apache.camel.k/camel-k-loader-yaml
`
+ Resources["prometheus-jmx-exporter.yaml"] =
+ `
+startDelaySecs: 5
+ssl: false
+blacklistObjectNames: ["java.lang:*"]
+rules:
+ # Context level
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ type: context
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ type: context
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ type: context
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=context, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=consumers, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ type: context
+ type: GAUGE
+
+
+ # Route level
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=routes, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ route: $2
+ type: routes
+ type: GAUGE
+
+ # Processor level
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesCompleted'
+ name: org.apache.camel.ExchangesCompleted
+ help: Exchanges Completed
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesFailed'
+ name: org.apache.camel.ExchangesFailed
+ help: Exchanges Failed
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesInflight'
+ name: org.apache.camel.ExchangesInflight
+ help: Exchanges Inflight
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExchangesTotal'
+ name: org.apache.camel.ExchangesTotal
+ help: Exchanges Total
+ type: COUNTER
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>FailuresHandled'
+ name: org.apache.camel.FailuresHandled
+ help: Failures Handled
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>ExternalRedeliveries'
+ name: org.apache.camel.ExternalRedeliveries
+ help: External Redeliveries
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MaxProcessingTime'
+ name: org.apache.camel.MaxProcessingTime
+ help: Maximum Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MeanProcessingTime'
+ name: org.apache.camel.MeanProcessingTime
+ help: Mean Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>MinProcessingTime'
+ name: org.apache.camel.MinProcessingTime
+ help: Minimum Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>LastProcessingTime'
+ name: org.apache.camel.LastProcessingTime
+ help: Last Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>DeltaProcessingTime'
+ name: org.apache.camel.DeltaProcessingTime
+ help: Delta Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>Redeliveries'
+ name: org.apache.camel.Redeliveries
+ help: Redeliveries
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>TotalProcessingTime'
+ name: org.apache.camel.TotalProcessingTime
+ help: Total Processing Time
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=processors, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ processor: $2
+ type: processors
+ type: COUNTER
+
+ # Consumers
+ - pattern: 'org.apache.camel<context=([^,]+), type=consumers, name="([^"]+)"><>InflightExchanges'
+ name: org.apache.camel.InflightExchanges
+ help: Inflight Exchanges
+ labels:
+ context: $1
+ consumer: $2
+ type: consumers
+ type: GAUGE
+
+ # Services
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MaxDuration'
+ name: org.apache.camel.MaxDuration
+ help: Maximum Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MeanDuration'
+ name: org.apache.camel.MeanDuration
+ help: Mean Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>MinDuration'
+ name: org.apache.camel.MinDuration
+ help: Minimum Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>TotalDuration'
+ name: org.apache.camel.TotalDuration
+ help: Total Duration
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>ThreadsBlocked'
+ name: org.apache.camel.ThreadsBlocked
+ help: Threads Blocked
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.camel<context=([^,]+), type=services, name="([^"]+)"><>ThreadsInterrupted'
+ name: org.apache.camel.ThreadsInterrupted
+ help: Threads Interrupted
+ labels:
+ context: $1
+ service: $2
+ type: services
+ type: GAUGE
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumLogicalRuntimeFaults'
+ name: org.apache.cxf.NumLogicalRuntimeFaults
+ help: Number of logical runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumLogicalRuntimeFaults'
+ name: org.apache.cxf.NumLogicalRuntimeFaults
+ help: Number of logical runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>AvgResponseTime'
+ name: org.apache.cxf.AvgResponseTime
+ help: Average Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>AvgResponseTime'
+ name: org.apache.cxf.AvgResponseTime
+ help: Average Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumInvocations'
+ name: org.apache.cxf.NumInvocations
+ help: Number of invocations
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumInvocations'
+ name: org.apache.cxf.NumInvocations
+ help: Number of invocations
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MaxResponseTime'
+ name: org.apache.cxf.MaxResponseTime
+ help: Maximum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>MaxResponseTime'
+ name: org.apache.cxf.MaxResponseTime
+ help: Maximum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MinResponseTime'
+ name: org.apache.cxf.MinResponseTime
+ help: Minimum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>MinResponseTime'
+ name: org.apache.cxf.MinResponseTime
+ help: Minimum Response Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>TotalHandlingTime'
+ name: org.apache.cxf.TotalHandlingTime
+ help: Total Handling Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>TotalHandlingTime'
+ name: org.apache.cxf.TotalHandlingTime
+ help: Total Handling Time
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumRuntimeFaults'
+ name: org.apache.cxf.NumRuntimeFaults
+ help: Number of runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumRuntimeFaults'
+ name: org.apache.cxf.NumRuntimeFaults
+ help: Number of runtime faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumUnCheckedApplicationFaults'
+ name: org.apache.cxf.NumUnCheckedApplicationFaults
+ help: Number of unchecked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumUnCheckedApplicationFaults'
+ name: org.apache.cxf.NumUnCheckedApplicationFaults
+ help: Number of unchecked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+), operation=([^,]+)><>NumCheckedApplicationFaults'
+ name: org.apache.cxf.NumCheckedApplicationFaults
+ help: Number of checked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+ operation: $5
+ - pattern: 'org.apache.cxf<bus.id=([^,]+), type=([^,]+), service=([^,]+), port=([^,]+)><>NumCheckedApplicationFaults'
+ name: org.apache.cxf.NumCheckedApplicationFaults
+ help: Number of checked application faults
+ type: GAUGE
+ labels:
+ bus.id: $1
+ type: $2
+ service: $3
+ port: $4
+`
Resources["user-cluster-role.yaml"] =
`
# ---------------------------------------------------------------------------
@@ -9374,3 +9961,5 @@ rules:
`
}
+
+var Resources map[string]string
diff --git a/docs/modules/ROOT/pages/traits/prometheus.adoc b/docs/modules/ROOT/pages/traits/prometheus.adoc
index f358769..ea5dfaf 100755
--- a/docs/modules/ROOT/pages/traits/prometheus.adoc
+++ b/docs/modules/ROOT/pages/traits/prometheus.adoc
@@ -1,12 +1,11 @@
= Prometheus Trait
// Start of autogenerated code - DO NOT EDIT! (description)
-The Prometheus trait exposes the integration with a `Service` and a `ServiceMonitor` resources
-so that the Prometheus endpoint can be scraped.
+The Prometheus trait configures the Prometheus JMX exporter and exposes the integration with a `Service`
+and a `ServiceMonitor` resources so that the Prometheus endpoint can be scraped.
-WARNING: Creating the `ServiceMonitor` resource requires the https://github.com/coreos/prometheus-operator[Prometheus Operator]
-custom resource definition to be installed. You can set `service-monitor` to `false` for the Prometheus trait to work without
-the Prometheus operator.
+WARNING: The creation of the `ServiceMonitor` resource requires the https://github.com/coreos/prometheus-operator[Prometheus Operator] custom resource definition to be installed.
+You can set `service-monitor` to `false` for the Prometheus trait to work without the Prometheus operator.
It's disabled by default.
diff --git a/pkg/apis/camel/v1/integration_types_support.go b/pkg/apis/camel/v1/integration_types_support.go
index 2b2e61f..21b8c0e 100644
--- a/pkg/apis/camel/v1/integration_types_support.go
+++ b/pkg/apis/camel/v1/integration_types_support.go
@@ -108,6 +108,26 @@ func (in *IntegrationSpec) AddDependency(dependency string) {
in.Dependencies = append(in.Dependencies, newDep)
}
+// AddOrReplaceGeneratedResources --
+func (in *IntegrationStatus) AddOrReplaceGeneratedResources(resources ...ResourceSpec) {
+ newResources := make([]ResourceSpec, 0)
+ for _, resource := range resources {
+ replaced := false
+ for i, r := range in.GeneratedResources {
+ if r.Name == resource.Name {
+ in.GeneratedResources[i] = resource
+ replaced = true
+ break
+ }
+ }
+ if !replaced {
+ newResources = append(newResources, resource)
+ }
+ }
+
+ in.GeneratedResources = append(in.GeneratedResources, newResources...)
+}
+
// Configurations --
func (in *IntegrationSpec) Configurations() []ConfigurationSpec {
if in == nil {
diff --git a/pkg/trait/prometheus.go b/pkg/trait/prometheus.go
index f489874..874829e 100644
--- a/pkg/trait/prometheus.go
+++ b/pkg/trait/prometheus.go
@@ -19,24 +19,27 @@ package trait
import (
"fmt"
+ "path"
"strconv"
-
- v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
- "github.com/apache/camel-k/pkg/util/envvar"
+ "strings"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
+
+ "github.com/apache/camel-k/deploy"
+ v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+ "github.com/apache/camel-k/pkg/util"
)
-// The Prometheus trait exposes the integration with a `Service` and a `ServiceMonitor` resources
-// so that the Prometheus endpoint can be scraped.
+// The Prometheus trait configures the Prometheus JMX exporter and exposes the integration with a `Service`
+// and a `ServiceMonitor` resources so that the Prometheus endpoint can be scraped.
//
-// WARNING: Creating the `ServiceMonitor` resource requires the https://github.com/coreos/prometheus-operator[Prometheus Operator]
-// custom resource definition to be installed. You can set `service-monitor` to `false` for the Prometheus trait to work without
-// the Prometheus operator.
+// WARNING: The creation of the `ServiceMonitor` resource requires the https://github.com/coreos/prometheus-operator[Prometheus Operator]
+//custom resource definition to be installed.
+// You can set `service-monitor` to `false` for the Prometheus trait to work without the Prometheus operator.
//
// It's disabled by default.
//
@@ -51,10 +54,12 @@ type prometheusTrait struct {
ServiceMonitorLabels string `property:"service-monitor-labels"`
}
-const prometheusPortName = "prometheus"
+const (
+ prometheusJmxExporterConfigFileName = "prometheus-jmx-exporter.yaml"
+ prometheusJmxExporterConfigMountPath = "/etc/prometheus"
+ prometheusPortName = "prometheus"
+)
-// The Prometheus trait must be executed prior to the deployment trait
-// as it mutates environment variables
func newPrometheusTrait() *prometheusTrait {
return &prometheusTrait{
BaseTrait: newBaseTrait("prometheus"),
@@ -64,10 +69,35 @@ func newPrometheusTrait() *prometheusTrait {
}
func (t *prometheusTrait) Configure(e *Environment) (bool, error) {
- return e.IntegrationInPhase(v1.IntegrationPhaseDeploying, v1.IntegrationPhaseRunning), nil
+ return t.Enabled != nil && *t.Enabled && e.IntegrationInPhase(
+ v1.IntegrationPhaseInitialization,
+ v1.IntegrationPhaseDeploying,
+ v1.IntegrationPhaseRunning,
+ ), nil
}
func (t *prometheusTrait) Apply(e *Environment) (err error) {
+ if e.IntegrationInPhase(v1.IntegrationPhaseInitialization) {
+ // Add the Camel management and Prometheus agent dependencies
+ util.StringSliceUniqueAdd(&e.Integration.Status.Dependencies, "mvn:org.apache.camel/camel-management")
+ // TODO: We may want to make the Prometheus version configurable
+ util.StringSliceUniqueAdd(&e.Integration.Status.Dependencies, "mvn:io.prometheus.jmx/jmx_prometheus_javaagent:0.3.1")
+
+ // Add the default Prometheus JMX exporter configuration
+ // TODO: Support user-provided configuration
+ configMap := t.getJmxExporterConfigMap(e)
+ e.Resources.Add(configMap)
+ e.Integration.Status.AddOrReplaceGeneratedResources(v1.ResourceSpec{
+ Type: v1.ResourceTypeData,
+ DataSpec: v1.DataSpec{
+ Name: prometheusJmxExporterConfigFileName,
+ ContentRef: configMap.Name,
+ },
+ MountPath: prometheusJmxExporterConfigMountPath,
+ })
+ return nil
+ }
+
container := e.getIntegrationContainer()
if container == nil {
e.Integration.Status.SetCondition(
@@ -79,13 +109,6 @@ func (t *prometheusTrait) Apply(e *Environment) (err error) {
return nil
}
- if t.Enabled == nil || !*t.Enabled {
- // Deactivate the Prometheus Java agent
- // Note: the AB_PROMETHEUS_OFF environment variable acts as an option flag
- envvar.SetVal(&container.Env, "AB_PROMETHEUS_OFF", "true")
- return nil
- }
-
condition := v1.IntegrationCondition{
Type: v1.IntegrationConditionPrometheusAvailable,
Status: corev1.ConditionTrue,
@@ -93,7 +116,8 @@ func (t *prometheusTrait) Apply(e *Environment) (err error) {
}
// Configure the Prometheus Java agent
- envvar.SetVal(&container.Env, "AB_PROMETHEUS_PORT", strconv.Itoa(t.Port))
+ options := []string{strconv.Itoa(t.Port), path.Join(prometheusJmxExporterConfigMountPath, prometheusJmxExporterConfigFileName)}
+ container.Args = append(container.Args, "-javaagent:dependencies/io.prometheus.jmx.jmx_prometheus_javaagent-0.3.1.jar="+strings.Join(options, ":"))
// Add the container port
containerPort := t.getContainerPort()
@@ -191,3 +215,22 @@ func (t *prometheusTrait) getServiceMonitorFor(e *Environment) (*monitoringv1.Se
}
return &smt, nil
}
+
+func (t *prometheusTrait) getJmxExporterConfigMap(e *Environment) *corev1.ConfigMap {
+ return &corev1.ConfigMap{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "ConfigMap",
+ APIVersion: "v1",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: e.Integration.Name + "-prometheus",
+ Namespace: e.Integration.Namespace,
+ Labels: map[string]string{
+ "camel.apache.org/integration": e.Integration.Name,
+ },
+ },
+ Data: map[string]string{
+ "content": deploy.Resources["prometheus-jmx-exporter.yaml"],
+ },
+ }
+}
diff --git a/pkg/trait/prometheus_test.go b/pkg/trait/prometheus_test.go
index f5f7ab0..144feb7 100644
--- a/pkg/trait/prometheus_test.go
+++ b/pkg/trait/prometheus_test.go
@@ -21,10 +21,6 @@ import (
"context"
"testing"
- v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
- "github.com/apache/camel-k/pkg/util/kubernetes"
- "github.com/apache/camel-k/pkg/util/test"
-
"github.com/stretchr/testify/assert"
monitoringv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
@@ -32,6 +28,9 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+ v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+ "github.com/apache/camel-k/pkg/util/kubernetes"
)
func TestConfigurePrometheusTraitInRightPhaseDoesSucceed(t *testing.T) {
@@ -62,7 +61,11 @@ func TestApplyNominalPrometheusTraitDoesSucceed(t *testing.T) {
container := environment.Resources.GetContainerByName(defaultContainerName)
assert.NotNil(t, container)
- test.EnvVarHasValue(t, container.Env, "AB_PROMETHEUS_PORT", "9779")
+
+ assert.Equal(t, container.Args, []string{
+ "-javaagent:dependencies/io.prometheus.jmx.jmx_prometheus_javaagent-0.3.1.jar=9779:/etc/prometheus/prometheus-jmx-exporter.yaml",
+ })
+
ports := container.Ports
assert.Len(t, ports, 1)
assert.Equal(t, "prometheus", ports[0].Name)
@@ -147,19 +150,6 @@ func TestApplyPrometheusTraitWithServiceDoesNotSucceed(t *testing.T) {
assert.Equal(t, corev1.ConditionFalse, condition.Status)
}
-func TestApplyDisabledPrometheusTraitShouldDeactivateJavaAgent(t *testing.T) {
- trait, environment := createNominalPrometheusTest()
- trait.Enabled = new(bool)
-
- err := trait.Apply(environment)
-
- assert.Nil(t, err)
-
- container := environment.Resources.GetContainerByName(defaultContainerName)
- assert.NotNil(t, container)
- test.EnvVarHasValue(t, container.Env, "AB_PROMETHEUS_OFF", "true")
-}
-
func TestPrometheusTraitGetServiceMonitor(t *testing.T) {
trait, environment := createNominalPrometheusTest()