You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bifromq.apache.org by po...@apache.org on 2026/04/23 03:26:44 UTC
(bifromq) branch main updated: feat(starter): support configurable multi-dimensional metricsTags (Part of #243) (#245)
This is an automated email from the ASF dual-hosted git repository.
popduke pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bifromq.git
The following commit(s) were added to refs/heads/main by this push:
new 6b17245b4 feat(starter): support configurable multi-dimensional metricsTags (Part of #243) (#245)
6b17245b4 is described below
commit 6b17245b41923cc3f7f47afe5a5a4740c34d3f38
Author: liaodongnian <36...@qq.com>
AuthorDate: Thu Apr 23 11:26:40 2026 +0800
feat(starter): support configurable multi-dimensional metricsTags (Part of #243) (#245)
* feat(starter): support configurable multi-dimensional metricsTags
- Add metricsTags config option to define multiple global labels in standalone.yml
- Keep clusterConfig.env as default metricsTags to ensure backward compatibility
- Add clusterEnv tag to base-cluster Messenger and TCPTransport metrics
- Include clusterEnv in AgentHost member list tags
BREAKING CHANGE: Global metrics now use metricsTags config instead of
single clusterConfig.env injection. To migrate, move the original env
value to metricsTags config.
Example config:
metricsTags:
region: gz
deployment: canary
env: Test
* fix: resolve integration test failures in messenger
---
.../src/main/java/org/apache/bifromq/basecluster/AgentHost.java | 3 ++-
.../java/org/apache/bifromq/basecluster/messenger/Messenger.java | 8 +++++---
.../org/apache/bifromq/basecluster/transport/TCPTransport.java | 1 +
.../org/apache/bifromq/basecluster/transport/UDPTransport.java | 1 +
.../apache/bifromq/basecluster/messenger/MessengerFuncTest.java | 2 ++
.../org/apache/bifromq/basecluster/messenger/MessengerTest.java | 2 ++
build/build-bifromq-starter/conf/standalone.yml | 4 ++++
.../main/java/org/apache/bifromq/starter/StandaloneStarter.java | 5 +++--
.../java/org/apache/bifromq/starter/config/StandaloneConfig.java | 5 +++++
9 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/base-cluster/src/main/java/org/apache/bifromq/basecluster/AgentHost.java b/base-cluster/src/main/java/org/apache/bifromq/basecluster/AgentHost.java
index d74230271..61e8f7209 100644
--- a/base-cluster/src/main/java/org/apache/bifromq/basecluster/AgentHost.java
+++ b/base-cluster/src/main/java/org/apache/bifromq/basecluster/AgentHost.java
@@ -96,13 +96,14 @@ final class AgentHost implements IAgentHost {
this.messenger = Messenger.builder()
.transport(transport)
.opts(messengerOptions)
+ .env(options.env())
.scheduler(hostScheduler)
.build();
hostAddressResolver = resolver;
this.store.start(messenger.receive()
.filter(m -> m.value().message.hasCrdtStoreMessage())
.map(m -> m.value().message.getCrdtStoreMessage()));
- tags = new String[] {"local", options.addr() + ":" + messenger.bindAddress().getPort()};
+ tags = new String[] {"local", options.addr() + ":" + messenger.bindAddress().getPort(), "clusterEnv", options.env()};
this.memberList = new HostMemberList(options.addr(), messenger.bindAddress().getPort(),
messenger, hostScheduler, store, hostAddressResolver, tags);
IFailureDetector failureDetector = FailureDetector.builder()
diff --git a/base-cluster/src/main/java/org/apache/bifromq/basecluster/messenger/Messenger.java b/base-cluster/src/main/java/org/apache/bifromq/basecluster/messenger/Messenger.java
index 7af1d6ecd..22e26caf5 100644
--- a/base-cluster/src/main/java/org/apache/bifromq/basecluster/messenger/Messenger.java
+++ b/base-cluster/src/main/java/org/apache/bifromq/basecluster/messenger/Messenger.java
@@ -61,8 +61,9 @@ public class Messenger implements IMessenger {
private final MessengerOptions opts;
private final MetricManager metricManager;
private State state = State.INIT;
+
@Builder
- private Messenger(ITransport transport, Scheduler scheduler, MessengerOptions opts) {
+ private Messenger(ITransport transport, Scheduler scheduler, MessengerOptions opts, String env) {
this.transport = new MessengerTransport(transport);
this.opts = opts.toBuilder().build();
this.scheduler = scheduler;
@@ -71,7 +72,7 @@ public class Messenger implements IMessenger {
opts.retransmitMultiplier(),
opts.spreadPeriod(),
this.scheduler);
- this.metricManager = new MetricManager(localAddress);
+ this.metricManager = new MetricManager(localAddress, env);
}
@Override
@@ -250,11 +251,12 @@ public class Messenger implements IMessenger {
final Map<ClusterMessage.ClusterMessageTypeCase, Counter> gossipHeardCounters = Maps.newHashMap();
final Counter gossipSpreadCounter = Metrics.counter("cluster.gossip.count");
- MetricManager(InetSocketAddress localAddress) {
+ MetricManager(InetSocketAddress localAddress, String env) {
for (ClusterMessage.ClusterMessageTypeCase typeCase : ClusterMessage.ClusterMessageTypeCase.values()) {
if (typeCase != ClusterMessage.ClusterMessageTypeCase.CLUSTERMESSAGETYPE_NOT_SET) {
Tags tags = Tags
.of("local", localAddress.getAddress().getHostAddress() + ":" + localAddress.getPort())
+ .and("clusterEnv", env)
.and("type", typeCase.name());
msgSendCounters.put(typeCase,
Metrics.counter("basecluster.send.count", tags));
diff --git a/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/TCPTransport.java b/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/TCPTransport.java
index b7f6dedc2..917de18c8 100644
--- a/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/TCPTransport.java
+++ b/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/TCPTransport.java
@@ -100,6 +100,7 @@ public final class TCPTransport extends AbstractTransport {
tcpListeningChannel = setupTcpServer(bindAddr, serverSslContext);
InetSocketAddress localAddress = (InetSocketAddress) tcpListeningChannel.channel().localAddress();
Tags tags = Tags.of("proto", "tcp")
+ .and("clusterEnv", env)
.and("local", localAddress.getAddress().getHostAddress() + ":" + localAddress.getPort());
sendBytes = Counter.builder("basecluster.send.bytes")
.tags(tags)
diff --git a/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/UDPTransport.java b/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/UDPTransport.java
index c133f1b76..e13153607 100644
--- a/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/UDPTransport.java
+++ b/base-cluster/src/main/java/org/apache/bifromq/basecluster/transport/UDPTransport.java
@@ -86,6 +86,7 @@ public final class UDPTransport extends AbstractTransport {
.channel();
localAddress = (InetSocketAddress) channel.localAddress();
Tags tags = Tags.of("proto", "udp")
+ .and("clusterEnv", env)
.and("local", localAddress.getAddress().getHostAddress() + ":" + localAddress.getPort());
sendBytes = Counter.builder("basecluster.send.bytes")
diff --git a/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerFuncTest.java b/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerFuncTest.java
index 649b7972d..1a3f3a310 100644
--- a/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerFuncTest.java
+++ b/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerFuncTest.java
@@ -88,6 +88,7 @@ public class MessengerFuncTest {
.transport(localTransport)
.scheduler(scheduler)
.opts(opts)
+ .env("test")
.build();
local = localMessenger.bindAddress();
@@ -95,6 +96,7 @@ public class MessengerFuncTest {
.transport(remoteTransport)
.scheduler(scheduler)
.opts(opts)
+ .env("test")
.build();
remote = remoteMessenger.bindAddress();
localRecipientSelector = new IRecipientSelector() {
diff --git a/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerTest.java b/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerTest.java
index ec0bd4110..ac5eef556 100644
--- a/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerTest.java
+++ b/base-cluster/src/test/java/org/apache/bifromq/basecluster/messenger/MessengerTest.java
@@ -40,6 +40,7 @@ public class MessengerTest {
.transport(transport)
.scheduler(Schedulers.io())
.opts(new MessengerOptions())
+ .env("test")
.build();
localMessenger.start(new IRecipientSelector() {
@Override
@@ -67,6 +68,7 @@ public class MessengerTest {
.transport(transport)
.scheduler(Schedulers.io())
.opts(new MessengerOptions())
+ .env("test")
.build();
try {
localMessenger.shutdown();
diff --git a/build/build-bifromq-starter/conf/standalone.yml b/build/build-bifromq-starter/conf/standalone.yml
index 7e2f4c591..bd0ad6817 100644
--- a/build/build-bifromq-starter/conf/standalone.yml
+++ b/build/build-bifromq-starter/conf/standalone.yml
@@ -32,6 +32,10 @@
# or experiment with the built-in setting provider which is a simple webhook based implementation.
# settingProviderFQN: "org.apache.bifromq.demo.plugin.DemoSettingProvider"
+# Process-level metrics tags applied to all metrics in this process
+metricsTags:
+ env: Test
+
mqttServiceConfig:
server:
tcpListener:
diff --git a/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/StandaloneStarter.java b/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/StandaloneStarter.java
index d1ba3501b..a831c81b3 100644
--- a/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/StandaloneStarter.java
+++ b/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/StandaloneStarter.java
@@ -159,9 +159,10 @@ public class StandaloneStarter {
StandaloneConfigConsolidator.consolidate(config);
printConfigs(config);
- if (!Strings.isNullOrEmpty(config.getClusterConfig().getEnv())) {
- Metrics.globalRegistry.config().commonTags("env", config.getClusterConfig().getEnv());
+ if (config.getMetricsTags() != null) {
+ config.getMetricsTags().forEach(Metrics.globalRegistry.config()::commonTags);
}
+
Injector serviceInjector = Guice.createInjector(
new ConfigModule(config),
new RPCClientSSLContextModule(),
diff --git a/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/config/StandaloneConfig.java b/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/config/StandaloneConfig.java
index 66851d124..749d04abd 100644
--- a/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/config/StandaloneConfig.java
+++ b/build/build-bifromq-starter/src/main/java/org/apache/bifromq/starter/config/StandaloneConfig.java
@@ -33,6 +33,8 @@ import org.apache.bifromq.starter.config.model.inbox.InboxServiceConfig;
import org.apache.bifromq.starter.config.model.mqtt.MQTTServiceConfig;
import org.apache.bifromq.starter.config.model.retain.RetainServiceConfig;
+import java.util.Map;
+
@Getter
@Setter
public class StandaloneConfig {
@@ -66,4 +68,7 @@ public class StandaloneConfig {
@JsonSetter(nulls = Nulls.SKIP)
private APIServerConfig apiServerConfig = new APIServerConfig();
+ @JsonSetter(nulls = Nulls.SKIP)
+ private Map<String, String> metricsTags;
+
}