yyj8 commented on code in PR #18116:
URL: https://github.com/apache/pulsar/pull/18116#discussion_r1007035859
##########
pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java:
##########
@@ -70,7 +71,19 @@ public static void generate(PulsarService pulsar, boolean
includeTopicMetrics, b
LongAdder topicsCount = new LongAdder();
Map<String, Long> localNamespaceTopicCount = new HashMap<>();
- printDefaultBrokerStats(stream, cluster);
+ LongAdder brokerTopicsCount = new LongAdder();
Review Comment:
Thank you for your suggestion. This is a very good idea. I will make the
following adjustments:
First ,create a new class `AggregatedBrokerStats` to record broker metrics,
which can be consistent with the namespace metrics design;
For detailed code changes, please refer to:
[pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/AggregatedBrokerStats.java](https://github.com/apache/pulsar/pull/18116/commits/f2b851979ddb067264e6970e96a29ddc6689838c#diff-133ea36ffb45e70b4f381511fa3552e44b29db184f8d6d9ad4a7097ec4687d3a)
Second, through `brokerStats.updateStats (topicStats);` to update the
broker's metrics;
```
public class NamespaceStatsAggregator {
private static final FastThreadLocal<AggregatedBrokerStats>
localBrokerStats =
new FastThreadLocal<>() {
@Override
protected AggregatedBrokerStats initialValue() {
return new AggregatedBrokerStats();
}
};
```
```
String cluster = pulsar.getConfiguration().getClusterName();
AggregatedBrokerStats brokerStats = localBrokerStats.get();
brokerStats.reset();
AggregatedNamespaceStats namespaceStats = localNamespaceStats.get();
```
```
//Record broker level metrics
brokerStats.updateStats(topicStats);
if (includeTopicMetrics) {
topicsCount.add(1);
TopicStats.printTopicStats(stream, topicStats, compactorMXBean, cluster,
namespace, name,
splitTopicAndPartitionIndexLabel);
} else {
namespaceStats.updateStats(topicStats);
}
```
Third, through `printBrokerStats (stream, cluster, brokerStats); ` to print
broker metrics;
```
if (includeTopicMetrics) {
printTopicsCountStats(stream, localNamespaceTopicCount, cluster);
}
//Print broker level metrics to prometheus
printBrokerStats(stream, cluster, brokerStats);
```
For detailed code changes, please refer to:
[pulsar-broker/src/main/java/org/apache/pulsar/broker/stats/prometheus/NamespaceStatsAggregator.java](https://github.com/apache/pulsar/pull/18116/commits/f2b851979ddb067264e6970e96a29ddc6689838c#diff-b3f64ff76fdabb9e471435147298c3c707cbecae09023f0d86cf06f6ad78cbda)
```
private static void printBrokerStats(PrometheusMetricStreams stream,
String cluster, AggregatedBrokerStats brokerStats) {
// Print metrics values. This is necessary to have the available
brokers being
// reported in the brokers dashboard even if they don't have any
topic or traffic
writeMetric(stream, "pulsar_broker_topics_count",
brokerStats.topicsCount, cluster);
writeMetric(stream, "pulsar_broker_subscriptions_count",
brokerStats.subscriptionsCount, cluster);
writeMetric(stream, "pulsar_broker_producers_count",
brokerStats.producersCount, cluster);
writeMetric(stream, "pulsar_broker_consumers_count",
brokerStats.consumersCount, cluster);
writeMetric(stream, "pulsar_broker_rate_in", brokerStats.rateIn,
cluster);
writeMetric(stream, "pulsar_broker_rate_out", brokerStats.rateOut,
cluster);
writeMetric(stream, "pulsar_broker_throughput_in",
brokerStats.throughputIn, cluster);
writeMetric(stream, "pulsar_broker_throughput_out",
brokerStats.throughputOut, cluster);
writeMetric(stream, "pulsar_broker_storage_size",
brokerStats.storageSize, cluster);
writeMetric(stream, "pulsar_broker_storage_logical_size",
brokerStats.storageLogicalSize, cluster);
writeMetric(stream, "pulsar_broker_storage_write_rate",
brokerStats.storageWriteRate, cluster);
writeMetric(stream, "pulsar_broker_storage_read_rate",
brokerStats.storageReadRate, cluster);
writeMetric(stream, "pulsar_broker_msg_backlog",
brokerStats.msgBacklog, cluster);
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]