blob: 1bb2a1c10e44b4f75f60d30ebfaf42bca1f4628a [file] [log] [blame]
/*
* 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
*
* https://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.
*/
package org.apache.accumulo.core.metrics;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.micrometer.core.instrument.MeterRegistry;
/**
* Prior to 2.1.0 Accumulo used the <a href=
* "https://hadoop.apache.org/docs/current/api/org/apache/hadoop/metrics2/package-summary.html">Hadoop
* Metrics2</a> framework. In 2.1.0 Accumulo migrated away from the Metrics2 framework to
* <a href="https://micrometer.io/">Micrometer</a>. Micrometer suggests using a particular
* <a href="https://micrometer.io/docs/concepts#_naming_meters">naming convention</a> for the
* metrics. The table below contains a mapping of the old to new metric names.
* <table border="1">
* <caption>Summary of Metric Changes</caption> <!-- fate -->
* <tr>
* <th>Old Name</th>
* <th>Hadoop Metrics2 Type</th>
* <th>New Name</th>
* <th>Micrometer Type</th>
* <th>Notes</th>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_COMPACTOR_MAJC_STUCK}</td>
* <td>LongTaskTimer</td>
* <td></td>
* </tr>
* <tr>
* <td>currentFateOps</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TOTAL_IN_PROGRESS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>FateTxOpType_{name}</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TYPE_IN_PROGRESS}</td>
* <td>Gauge</td>
* <td>Previously there was a metric per operation type with the count of in-progress transactions
* of that type. Now there is one metric and the type is in the tag op.type</td>
* </tr>
* <tr>
* <td>totalFateOps</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_OPS_ACTIVITY}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>totalZkConnErrors</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_ERRORS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>FateTxState_NEW</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=new</td>
* </tr>
* <tr>
* <td>FateTxState_IN_PROGRESS</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=in.progress</td>
* </tr>
* <tr>
* <td>FateTxState_FAILED_IN_PROGRESS</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=failed.in.progress</td>
* </tr>
* <tr>
* <td>FateTxState_FAILED</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=failed</td>
* </tr>
* <tr>
* <td>FateTxState_SUCCESSFUL</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=successful</td>
* </tr>
* <tr>
* <td>FateTxState_UNKNOWN</td>
* <td>Gauge</td>
* <td>{@value #METRICS_FATE_TX}</td>
* <td>Gauge</td>
* <td>The state is now in a tag: state=unknown</td>
* </tr>
* <!-- garbage collection -->
* <tr>
* <td>AccGcStarted</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_STARTED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcFinished</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_FINISHED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcCandidates</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_CANDIDATES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcInUse</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_IN_USE}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcDeleted</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_DELETED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcErrors</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_ERRORS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalStarted</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_STARTED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalFinished</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_FINISHED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalCandidates</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_CANDIDATES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalInUse</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_IN_USE}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalDeleted</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_DELETED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcWalErrors</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_WAL_ERRORS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcPosOpDuration</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_POST_OP_DURATION}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>AccGcRunCycleCount</td>
* <td>Gauge</td>
* <td>{@value #METRICS_GC_RUN_CYCLE}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <!-- tablet server -->
* <tr>
* <td>entries</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_ENTRIES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>entriesInMem</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MEM_ENTRIES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>activeMajCs</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MAJC_RUNNING}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_TSERVER_MAJC_STUCK}</td>
* <td>LongTaskTimer</td>
* <td></td>
* </tr>
* <tr>
* <td>queuedMajCs</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MAJC_QUEUED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>activeMinCs</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MINC_RUNNING}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>queuedMinCs</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MINC_QUEUED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>totalMinCs</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_MINC_TOTAL}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>onlineTablets</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_TABLETS_ONLINE}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_TSERVER_TABLETS_LONG_ASSIGNMENTS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>openingTablets</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_TABLETS_OPENING}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>unopenedTablets</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_TABLETS_UNOPENED}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>filesPerTablet</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_TABLETS_FILES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>ingestRate</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_INGEST_MUTATIONS}</td>
* <td>Gauge</td>
* <td>Prior to 2.1.0 this metric was reported as a rate, it is now the count and the rate can be
* derived</td>
* </tr>
* <tr>
* <td>ingestByteRate</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_INGEST_BYTES}</td>
* <td>Gauge</td>
* <td>Prior to 2.1.0 this metric was reported as a rate, it is now the count and the rate can be
* derived</td>
* </tr>
* <tr>
* <td>holdTime</td>
* <td>Gauge</td>
* <td>{@value #METRICS_TSERVER_HOLD}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <!-- scan server -->
* <tr>
* <th>N/A</th>
* <th>N/A</th>
* <th>{@value #METRICS_SCAN_RESERVATION_TIMER}</th>
* <th>Timer</th>
* <th>Time to reserve a tablets files for scan</th>
* </tr>
* <tr>
* <th>N/A</th>
* <th>N/A</th>
* <th>{@value #METRICS_SCAN_BUSY_TIMEOUT_COUNTER}</th>
* <th>Counter</th>
* <th>Count of the scans where a busy timeout happened</th>
* </tr>
* <tr>
* <th>N/A</th>
* <th>N/A</th>
* <th>{@value #METRICS_SCAN_TABLET_METADATA_CACHE}</th>
* <th>Cache</th>
* <th>scan server tablet cache metrics</th>
* </tr>
* <!-- scans -->
* <tr>
* <td>scan</td>
* <td>Stat</td>
* <td>{@value #METRICS_SCAN_TIMES}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_SCAN_OPEN_FILES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>result</td>
* <td>Stat</td>
* <td>{@value #METRICS_SCAN_RESULTS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>yield</td>
* <td>Stat</td>
* <td>{@value #METRICS_SCAN_YIELDS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_SCAN_START}</td>
* <td>Counter</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_SCAN_CONTINUE}</td>
* <td>Counter</td>
* <td></td>
* </tr>
* <tr>
* <td>N/A</td>
* <td>N/A</td>
* <td>{@value #METRICS_SCAN_CLOSE}</td>
* <td>Counter</td>
* <td></td>
* </tr>
* <tr>
* <td>queries</td>
* <td>Gauge</td>
* <td>{@value #METRICS_SCAN_QUERIES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>scannedRate</td>
* <td>Gauge</td>
* <td>{@value #METRICS_SCAN_SCANNED_ENTRIES}</td>
* <td>Gauge</td>
* <td>Prior to 2.1.0 this metric was reported as a rate, it is now the count and the rate can be
* derived</td>
* </tr>
* <tr>
* <td>queryRate</td>
* <td>Gauge</td>
* <td>{@value #METRICS_SCAN_QUERY_SCAN_RESULTS}</td>
* <td>Gauge</td>
* <td>Prior to 2.1.0 this metric was reported as a rate, it is now the count and the rate can be
* derived</td>
* </tr>
* <tr>
* <td>queryByteRate</td>
* <td>Gauge</td>
* <td>{@value #METRICS_SCAN_QUERY_SCAN_RESULTS_BYTES}</td>
* <td>Gauge</td>
* <td>Prior to 2.1.0 this metric was reported as a rate, it is now the count and the rate can be
* derived</td>
* </tr>
* <!-- major compactions -->
* <tr>
* <td>{i|e}_{compactionServiceName}_{executor_name}_queued</td>
* <td>Gauge</td>
* <td>{@value #METRICS_MAJC_QUEUED}</td>
* <td>Gauge</td>
* <td>The compaction service information is in a tag:
* id={i|e}_{compactionServiceName}_{executor_name}</td>
* </tr>
* <tr>
* <td>{i|e}_{compactionServiceName}_{executor_name}_running</td>
* <td>Gauge</td>
* <td>{@value #METRICS_MAJC_RUNNING}</td>
* <td>Gauge</td>
* <td>The compaction service information is in a tag:
* id={i|e}_{compactionServiceName}_{executor_name}</td>
* </tr>
* <!-- minor compactions -->
* <tr>
* <td>Queue</td>
* <td>Stat</td>
* <td>{@value #METRICS_MINC_QUEUED}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>Minc</td>
* <td>Stat</td>
* <td>{@value #METRICS_MINC_RUNNING}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <!-- replication -->
* <tr>
* <td>ReplicationQueue</td>
* <td>Stat</td>
* <td>{@value #METRICS_REPLICATION_QUEUE}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>ReplicationQueue10m</td>
* <td>Quantiles</td>
* <td>N/A</td>
* <td>N/A</td>
* <td></td>
* </tr>
* <tr>
* <td>filesPendingReplication</td>
* <td>Stat</td>
* <td>{@value #METRICS_REPLICATION_PENDING_FILES}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>maxReplicationThreads</td>
* <td>Stat</td>
* <td>{@value #METRICS_REPLICATION_THREADS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <tr>
* <td>numPeers</td>
* <td>Stat</td>
* <td>{@value #METRICS_REPLICATION_PEERS}</td>
* <td>Gauge</td>
* <td></td>
* </tr>
* <!-- Updates (ingest) -->
* <tr>
* <td>permissionErrors</td>
* <td>Counter</td>
* <td>{@value #METRICS_UPDATE_ERRORS}</td>
* <td>Gauge</td>
* <td>Type is stored in tag: type=permission</td>
* </tr>
* <tr>
* <td>unknownTabletErrors</td>
* <td>Counter</td>
* <td>{@value #METRICS_UPDATE_ERRORS}</td>
* <td>Gauge</td>
* <td>Type is stored in tag: type=unknown.tablet</td>
* </tr>
* <tr>
* <td>constraintViolations</td>
* <td>Counter</td>
* <td>{@value #METRICS_UPDATE_ERRORS}</td>
* <td>Gauge</td>
* <td>Type is stored in tag: type=constraint.violation</td>
* </tr>
* <tr>
* <td>commitPrep</td>
* <td>Stat</td>
* <td>{@value #METRICS_UPDATE_COMMIT_PREP}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>commitTime</td>
* <td>Stat</td>
* <td>{@value #METRICS_UPDATE_COMMIT}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>waLogWriteTime</td>
* <td>Stat</td>
* <td>{@value #METRICS_UPDATE_WALOG_WRITE}</td>
* <td>Timer</td>
* <td></td>
* </tr>
* <tr>
* <td>mutationArraysSize</td>
* <td>Stat</td>
* <td>{@value #METRICS_UPDATE_MUTATION_ARRAY_SIZE}</td>
* <td>Distribution Summary</td>
* <td></td>
* </tr>
* <!-- Thrift -->
* <tr>
* <td>idle</td>
* <td>Stat</td>
* <td>{@value #METRICS_THRIFT_IDLE}</td>
* <td>Distribution Summary</td>
* <td></td>
* </tr>
* <tr>
* <td>execute</td>
* <td>Stat</td>
* <td>{@value #METRICS_THRIFT_EXECUTE}</td>
* <td>Distribution Summary</td>
* <td></td>
* </tr>
* </table>
*
* @since 2.1.0
*/
public interface MetricsProducer {
Logger LOG = LoggerFactory.getLogger(MetricsProducer.class);
String METRICS_COMPACTOR_PREFIX = "accumulo.compactor.";
String METRICS_COMPACTOR_MAJC_STUCK = METRICS_COMPACTOR_PREFIX + "majc.stuck";
String METRICS_FATE_PREFIX = "accumulo.fate.";
String METRICS_FATE_TYPE_IN_PROGRESS = METRICS_FATE_PREFIX + "ops.in.progress.by.type";
String METRICS_FATE_TOTAL_IN_PROGRESS = METRICS_FATE_PREFIX + "ops.in.progress";
String METRICS_FATE_OPS_ACTIVITY = METRICS_FATE_PREFIX + "ops.activity";
String METRICS_FATE_ERRORS = METRICS_FATE_PREFIX + "errors";
String METRICS_FATE_TX = METRICS_FATE_PREFIX + "tx";
String METRICS_GC_PREFIX = "accumulo.gc.";
String METRICS_GC_STARTED = METRICS_GC_PREFIX + "started";
String METRICS_GC_FINISHED = METRICS_GC_PREFIX + "finished";
String METRICS_GC_CANDIDATES = METRICS_GC_PREFIX + "candidates";
String METRICS_GC_IN_USE = METRICS_GC_PREFIX + "in.use";
String METRICS_GC_DELETED = METRICS_GC_PREFIX + "deleted";
String METRICS_GC_ERRORS = METRICS_GC_PREFIX + "errors";
String METRICS_GC_WAL_STARTED = METRICS_GC_PREFIX + "wal.started";
String METRICS_GC_WAL_FINISHED = METRICS_GC_PREFIX + "wal.finished";
String METRICS_GC_WAL_CANDIDATES = METRICS_GC_PREFIX + "wal.candidates";
String METRICS_GC_WAL_IN_USE = METRICS_GC_PREFIX + "wal.in.use";
String METRICS_GC_WAL_DELETED = METRICS_GC_PREFIX + "wal.deleted";
String METRICS_GC_WAL_ERRORS = METRICS_GC_PREFIX + "wal.errors";
String METRICS_GC_POST_OP_DURATION = METRICS_GC_PREFIX + "post.op.duration";
String METRICS_GC_RUN_CYCLE = METRICS_GC_PREFIX + "run.cycle";
String METRICS_MAJC_PREFIX = "accumulo.tserver.compactions.majc.";
String METRICS_MAJC_QUEUED = METRICS_MAJC_PREFIX + "queued";
String METRICS_MAJC_RUNNING = METRICS_MAJC_PREFIX + "running";
String METRICS_MINC_PREFIX = "accumulo.tserver.compactions.minc.";
String METRICS_MINC_QUEUED = METRICS_MINC_PREFIX + "queued";
String METRICS_MINC_RUNNING = METRICS_MINC_PREFIX + "running";
String METRICS_REPLICATION_PREFIX = "accumulo.replication.";
String METRICS_REPLICATION_QUEUE = METRICS_REPLICATION_PREFIX + "queue";
String METRICS_REPLICATION_PENDING_FILES = METRICS_REPLICATION_PREFIX + "files.pending";
String METRICS_REPLICATION_PEERS = METRICS_REPLICATION_PREFIX + "peers";
String METRICS_REPLICATION_THREADS = METRICS_REPLICATION_PREFIX + "threads";
String METRICS_SCAN_PREFIX = "accumulo.scan.";
String METRICS_SCAN_TIMES = METRICS_SCAN_PREFIX + "times";
String METRICS_SCAN_OPEN_FILES = METRICS_SCAN_PREFIX + "files.open";
String METRICS_SCAN_RESULTS = METRICS_SCAN_PREFIX + "result";
String METRICS_SCAN_YIELDS = METRICS_SCAN_PREFIX + "yields";
String METRICS_SCAN_START = METRICS_SCAN_PREFIX + "start";
String METRICS_SCAN_CONTINUE = METRICS_SCAN_PREFIX + "continue";
String METRICS_SCAN_CLOSE = METRICS_SCAN_PREFIX + "close";
String METRICS_SCAN_BUSY_TIMEOUT_COUNTER = METRICS_SCAN_PREFIX + "busy.timeout.count";
String METRICS_SCAN_RESERVATION_TIMER = METRICS_SCAN_PREFIX + "reservation.timer";
String METRICS_SCAN_QUERIES = METRICS_SCAN_PREFIX + "queries";
String METRICS_SCAN_QUERY_SCAN_RESULTS = METRICS_SCAN_PREFIX + "query.results";
String METRICS_SCAN_QUERY_SCAN_RESULTS_BYTES = METRICS_SCAN_PREFIX + "query.results.bytes";
String METRICS_SCAN_SCANNED_ENTRIES = METRICS_SCAN_PREFIX + "query.scanned.entries";
String METRICS_SCAN_TABLET_METADATA_CACHE = METRICS_SCAN_PREFIX + "tablet.metadata.cache";
String METRICS_TSERVER_PREFIX = "accumulo.tserver.";
String METRICS_TSERVER_ENTRIES = METRICS_TSERVER_PREFIX + "entries";
String METRICS_TSERVER_MEM_ENTRIES = METRICS_TSERVER_PREFIX + "entries.mem";
String METRICS_TSERVER_MAJC_QUEUED = METRICS_TSERVER_PREFIX + "majc.queued";
String METRICS_TSERVER_MAJC_RUNNING = METRICS_TSERVER_PREFIX + "majc.running";
String METRICS_TSERVER_MAJC_STUCK = METRICS_TSERVER_PREFIX + "majc.stuck";
String METRICS_TSERVER_MINC_QUEUED = METRICS_TSERVER_PREFIX + "minc.queued";
String METRICS_TSERVER_MINC_RUNNING = METRICS_TSERVER_PREFIX + "minc.running";
String METRICS_TSERVER_MINC_TOTAL = METRICS_TSERVER_PREFIX + "minc.total";
String METRICS_TSERVER_TABLETS_LONG_ASSIGNMENTS =
METRICS_TSERVER_PREFIX + "tablets.assignments.warning";
String METRICS_TSERVER_TABLETS_ONLINE = METRICS_TSERVER_PREFIX + "tablets.online";
String METRICS_TSERVER_TABLETS_OPENING = METRICS_TSERVER_PREFIX + "tablets.opening";
String METRICS_TSERVER_TABLETS_UNOPENED = METRICS_TSERVER_PREFIX + "tablets.unopened";
String METRICS_TSERVER_TABLETS_FILES = METRICS_TSERVER_PREFIX + "tablets.files";
String METRICS_TSERVER_HOLD = METRICS_TSERVER_PREFIX + "hold";
String METRICS_TSERVER_INGEST_MUTATIONS = METRICS_TSERVER_PREFIX + "ingest.mutations";
String METRICS_TSERVER_INGEST_BYTES = METRICS_TSERVER_PREFIX + "ingest.bytes";
String METRICS_THRIFT_PREFIX = "accumulo.thrift.";
String METRICS_THRIFT_EXECUTE = METRICS_THRIFT_PREFIX + "execute";
String METRICS_THRIFT_IDLE = METRICS_THRIFT_PREFIX + "idle";
String METRICS_UPDATE_PREFIX = "accumulo.tserver.updates.";
String METRICS_UPDATE_ERRORS = METRICS_UPDATE_PREFIX + "error";
String METRICS_UPDATE_COMMIT = METRICS_UPDATE_PREFIX + "commit";
String METRICS_UPDATE_COMMIT_PREP = METRICS_UPDATE_COMMIT + ".prep";
String METRICS_UPDATE_WALOG_WRITE = METRICS_UPDATE_PREFIX + "walog.write";
String METRICS_UPDATE_MUTATION_ARRAY_SIZE = METRICS_UPDATE_PREFIX + "mutation.arrays.size";
/**
* Build Micrometer Meter objects and register them with the registry
*/
void registerMetrics(MeterRegistry registry);
/**
* Returns a new mutable mapping of metric field value to metric field name.
*
* @return map of field names to variable names.
*/
default Map<String,String> getMetricFields() {
Map<String,String> fields = new HashMap<>();
for (Field f : MetricsProducer.class.getDeclaredFields()) {
if (Modifier.isStatic(f.getModifiers()) && f.getType().equals(String.class)
&& !f.getName().contains("PREFIX")) {
try {
fields.put((String) f.get(MetricsProducer.class), f.getName());
} catch (IllegalArgumentException | IllegalAccessException e) {
// this shouldn't happen, but let's log it anyway
LOG.error("Error getting metric value for field: {}", f.getName());
}
}
}
return fields;
}
}