Elukey has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/377753 )

Change subject: [WIP] role::kafka::jumbo::broker: enable Prometheus JMX 
monitoring
......................................................................

[WIP] role::kafka::jumbo::broker: enable Prometheus JMX monitoring

Bug: T167992
Change-Id: Icb26d40cf4f9b6661d3560f314e073df075d3c1f
---
M hieradata/role/common/kafka/jumbo/broker.yaml
M hieradata/role/common/kafka/simple/broker.yaml
A modules/confluent/files/kafka/prometheus_jmx_exporter.yaml
M modules/confluent/manifests/kafka/broker.pp
M modules/confluent/templates/kafka/kafka.default.erb
M modules/profile/manifests/kafka/broker.pp
6 files changed, 67 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/53/377753/1

diff --git a/hieradata/role/common/kafka/jumbo/broker.yaml 
b/hieradata/role/common/kafka/jumbo/broker.yaml
index 2960a76..9e6ea8a 100644
--- a/hieradata/role/common/kafka/jumbo/broker.yaml
+++ b/hieradata/role/common/kafka/jumbo/broker.yaml
@@ -2,6 +2,9 @@
 
 profile::kafka::broker::kafka_cluster_name: jumbo
 
+# Enable the Prometheus JMX Exporter
+profile::kafka::broker::jmx_exporter_enabled: true
+
 profile::kafka::broker::log_dirs: [/srv/kafka/data]
 profile::kafka::broker::plaintext: true
 # TODO: does not yet work.
diff --git a/hieradata/role/common/kafka/simple/broker.yaml 
b/hieradata/role/common/kafka/simple/broker.yaml
index 0ac2c22..a41c40a 100644
--- a/hieradata/role/common/kafka/simple/broker.yaml
+++ b/hieradata/role/common/kafka/simple/broker.yaml
@@ -1,5 +1,6 @@
 kafka_cluster_name: simple
 
+profile::kafka::broker::jmx_exporter_enabled: false
 profile::kafka::broker::log_dirs: [/srv/kafka/data]
 profile::kafka::broker::plaintext: true
 profile::kafka::broker::tls_secrets_path: false
diff --git a/modules/confluent/files/kafka/prometheus_jmx_exporter.yaml 
b/modules/confluent/files/kafka/prometheus_jmx_exporter.yaml
new file mode 100644
index 0000000..1e927ac
--- /dev/null
+++ b/modules/confluent/files/kafka/prometheus_jmx_exporter.yaml
@@ -0,0 +1,14 @@
+---
+lowercaseOutputLabelNames: true
+lowercaseOutputName: true
+# Examples from Cassandra:
+# rules:
+#   - pattern: org.apache.cassandra.metrics<type=(Connection|Streaming), 
scope=(\S*), name=(\S*)><>(Count|Value)
+#     name: cassandra_$1_$3
+#     labels:
+#       address: "$2"
+#   - pattern: org.apache.cassandra.metrics<type=(\S*)(?:, 
((?!scope)\S*)=(\S*))?(?:, scope=(\S*))?, name=(\S*)><>(Count|Value)
+#     name: cassandra_$1_$5
+#     labels:
+#       "$1": "$4"
+#       "$2": "$3"
diff --git a/modules/confluent/manifests/kafka/broker.pp 
b/modules/confluent/manifests/kafka/broker.pp
index 3bb4935..9b1019f 100644
--- a/modules/confluent/manifests/kafka/broker.pp
+++ b/modules/confluent/manifests/kafka/broker.pp
@@ -206,6 +206,14 @@
 #   The maximum message size allowed.
 #   Default: 1048576
 #
