# 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.

# Poll collectors every thirty seconds
*.period=30

#
# MetricSink configuration
# 
# Uncomment a sink (and configuration) to enable it. By default,
# no sinks are enabled.
#

#
# Configure file logging
#

# File sink for all metrics
# accumulo.sink.file-all.class=org.apache.hadoop.metrics2.sink.FileSink
# accumulo.sink.file-all.filename=all.metrics

# File sink for tserver metrics
# accumulo.sink.file-tserver.class=org.apache.hadoop.metrics2.sink.FileSink
# accumulo.sink.file-tserver.context=tserver
# accumulo.sink.file-tserver.filename=tserver.metrics

# File sink for master metrics
# accumulo.sink.file-master.class=org.apache.hadoop.metrics2.sink.FileSink
# accumulo.sink.file-master.context=master
# accumulo.sink.file-master.filename=master.metrics

# File sink for thrift server metrics
# accumulo.sink.file-thrift.class=org.apache.hadoop.metrics2.sink.FileSink
# accumulo.sink.file-thrift.context=thrift
# accumulo.sink.file-thrift.filename=thrift.metrics

#
# Configure Graphite
#

# Configure all sources to be written to a Graphite instance
# accumulo.sink.graphite.class=org.apache.hadoop.metrics2.sink.GraphiteSink
# accumulo.sink.graphite.server_host=localhost
# accumulo.sink.graphite.server_port=2003

#
# Configure Ganglia
#

# for Ganglia 3.0 support
# accumulo.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink30

# for Ganglia 3.1 support
# accumulo.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31

# accumulo.sink.ganglia.period=10

# default for supportsparse is false
# accumulo.sink.ganglia.supportsparse=true

# accumulo.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both
# accumulo.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40

# Tag values to use for the ganglia prefix. If not defined no tags are used.
# If '*' all tags are used. If specifying multiple tags separate them with
# commas. Note that the last segment of the property name is the context name.
#
# accumulo.sink.ganglia.tagsForPrefix.jvm=ProcesName
# accumulo.sink.ganglia.tagsForPrefix.tserver=
# accumulo.sink.ganglia.tagsForPrefix.master=
# accumulo.sink.ganglia.tagsForPrefix.thrift=

# Ganglia host(s)
# accumulo.sink.ganglia.servers=yourgangliahost_1:8649,yourgangliahost_2:8649