+# [*jmx_exporter_enabled*]
+#   Enable the Prometheus Jmx exporter.
+#   Default: false
+#
+# [*jmx_exporter_jar_version*]
+#   Prometheus Jmx exporter version to use.
+#   Default: 0.8-20170117.190412-1
+#
 class confluent::kafka::broker(
     $enabled                             = true,
     $brokers                             = {
@@ -279,6 +287,9 @@
     $log4j_properties_template           = 
'confluent/kafka/log4j.properties.erb',
 
     $message_max_bytes                   = 1048576,
+
+    $jmx_exporter_enabled                = false,
+    $jmx_exporter_jar_version            = '0.8-20170117.190412-1',
 ) {
     # confluent::kafka::client installs the kafka package
     # and a handy wrapper script.
@@ -337,6 +348,23 @@
         content => template($server_properties_template),
     }
 
+    if $jmx_exporter_enabled {
+        # Allow the host to be deployable
+        scap::target { 'prometheus/jmx_exporter':
+            deploy_user => 'deploy-service',
+            manage_user => true,
+        }
+        # Create the Prometheus JMX Exporter configuration
+        file { '/etc/kafka/prometheus_jmx_exporter.yaml':
+            ensure  => present,
+            source  => 
'puppet:///modules/confluent/kafka/prometheus_jmx_exporter.yaml',
+            owner   => 'kafka',
+            group   => 'kafka',
+            mode    => '0400',
+            require => Package[$confluent::kafka::client::package],
+        }
+    }
+
     # log4j configuration for Kafka daemon
     # process logs in /var/log/kafka.
     file { '/etc/kafka/log4j.properties':
diff --git a/modules/confluent/templates/kafka/kafka.default.erb 
b/modules/confluent/templates/kafka/kafka.default.erb
index a2dcdbe..e8f55ba 100644
--- a/modules/confluent/templates/kafka/kafka.default.erb
+++ b/modules/confluent/templates/kafka/kafka.default.erb
@@ -25,6 +25,10 @@
 JMX_PORT=<%= @jmx_port %>
 #KAFKA_JMX_OPTS=${KAFKA_JMX_OPTS:="-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false"}
 
+<% if @jmx_exporter_enabled -%>
+JVM_OPTS="$JVM_OPTS 
-javaagent:/srv/deployment/prometheus/jmx_exporter/lib/jmx_prometheus_javaagent-<%=
 @jmx_exporter_jar_version %>.jar=<%= @ipaddress 
%>:7800:/etc/kafka/prometheus_jmx_exporter.yaml"
+<% end -%>
+
 <% if @jvm_performance_opts -%>
 KAFKA_JVM_PERFORMANCE_OPTS="<%= @jvm_performance_opts %>"
 <% else -%>
diff --git a/modules/profile/manifests/kafka/broker.pp 
b/modules/profile/manifests/kafka/broker.pp
index 4d4b183..42ec63c 100644
--- a/modules/profile/manifests/kafka/broker.pp
+++ b/modules/profile/manifests/kafka/broker.pp
@@ -65,6 +65,10 @@
 #   than 0.10.2, the consumers' fetch size must also be increased
 #   so that the they can fetch record batches this large.
 #
+# [*prometheus_jmx_exporter_enabled*]
+#   Enable the prometheus jmx exporter.
+#
+#
 class profile::kafka::broker(
     $kafka_cluster_name                = 
hiera('profile::kafka::broker::kafka_cluster_name'),
     $statsd                            = hiera('statsd'),
@@ -83,7 +87,8 @@
     $replica_maxlag_warning            = 
hiera('profile::kafka::broker::replica_maxlag_warning'),
     $replica_maxlag_critical           = 
hiera('profile::kafka::broker::replica_maxlag_critical'),
     # This is set via top level hiera variable so it can be synchronized 
between roles and clients.
-    $message_max_bytes                 = hiera('kafka_message_max_bytes')
+    $message_max_bytes                 = hiera('kafka_message_max_bytes'),
+    $jmx_exporter_enabled              = 
hiera('profile::kafka::broker::jmx_exporter_enabled'),
 ) {
     # TODO: WIP
     $tls_secrets_path = undef
@@ -180,6 +185,15 @@
         java_home     => '/usr/lib/jvm/java-8-openjdk-amd64',
     }
 
+    if $jmx_exporter_enabled {
+        # Allow automatic generation of config on the
+        # Prometheus master
+        prometheus::jmx_exporter_instance { $::hostname:
+            address => $::ipaddress,
+            port    => 7800,
+        }
+    }
+
     class { '::confluent::kafka::broker':
         log_dirs                         => $log_dirs,
         brokers                          => $config['brokers']['hash'],
@@ -195,7 +209,6 @@
         # https://kafka.apache.org/documentation/#java
         # Note that MetaspaceSize is a Java 8 setting.
         jvm_performance_opts             => '-server -XX:MetaspaceSize=96m 
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 
-XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 
-XX:MaxMetaspaceFreeRatio=80',
-
         listeners                        => $listeners,
 
         security_inter_broker_protocol   => $security_inter_broker_protocol,
@@ -209,6 +222,8 @@
         auto_leader_rebalance_enable     => $auto_leader_rebalance_enable,
         num_replica_fetchers             => $num_replica_fetchers,
         message_max_bytes                => $message_max_bytes,
+
+        jmx_exporter_enabled             => $jmx_exporter_enabled,
     }
 
     class { '::confluent::kafka::broker::jmxtrans':

-- 
To view, visit https://gerrit.wikimedia.org/r/377753
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb26d40cf4f9b6661d3560f314e073df075d3c1f
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Elukey <ltosc...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to